Part of the ridentity.online branding migration. The EncryptID auth
server is now accessible at auth.ridentity.online (with the legacy
encryptid.jeffemmett.com kept as a backward-compatible alias).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Also imported by portal/views_shared_space.py but never defined,
causing a second ImportError after the SpacePermission fix.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The SpacePermission DRF permission class was imported in files/views.py
but never defined, causing an ImportError that crash-looped the app.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add EncryptID as a DRF authentication class:
- Add encryptid_auth.py with EncryptIDAuthentication backend
- Verifies Bearer tokens against EncryptID server
- Auto-creates Django User from DID claims
- Add ENCRYPTID_SERVER_URL and ENCRYPTID_JWT_SECRET settings
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add direct.rfiles.online A record (DNS only, not proxied through CF)
- Add TLS-enabled Traefik router with Let's Encrypt for direct subdomain
- Add DirectUploadAPIView that accepts space slug as form field
- All uploads now go to https://direct.rfiles.online/api/upload/
- CORS allows *.rfiles.online origins
- Middleware treats 'direct' as reserved (not a shared space)
- Removes chunked upload complexity (no longer needed)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cloudflare free plan caps request bodies at 100MB. Files > 90MB now
upload in 80MB chunks: init session, send chunks sequentially, server
reassembles and creates MediaFile. Small files still use direct upload.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Django 5.x requires a 'default' key in STORAGES for FileField uploads.
Only 'staticfiles' was defined, causing InvalidStorageError on upload.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Django upload limit raised to 10GB
- SharedSpace max_file_size_mb default changed to 0 (unlimited)
- Server-side and client-side checks skip when limit is 0
- Upload UI shows "No file size limit"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extracted from PKMN (personal-knowledge-management-network) into its own
repo with separate database, file storage, and Docker stack.
- files app: SharedSpace, MediaFile, PublicShare, FileAccessLog models
- portal app: Landing page, upload, file management, shared space views
- Host-based URL routing for subdomain shared spaces (*.rfiles.online)
- PWA with service worker and share target support
- Celery tasks for expired share cleanup and file processing
- Docker Compose for dev and production (Traefik + PostgreSQL + Redis)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>