48d853360e
Adds full Device Authorization Grant flow so DAV clients (rclone, etc.) can authenticate without browser-based OAuth redirects. New files: - Domain entity: DeviceCode with status lifecycle (pending/authorized/denied/expired) - Port: DeviceCodeStoragePort trait (7 async methods) - DTOs: request/response types for all device auth endpoints - Repository: DeviceCodePgRepository (PostgreSQL implementation) - Service: DeviceAuthService (initiate, verify, approve, deny, poll, cleanup) - Handler: 6 HTTP endpoints (2 public + 4 protected) - Static: device-verify.html verification page served at /device Flow: 1. Client POST /api/auth/device/authorize → device_code + user_code 2. User opens /device?code=XXXX in browser, approves 3. Client polls POST /api/auth/device/token → receives JWT tokens 4. Client uses Bearer token with existing WebDAV/CalDAV/CardDAV middleware Schema: auth.device_codes table + device_code_status enum added to schema.sql Closes #152
22 lines
554 B
Rust
22 lines
554 B
Rust
pub mod admin_handler;
|
|
pub mod auth_handler;
|
|
pub mod batch_handler;
|
|
pub mod device_auth_handler;
|
|
pub mod caldav_handler;
|
|
pub mod carddav_handler;
|
|
pub mod chunked_upload_handler;
|
|
pub mod dedup_handler;
|
|
pub mod favorites_handler;
|
|
pub mod file_handler;
|
|
pub mod folder_handler;
|
|
pub mod i18n_handler;
|
|
pub mod recent_handler;
|
|
pub mod search_handler;
|
|
pub mod share_handler;
|
|
pub mod trash_handler;
|
|
pub mod webdav_handler;
|
|
pub mod wopi_handler;
|
|
|
|
/// Tipo de resultado para controladores de API
|
|
pub type ApiResult<T> = Result<T, (axum::http::StatusCode, String)>;
|