Skip to content

Releases: nextdeveloper-nl/s3

v1.1.28

Choose a tag to compare

@yakari007 yakari007 released this 07 Jul 10:50
a20f558

Fixed

  • Access-key reveal/revoke (and other audit-logged actions) no longer fail with "not allowed" for s3-user/s3-manager roles. AuditLogsService::log() now bypasses the create-authorization check when writing the audit trail, since it's a system-triggered side effect of an already-authorized action, not a user-initiated create.

Requires nextdeveloper-nl/iam >= v2.0.7 (adds UserHelper::withRolesCheckBypassed()).

v1.1.26 — quota alerts perspective + role read parity

Choose a tag to compare

@yakari007 yakari007 released this 07 Jul 07:44
d56f424

New

  • s3_quota_alerts_perspective — read-only perspective (GET /s3/quota-alerts-perspective), one row per S3 account currently at/above the 80% quota warning threshold (or already blocked) on storage or monthly egress. Uses the same thresholds as QuotaHelper/QuotaWarningNotification/QuotaExceededNotification, so it always reflects what did (or will) trigger an alert email.
    • Ships as a DB view — see schemas/s3_quota_alerts_perspective.sql for the CREATE OR REPLACE VIEW to apply to the database (no Laravel migration, same as the other schemas/*.sql references in this repo).
    • Full model/controller/service/transformer/request/filter scaffolding, mirroring the existing worm-expiring-perspective pattern.

Fix

  • S3UserRole was missing read access to s3_account_stats, s3_accounts_perspective, and s3_server_capacity_stats, even though S3ManagerRole/S3AdminRole already had them — brought to parity.
  • s3_quota_alerts_perspective:read granted to all three S3 roles (admin/manager/user).

v1.1.25 — s3-user server read access

Choose a tag to compare

@yakari007 yakari007 released this 07 Jul 07:26
fbe3f3d

Fix

  • s3-user role accounts could not list servers (GET /s3/servers, GET /s3/servers-perspective) — the Authorize middleware returned 403 because s3_servers:read / s3_servers_perspective:read were missing from S3UserRole::allowedOperations(), even though S3ManagerRole/S3AdminRole already had them.
  • This blocked bucket creation for regular users, since the bucket-creation form needs the servers list to populate the required s3_server_id field.

v1.1.24 — Restore jobs + backup agent auto-resync

Choose a tag to compare

@yakari007 yakari007 released this 06 Jul 18:48

Restore jobs (new)

  • New customer-facing restore path: POST /s3/backup-jobs/{id}/restore dispatches a restore_snapshot command to the owning agent, restoring backup data to an explicit destination_path (optionally scoped to restore_paths) and mandatorily checksum-verifying the result before it's ever reported completed.
  • New s3_restore_jobs table/model/service/filter/transformer + read-only GET /s3/restore-jobs, GET /s3/restore-jobs/{id} endpoints — same read-only pattern as backup-job-runs.
  • s3_backup_jobs gains an engine column (rsync default, kopia opt-in), immutable after creation. rsync jobs always restore current bucket state; kopia jobs restore a specific point-in-time snapshot via s3_backup_job_run_id. Enforced in RestoreJobsService::startRestore().

Backup agent: auto-recover from a stale job list

  • BackupAgentEventService::handleResult() now re-sends full_sync whenever an agent replies status: rejected to a command — this generally means the agent's local job list is stale relative to the platform (reconnected before the last full_sync landed, or a job changed after its last sync).
  • For run_job_now specifically, a rejection also triggers an automatic retry of the run after the resync (BackupAgentCommandService::retryRunJobNowAfterRejection()), capped at 3 consecutive rejections. Past that, the platform stops looping and leaves a system comment on the job (via CommentsService::createSystemComment()) for manual follow-up instead of retrying forever.

Full protocol/schema details: docs/backup.agent/protocol.md, docs/backup.agent/database.md, docs/backup.agent/updates/2026-07-06-restore-jobs.md.

S3 service agent handles added

Choose a tag to compare

@yakari007 yakari007 released this 11 Jun 12:15
cbac100

S3AgentService handles inbound agent.s3.*.evt messages: heartbeat updates agent_status/last_seen, telemetry ingests snapshot and updates server health, alert fires platform event, result logs command outcome
S3AgentCommandService dispatches fire-and-forget commands to agent.s3.{uuid}.cmd: full_sync (with bucket + IAM key payload), bucket_create/delete/update, iam_create/delete, reconcile
fullSync triggered automatically on first heartbeat from a pending server