Releases: TestaVivaDK/sharepoint-sharing-audit
Releases · TestaVivaDK/sharepoint-sharing-audit
v0.6.0
What's New
Bulk Unshare: Retry, Verification & Neo4j Cleanup
- Retry logic — Automatic retry on Graph API 429 (throttling) with
Retry-Aftersupport and 5xx exponential backoff (max 4 retries) - Post-delete verification — Re-fetches permissions after deletion to confirm they were actually removed
- Neo4j cleanup — Removes
SHARED_WITHrelationships on verified success so files disappear on page refresh - Inter-file throttle delay — 0.5s delay between files to avoid triggering rate limits
Structured Error Reasons & Result Dialog
- 5 error categories —
ACCESS_DENIED,NOT_FOUND,THROTTLED,VERIFICATION_FAILED,UNKNOWN— each with a user-facing message and suggested action - Result dialog — Replaces the auto-hiding toast with a persistent dialog showing per-file outcomes:
- Color-coded reason chips (red for Access Denied, orange for Rate Limited, blue for Not Found)
- File paths resolved from cache
- Suggested actions for each failure
- "Retry Failed" button for throttled files
Files Changed
Backend
src/shared/neo4j_client.py— newremove_shared_with()methodsrc/webapp/graph_unshare.py—_request_with_retry(),_classify_error(), verification step, structured errorssrc/webapp/routes_unshare.py— wired Neo4j client fromapp.state
Frontend
frontend/src/api/types.ts—UnshareFailure/UnshareReasontypesfrontend/src/components/UnshareResultDialog.tsx— new componentfrontend/src/components/UnshareButton.tsx— replaced toast with result dialog
Full Changelog: v0.5.3...v0.6.0
v0.5.3
Bug Fix
- MUI license key trailing newline — Strip whitespace from
MUI_LICENSE_KEYenv var to prevent broken config.js output when Kubernetes secrets include trailing newlines.
Full Changelog: v0.5.2...v0.5.3
v0.5.2
Bug Fixes
- MUI license key not injected — Added
MUI_LICENSE_KEYenv var to the webapp Helm deployment, reading from the existing secret. Configurable viawebapp.muiLicenseSecretKey(defaults toMUI_LICENSE_KEY). - Files query independent of scan run — Carried over from v0.5.1.
Full Changelog: v0.5.1...v0.5.2
v0.5.1
Bug Fix
Files disappearing after scan restart — The webapp query filtered by lastSeenRunId tied to the latest completed scan. When a new running scan overwrote the run ID on existing relationships, the webapp returned zero results because it still referenced the old completed scan.
Fix: Removed lastSeenRunId filter from file queries. Files are now shown based on existing SHARED_WITH relationships. Deleted files are excluded via deletedAt IS NULL.
Full Changelog: v0.5.0...v0.5.1
v0.5.0
What's New
Delta Query Support
- Subsequent scans now use Microsoft Graph delta queries to process only changed items, reducing ~18h full scans to minutes
- Automatic full rescan every 7 days (configurable via
FULL_SCAN_INTERVAL_DAYS) FORCE_FULL_SCANenv var to override delta behavior- Graceful fallback to full walk when delta links expire (HTTP 410)
- Deleted files are marked in the graph rather than leaving orphaned nodes
New Components
src/collector/delta.py— delta scan drive logicDeltaStateNeo4j nodes for persisting delta links between scansScanRun.scanTypeproperty (full|delta)
Improvements
_make_requestrefactored to support extra headers (Prefer headers for delta)seed_delta_linkvalidates API response defensively- Content-only delta changes maintain proper graph relationships
Full Changelog: v0.4.0...v0.5.0
v0.4.0
Full Changelog: v0.3.0...v0.4.0
v0.3.0
Full Changelog: v0.2.0...v0.3.0