replace vault by kasier

This commit is contained in:
m
2026-09-17 07:59:21 +02:00
parent cd4f0179fc
commit f29a3c3617
191 changed files with 956 additions and 927 deletions
+4
View File
@@ -7,6 +7,10 @@ backend/uploads/*
.env
backend/.env
# Uploads locaux transitoires (racine / backend)
uploads/
backend/uploads/*
# Android / Gradle
mobile-kotlin/local.properties
mobile-kotlin/.gradle/
+17 -10
View File
@@ -1,4 +1,4 @@
# Pipeline GitLab pour VaultDrop — CI + Release.
# Pipeline GitLab pour Kazier — CI + Release.
#
# Prérequis runner :
# - Un runner avec executor Docker pour les jobs d'images (postgres service,
@@ -28,6 +28,7 @@ variables:
ANDROID_IMAGE: "cimg/android:2024.01"
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle-home"
CGO_ENABLED: "0"
GLAB_VERSION: "1.118.0"
default:
interruptible: true
@@ -62,10 +63,10 @@ test-backend:
- name: $POSTGRES_IMAGE
alias: postgres
variables:
POSTGRES_DB: vaultdrop_test
POSTGRES_USER: vaultdrop
POSTGRES_PASSWORD: vaultdrop
TEST_DATABASE_URL: postgres://vaultdrop:vaultdrop@postgres:5432/vaultdrop_test?sslmode=disable
POSTGRES_DB: kazier_test
POSTGRES_USER: kazier
POSTGRES_PASSWORD: kazier
TEST_DATABASE_URL: postgres://kazier:kazier@postgres:5432/kazier_test?sslmode=disable
script:
- mkdir -p .go-cache && export GOPATH="$CI_PROJECT_DIR/.go-cache"
- go mod download
@@ -93,11 +94,11 @@ build-backend:
script:
- export VERSION=$(cat VERSION)
- mkdir -p backend/bin
- cd backend && CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w -X main.version=$VERSION" -o bin/vaultdrop-server cmd/server/main.go
- ./bin/vaultdrop-server --version
- cd backend && CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w -X main.version=$VERSION" -o bin/kazier-server cmd/server/main.go
- ./bin/kazier-server --version
artifacts:
paths:
- backend/bin/vaultdrop-server
- backend/bin/kazier-server
expire_in: 1 week
# --------------------------------------------------------------- docker ----
@@ -153,9 +154,15 @@ release-apk:
fi
- ./gradlew :app:assembleRelease -q
- cd "$CI_PROJECT_DIR"
- |
# glab : création de la GitLab Release + upload de l'APK en asset.
curl -sSLf \
"https://gitlab.com/gitlab-org/cli/-/releases/v${GLAB_VERSION}/downloads/glab_${GLAB_VERSION}_linux_amd64.tar.gz" \
| tar xz --strip-components=1 -C /usr/local/bin bin/glab
- glab --version
- export GITLAB_TOKEN="$GITLAB_API_TOKEN"
- glab release create "v$VERSION"
--name "VaultDrop v$VERSION"
--name "Kazier v$VERSION"
--notes-file CHANGELOG.md
"mobile-kotlin/app/build/outputs/apk/release/app-release.apk"
needs: ["docker"]
@@ -180,7 +187,7 @@ release-docker:
: "${DOCKERHUB_TOKEN:?DOCKERHUB_TOKEN manquant}"
: "${DOCKERHUB_NAMESPACE:?DOCKERHUB_NAMESPACE manquant}"
echo "$DOCKERHUB_TOKEN" | docker login -u "$DOCKERHUB_USER" --password-stdin docker.io
IMAGE="$DOCKERHUB_NAMESPACE/vaultdrop"
IMAGE="$DOCKERHUB_NAMESPACE/kazier"
docker tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG" "$IMAGE:$CI_COMMIT_TAG"
docker tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG" "$IMAGE:latest"
docker push "$IMAGE:$CI_COMMIT_TAG"
+2 -2
View File
@@ -1,4 +1,4 @@
# VaultDrop
# Kazier
## Project Status
@@ -50,7 +50,7 @@ Tests mobiles : JVM unit tests dans `app/src/test` (JUnit + Robolectric + Room i
## Frontend Structure (mobile-kotlin)
- Entry point: `app/src/main/java/com/vaultdrop/mobile/VaultDropApplication.kt` (Hilt + `HiltWorkerFactory`) + `MainActivity.kt` (Hilt) ; navigation Compose dans `ui/navigation/` (`NavGraph.kt`, `VaultDropApp.kt`)
- Entry point: `app/src/main/java/com/kazier/mobile/KazierApplication.kt` (Hilt + `HiltWorkerFactory`) + `MainActivity.kt` (Hilt) ; navigation Compose dans `ui/navigation/` (`NavGraph.kt`, `KazierApp.kt`)
- Data layer — `data/`:
- `data/local/` — Room SQLite (DB `dot.db`, **version 7**, `Migrations.kt` : tables `folders`, `files`, `user_preferences`, `pending_operations`) : entités Folder/File/UserPreference/PendingOperation, DAO, tri (`FileOrdering`) ; flag `processed` sur `files` (mode review « traiter », local au device, **gate de sync** : un fichier pas encore traité n'est jamais poussé) ; outbox transactionnel `pending_operations` (v7)
- `data/remote/` — Retrofit/Moshi : `ApiService.kt` + `dto/Dtos.kt` = **contrat HTTP** (`{ data, meta }`, erreurs `{ error: { code, message } }`) ; `ApiClient.kt` normalise les réponses ; interceptors OkHttp (`AuthInterceptor`, `ServerUrlInterceptor`)
+4 -1
View File
@@ -1,10 +1,13 @@
# Changelog
Toutes les modifications notables de VaultDrop sont documentées ici.
Toutes les modifications notables de Kazier sont documentées ici.
Le format suit [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/) et le versioning est [SemVer](https://semver.org/lang/fr/).
## [Unreleased]
### Changé
- **Renommage : VaultDrop → Kazier.** Marque, package Android (`com.kazier.mobile`), module Go (`github.com/kazier/backend`), binaire/image `kazier-server`, creds Postgres par défaut. Le code interne `dot.db` est conservé.
### Ajouté
- Pipeline de release CI (GitLab) : lint, tests backend/mobile, build Docker, signature APK release, publication GitLab Release + Docker Hub.
- `backend/Dockerfile` multi-stage : image de production avec Tesseract (fra+eng) embarqué, user non-root, labels OCI.
+1 -1
View File
@@ -623,7 +623,7 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
VaultDrop — personal document vault, local-first.
Kazier — personal document vault, local-first.
Copyright (C) 2026 Thirdshop
This program is free software: you can redistribute it and/or modify
+3 -3
View File
@@ -1,10 +1,10 @@
# VaultDrop
# Kazier
VaultDrop est un coffre-fort de documents personnel, local-first. Le client Android reflète le SAF dans une base Room et pousse les métadonnées de ses mutations via un outbox transactionnel vers le serveur Go/PostgreSQL — pas d'upload physique, pas de cloud-dépendance.
Kazier est un coffre-fort de documents personnel, local-first. Le client Android reflète le SAF dans une base Room et pousse les métadonnées de ses mutations via un outbox transactionnel vers le serveur Go/PostgreSQL — pas d'upload physique, pas de cloud-dépendance.
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](LICENSE)
Disponible sur [thirdshop.fr](https://thirdshop.fr/en/applications/vault/)
Disponible sur [thirdshop.fr](https://thirdshop.fr/en/applications/kazier/)
## Setup
+1 -1
View File
@@ -2,7 +2,7 @@
# Serveur
PORT=8080
DATABASE_URL=postgres://vaultdrop:vaultdrop@localhost:5432/vaultdrop_dev?sslmode=disable
DATABASE_URL=postgres://kazier:kazier@localhost:5432/kazier_dev?sslmode=disable
UPLOAD_DIR=./uploads
MAX_FILE_SIZE_MB=50
OCR_LANG=fra+eng
+9 -9
View File
@@ -14,7 +14,7 @@ ARG VERSION
RUN CGO_ENABLED=0 GOOS=linux go build \
-trimpath \
-ldflags "-s -w -X main.version=${VERSION}" \
-o /out/vaultdrop-server \
-o /out/kazier-server \
./cmd/server/main.go
# --- runtime: mince, Tesseract (fra+eng) embarqué pour l'OCR ---
@@ -30,30 +30,30 @@ WORKDIR /app
ARG VERSION
ARG BUILD_DATE
LABEL org.opencontainers.image.title="vaultdrop-server" \
org.opencontainers.image.description="VaultDrop backend API (Go/Gin + PostgreSQL) — local-first document vault" \
LABEL org.opencontainers.image.title="kazier-server" \
org.opencontainers.image.description="Kazier backend API (Go/Gin + PostgreSQL) — local-first document vault" \
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.licenses="AGPL-3.0-only" \
org.opencontainers.image.source="https://gitlab.com/thirdshop-org/dot" \
org.opencontainers.image.url="https://thirdshop.fr/en/applications/vault/" \
org.opencontainers.image.url="https://thirdshop.fr/en/applications/kazier/" \
org.opencontainers.image.created="${BUILD_DATE}" \
org.opencontainers.image.revision=""
COPY --from=builder /out/vaultdrop-server /usr/local/bin/vaultdrop-server
COPY --from=builder /out/kazier-server /usr/local/bin/kazier-server
# UPLOAD_DIR persistant, user non-root
RUN mkdir -p /app/uploads \
&& adduser -D -H -u 10001 vaultdrop \
&& chown vaultdrop:vaultdrop /app/uploads
&& adduser -D -H -u 10001 kazier \
&& chown kazier:kazier /app/uploads
VOLUME /app/uploads
ENV PORT=8080 \
UPLOAD_DIR=/app/uploads
USER vaultdrop
USER kazier
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD wget -q -O - http://127.0.0.1:8080/api/v1/health || exit 1
ENTRYPOINT ["vaultdrop-server"]
ENTRYPOINT ["kazier-server"]
+8 -8
View File
@@ -12,13 +12,13 @@ import (
"time"
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/config"
"github.com/vaultdrop/backend/db"
"github.com/vaultdrop/backend/handlers"
"github.com/vaultdrop/backend/ocr"
"github.com/vaultdrop/backend/pkg/auth"
"github.com/vaultdrop/backend/repository"
"github.com/vaultdrop/backend/service"
"github.com/kazier/backend/config"
"github.com/kazier/backend/db"
"github.com/kazier/backend/handlers"
"github.com/kazier/backend/ocr"
"github.com/kazier/backend/pkg/auth"
"github.com/kazier/backend/repository"
"github.com/kazier/backend/service"
)
var version = "dev"
@@ -31,7 +31,7 @@ func newRouter() *gin.Engine {
func main() {
if len(os.Args) > 1 && os.Args[1] == "--version" {
fmt.Printf("vaultdrop-server %s\n", version)
fmt.Printf("kazier-server %s\n", version)
os.Exit(0)
}
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"fmt"
"testing"
"github.com/vaultdrop/backend/models"
"github.com/kazier/backend/models"
)
func TestUserCreation(t *testing.T) {
+1 -1
View File
@@ -41,7 +41,7 @@ func LoadApplicationConfig() (*ApplicationConfig, error) {
return &ApplicationConfig{
Port: port,
DatabaseURL: get("DATABASE_URL", "postgres://vaultdrop:vaultdrop@localhost:5432/vaultdrop_dev?sslmode=disable"),
DatabaseURL: get("DATABASE_URL", "postgres://kazier:kazier@localhost:5432/kazier_dev?sslmode=disable"),
UploadDir: get("UPLOAD_DIR", "./uploads"),
MaxFileSizeMB: int64(maxSize),
OcrLang: get("OCR_LANG", "fra+eng"),
+1 -1
View File
@@ -28,7 +28,7 @@ func TestLoadApplicationDefaults(t *testing.T) {
if cfg.MaxFileSizeMB != 50 {
t.Errorf("MaxFileSizeMB = %d, attendu 50", cfg.MaxFileSizeMB)
}
if cfg.DatabaseURL != "postgres://vaultdrop:vaultdrop@localhost:5432/vaultdrop_dev?sslmode=disable" {
if cfg.DatabaseURL != "postgres://kazier:kazier@localhost:5432/kazier_dev?sslmode=disable" {
t.Errorf("DatabaseURL défaut inattendu: %q", cfg.DatabaseURL)
}
if cfg.UploadDir != "./uploads" {
+1 -1
View File
@@ -9,7 +9,7 @@ import (
_ "github.com/lib/pq"
)
const defaultTestDatabaseURL = "postgres://vaultdrop:vaultdrop@localhost:5432/vaultdrop_migrations_test?sslmode=disable"
const defaultTestDatabaseURL = "postgres://kazier:kazier@localhost:5432/kazier_migrations_test?sslmode=disable"
func testDatabaseURL(t *testing.T) string {
t.Helper()
+2 -2
View File
@@ -10,7 +10,7 @@ import (
"github.com/lib/pq"
"github.com/vaultdrop/backend/db"
"github.com/kazier/backend/db"
)
// OpenTestDatabase ensures the test database exists, resets its schema, runs
@@ -27,7 +27,7 @@ func OpenTestDatabase(t *testing.T, databaseURL string) *sql.DB {
databaseURL = os.Getenv("TEST_DATABASE_URL")
}
if databaseURL == "" {
databaseURL = "postgres://vaultdrop:vaultdrop@localhost:5432/vaultdrop_test?sslmode=disable"
databaseURL = "postgres://kazier:kazier@localhost:5432/kazier_test?sslmode=disable"
}
// Postgres joignable ? (sinon on skippe, sans être gênés par l'existence
+1 -1
View File
@@ -1,4 +1,4 @@
module github.com/vaultdrop/backend
module github.com/kazier/backend
go 1.26.4
+5 -5
View File
@@ -8,11 +8,11 @@ import (
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/vaultdrop/backend/pkg/auth"
"github.com/vaultdrop/backend/pkg/passwd"
"github.com/vaultdrop/backend/repository"
"github.com/vaultdrop/backend/service"
"github.com/kazier/backend/pkg/api"
"github.com/kazier/backend/pkg/auth"
"github.com/kazier/backend/pkg/passwd"
"github.com/kazier/backend/repository"
"github.com/kazier/backend/service"
)
type LoginRequest struct {
+7 -7
View File
@@ -9,17 +9,17 @@ import (
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/dbtest"
"github.com/vaultdrop/backend/pkg/auth"
"github.com/vaultdrop/backend/pkg/passwd"
"github.com/vaultdrop/backend/repository"
"github.com/vaultdrop/backend/service"
"github.com/kazier/backend/dbtest"
"github.com/kazier/backend/pkg/auth"
"github.com/kazier/backend/pkg/passwd"
"github.com/kazier/backend/repository"
"github.com/kazier/backend/service"
)
const authTestURL = "postgres://vaultdrop:vaultdrop@localhost:5432/vaultdrop_handlers_auth_test?sslmode=disable"
const authTestURL = "postgres://kazier:kazier@localhost:5432/kazier_handlers_auth_test?sslmode=disable"
const (
authTestPassword = "vaultdrop-test-password"
authTestPassword = "kazier-test-password"
authTestDevice = "0123456789abcdef0123456789abcdef"
)
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"regexp"
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/kazier/backend/pkg/api"
)
var deviceIDPattern = regexp.MustCompile(`^[0-9a-f]{32}$`)
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"strings"
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/kazier/backend/pkg/api"
)
func intParam(value string, fallback int) int {
+7 -7
View File
@@ -11,15 +11,15 @@ import (
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/dbtest"
"github.com/vaultdrop/backend/handlers"
"github.com/vaultdrop/backend/pkg/auth"
"github.com/vaultdrop/backend/pkg/passwd"
"github.com/vaultdrop/backend/repository"
"github.com/vaultdrop/backend/service"
"github.com/kazier/backend/dbtest"
"github.com/kazier/backend/handlers"
"github.com/kazier/backend/pkg/auth"
"github.com/kazier/backend/pkg/passwd"
"github.com/kazier/backend/repository"
"github.com/kazier/backend/service"
)
const handlersTestURL = "postgres://vaultdrop:vaultdrop@localhost:5432/vaultdrop_handlers_test?sslmode=disable"
const handlersTestURL = "postgres://kazier:kazier@localhost:5432/kazier_handlers_test?sslmode=disable"
type envelope struct {
Data json.RawMessage `json:"data"`
+1 -1
View File
@@ -2,7 +2,7 @@ package handlers
import (
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/kazier/backend/pkg/api"
)
func Health(c *gin.Context) {
+3 -3
View File
@@ -6,9 +6,9 @@ import (
"strings"
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/vaultdrop/backend/pkg/auth"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/pkg/api"
"github.com/kazier/backend/pkg/auth"
"github.com/kazier/backend/repository"
)
const (
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/pkg/api"
"github.com/kazier/backend/repository"
)
type ocrJobRequest struct {
+5 -5
View File
@@ -11,11 +11,11 @@ import (
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/dbtest"
"github.com/vaultdrop/backend/handlers"
"github.com/vaultdrop/backend/pkg/auth"
"github.com/vaultdrop/backend/repository"
"github.com/vaultdrop/backend/service"
"github.com/kazier/backend/dbtest"
"github.com/kazier/backend/handlers"
"github.com/kazier/backend/pkg/auth"
"github.com/kazier/backend/repository"
"github.com/kazier/backend/service"
)
type stubEngine struct {
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/kazier/backend/pkg/api"
)
// RegisterRoutes wires the full /api/v1 surface (public + protected).
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/pkg/api"
"github.com/kazier/backend/repository"
)
// ShareLinkGet resolves a public share link without authentication
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"net/http"
"testing"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/repository"
)
func TestShareLinkPublicResolution(t *testing.T) {
+3 -3
View File
@@ -4,9 +4,9 @@ import (
"errors"
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/vaultdrop/backend/repository"
"github.com/vaultdrop/backend/service"
"github.com/kazier/backend/pkg/api"
"github.com/kazier/backend/repository"
"github.com/kazier/backend/service"
)
// Store is the business layer used by handlers; set once at startup
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/pkg/api"
"github.com/vaultdrop/backend/service"
"github.com/kazier/backend/pkg/api"
"github.com/kazier/backend/service"
)
type syncOpsRequest struct {
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"net/http"
"testing"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/repository"
)
func syncOpsBody(ops []map[string]any) []byte {
+1 -1
View File
@@ -35,7 +35,7 @@ var (
// quand même contre ce hash pour que le délai de réponse soit identique à un
// « mauvais mot de passe ».
var dummyHash = func() string {
h, err := Hash("vaultdrop-constantime-dummy")
h, err := Hash("kazier-constantime-dummy")
if err != nil {
panic(fmt.Sprintf("passwd: impossible de pré-hacher le dummy: %v", err))
}
+1 -1
View File
@@ -3,7 +3,7 @@ package repository
import (
"testing"
"github.com/vaultdrop/backend/dbtest"
"github.com/kazier/backend/dbtest"
)
func newTestDevices(t *testing.T) *Devices {
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"testing"
"time"
"github.com/vaultdrop/backend/dbtest"
"github.com/kazier/backend/dbtest"
)
func newTestRepo(t *testing.T) *Repository {
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"errors"
"testing"
"github.com/vaultdrop/backend/dbtest"
"github.com/kazier/backend/dbtest"
)
func newTestOperations(t *testing.T) (*Operations, *Devices) {
+2 -2
View File
@@ -5,10 +5,10 @@ import (
"testing"
"time"
"github.com/vaultdrop/backend/dbtest"
"github.com/kazier/backend/dbtest"
)
const repositoryTestURL = "postgres://vaultdrop:vaultdrop@localhost:5432/vaultdrop_repository_test?sslmode=disable"
const repositoryTestURL = "postgres://kazier:kazier@localhost:5432/kazier_repository_test?sslmode=disable"
func newTestResources(t *testing.T) *Resources {
t.Helper()
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"errors"
"testing"
"github.com/vaultdrop/backend/dbtest"
"github.com/kazier/backend/dbtest"
)
func newTestUsers(t *testing.T) *Users {
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"fmt"
"strings"
"github.com/vaultdrop/backend/pkg/passwd"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/pkg/passwd"
"github.com/kazier/backend/repository"
)
// ErrAdminRequired : base vide et identifiants admin absents → le serveur
+2 -2
View File
@@ -4,8 +4,8 @@ import (
"errors"
"testing"
"github.com/vaultdrop/backend/pkg/passwd"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/pkg/passwd"
"github.com/kazier/backend/repository"
)
func TestEnsureAdminCreatesFirstAdmin(t *testing.T) {
+1 -1
View File
@@ -1,6 +1,6 @@
package service
import "github.com/vaultdrop/backend/models"
import "github.com/kazier/backend/models"
func (s *Services) CreateFolder(folderName string, destination *models.Document) (*models.Document, error) {
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"errors"
"fmt"
"github.com/vaultdrop/backend/models"
"github.com/kazier/backend/models"
)
func (s *Services) MoveDocumentIntoDocument(from *models.Document, to *models.Document) error {
+1 -1
View File
@@ -3,7 +3,7 @@ package service
import (
"testing"
"github.com/vaultdrop/backend/models"
"github.com/kazier/backend/models"
)
func TestMoveDocument(t *testing.T) {
+2 -2
View File
@@ -9,8 +9,8 @@ import (
"sync"
"time"
"github.com/vaultdrop/backend/ocr"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/ocr"
"github.com/kazier/backend/repository"
)
const (
+2 -2
View File
@@ -9,8 +9,8 @@ import (
"testing"
"time"
"github.com/vaultdrop/backend/ocr"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/ocr"
"github.com/kazier/backend/repository"
)
// stubEngine again (package service) — même contrat que handlers/ocr_test.
+1 -1
View File
@@ -10,7 +10,7 @@ import (
"strings"
"time"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/repository"
)
// ErrFileTooLarge signals an upload above MaxFileSize.
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"path/filepath"
"testing"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/repository"
)
func multipartFileHeader(t *testing.T, filename string, content []byte) *multipart.FileHeader {
+1 -1
View File
@@ -1,6 +1,6 @@
package service
import "github.com/vaultdrop/backend/models"
import "github.com/kazier/backend/models"
type Services struct {
ConnectedUser *models.User
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"regexp"
"time"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/repository"
)
var resourceIDPattern = regexp.MustCompile(`^[0-9a-f]{32}$`)
+3 -3
View File
@@ -6,11 +6,11 @@ import (
"testing"
"time"
"github.com/vaultdrop/backend/dbtest"
"github.com/vaultdrop/backend/repository"
"github.com/kazier/backend/dbtest"
"github.com/kazier/backend/repository"
)
const serviceTestURL = "postgres://vaultdrop:vaultdrop@localhost:5432/vaultdrop_service_test?sslmode=disable"
const serviceTestURL = "postgres://kazier:kazier@localhost:5432/kazier_service_test?sslmode=disable"
// newServiceStore returns a Resources service over a fresh migrated test DB.
func newServiceStore(t *testing.T) *Resources {
+1 -1
View File
@@ -3,7 +3,7 @@ package service
import (
"fmt"
"github.com/vaultdrop/backend/models"
"github.com/kazier/backend/models"
)
func (s *Services) UploadDocument(file *string, destination *models.Document) error {
+5 -5
View File
@@ -4,14 +4,14 @@ services:
ports:
- "5432:5432"
environment:
POSTGRES_DB: ${POSTGRES_DB:-vaultdrop_dev}
POSTGRES_USER: ${POSTGRES_USER:-vaultdrop}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-vaultdrop}
POSTGRES_DB: ${POSTGRES_DB:-kazier_dev}
POSTGRES_USER: ${POSTGRES_USER:-kazier}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-kazier}
volumes:
- postgres-data:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-vaultdrop}"]
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-kazier}"]
interval: 10s
timeout: 5s
retries: 5
@@ -26,7 +26,7 @@ services:
- "${PORT:-8080}:8080"
environment:
PORT: 8080
DATABASE_URL: postgres://${POSTGRES_USER:-vaultdrop}:${POSTGRES_PASSWORD:-vaultdrop}@postgres:5432/${POSTGRES_DB:-vaultdrop_dev}?sslmode=disable
DATABASE_URL: postgres://${POSTGRES_USER:-kazier}:${POSTGRES_PASSWORD:-kazier}@postgres:5432/${POSTGRES_DB:-kazier_dev}?sslmode=disable
UPLOAD_DIR: /app/uploads
MAX_FILE_SIZE_MB: ${MAX_FILE_SIZE_MB:-50}
OCR_LANG: ${OCR_LANG:-fra+eng}
+1 -1
View File
@@ -1,4 +1,4 @@
# VaultDrop — Contrat API V1 (autoritatif)
# Kazier — Contrat API V1 (autoritatif)
Status : **autoritatif**. Le client mobile Kotlin est la source de vérité : `data/remote/ApiService.kt` + `data/remote/dto/Dtos.kt` (contrat Retrofit/Moshi) sont implémentés ; le serveur Go doit les matcher exactement (méthode + path + enveloppe), il ne re-négocie pas. Document consolidé depuis le client — toute divergence de ce doc doit être portée dans le client d'abord.
+5 -5
View File
@@ -41,7 +41,7 @@ run = '''
set -euo pipefail
VERSION=$(cat VERSION)
mkdir -p backend/bin
cd backend && go build -ldflags "-X main.version=$VERSION" -o bin/vaultdrop-server cmd/server/main.go
cd backend && go build -ldflags "-X main.version=$VERSION" -o bin/kazier-server cmd/server/main.go
cd ../mobile-kotlin && ./gradlew :app:assembleDebug -q
'''
@@ -53,7 +53,7 @@ cd backend && staticcheck ./...
cd ../mobile-kotlin && ./gradlew :app:lint -q
'''
[tasks.build:release]
[tasks."build:release"]
description = "Build signed release APK (assembleRelease)"
dir = "mobile-kotlin"
run = '''
@@ -68,7 +68,7 @@ fi
echo "APK : app/build/outputs/apk/release/app-release.apk"
'''
[tasks.docker:build]
[tasks."docker:build"]
description = "Build the backend Docker image (tagged with VERSION)"
run = '''
set -euo pipefail
@@ -76,9 +76,9 @@ VERSION=$(cat VERSION)
docker build \\
--build-arg VERSION="$VERSION" \\
--build-arg BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \\
-t vaultdrop-server:"$VERSION" \\
-t kazier-server:"$VERSION" \\
./backend
echo "Image : vaultdrop-server:$VERSION"
echo "Image : kazier-server:$VERSION"
'''
[tasks.release]
+8 -8
View File
@@ -9,10 +9,10 @@ plugins {
}
// Source unique de vérité : VERSION à la racine du dépôt (ex. 0.1.0).
val vaultVersion: String = rootProject.file("../VERSION").readText().trim()
val vaultVersionCode: Int = run {
val parts = vaultVersion.split('.').map { it.toInt() }
check(parts.size == 3) { "VERSION doit être major.minor.patch, reçu: $vaultVersion" }
val kazierVersion: String = rootProject.file("../VERSION").readText().trim()
val kazierVersionCode: Int = run {
val parts = kazierVersion.split('.').map { it.toInt() }
check(parts.size == 3) { "VERSION doit être major.minor.patch, reçu: $kazierVersion" }
parts[0] * 1_000_000 + parts[1] * 1_000 + parts[2]
}
@@ -24,18 +24,18 @@ val signingProps = Properties().apply {
}
android {
namespace = "com.vaultdrop.mobile"
namespace = "com.kazier.mobile"
compileSdk = 35
defaultConfig {
applicationId = "com.vaultdrop.mobile"
applicationId = "com.kazier.mobile"
minSdk = 26
// targetSdk 35 exige des .so alignés en 16K ; les libs précompilées
// OpenCV/CameraX sont en 4K (warning de compatibilité sur devices
// 16K-pages). On reste en 34 tant qu'elles ne sont pas mises à jour.
targetSdk = 34
versionCode = vaultVersionCode
versionName = vaultVersion
versionCode = kazierVersionCode
versionName = kazierVersion
// OpenCV natif : on conserve uniquement les ABIs ciblés
// (arm64 = devices, x86_64 = émulateur) pour garder l'APK raisonnable.
+4 -2
View File
@@ -2,13 +2,15 @@
# Alternative CI : mêmes valeurs via les variables d'environnement SIGNING_*.
#
# 1. Générer un keystore (ne jamais le committer, garder en lieu sûr) :
# keytool -genkey -v -keystore release.keystore -alias vaultdrop \
# keytool -genkey -v -keystore release.keystore -alias kazier \
# -keyalg RSA -keysize 2048 -validity 10000
# Note : un keystore existant garde SON alias d'origine (ex. vaultdrop) —
# reporter alors la même valeur dans keyAlias ci-dessous.
# 2. Renseigner les valeurs ci-dessous.
#
# storeFile est relatif au répertoire du module app/ (mobile-kotlin/app).
storeFile=release.keystore
storePassword=CHANGE_ME
keyAlias=vaultdrop
keyAlias=kazier
keyPassword=CHANGE_ME
@@ -10,17 +10,17 @@
android:required="false" />
<application
android:name=".VaultDropApplication"
android:name=".KazierApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/Theme.VaultDrop">
android:theme="@style/Theme.Kazier">
<!-- HiltWorkerFactory : désactive l'initialisation WorkManager par
défaut (androidx.startup) pour que Configuration.Provider
(VaultDropApplication) soit honoré — sinon le @HiltWorker ne peut
(KazierApplication) soit honoré — sinon le @HiltWorker ne peut
pas être instancié (NoSuchMethodException). -->
<provider
android:name="androidx.startup.InitializationProvider"
@@ -36,7 +36,7 @@
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.VaultDrop">
android:theme="@style/Theme.Kazier">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile
package com.kazier.mobile
import android.app.Application
import androidx.hilt.work.HiltWorkerFactory
@@ -8,7 +8,7 @@ import timber.log.Timber
import javax.inject.Inject
@HiltAndroidApp
class VaultDropApplication : Application(), Configuration.Provider {
class KazierApplication : Application(), Configuration.Provider {
@Inject
lateinit var workerFactory: HiltWorkerFactory
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile
package com.kazier.mobile
import android.os.Bundle
import androidx.activity.ComponentActivity
@@ -7,9 +7,9 @@ import androidx.activity.enableEdgeToEdge
import androidx.compose.runtime.getValue
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.vaultdrop.mobile.domain.ThemePreferenceStore
import com.vaultdrop.mobile.ui.navigation.VaultDropApp
import com.vaultdrop.mobile.ui.theme.VaultDropTheme
import com.kazier.mobile.domain.ThemePreferenceStore
import com.kazier.mobile.ui.navigation.KazierApp
import com.kazier.mobile.ui.theme.KazierTheme
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.launch
@@ -28,8 +28,8 @@ class MainActivity : ComponentActivity() {
setContent {
val theme by themePreferenceStore.theme.collectAsStateWithLifecycle()
VaultDropTheme(theme = theme) {
VaultDropApp()
KazierTheme(theme = theme) {
KazierApp()
}
}
}
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.auth
package com.kazier.mobile.auth
import android.content.Context
import android.content.SharedPreferences
@@ -6,7 +6,7 @@ import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKeys
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.vaultdrop.mobile.data.remote.dto.UserDto
import com.kazier.mobile.data.remote.dto.UserDto
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import javax.inject.Singleton
@@ -56,8 +56,8 @@ class SecureTokenStore @Inject constructor(
}
companion object {
private const val FILE_NAME = "vaultdrop_secure"
private const val KEY_TOKEN = "vaultdrop.auth_token"
private const val KEY_ACCOUNT = "vaultdrop.account"
private const val FILE_NAME = "kazier_secure"
private const val KEY_TOKEN = "kazier.auth_token"
private const val KEY_ACCOUNT = "kazier.account"
}
}
@@ -1,10 +1,10 @@
package com.vaultdrop.mobile.auth
package com.kazier.mobile.auth
import com.vaultdrop.mobile.data.remote.ApiClient
import com.vaultdrop.mobile.data.remote.dto.LoginResponseDto
import com.vaultdrop.mobile.domain.ActiveUserStore
import com.vaultdrop.mobile.domain.DeviceIdentity
import com.vaultdrop.mobile.domain.LocalModeStore
import com.kazier.mobile.data.remote.ApiClient
import com.kazier.mobile.data.remote.dto.LoginResponseDto
import com.kazier.mobile.domain.ActiveUserStore
import com.kazier.mobile.domain.DeviceIdentity
import com.kazier.mobile.domain.LocalModeStore
import javax.inject.Inject
import javax.inject.Singleton
@@ -30,7 +30,7 @@ class SessionManager @Inject constructor(
return AuthSession(token = token, user = user)
}
suspend fun save(token: String, user: com.vaultdrop.mobile.data.remote.dto.UserDto) {
suspend fun save(token: String, user: com.kazier.mobile.data.remote.dto.UserDto) {
secureTokenStore.save(token, user)
activeUserStore.set(user.id)
localModeStore.clear()
@@ -52,5 +52,5 @@ class SessionManager @Inject constructor(
data class AuthSession(
val token: String,
val user: com.vaultdrop.mobile.data.remote.dto.UserDto,
val user: com.kazier.mobile.data.remote.dto.UserDto,
)
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.auth
package com.kazier.mobile.auth
import javax.inject.Inject
import javax.inject.Singleton
@@ -1,18 +1,18 @@
package com.vaultdrop.mobile.data.local
package com.kazier.mobile.data.local
import androidx.room.Database
import androidx.room.RoomDatabase
import com.vaultdrop.mobile.data.local.dao.FileDao
import com.vaultdrop.mobile.data.local.dao.FolderDao
import com.vaultdrop.mobile.data.local.dao.PendingOperationDao
import com.vaultdrop.mobile.data.local.dao.ScanDao
import com.vaultdrop.mobile.data.local.dao.UserPreferenceDao
import com.vaultdrop.mobile.data.local.entity.FileEntity
import com.vaultdrop.mobile.data.local.entity.FolderEntity
import com.vaultdrop.mobile.data.local.entity.PendingOperationEntity
import com.vaultdrop.mobile.data.local.entity.ScanPageEntity
import com.vaultdrop.mobile.data.local.entity.ScanSessionEntity
import com.vaultdrop.mobile.data.local.entity.UserPreferenceEntity
import com.kazier.mobile.data.local.dao.FileDao
import com.kazier.mobile.data.local.dao.FolderDao
import com.kazier.mobile.data.local.dao.PendingOperationDao
import com.kazier.mobile.data.local.dao.ScanDao
import com.kazier.mobile.data.local.dao.UserPreferenceDao
import com.kazier.mobile.data.local.entity.FileEntity
import com.kazier.mobile.data.local.entity.FolderEntity
import com.kazier.mobile.data.local.entity.PendingOperationEntity
import com.kazier.mobile.data.local.entity.ScanPageEntity
import com.kazier.mobile.data.local.entity.ScanSessionEntity
import com.kazier.mobile.data.local.entity.UserPreferenceEntity
/*
* DB SQLite locale, `dot.db` (même nom que la version Expo).
@@ -1,6 +1,6 @@
package com.vaultdrop.mobile.data.local
package com.kazier.mobile.data.local
import com.vaultdrop.mobile.data.local.entity.FileEntity
import com.kazier.mobile.data.local.entity.FileEntity
/** Date de référence d'un fichier : modification SAF quand dispo, sinon ajout local. */
val FileEntity.referenceDate: Long
@@ -1,9 +1,9 @@
package com.vaultdrop.mobile.data.local.dao
package com.kazier.mobile.data.local.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import com.vaultdrop.mobile.data.local.entity.FileEntity
import com.kazier.mobile.data.local.entity.FileEntity
import kotlinx.coroutines.flow.Flow
@Dao
@@ -1,11 +1,11 @@
package com.vaultdrop.mobile.data.local.dao
package com.kazier.mobile.data.local.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Upsert
import com.vaultdrop.mobile.data.local.entity.FolderEntity
import com.kazier.mobile.data.local.entity.FolderEntity
import kotlinx.coroutines.flow.Flow
@Dao
@@ -1,9 +1,9 @@
package com.vaultdrop.mobile.data.local.dao
package com.kazier.mobile.data.local.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import com.vaultdrop.mobile.data.local.entity.PendingOperationEntity
import com.kazier.mobile.data.local.entity.PendingOperationEntity
import kotlinx.coroutines.flow.Flow
@Dao
@@ -1,11 +1,11 @@
package com.vaultdrop.mobile.data.local.dao
package com.kazier.mobile.data.local.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import com.vaultdrop.mobile.data.local.entity.ScanPageEntity
import com.vaultdrop.mobile.data.local.entity.ScanSessionEntity
import com.kazier.mobile.data.local.entity.ScanPageEntity
import com.kazier.mobile.data.local.entity.ScanSessionEntity
import kotlinx.coroutines.flow.Flow
/** Persistance des sessions de scan (appareil photo) — local uniquement. */
@@ -1,11 +1,11 @@
package com.vaultdrop.mobile.data.local.dao
package com.kazier.mobile.data.local.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Upsert
import com.vaultdrop.mobile.data.local.entity.UserPreferenceEntity
import com.kazier.mobile.data.local.entity.UserPreferenceEntity
@Dao
interface UserPreferenceDao {
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.data.local.entity
package com.kazier.mobile.data.local.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.data.local.entity
package com.kazier.mobile.data.local.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.data.local.entity
package com.kazier.mobile.data.local.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.data.local.entity
package com.kazier.mobile.data.local.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.data.local.entity
package com.kazier.mobile.data.local.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.data.local.entity
package com.kazier.mobile.data.local.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.data.local.migration
package com.kazier.mobile.data.local.migration
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.data.preferences
package com.kazier.mobile.data.preferences
import android.content.Context
import android.content.SharedPreferences
@@ -7,7 +7,7 @@ import javax.inject.Inject
import javax.inject.Singleton
/**
* Racine VaultDrop : le dossier SAF unique et obligatoire choisi au premier
* Racine Kazier : le dossier SAF unique et obligatoire choisi au premier
* lancement. Tous les exports (assemblage PDF) y sont écrits directement,
* sans sélecteur la permission persistante sur l'arbre est acquise à ce
* moment-.
@@ -31,7 +31,7 @@ class DefaultRootStore @Inject constructor(
}
companion object {
private const val FILE_NAME = "vaultdrop_prefs"
private const val KEY_ROOT_RESOURCE_ID = "vaultdrop.default_root_resource_id"
private const val FILE_NAME = "kazier_prefs"
private const val KEY_ROOT_RESOURCE_ID = "kazier.default_root_resource_id"
}
}
@@ -1,22 +1,22 @@
package com.vaultdrop.mobile.data.remote
package com.kazier.mobile.data.remote
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.vaultdrop.mobile.data.remote.dto.ApiEnvelope
import com.vaultdrop.mobile.data.remote.dto.ApiErrorEnvelope
import com.vaultdrop.mobile.data.remote.dto.DeviceRegistrationDto
import com.vaultdrop.mobile.data.remote.dto.FileDto
import com.vaultdrop.mobile.data.remote.dto.FileOcrDto
import com.vaultdrop.mobile.data.remote.dto.FolderDto
import com.vaultdrop.mobile.data.remote.dto.LoginRequestDto
import com.vaultdrop.mobile.data.remote.dto.LoginResponseDto
import com.vaultdrop.mobile.data.remote.dto.OcrJobDto
import com.vaultdrop.mobile.data.remote.dto.OcrSubmitDto
import com.vaultdrop.mobile.data.remote.dto.ResolvedUserDto
import com.vaultdrop.mobile.data.remote.dto.ResourcePermissionDto
import com.vaultdrop.mobile.data.remote.dto.SyncOpDto
import com.vaultdrop.mobile.data.remote.dto.SyncOpsRequest
import com.vaultdrop.mobile.data.remote.dto.SyncOpsResult
import com.kazier.mobile.data.remote.dto.ApiEnvelope
import com.kazier.mobile.data.remote.dto.ApiErrorEnvelope
import com.kazier.mobile.data.remote.dto.DeviceRegistrationDto
import com.kazier.mobile.data.remote.dto.FileDto
import com.kazier.mobile.data.remote.dto.FileOcrDto
import com.kazier.mobile.data.remote.dto.FolderDto
import com.kazier.mobile.data.remote.dto.LoginRequestDto
import com.kazier.mobile.data.remote.dto.LoginResponseDto
import com.kazier.mobile.data.remote.dto.OcrJobDto
import com.kazier.mobile.data.remote.dto.OcrSubmitDto
import com.kazier.mobile.data.remote.dto.ResolvedUserDto
import com.kazier.mobile.data.remote.dto.ResourcePermissionDto
import com.kazier.mobile.data.remote.dto.SyncOpDto
import com.kazier.mobile.data.remote.dto.SyncOpsRequest
import com.kazier.mobile.data.remote.dto.SyncOpsResult
import okhttp3.MultipartBody
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody
@@ -1,18 +1,18 @@
package com.vaultdrop.mobile.data.remote
package com.kazier.mobile.data.remote
import com.vaultdrop.mobile.data.remote.dto.ApiEnvelope
import com.vaultdrop.mobile.data.remote.dto.DeviceRegistrationDto
import com.vaultdrop.mobile.data.remote.dto.FileDto
import com.vaultdrop.mobile.data.remote.dto.FileOcrDto
import com.vaultdrop.mobile.data.remote.dto.FolderDto
import com.vaultdrop.mobile.data.remote.dto.LoginRequestDto
import com.vaultdrop.mobile.data.remote.dto.LoginResponseDto
import com.vaultdrop.mobile.data.remote.dto.OcrJobDto
import com.vaultdrop.mobile.data.remote.dto.OcrSubmitDto
import com.vaultdrop.mobile.data.remote.dto.ResolvedUserDto
import com.vaultdrop.mobile.data.remote.dto.ResourcePermissionDto
import com.vaultdrop.mobile.data.remote.dto.SyncOpsRequest
import com.vaultdrop.mobile.data.remote.dto.SyncOpsResult
import com.kazier.mobile.data.remote.dto.ApiEnvelope
import com.kazier.mobile.data.remote.dto.DeviceRegistrationDto
import com.kazier.mobile.data.remote.dto.FileDto
import com.kazier.mobile.data.remote.dto.FileOcrDto
import com.kazier.mobile.data.remote.dto.FolderDto
import com.kazier.mobile.data.remote.dto.LoginRequestDto
import com.kazier.mobile.data.remote.dto.LoginResponseDto
import com.kazier.mobile.data.remote.dto.OcrJobDto
import com.kazier.mobile.data.remote.dto.OcrSubmitDto
import com.kazier.mobile.data.remote.dto.ResolvedUserDto
import com.kazier.mobile.data.remote.dto.ResourcePermissionDto
import com.kazier.mobile.data.remote.dto.SyncOpsRequest
import com.kazier.mobile.data.remote.dto.SyncOpsResult
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.Response
@@ -1,10 +1,10 @@
package com.vaultdrop.mobile.data.remote
package com.kazier.mobile.data.remote
import okhttp3.Interceptor
import okhttp3.Response
import javax.inject.Inject
import javax.inject.Singleton
import com.vaultdrop.mobile.auth.TokenProvider
import com.kazier.mobile.auth.TokenProvider
/**
* Injecte `Authorization: Bearer <token>` sur chaque requête si un token est
@@ -1,6 +1,6 @@
package com.vaultdrop.mobile.data.remote
package com.kazier.mobile.data.remote
import com.vaultdrop.mobile.domain.ServerConfigStore
import com.kazier.mobile.domain.ServerConfigStore
import javax.inject.Inject
import javax.inject.Singleton
import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.data.remote.dto
package com.kazier.mobile.data.remote.dto
import com.squareup.moshi.Json
@@ -1,8 +1,8 @@
package com.vaultdrop.mobile.data.repository
package com.kazier.mobile.data.repository
import com.vaultdrop.mobile.data.remote.ApiClient
import com.vaultdrop.mobile.data.remote.dto.LoginResponseDto
import com.vaultdrop.mobile.domain.DeviceIdentity
import com.kazier.mobile.data.remote.ApiClient
import com.kazier.mobile.data.remote.dto.LoginResponseDto
import com.kazier.mobile.domain.DeviceIdentity
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton
@@ -1,15 +1,15 @@
package com.vaultdrop.mobile.data.repository
package com.kazier.mobile.data.repository
import androidx.room.withTransaction
import com.vaultdrop.mobile.data.local.AppDatabase
import com.vaultdrop.mobile.data.local.dao.FileDao
import com.vaultdrop.mobile.data.local.entity.FileEntity
import com.vaultdrop.mobile.data.local.entity.FileStatus
import com.vaultdrop.mobile.data.remote.ApiClient
import com.vaultdrop.mobile.data.remote.dto.FileDto
import com.vaultdrop.mobile.domain.GenerateId
import com.vaultdrop.mobile.domain.SyncPlacement
import com.vaultdrop.mobile.domain.computeCategory
import com.kazier.mobile.data.local.AppDatabase
import com.kazier.mobile.data.local.dao.FileDao
import com.kazier.mobile.data.local.entity.FileEntity
import com.kazier.mobile.data.local.entity.FileStatus
import com.kazier.mobile.data.remote.ApiClient
import com.kazier.mobile.data.remote.dto.FileDto
import com.kazier.mobile.domain.GenerateId
import com.kazier.mobile.domain.SyncPlacement
import com.kazier.mobile.domain.computeCategory
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
import javax.inject.Singleton
@@ -1,15 +1,15 @@
package com.vaultdrop.mobile.data.repository
package com.kazier.mobile.data.repository
import androidx.room.withTransaction
import com.vaultdrop.mobile.data.local.AppDatabase
import com.vaultdrop.mobile.data.local.dao.FolderDao
import com.vaultdrop.mobile.data.local.entity.FolderEntity
import com.vaultdrop.mobile.data.local.entity.FolderStatus
import com.vaultdrop.mobile.data.remote.ApiClient
import com.vaultdrop.mobile.data.remote.dto.FolderDto
import com.vaultdrop.mobile.domain.DeviceIdentity
import com.vaultdrop.mobile.domain.GenerateId
import com.vaultdrop.mobile.domain.SyncPlacement
import com.kazier.mobile.data.local.AppDatabase
import com.kazier.mobile.data.local.dao.FolderDao
import com.kazier.mobile.data.local.entity.FolderEntity
import com.kazier.mobile.data.local.entity.FolderStatus
import com.kazier.mobile.data.remote.ApiClient
import com.kazier.mobile.data.remote.dto.FolderDto
import com.kazier.mobile.domain.DeviceIdentity
import com.kazier.mobile.domain.GenerateId
import com.kazier.mobile.domain.SyncPlacement
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
import javax.inject.Singleton
@@ -1,15 +1,15 @@
package com.vaultdrop.mobile.data.repository
package com.kazier.mobile.data.repository
import android.content.ContentResolver
import android.content.Context
import android.net.Uri
import androidx.core.net.toUri
import com.vaultdrop.mobile.data.local.dao.FileDao
import com.vaultdrop.mobile.data.local.entity.FileEntity
import com.vaultdrop.mobile.data.remote.ApiClient
import com.vaultdrop.mobile.data.remote.ApiException
import com.vaultdrop.mobile.data.remote.dto.OcrJobDto
import com.vaultdrop.mobile.data.remote.dto.OcrJobStatus
import com.kazier.mobile.data.local.dao.FileDao
import com.kazier.mobile.data.local.entity.FileEntity
import com.kazier.mobile.data.remote.ApiClient
import com.kazier.mobile.data.remote.ApiException
import com.kazier.mobile.data.remote.dto.OcrJobDto
import com.kazier.mobile.data.remote.dto.OcrJobStatus
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.delay
import okhttp3.MediaType
@@ -1,13 +1,13 @@
package com.vaultdrop.mobile.data.repository
package com.kazier.mobile.data.repository
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.squareup.moshi.Types
import com.vaultdrop.mobile.data.local.dao.PendingOperationDao
import com.vaultdrop.mobile.data.local.entity.PendingOpStatus
import com.vaultdrop.mobile.data.local.entity.PendingOperationEntity
import com.vaultdrop.mobile.data.local.entity.PendingOperationType
import com.vaultdrop.mobile.domain.GenerateId
import com.kazier.mobile.data.local.dao.PendingOperationDao
import com.kazier.mobile.data.local.entity.PendingOpStatus
import com.kazier.mobile.data.local.entity.PendingOperationEntity
import com.kazier.mobile.data.local.entity.PendingOperationType
import com.kazier.mobile.domain.GenerateId
import javax.inject.Inject
import javax.inject.Singleton
@@ -1,13 +1,13 @@
package com.vaultdrop.mobile.data.repository
package com.kazier.mobile.data.repository
import androidx.room.withTransaction
import com.vaultdrop.mobile.data.local.AppDatabase
import com.vaultdrop.mobile.data.local.dao.ScanDao
import com.vaultdrop.mobile.data.local.entity.ScanPageEntity
import com.vaultdrop.mobile.data.local.entity.ScanPageStatus
import com.vaultdrop.mobile.data.local.entity.ScanSessionEntity
import com.vaultdrop.mobile.data.local.entity.ScanSessionStatus
import com.vaultdrop.mobile.domain.GenerateId
import com.kazier.mobile.data.local.AppDatabase
import com.kazier.mobile.data.local.dao.ScanDao
import com.kazier.mobile.data.local.entity.ScanPageEntity
import com.kazier.mobile.data.local.entity.ScanPageStatus
import com.kazier.mobile.data.local.entity.ScanSessionEntity
import com.kazier.mobile.data.local.entity.ScanSessionStatus
import com.kazier.mobile.domain.GenerateId
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
import javax.inject.Singleton
@@ -1,15 +1,15 @@
package com.vaultdrop.mobile.data.repository
package com.kazier.mobile.data.repository
import androidx.room.withTransaction
import com.vaultdrop.mobile.data.local.AppDatabase
import com.vaultdrop.mobile.data.local.dao.FileDao
import com.vaultdrop.mobile.data.local.dao.FolderDao
import com.vaultdrop.mobile.data.local.entity.FileEntity
import com.vaultdrop.mobile.data.local.entity.FolderEntity
import com.vaultdrop.mobile.data.remote.ApiClient
import com.vaultdrop.mobile.data.remote.dto.ResourcePermissionDto
import com.vaultdrop.mobile.domain.DeviceIdentity
import com.vaultdrop.mobile.domain.SyncPlacement
import com.kazier.mobile.data.local.AppDatabase
import com.kazier.mobile.data.local.dao.FileDao
import com.kazier.mobile.data.local.dao.FolderDao
import com.kazier.mobile.data.local.entity.FileEntity
import com.kazier.mobile.data.local.entity.FolderEntity
import com.kazier.mobile.data.remote.ApiClient
import com.kazier.mobile.data.remote.dto.ResourcePermissionDto
import com.kazier.mobile.domain.DeviceIdentity
import com.kazier.mobile.domain.SyncPlacement
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.di
package com.kazier.mobile.di
import dagger.Module
import dagger.hilt.InstallIn
@@ -1,14 +1,14 @@
package com.vaultdrop.mobile.di
package com.kazier.mobile.di
import android.content.Context
import androidx.room.Room
import com.vaultdrop.mobile.data.local.AppDatabase
import com.vaultdrop.mobile.data.local.dao.FileDao
import com.vaultdrop.mobile.data.local.dao.FolderDao
import com.vaultdrop.mobile.data.local.dao.PendingOperationDao
import com.vaultdrop.mobile.data.local.dao.ScanDao
import com.vaultdrop.mobile.data.local.dao.UserPreferenceDao
import com.vaultdrop.mobile.data.local.migration.Migrations
import com.kazier.mobile.data.local.AppDatabase
import com.kazier.mobile.data.local.dao.FileDao
import com.kazier.mobile.data.local.dao.FolderDao
import com.kazier.mobile.data.local.dao.PendingOperationDao
import com.kazier.mobile.data.local.dao.ScanDao
import com.kazier.mobile.data.local.dao.UserPreferenceDao
import com.kazier.mobile.data.local.migration.Migrations
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@@ -1,11 +1,11 @@
package com.vaultdrop.mobile.di
package com.kazier.mobile.di
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import com.vaultdrop.mobile.BuildConfig
import com.vaultdrop.mobile.data.remote.ApiService
import com.vaultdrop.mobile.data.remote.AuthInterceptor
import com.vaultdrop.mobile.data.remote.ServerUrlInterceptor
import com.kazier.mobile.BuildConfig
import com.kazier.mobile.data.remote.ApiService
import com.kazier.mobile.data.remote.AuthInterceptor
import com.kazier.mobile.data.remote.ServerUrlInterceptor
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@@ -80,5 +80,5 @@ object NetworkModule {
fun provideApiService(retrofit: Retrofit): ApiService =
retrofit.create(ApiService::class.java)
private const val PLACEHOLDER_BASE_URL = "http://vaultdrop.invalid/"
private const val PLACEHOLDER_BASE_URL = "http://kazier.invalid/"
}
@@ -1,7 +1,7 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
import com.vaultdrop.mobile.data.local.dao.UserPreferenceDao
import com.vaultdrop.mobile.data.local.entity.UserPreferenceEntity
import com.kazier.mobile.data.local.dao.UserPreferenceDao
import com.kazier.mobile.data.local.entity.UserPreferenceEntity
import javax.inject.Inject
import javax.inject.Singleton
@@ -1,7 +1,7 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
import com.vaultdrop.mobile.data.local.dao.UserPreferenceDao
import com.vaultdrop.mobile.data.local.entity.UserPreferenceEntity
import com.kazier.mobile.data.local.dao.UserPreferenceDao
import com.kazier.mobile.data.local.entity.UserPreferenceEntity
import javax.inject.Inject
import javax.inject.Singleton
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
enum class FileCategory {
PDF,
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
import java.security.SecureRandom
import javax.inject.Inject
@@ -1,13 +1,13 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
import com.vaultdrop.mobile.data.local.dao.UserPreferenceDao
import com.vaultdrop.mobile.data.local.entity.UserPreferenceEntity
import com.kazier.mobile.data.local.dao.UserPreferenceDao
import com.kazier.mobile.data.local.entity.UserPreferenceEntity
import javax.inject.Inject
import javax.inject.Singleton
/**
* Drapeau « mode local » (on utilise l'app sans compte) persisté en
* `user_preferences`. Permet de restaurer [com.vaultdrop.mobile.ui.auth.AuthState.Local]
* `user_preferences`. Permet de restaurer [com.kazier.mobile.ui.auth.AuthState.Local]
* au redémarrage au lieu de retomber sur la page de connexion.
*/
@Singleton
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
/** Clés de `user_preferences` — miroir de `services/db/schema.ts`. */
object PrefKeys {
@@ -1,7 +1,7 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
import com.vaultdrop.mobile.data.local.dao.UserPreferenceDao
import com.vaultdrop.mobile.data.local.entity.UserPreferenceEntity
import com.kazier.mobile.data.local.dao.UserPreferenceDao
import com.kazier.mobile.data.local.entity.UserPreferenceEntity
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
import javax.inject.Named
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
/**
* Règle de placement d'une ressource (`sync_status`), partagée entre files et
@@ -1,4 +1,4 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
/**
* Préférence d'affichage de la page Réglages, persistée dans `user_preferences`.
@@ -1,7 +1,7 @@
package com.vaultdrop.mobile.domain
package com.kazier.mobile.domain
import com.vaultdrop.mobile.data.local.dao.UserPreferenceDao
import com.vaultdrop.mobile.data.local.entity.UserPreferenceEntity
import com.kazier.mobile.data.local.dao.UserPreferenceDao
import com.kazier.mobile.data.local.entity.UserPreferenceEntity
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
import javax.inject.Singleton

Some files were not shown because too many files have changed in this diff Show More