diff --git a/.dockerignore b/.dockerignore old mode 100644 new mode 100755 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md old mode 100644 new mode 100755 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml old mode 100644 new mode 100755 diff --git a/.github/ISSUE_TEMPLATE/documentation_request.md b/.github/ISSUE_TEMPLATE/documentation_request.md old mode 100644 new mode 100755 diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md old mode 100644 new mode 100755 diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md old mode 100644 new mode 100755 diff --git a/.github/docker-hub-setup.md b/.github/docker-hub-setup.md old mode 100644 new mode 100755 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml old mode 100644 new mode 100755 diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml old mode 100644 new mode 100755 diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml old mode 100644 new mode 100755 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/CODEOWNERS b/CODEOWNERS old mode 100644 new mode 100755 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md old mode 100644 new mode 100755 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md old mode 100644 new mode 100755 diff --git a/Cargo.lock b/Cargo.lock old mode 100644 new mode 100755 diff --git a/Cargo.toml b/Cargo.toml old mode 100644 new mode 100755 diff --git a/Dockerfile b/Dockerfile old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/TODO-LIST.md b/TODO-LIST.md old mode 100644 new mode 100755 diff --git a/db/schema.sql b/db/schema.sql old mode 100644 new mode 100755 diff --git a/doc/ADMIN-SETTINGS1.md b/doc/ADMIN-SETTINGS1.md old mode 100644 new mode 100755 diff --git a/doc/admin-settings.md b/doc/admin-settings.md old mode 100644 new mode 100755 diff --git a/doc/batch-operations.md b/doc/batch-operations.md old mode 100644 new mode 100755 diff --git a/doc/caching-architecture.md b/doc/caching-architecture.md old mode 100644 new mode 100755 diff --git a/doc/caldav-technical-spec.md b/doc/caldav-technical-spec.md old mode 100644 new mode 100755 diff --git a/doc/carddav-implementation-plan.md b/doc/carddav-implementation-plan.md old mode 100644 new mode 100755 diff --git a/doc/carddav-technical-spec.md b/doc/carddav-technical-spec.md old mode 100644 new mode 100755 diff --git a/doc/chunked-uploads.md b/doc/chunked-uploads.md old mode 100644 new mode 100755 diff --git a/doc/database-transactions.md b/doc/database-transactions.md old mode 100644 new mode 100755 diff --git a/doc/dav-client-setup.md b/doc/dav-client-setup.md old mode 100644 new mode 100755 diff --git a/doc/dav-implementation-plan.md b/doc/dav-implementation-plan.md old mode 100644 new mode 100755 diff --git a/doc/dav-integration.md b/doc/dav-integration.md old mode 100644 new mode 100755 diff --git a/doc/deduplication.md b/doc/deduplication.md old mode 100644 new mode 100755 diff --git a/doc/deployment.md b/doc/deployment.md old mode 100644 new mode 100755 diff --git a/doc/favorites-and-recent.md b/doc/favorites-and-recent.md old mode 100644 new mode 100755 diff --git a/doc/file-system-safety.md b/doc/file-system-safety.md old mode 100644 new mode 100755 diff --git a/doc/i18n.md b/doc/i18n.md old mode 100644 new mode 100755 diff --git a/doc/images/Captura de pantalla 2025-03-23 230739.png b/doc/images/Captura de pantalla 2025-03-23 230739.png old mode 100644 new mode 100755 diff --git a/doc/important-delta-sync-implementation.md b/doc/important-delta-sync-implementation.md old mode 100644 new mode 100755 diff --git a/doc/internal-architecture.md b/doc/internal-architecture.md old mode 100644 new mode 100755 diff --git a/doc/lto-optimizations.md b/doc/lto-optimizations.md old mode 100644 new mode 100755 diff --git a/doc/oidc-architecture.md b/doc/oidc-architecture.md old mode 100644 new mode 100755 diff --git a/doc/oidc-config-examples.md b/doc/oidc-config-examples.md old mode 100644 new mode 100755 diff --git a/doc/oidc-integration.md b/doc/oidc-integration.md old mode 100644 new mode 100755 diff --git a/doc/readme-auth.md b/doc/readme-auth.md old mode 100644 new mode 100755 diff --git a/doc/search.md b/doc/search.md old mode 100644 new mode 100755 diff --git a/doc/share-integration.md b/doc/share-integration.md old mode 100644 new mode 100755 diff --git a/doc/storage-quotas.md b/doc/storage-quotas.md old mode 100644 new mode 100755 diff --git a/doc/thumbnails-and-transcoding.md b/doc/thumbnails-and-transcoding.md old mode 100644 new mode 100755 diff --git a/doc/trash-feature-summary.md b/doc/trash-feature-summary.md old mode 100644 new mode 100755 diff --git a/doc/webdav-integration-guide.md b/doc/webdav-integration-guide.md old mode 100644 new mode 100755 diff --git a/doc/webdav-technical-spec.md b/doc/webdav-technical-spec.md old mode 100644 new mode 100755 diff --git a/doc/wopi-integration.md b/doc/wopi-integration.md old mode 100644 new mode 100755 diff --git a/doc/zip-and-compression.md b/doc/zip-and-compression.md old mode 100644 new mode 100755 diff --git a/docker-compose.wopi.yml b/docker-compose.wopi.yml old mode 100644 new mode 100755 diff --git a/docker-compose.yml b/docker-compose.yml old mode 100644 new mode 100755 diff --git a/example.env b/example.env old mode 100644 new mode 100755 index 1413c799..71d23623 --- a/example.env +++ b/example.env @@ -63,10 +63,12 @@ DATABASE_URL=postgres://postgres:postgres@localhost:5432/oxicloud # ----------------------------------------------------------------------------- # JWT secret key for signing authentication tokens -# IMPORTANT: Change this in production! If empty, a random secret is generated -# per session (tokens become invalid on restart). -# Generate a secure secret with: openssl rand -hex 32 -OXICLOUD_JWT_SECRET= +# If not set, a secure secret is auto-generated and persisted to +# /.jwt_secret so tokens survive container restarts. +# You only need to set this if you want to share the same secret +# across multiple OxiCloud instances or control it externally. +# Generate a custom secret with: openssl rand -hex 32 +#OXICLOUD_JWT_SECRET= # Access token lifetime in seconds (default: 3600 = 1 hour) #OXICLOUD_ACCESS_TOKEN_EXPIRY_SECS=3600 diff --git a/identifier.sh b/identifier.sh old mode 100644 new mode 100755 diff --git a/src/application/adapters/caldav_adapter.rs b/src/application/adapters/caldav_adapter.rs old mode 100644 new mode 100755 diff --git a/src/application/adapters/caldav_adapter_test.rs b/src/application/adapters/caldav_adapter_test.rs old mode 100644 new mode 100755 diff --git a/src/application/adapters/carddav_adapter.rs b/src/application/adapters/carddav_adapter.rs old mode 100644 new mode 100755 diff --git a/src/application/adapters/carddav_adapter_test.rs b/src/application/adapters/carddav_adapter_test.rs old mode 100644 new mode 100755 diff --git a/src/application/adapters/mod.rs b/src/application/adapters/mod.rs old mode 100644 new mode 100755 diff --git a/src/application/adapters/webdav_adapter.rs b/src/application/adapters/webdav_adapter.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/address_book_dto.rs b/src/application/dtos/address_book_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/app_password_dto.rs b/src/application/dtos/app_password_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/calendar_dto.rs b/src/application/dtos/calendar_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/contact_dto.rs b/src/application/dtos/contact_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/device_auth_dto.rs b/src/application/dtos/device_auth_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/display_helpers.rs b/src/application/dtos/display_helpers.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/favorites_dto.rs b/src/application/dtos/favorites_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/file_dto.rs b/src/application/dtos/file_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/folder_dto.rs b/src/application/dtos/folder_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/folder_listing_dto.rs b/src/application/dtos/folder_listing_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/i18n_dto.rs b/src/application/dtos/i18n_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/mod.rs b/src/application/dtos/mod.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/pagination.rs b/src/application/dtos/pagination.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/recent_dto.rs b/src/application/dtos/recent_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/search_dto.rs b/src/application/dtos/search_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/settings_dto.rs b/src/application/dtos/settings_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/share_dto.rs b/src/application/dtos/share_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/trash_dto.rs b/src/application/dtos/trash_dto.rs old mode 100644 new mode 100755 diff --git a/src/application/dtos/user_dto.rs b/src/application/dtos/user_dto.rs old mode 100644 new mode 100755 index 7de4846c..01746b04 --- a/src/application/dtos/user_dto.rs +++ b/src/application/dtos/user_dto.rs @@ -49,13 +49,12 @@ pub struct RegisterDto { } /// DTO for the one-time initial admin setup endpoint (`/api/setup`). -/// Requires the setup token printed to the server log on first boot. +/// Available only when the system is not yet initialized (no admin exists). #[derive(Debug, Serialize, Deserialize, Clone)] pub struct SetupAdminDto { pub username: String, pub email: String, pub password: String, - pub setup_token: String, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src/application/mod.rs b/src/application/mod.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/auth_ports.rs b/src/application/ports/auth_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/cache_ports.rs b/src/application/ports/cache_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/calendar_ports.rs b/src/application/ports/calendar_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/carddav_ports.rs b/src/application/ports/carddav_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/chunked_upload_ports.rs b/src/application/ports/chunked_upload_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/compression_ports.rs b/src/application/ports/compression_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/dedup_ports.rs b/src/application/ports/dedup_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/favorites_ports.rs b/src/application/ports/favorites_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/file_ports.rs b/src/application/ports/file_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/inbound.rs b/src/application/ports/inbound.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/mod.rs b/src/application/ports/mod.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/outbound.rs b/src/application/ports/outbound.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/recent_ports.rs b/src/application/ports/recent_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/share_ports.rs b/src/application/ports/share_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/storage_ports.rs b/src/application/ports/storage_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/thumbnail_ports.rs b/src/application/ports/thumbnail_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/transcode_ports.rs b/src/application/ports/transcode_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/trash_ports.rs b/src/application/ports/trash_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/ports/zip_ports.rs b/src/application/ports/zip_ports.rs old mode 100644 new mode 100755 diff --git a/src/application/services/admin_settings_service.rs b/src/application/services/admin_settings_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/app_password_service.rs b/src/application/services/app_password_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/auth_application_service.rs b/src/application/services/auth_application_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/batch_operations.rs b/src/application/services/batch_operations.rs old mode 100644 new mode 100755 diff --git a/src/application/services/calendar_service.rs b/src/application/services/calendar_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/contact_service.rs b/src/application/services/contact_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/device_auth_service.rs b/src/application/services/device_auth_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/favorites_service.rs b/src/application/services/favorites_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/file_management_service.rs b/src/application/services/file_management_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/file_retrieval_service.rs b/src/application/services/file_retrieval_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/file_upload_service.rs b/src/application/services/file_upload_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/file_use_case_factory.rs b/src/application/services/file_use_case_factory.rs old mode 100644 new mode 100755 diff --git a/src/application/services/folder_service.rs b/src/application/services/folder_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/i18n_application_service.rs b/src/application/services/i18n_application_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/idor_protection_test.rs b/src/application/services/idor_protection_test.rs old mode 100644 new mode 100755 diff --git a/src/application/services/mod.rs b/src/application/services/mod.rs old mode 100644 new mode 100755 diff --git a/src/application/services/recent_service.rs b/src/application/services/recent_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/search_service.rs b/src/application/services/search_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/share_service.rs b/src/application/services/share_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/storage_usage_service.rs b/src/application/services/storage_usage_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/trash_service.rs b/src/application/services/trash_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/trash_service_test.rs b/src/application/services/trash_service_test.rs old mode 100644 new mode 100755 diff --git a/src/application/services/wopi_lock_service.rs b/src/application/services/wopi_lock_service.rs old mode 100644 new mode 100755 diff --git a/src/application/services/wopi_token_service.rs b/src/application/services/wopi_token_service.rs old mode 100644 new mode 100755 diff --git a/src/common/config.rs b/src/common/config.rs old mode 100644 new mode 100755 index 7e9fe775..42dc6ee4 --- a/src/common/config.rs +++ b/src/common/config.rs @@ -605,44 +605,94 @@ impl AppConfig { // Auth configuration if let Ok(jwt_secret) = env::var("OXICLOUD_JWT_SECRET") { - // SECURITY: Validate JWT secret minimum entropy (RFC 7518 §3.2 - // recommends ≥256 bits for HS256). Panic on dangerously short - // secrets, warn on sub-optimal ones. - let len = jwt_secret.len(); - if config.features.enable_auth && len < 16 { - panic!( - "FATAL: OXICLOUD_JWT_SECRET is dangerously short ({} bytes). \ - Minimum: 32 bytes (256 bits) for HS256. \ - Generate a secure secret with: openssl rand -hex 32", - len - ); - } else if config.features.enable_auth && len < 32 { - tracing::warn!("=========================================================="); - tracing::warn!( - "OXICLOUD_JWT_SECRET is only {} bytes — recommended minimum is 32 (256 bits).", - len - ); - tracing::warn!("Generate a stronger secret with: openssl rand -hex 32"); - tracing::warn!("=========================================================="); + if !jwt_secret.is_empty() { + // SECURITY: Validate JWT secret minimum entropy (RFC 7518 §3.2 + // recommends ≥256 bits for HS256). Panic on dangerously short + // secrets, warn on sub-optimal ones. + let len = jwt_secret.len(); + if config.features.enable_auth && len < 16 { + panic!( + "FATAL: OXICLOUD_JWT_SECRET is dangerously short ({} bytes). \ + Minimum: 32 bytes (256 bits) for HS256. \ + Generate a secure secret with: openssl rand -hex 32", + len + ); + } else if config.features.enable_auth && len < 32 { + tracing::warn!("=========================================================="); + tracing::warn!( + "OXICLOUD_JWT_SECRET is only {} bytes — recommended minimum is 32 (256 bits).", + len + ); + tracing::warn!("Generate a stronger secret with: openssl rand -hex 32"); + tracing::warn!("=========================================================="); + } + config.auth.jwt_secret = jwt_secret; } - config.auth.jwt_secret = jwt_secret; } - // SECURITY: Generate ephemeral secret when none is provided + // SECURITY: Auto-persist JWT secret to storage so it survives restarts. + // Priority: env var > persisted file > generate new. if config.features.enable_auth && config.auth.jwt_secret.is_empty() { - // Generate a random secret for this session and warn loudly - use rand_core::{OsRng, RngCore}; - let mut key = [0u8; 32]; - OsRng.fill_bytes(&mut key); - let generated_secret: String = key.iter().map(|b| format!("{:02x}", b)).collect(); - config.auth.jwt_secret = generated_secret; + let secret_file = config.storage_path.join(".jwt_secret"); - tracing::warn!("=========================================================="); - tracing::warn!("OXICLOUD_JWT_SECRET is not set."); - tracing::warn!("A random secret has been generated for this session."); - tracing::warn!("All tokens will be INVALIDATED on restart."); - tracing::warn!("Set OXICLOUD_JWT_SECRET env var for production use."); - tracing::warn!("=========================================================="); + if secret_file.exists() { + // Read persisted secret from previous run + match std::fs::read_to_string(&secret_file) { + Ok(persisted) => { + let persisted = persisted.trim().to_string(); + if persisted.len() >= 32 { + config.auth.jwt_secret = persisted; + tracing::info!( + "JWT secret loaded from {}", + secret_file.display() + ); + } else { + tracing::warn!( + "Persisted JWT secret too short ({}B), regenerating", + persisted.len() + ); + } + } + Err(e) => { + tracing::warn!("Failed to read {}: {}", secret_file.display(), e); + } + } + } + + // Still empty → generate and persist + if config.auth.jwt_secret.is_empty() { + use rand_core::{OsRng, RngCore}; + let mut key = [0u8; 32]; + OsRng.fill_bytes(&mut key); + let generated_secret: String = + key.iter().map(|b| format!("{:02x}", b)).collect(); + + // Persist to storage volume so it survives container restarts + if let Err(e) = std::fs::write(&secret_file, &generated_secret) { + tracing::error!( + "Failed to persist JWT secret to {}: {}. \ + Tokens will be invalidated on restart!", + secret_file.display(), + e + ); + } else { + // Restrict file permissions (owner-only read/write) + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + let _ = std::fs::set_permissions( + &secret_file, + std::fs::Permissions::from_mode(0o600), + ); + } + tracing::info!( + "JWT secret auto-generated and persisted to {}", + secret_file.display() + ); + } + + config.auth.jwt_secret = generated_secret; + } } if let Ok(access_token_expiry) = diff --git a/src/common/di.rs b/src/common/di.rs old mode 100644 new mode 100755 index 6cae0eff..0e5e4925 --- a/src/common/di.rs +++ b/src/common/di.rs @@ -612,7 +612,7 @@ impl AppServiceFactory { path_resolver: None, webdav_lock_store: crate::infrastructure::services::webdav_lock_service::create_webdav_lock_store(), - setup_token: None, + }; // 9b. Wire admin settings service when auth is available @@ -663,24 +663,14 @@ impl AppServiceFactory { app_state.admin_settings_service = Some(admin_svc.clone()); - // 9b-2. Generate one-time setup token if system is NOT yet initialized + // 9b-2. Log whether system needs first-time admin setup if !admin_svc.is_system_initialized().await { - use rand_core::{OsRng, RngCore}; - let mut token_bytes = [0u8; 32]; - OsRng.fill_bytes(&mut token_bytes); - let token = hex::encode(token_bytes); - tracing::warn!("╔══════════════════════════════════════════════════════════╗"); tracing::warn!("║ SYSTEM NOT INITIALIZED — first admin setup required ║"); tracing::warn!("║ ║"); - tracing::warn!("║ POST /api/setup with this one-time token: ║"); - tracing::warn!("║ {} ║", token); - tracing::warn!("║ ║"); - tracing::warn!("║ This token is valid until the server restarts or the ║"); - tracing::warn!("║ first admin is created. Keep it secret! ║"); + tracing::warn!("║ Open the web UI to create the first admin account. ║"); + tracing::warn!("║ The setup page is available until an admin is created. ║"); tracing::warn!("╚══════════════════════════════════════════════════════════╝"); - - app_state.setup_token = Some(token); } else { tracing::info!("System already initialized — setup endpoint disabled"); } @@ -903,10 +893,7 @@ pub struct AppState { Option>, pub webdav_lock_store: Arc, - /// One-time setup token generated on startup when the system is not yet - /// initialized. Printed to the server log so the operator can create the - /// first admin user via `POST /api/setup`. - pub setup_token: Option, + } // All AppState construction is done via struct literal in build_app_state(). diff --git a/src/common/errors.rs b/src/common/errors.rs old mode 100644 new mode 100755 diff --git a/src/common/mime_detect.rs b/src/common/mime_detect.rs old mode 100644 new mode 100755 diff --git a/src/common/mod.rs b/src/common/mod.rs old mode 100644 new mode 100755 diff --git a/src/common/stubs.rs b/src/common/stubs.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/app_password.rs b/src/domain/entities/app_password.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/calendar.rs b/src/domain/entities/calendar.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/calendar_event.rs b/src/domain/entities/calendar_event.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/contact.rs b/src/domain/entities/contact.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/device_code.rs b/src/domain/entities/device_code.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/entity_errors.rs b/src/domain/entities/entity_errors.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/file.rs b/src/domain/entities/file.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/folder.rs b/src/domain/entities/folder.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/mod.rs b/src/domain/entities/mod.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/session.rs b/src/domain/entities/session.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/share.rs b/src/domain/entities/share.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/trashed_item.rs b/src/domain/entities/trashed_item.rs old mode 100644 new mode 100755 diff --git a/src/domain/entities/user.rs b/src/domain/entities/user.rs old mode 100644 new mode 100755 diff --git a/src/domain/errors.rs b/src/domain/errors.rs old mode 100644 new mode 100755 diff --git a/src/domain/mod.rs b/src/domain/mod.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/address_book_repository.rs b/src/domain/repositories/address_book_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/calendar_event_repository.rs b/src/domain/repositories/calendar_event_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/calendar_repository.rs b/src/domain/repositories/calendar_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/contact_repository.rs b/src/domain/repositories/contact_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/file_repository.rs b/src/domain/repositories/file_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/folder_repository.rs b/src/domain/repositories/folder_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/mod.rs b/src/domain/repositories/mod.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/session_repository.rs b/src/domain/repositories/session_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/settings_repository.rs b/src/domain/repositories/settings_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/share_repository.rs b/src/domain/repositories/share_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/trash_repository.rs b/src/domain/repositories/trash_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/repositories/user_repository.rs b/src/domain/repositories/user_repository.rs old mode 100644 new mode 100755 diff --git a/src/domain/services/i18n_service.rs b/src/domain/services/i18n_service.rs old mode 100644 new mode 100755 diff --git a/src/domain/services/mod.rs b/src/domain/services/mod.rs old mode 100644 new mode 100755 diff --git a/src/domain/services/path_service.rs b/src/domain/services/path_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/adapters/calendar_storage_adapter.rs b/src/infrastructure/adapters/calendar_storage_adapter.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/adapters/contact_storage_adapter.rs b/src/infrastructure/adapters/contact_storage_adapter.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/adapters/error_adapters.rs b/src/infrastructure/adapters/error_adapters.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/adapters/mod.rs b/src/infrastructure/adapters/mod.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/auth_factory.rs b/src/infrastructure/auth_factory.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/db.rs b/src/infrastructure/db.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/mod.rs b/src/infrastructure/mod.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/mod.rs b/src/infrastructure/repositories/mod.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/address_book_pg_repository.rs b/src/infrastructure/repositories/pg/address_book_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/app_password_pg_repository.rs b/src/infrastructure/repositories/pg/app_password_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/calendar_event_pg_repository.rs b/src/infrastructure/repositories/pg/calendar_event_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/calendar_pg_repository.rs b/src/infrastructure/repositories/pg/calendar_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/contact_group_pg_repository.rs b/src/infrastructure/repositories/pg/contact_group_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/contact_persistence_dto.rs b/src/infrastructure/repositories/pg/contact_persistence_dto.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/contact_pg_repository.rs b/src/infrastructure/repositories/pg/contact_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/device_code_pg_repository.rs b/src/infrastructure/repositories/pg/device_code_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/favorites_pg_repository.rs b/src/infrastructure/repositories/pg/favorites_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/file_blob_read_repository.rs b/src/infrastructure/repositories/pg/file_blob_read_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/file_blob_write_repository.rs b/src/infrastructure/repositories/pg/file_blob_write_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/folder_db_repository.rs b/src/infrastructure/repositories/pg/folder_db_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/mod.rs b/src/infrastructure/repositories/pg/mod.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/recent_items_pg_repository.rs b/src/infrastructure/repositories/pg/recent_items_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/session_pg_repository.rs b/src/infrastructure/repositories/pg/session_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/settings_pg_repository.rs b/src/infrastructure/repositories/pg/settings_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/share_pg_repository.rs b/src/infrastructure/repositories/pg/share_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/transaction_utils.rs b/src/infrastructure/repositories/pg/transaction_utils.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/trash_db_repository.rs b/src/infrastructure/repositories/pg/trash_db_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/repositories/pg/user_pg_repository.rs b/src/infrastructure/repositories/pg/user_pg_repository.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/chunked_upload_service.rs b/src/infrastructure/services/chunked_upload_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/compression_service.rs b/src/infrastructure/services/compression_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/dedup_service.rs b/src/infrastructure/services/dedup_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/file_content_cache.rs b/src/infrastructure/services/file_content_cache.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/file_system_i18n_service.rs b/src/infrastructure/services/file_system_i18n_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/image_transcode_service.rs b/src/infrastructure/services/image_transcode_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/jwt_service.rs b/src/infrastructure/services/jwt_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/login_lockout_service.rs b/src/infrastructure/services/login_lockout_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/mod.rs b/src/infrastructure/services/mod.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/oidc_service.rs b/src/infrastructure/services/oidc_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/password_hasher.rs b/src/infrastructure/services/password_hasher.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/path_resolver_service.rs b/src/infrastructure/services/path_resolver_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/path_service.rs b/src/infrastructure/services/path_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/thumbnail_service.rs b/src/infrastructure/services/thumbnail_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/thumbnail_service_test.rs b/src/infrastructure/services/thumbnail_service_test.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/trash_cleanup_service.rs b/src/infrastructure/services/trash_cleanup_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/webdav_lock_service.rs b/src/infrastructure/services/webdav_lock_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/wopi_discovery_service.rs b/src/infrastructure/services/wopi_discovery_service.rs old mode 100644 new mode 100755 diff --git a/src/infrastructure/services/zip_service.rs b/src/infrastructure/services/zip_service.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/cookie_auth.rs b/src/interfaces/api/cookie_auth.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/admin_handler.rs b/src/interfaces/api/handlers/admin_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/app_password_handler.rs b/src/interfaces/api/handlers/app_password_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/auth_handler.rs b/src/interfaces/api/handlers/auth_handler.rs old mode 100644 new mode 100755 index 1d012c8c..fae2f4f5 --- a/src/interfaces/api/handlers/auth_handler.rs +++ b/src/interfaces/api/handlers/auth_handler.rs @@ -360,13 +360,13 @@ async fn logout( /// POST /api/setup — One-time endpoint to create the first admin user. /// -/// Requires the setup token that was printed to the server log on first boot. +/// Available only when the system is not yet initialized (no admin exists). /// Once the admin is created, the system is marked as initialized and this /// endpoint returns 403 for all subsequent requests. /// /// Uses an atomic "claim" operation to prevent race conditions: even if two -/// requests arrive simultaneously with the correct token, only one will -/// succeed in marking the system as initialized and creating the admin. +/// requests arrive simultaneously, only one will succeed in marking the +/// system as initialized and creating the admin. async fn setup_admin( State(state): State>, Json(dto): Json, @@ -386,7 +386,7 @@ async fn setup_admin( .ok_or_else(|| AppError::internal_error("Admin settings service not configured"))?; // 3. Quick pre-check: if the system is already initialized, reject early - // (avoids token validation and Argon2 work on obviously-late requests) + // (avoids Argon2 work on obviously-late requests) if admin_svc.is_system_initialized().await { tracing::warn!( "Setup admin rejected: system already initialized (user: {})", @@ -399,30 +399,9 @@ async fn setup_admin( )); } - // 4. Verify the one-time setup token - let expected_token = state.setup_token.as_deref().ok_or_else(|| { - AppError::new( - StatusCode::FORBIDDEN, - "No setup token available. The system may already be initialized or the server needs to be restarted.", - "NoSetupToken", - ) - })?; - - if !constant_time_eq(dto.setup_token.as_bytes(), expected_token.as_bytes()) { - tracing::warn!( - "Setup admin rejected: invalid setup token (user: {})", - dto.username - ); - return Err(AppError::new( - StatusCode::FORBIDDEN, - "Invalid setup token. Check the server log for the correct token.", - "InvalidSetupToken", - )); - } - - // 5. ATOMIC: claim initialization — only one concurrent request can win. + // 4. ATOMIC: claim initialization — only one concurrent request can win. // We use a placeholder user_id ("pending") because the admin user - // doesn't exist yet. It will be updated to the real id below. + // doesn't exist yet. It will be updated to the real id below. let claimed = admin_svc .try_claim_initialization("pending") .await @@ -443,7 +422,7 @@ async fn setup_admin( )); } - // 6. Create the first admin user (we hold the exclusive claim) + // 5. Create the first admin user (we hold the exclusive claim) let user = auth_service .auth_application_service .setup_create_admin(dto.username.clone(), dto.email, dto.password) @@ -453,7 +432,7 @@ async fn setup_admin( AppError::from(e) })?; - // 7. Update the initialization record with the real admin user_id + // 5. Update the initialization record with the real admin user_id if let Err(e) = admin_svc.mark_system_initialized(&user.id).await { // Not fatal — the claim already prevents concurrent re-initialization, // and the "pending" marker is still "true" so the system stays locked. @@ -471,18 +450,6 @@ async fn setup_admin( Ok((StatusCode::CREATED, Json(user))) } -/// Constant-time byte comparison to prevent timing attacks on the setup token. -fn constant_time_eq(a: &[u8], b: &[u8]) -> bool { - if a.len() != b.len() { - return false; - } - let mut diff = 0u8; - for (x, y) in a.iter().zip(b.iter()) { - diff |= x ^ y; - } - diff == 0 -} - /// Get system status - returns whether admin is configured /// This is a public endpoint used to determine if setup is needed #[derive(serde::Serialize)] diff --git a/src/interfaces/api/handlers/batch_handler.rs b/src/interfaces/api/handlers/batch_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/caldav_handler.rs b/src/interfaces/api/handlers/caldav_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/carddav_handler.rs b/src/interfaces/api/handlers/carddav_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/chunked_upload_handler.rs b/src/interfaces/api/handlers/chunked_upload_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/dedup_handler.rs b/src/interfaces/api/handlers/dedup_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/device_auth_handler.rs b/src/interfaces/api/handlers/device_auth_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/favorites_handler.rs b/src/interfaces/api/handlers/favorites_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/file_handler.rs b/src/interfaces/api/handlers/file_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/folder_handler.rs b/src/interfaces/api/handlers/folder_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/i18n_handler.rs b/src/interfaces/api/handlers/i18n_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/mod.rs b/src/interfaces/api/handlers/mod.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/recent_handler.rs b/src/interfaces/api/handlers/recent_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/search_handler.rs b/src/interfaces/api/handlers/search_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/share_handler.rs b/src/interfaces/api/handlers/share_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/trash_handler.rs b/src/interfaces/api/handlers/trash_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/webdav_handler.rs b/src/interfaces/api/handlers/webdav_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/handlers/wopi_handler.rs b/src/interfaces/api/handlers/wopi_handler.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/mod.rs b/src/interfaces/api/mod.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/api/routes.rs b/src/interfaces/api/routes.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/errors.rs b/src/interfaces/errors.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/middleware/auth.rs b/src/interfaces/middleware/auth.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/middleware/csrf.rs b/src/interfaces/middleware/csrf.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/middleware/mod.rs b/src/interfaces/middleware/mod.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/middleware/rate_limit.rs b/src/interfaces/middleware/rate_limit.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/mod.rs b/src/interfaces/mod.rs old mode 100644 new mode 100755 diff --git a/src/interfaces/web/mod.rs b/src/interfaces/web/mod.rs old mode 100644 new mode 100755 diff --git a/src/lib.rs b/src/lib.rs old mode 100644 new mode 100755 diff --git a/src/main.rs b/src/main.rs old mode 100644 new mode 100755 diff --git a/static/admin.html b/static/admin.html old mode 100644 new mode 100755 diff --git a/static/css/admin.css b/static/css/admin.css old mode 100644 new mode 100755 diff --git a/static/css/auth.css b/static/css/auth.css old mode 100644 new mode 100755 diff --git a/static/css/base/forms.css b/static/css/base/forms.css old mode 100644 new mode 100755 diff --git a/static/css/base/reset.css b/static/css/base/reset.css old mode 100644 new mode 100755 diff --git a/static/css/base/variables.css b/static/css/base/variables.css old mode 100644 new mode 100755 diff --git a/static/css/components/breadcrumb.css b/static/css/components/breadcrumb.css old mode 100644 new mode 100755 diff --git a/static/css/components/buttons.css b/static/css/components/buttons.css old mode 100644 new mode 100755 diff --git a/static/css/components/cards.css b/static/css/components/cards.css old mode 100644 new mode 100755 diff --git a/static/css/components/contextMenu.css b/static/css/components/contextMenu.css old mode 100644 new mode 100755 diff --git a/static/css/components/dialogs.css b/static/css/components/dialogs.css old mode 100644 new mode 100755 diff --git a/static/css/components/fileList.css b/static/css/components/fileList.css old mode 100644 new mode 100755 diff --git a/static/css/components/languageSelector.css b/static/css/components/languageSelector.css old mode 100644 new mode 100755 diff --git a/static/css/components/modals.css b/static/css/components/modals.css old mode 100644 new mode 100755 diff --git a/static/css/components/multiSelect.css b/static/css/components/multiSelect.css old mode 100644 new mode 100755 diff --git a/static/css/components/notifications.css b/static/css/components/notifications.css old mode 100644 new mode 100755 diff --git a/static/css/components/search.css b/static/css/components/search.css old mode 100644 new mode 100755 diff --git a/static/css/components/shareDialog.css b/static/css/components/shareDialog.css old mode 100644 new mode 100755 diff --git a/static/css/components/spinner.css b/static/css/components/spinner.css old mode 100644 new mode 100755 diff --git a/static/css/components/uploadDropdown.css b/static/css/components/uploadDropdown.css old mode 100644 new mode 100755 diff --git a/static/css/components/userMenu.css b/static/css/components/userMenu.css old mode 100644 new mode 100755 diff --git a/static/css/favorites.css b/static/css/favorites.css old mode 100644 new mode 100755 diff --git a/static/css/inlineViewer.css b/static/css/inlineViewer.css old mode 100644 new mode 100755 diff --git a/static/css/layout/content.css b/static/css/layout/content.css old mode 100644 new mode 100755 diff --git a/static/css/layout/sidebar.css b/static/css/layout/sidebar.css old mode 100644 new mode 100755 diff --git a/static/css/layout/topbar.css b/static/css/layout/topbar.css old mode 100644 new mode 100755 diff --git a/static/css/main.css b/static/css/main.css old mode 100644 new mode 100755 diff --git a/static/css/profile.css b/static/css/profile.css old mode 100644 new mode 100755 diff --git a/static/css/recent.css b/static/css/recent.css old mode 100644 new mode 100755 diff --git a/static/css/style.css b/static/css/style.css old mode 100644 new mode 100755 diff --git a/static/css/themes/dark.css b/static/css/themes/dark.css old mode 100644 new mode 100755 diff --git a/static/css/views/admin.css b/static/css/views/admin.css old mode 100644 new mode 100755 diff --git a/static/css/views/auth.css b/static/css/views/auth.css old mode 100644 new mode 100755 diff --git a/static/css/views/device-verify.css b/static/css/views/device-verify.css old mode 100644 new mode 100755 diff --git a/static/css/views/favorites.css b/static/css/views/favorites.css old mode 100644 new mode 100755 diff --git a/static/css/views/inlineViewer.css b/static/css/views/inlineViewer.css old mode 100644 new mode 100755 diff --git a/static/css/views/profile.css b/static/css/views/profile.css old mode 100644 new mode 100755 diff --git a/static/css/views/recent.css b/static/css/views/recent.css old mode 100644 new mode 100755 diff --git a/static/css/views/shared.css b/static/css/views/shared.css old mode 100644 new mode 100755 diff --git a/static/css/views/trash.css b/static/css/views/trash.css old mode 100644 new mode 100755 diff --git a/static/device-verify.html b/static/device-verify.html old mode 100644 new mode 100755 diff --git a/static/favicon.ico b/static/favicon.ico old mode 100644 new mode 100755 diff --git a/static/index.html b/static/index.html old mode 100644 new mode 100755 diff --git a/static/js/app/authSession.js b/static/js/app/authSession.js old mode 100644 new mode 100755 diff --git a/static/js/app/bootstrap.js b/static/js/app/bootstrap.js old mode 100644 new mode 100755 diff --git a/static/js/app/filesView.js b/static/js/app/filesView.js old mode 100644 new mode 100755 diff --git a/static/js/app/main.js b/static/js/app/main.js old mode 100644 new mode 100755 diff --git a/static/js/app/navigation.js b/static/js/app/navigation.js old mode 100644 new mode 100755 diff --git a/static/js/app/searchView.js b/static/js/app/searchView.js old mode 100644 new mode 100755 diff --git a/static/js/app/state.js b/static/js/app/state.js old mode 100644 new mode 100755 diff --git a/static/js/app/trashView.js b/static/js/app/trashView.js old mode 100644 new mode 100755 diff --git a/static/js/app/ui.js b/static/js/app/ui.js old mode 100644 new mode 100755 diff --git a/static/js/app/uiFileTypes.js b/static/js/app/uiFileTypes.js old mode 100644 new mode 100755 diff --git a/static/js/app/uiNotifications.js b/static/js/app/uiNotifications.js old mode 100644 new mode 100755 diff --git a/static/js/app/userMenu.js b/static/js/app/userMenu.js old mode 100644 new mode 100755 diff --git a/static/js/core/csrf.js b/static/js/core/csrf.js old mode 100644 new mode 100755 diff --git a/static/js/core/formatters.js b/static/js/core/formatters.js old mode 100644 new mode 100755 diff --git a/static/js/core/i18n.js b/static/js/core/i18n.js old mode 100644 new mode 100755 diff --git a/static/js/core/icons.js b/static/js/core/icons.js old mode 100644 new mode 100755 diff --git a/static/js/core/languageSelector.js b/static/js/core/languageSelector.js old mode 100644 new mode 100755 diff --git a/static/js/core/modal.js b/static/js/core/modal.js old mode 100644 new mode 100755 diff --git a/static/js/core/notifications.js b/static/js/core/notifications.js old mode 100644 new mode 100755 diff --git a/static/js/core/sw-register.js b/static/js/core/sw-register.js old mode 100644 new mode 100755 diff --git a/static/js/core/theme-init.js b/static/js/core/theme-init.js old mode 100644 new mode 100755 diff --git a/static/js/features/auth/auth.js b/static/js/features/auth/auth.js old mode 100644 new mode 100755 index d52b223e..6796b906 --- a/static/js/features/auth/auth.js +++ b/static/js/features/auth/auth.js @@ -730,7 +730,6 @@ if (isLoginPage && adminSetupForm) { try { // Use the /api/setup endpoint which creates an admin and marks the system as initialized - const setupToken = document.getElementById('admin-setup-token').value; const response = await fetch('/api/setup', { method: 'POST', headers: { 'Content-Type': 'application/json', ...getCsrfHeaders() }, @@ -738,8 +737,7 @@ if (isLoginPage && adminSetupForm) { body: JSON.stringify({ username: 'admin', email, - password, - setup_token: setupToken + password }) }); if (!response.ok) { diff --git a/static/js/features/files/contextMenus.js b/static/js/features/files/contextMenus.js old mode 100644 new mode 100755 diff --git a/static/js/features/files/fileOperations.js b/static/js/features/files/fileOperations.js old mode 100644 new mode 100755 diff --git a/static/js/features/files/inlineViewer.js b/static/js/features/files/inlineViewer.js old mode 100644 new mode 100755 diff --git a/static/js/features/files/multiSelect.js b/static/js/features/files/multiSelect.js old mode 100644 new mode 100755 diff --git a/static/js/features/files/search.js b/static/js/features/files/search.js old mode 100644 new mode 100755 diff --git a/static/js/features/files/wopiEditor.js b/static/js/features/files/wopiEditor.js old mode 100644 new mode 100755 diff --git a/static/js/features/library/favorites.js b/static/js/features/library/favorites.js old mode 100644 new mode 100755 diff --git a/static/js/features/library/recent.js b/static/js/features/library/recent.js old mode 100644 new mode 100755 diff --git a/static/js/features/sharing/fileSharing.js b/static/js/features/sharing/fileSharing.js old mode 100644 new mode 100755 diff --git a/static/js/views/admin/admin.js b/static/js/views/admin/admin.js old mode 100644 new mode 100755 diff --git a/static/js/views/device-verify/device-verify.js b/static/js/views/device-verify/device-verify.js old mode 100644 new mode 100755 diff --git a/static/js/views/profile/profile.js b/static/js/views/profile/profile.js old mode 100644 new mode 100755 diff --git a/static/js/views/shared/sharedView.js b/static/js/views/shared/sharedView.js old mode 100644 new mode 100755 diff --git a/static/locales/de.json b/static/locales/de.json old mode 100644 new mode 100755 diff --git a/static/locales/en.json b/static/locales/en.json old mode 100644 new mode 100755 diff --git a/static/locales/es.json b/static/locales/es.json old mode 100644 new mode 100755 diff --git a/static/locales/fa.json b/static/locales/fa.json old mode 100644 new mode 100755 diff --git a/static/locales/fr.json b/static/locales/fr.json old mode 100644 new mode 100755 diff --git a/static/locales/it.json b/static/locales/it.json old mode 100644 new mode 100755 diff --git a/static/locales/nl.json b/static/locales/nl.json old mode 100644 new mode 100755 diff --git a/static/locales/pt.json b/static/locales/pt.json old mode 100644 new mode 100755 diff --git a/static/locales/zh.json b/static/locales/zh.json old mode 100644 new mode 100755 diff --git a/static/login.html b/static/login.html old mode 100644 new mode 100755 index 76e2ba97..936947a2 --- a/static/login.html +++ b/static/login.html @@ -273,19 +273,6 @@ > -
- - - Check the server console output for the setup token. -
- diff --git a/static/logo/logo-plain.svg b/static/logo/logo-plain.svg old mode 100644 new mode 100755 diff --git a/static/oxicloud-logo.svg b/static/oxicloud-logo.svg old mode 100644 new mode 100755 diff --git a/static/profile.html b/static/profile.html old mode 100644 new mode 100755 diff --git a/static/sw.js b/static/sw.js old mode 100644 new mode 100755