Edouard Vanbelle
07802e01f8
feat(recoverable job): add pause/resume capability
2026-08-02 16:17:15 +02:00
Edouard Vanbelle
c00451fc88
feat(admin): better refresh in admin section when storage is in migration
2026-08-02 15:59:38 +02:00
Edouard Vanbelle
58c24bd150
feat(storage migration): make logs more verbose
2026-08-02 15:55:30 +02:00
Edouard Vanbelle
49a4c53eed
feat(admin storage): show finger print on key generation
2026-08-02 15:26:41 +02:00
Edouard Vanbelle
015f2da0f7
refactor(backend): normalize naming convention to backend rather storage
...
no ambiguity with the backend rather storage
2026-08-02 14:56:29 +02:00
Edouard Vanbelle
a10d3254bf
fix(storage migration): overwrite target blob if mismatch
...
if target blob already exists, migration will check the blob
if header is already with the targeted key (or no key if not ciphered) no need write
otherwise write the blob (that will convert any blob with no header into the correct version)
2026-08-02 14:56:29 +02:00
Edouard Vanbelle
9902a6f8fe
refactor(usage_reconcile): explicit naming to prevent confusion with storage (backend)
2026-08-02 14:56:29 +02:00
Edouard Vanbelle
db5ae1cc90
fix(storage migration): do not flip storage backend on migration error
2026-08-02 14:56:29 +02:00
Edouard Vanbelle
6b3d36730c
fix(blob consistency): fix report of unreadable blob
2026-08-02 14:56:26 +02:00
Edouard Vanbelle
d4cb0c53d5
feat(blob): add a safety net on blob without header
...
function read_dispatch:
the reader use th header to determined if file is encrypted
and which key (fingerprint) was used
if blob was recorded in legacy format (no header), it tries all attached keys on storage
last safety net: if none matched, do a blake3 on file, if it matches the file is
stored in clear (no cipher)
otherwise:
- blob is corrupted
- key is lost
2026-08-02 14:56:26 +02:00
Edouard Vanbelle
c0878a7928
fix(storage-usage): keep trashed files in usage till they a permenently deleted
2026-08-02 14:56:26 +02:00
Edouard Vanbelle
4297d8139a
feat(admin dashboard): clarify quota usage vs backend usage
2026-08-02 14:56:22 +02:00
Edouard Vanbelle
dd1528de92
feat(rotate-key): show finger print + way to know if can remove key
2026-08-02 04:26:47 +02:00
Edouard Vanbelle
47246592b7
fix(blob_consistency): raise a finding if decipher fails
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
120dd09885
fix(decypher): try to decipher even with old format
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
0a41f561d0
feat(rotate-key): add report + key fingerprint in hexdigit fmt
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
ddede168f9
feat(job): delete temp files at boot time (only possible case: crash)
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
bc481bdd99
feat(job): fix key rotation on local storage (replace blob)
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
e12d8bcb90
feat(job): show if a job is recverable
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
a58351b7ad
feat(storage key rot): add admin panel
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
a9d5aae781
feat(storage key rot): add rotate services
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
30b0000c26
feat(storage key rot): add blob/chunk creation with the header
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
9485ee5540
feat(storage key rot): add blob header engine
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
e164689771
feat(storage key rot): remove dead born OXICLOUD_STORAGE_<N>_ENCRYPTION_CIPHER
...
+ alway ovewrite on storage migration (got issue when migrating with blob already existing and a key change)
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
03c8f87f1f
feat(storage key rot): prepare format <cipher1>:<key2>,<cipher2>:<key2>,...
2026-08-02 02:40:33 +02:00
Edouard Vanbelle
4cb73eaf39
plan(storage-key-rotation): add a key rotation + header version blob
2026-08-02 02:40:33 +02:00
Dionisio Pozo
0660ac1e6c
Merge pull request #654 from EdouardVanbelle/feat/storage-migration
2026-08-02 00:15:53 +02:00
Edouard Vanbelle
f1c72f8837
test(storage): adapt playwright admin tests
2026-08-01 20:35:04 +02:00
Edouard Vanbelle
836c7a57c1
audit(RUSTSEC-2026-0222): inhibit alert, wasmtime plugin are not used per today
2026-08-01 20:30:33 +02:00
Edouard Vanbelle
88921c975a
fix(hurl test): add new job
2026-08-01 20:08:17 +02:00
Edouard Vanbelle
c31b8b814d
fix(oidc): change the test
2026-08-01 19:58:38 +02:00
Edouard Vanbelle
bbfb106a32
feat(maintenance): add a maintenance notification during backend migration
2026-08-01 18:46:17 +02:00
Edouard Vanbelle
142afecbbf
feat(storage): add a guide on storage
2026-08-01 17:50:35 +02:00
Edouard Vanbelle
f409658c96
feat(storage): hot swap backend on migrate
2026-08-01 17:11:07 +02:00
Edouard Vanbelle
8329b4aa56
feat(storage): improve admin panel
2026-08-01 17:10:06 +02:00
Edouard Vanbelle
cc439aaff9
fix(dedup): fix informations
2026-08-01 16:20:49 +02:00
Edouard Vanbelle
f949939508
feat(storage): add cmd option --select-storage
2026-08-01 14:36:24 +02:00
Edouard Vanbelle
d7c19570a5
feat(storage): wire choice of storage
2026-08-01 14:19:14 +02:00
Edouard Vanbelle
2de71b6d9a
feat(storage): add readonly during storage migration
2026-08-01 13:43:04 +02:00
Edouard Vanbelle
6b7bb67500
feat(storage): jobs can choose storage to migrate/scan
2026-08-01 13:06:09 +02:00
Edouard Vanbelle
354e058114
feat(storage): add multi entry in config
2026-08-01 12:58:43 +02:00
Edouard Vanbelle
7534427dc2
fix(oidc): apply clippy recos on PR 652
2026-08-01 12:27:20 +02:00
Edouard Vanbelle
2de5abc6ca
plan(storage-multi-entry): simplify the storage migration
...
Two chronic problems fall out:
1. **Split-brain config.** Admin edits DB via the panel; app boot ignores DB.
Migration completes; live backend hasn't moved. Admin has to remember to
copy env vars into `.env` and restart. Two sources of truth for the same
setting. Cutover is a manual multi-step flow; users routinely get it wrong.
2. **Migration data-loss window on concurrent writes.** The copy walks
`storage.blobs` in hash order. A blob whose hash is lex-lower than the
current cursor, written to source AFTER migration passed it, is never
copied to target. `passed=true, findings=0` completion does NOT guarantee
target has every blob. Silent.
3. **Migration target selection is fragile.** DTO passes the whole S3 config
at trigger time; secrets sit plaintext in `admin_settings`. Any future
pluggable-storage story compounds this (Azure, GCS, WebDAV-as-source, …).
This plan replaces the split-brain model with a single-source-of-truth
architecture:
- `.env` declares **N named storage entries** (immutable per-deploy).
- `admin_settings.storage.active_backend_name` holds ONE row — which named
entry the app currently runs on. That's the whole runtime config.
- Migration is the atomic transition from one active entry to another. Server
is put in read-only mode for the copy window; on completion, the active
pointer flips; a restart cuts over.
2026-08-01 12:05:01 +02:00
Edouard Vanbelle
82a50936d4
feat(storage-migration): move storage mig. to recoverable job
2026-08-01 11:53:51 +02:00
Dionisio Pozo
0c6a33c721
Merge pull request #652 from DragonDuck24/oidc-check-require-email-verification
...
fix: Make oidc check if email verification is required
2026-08-01 00:12:33 +02:00
Drake
1801150ad4
make oidc check if email verification is required
2026-07-31 11:09:33 -05:00
Dionisio Pozo
8ba2d81297
Merge pull request #651 from EdouardVanbelle/feat/recoverable-jobs
...
feat(recoverable jobs): add engine + consistency jobs
2026-07-30 10:30:39 +02:00
Dionisio Pozo
53a80cf181
Merge pull request #650 from EdouardVanbelle/chore/db-migration-check
...
ci: add protection on merge and db migration
2026-07-30 10:30:03 +02:00
Edouard Vanbelle
d3c2fc3e94
fix(job): correct amount of jobs + remove cound due to grace window
2026-07-30 02:00:39 +02:00
Edouard Vanbelle
5a87999949
fix(integration test): fix drive test used bytes with grace period
2026-07-30 01:29:09 +02:00