mirror of
https://github.com/get-drexa/drive.git
synced 2026-02-02 20:11:18 +00:00
1155 lines
32 KiB
YAML
1155 lines
32 KiB
YAML
basePath: /api
|
|
definitions:
|
|
github_com_get-drexa_drexa_internal_user.User:
|
|
description: User account information
|
|
properties:
|
|
displayName:
|
|
description: User's display name
|
|
example: John Doe
|
|
type: string
|
|
email:
|
|
description: User's email address
|
|
example: john@example.com
|
|
type: string
|
|
id:
|
|
description: Unique user identifier
|
|
example: 550e8400-e29b-41d4-a716-446655440000
|
|
type: string
|
|
type: object
|
|
github_com_get-drexa_drexa_internal_virtualfs.PathSegment:
|
|
properties:
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
type: object
|
|
internal_account.Account:
|
|
description: Storage account with usage and quota details
|
|
properties:
|
|
createdAt:
|
|
description: When the account was created (ISO 8601)
|
|
example: "2024-12-13T15:04:05Z"
|
|
type: string
|
|
id:
|
|
description: Unique account identifier
|
|
example: 550e8400-e29b-41d4-a716-446655440000
|
|
type: string
|
|
storageQuotaBytes:
|
|
description: Maximum storage quota in bytes
|
|
example: 10737418240
|
|
type: integer
|
|
storageUsageBytes:
|
|
description: Current storage usage in bytes
|
|
example: 1073741824
|
|
type: integer
|
|
updatedAt:
|
|
description: When the account was last updated (ISO 8601)
|
|
example: "2024-12-13T16:30:00Z"
|
|
type: string
|
|
userId:
|
|
description: ID of the user who owns this account
|
|
example: 550e8400-e29b-41d4-a716-446655440001
|
|
type: string
|
|
type: object
|
|
internal_account.registerAccountRequest:
|
|
description: Request to create a new account and user
|
|
properties:
|
|
displayName:
|
|
description: Display name for the user
|
|
example: Jane Doe
|
|
type: string
|
|
email:
|
|
description: Email address for the new account
|
|
example: newuser@example.com
|
|
type: string
|
|
password:
|
|
description: Password for the new account (min 8 characters)
|
|
example: securepassword123
|
|
type: string
|
|
type: object
|
|
internal_account.registerAccountResponse:
|
|
description: Response after successful account registration
|
|
properties:
|
|
accessToken:
|
|
description: JWT access token for immediate authentication
|
|
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1NTBlODQwMC1lMjliLTQxZDQtYTcxNi00NDY2NTU0NDAwMDAifQ.signature
|
|
type: string
|
|
account:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_account.Account'
|
|
description: The created account
|
|
refreshToken:
|
|
description: Base64 URL encoded refresh token
|
|
example: dR4nD0mUu1DkZXlCeXRlc0FuZFJhbmRvbURhdGFIZXJlMTIzNDU2Nzg5MGFi
|
|
type: string
|
|
user:
|
|
allOf:
|
|
- $ref: '#/definitions/github_com_get-drexa_drexa_internal_user.User'
|
|
description: The created user
|
|
type: object
|
|
internal_auth.loginRequest:
|
|
description: Login request with email, password, and token delivery preference
|
|
properties:
|
|
email:
|
|
description: User's email address
|
|
example: user@example.com
|
|
type: string
|
|
password:
|
|
description: User's password
|
|
example: secretpassword123
|
|
type: string
|
|
tokenDelivery:
|
|
description: 'How to deliver tokens: "cookie" (set HTTP-only cookies) or "body"
|
|
(include in response)'
|
|
enum:
|
|
- cookie
|
|
- body
|
|
example: body
|
|
type: string
|
|
type: object
|
|
internal_auth.loginResponse:
|
|
description: Login response containing user info and optionally tokens
|
|
properties:
|
|
accessToken:
|
|
description: JWT access token (only included when tokenDelivery is "body")
|
|
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1NTBlODQwMC1lMjliLTQxZDQtYTcxNi00NDY2NTU0NDAwMDAifQ.signature
|
|
type: string
|
|
refreshToken:
|
|
description: Base64 URL encoded refresh token (only included when tokenDelivery
|
|
is "body")
|
|
example: dR4nD0mUu1DkZXlCeXRlc0FuZFJhbmRvbURhdGFIZXJlMTIzNDU2Nzg5MGFi
|
|
type: string
|
|
user:
|
|
allOf:
|
|
- $ref: '#/definitions/github_com_get-drexa_drexa_internal_user.User'
|
|
description: Authenticated user information
|
|
type: object
|
|
internal_auth.refreshAccessTokenRequest:
|
|
description: Request to exchange a refresh token for new tokens
|
|
properties:
|
|
refreshToken:
|
|
description: Base64 URL encoded refresh token
|
|
example: dR4nD0mUu1DkZXlCeXRlc0FuZFJhbmRvbURhdGFIZXJlMTIzNDU2Nzg5MGFi
|
|
type: string
|
|
type: object
|
|
internal_auth.tokenResponse:
|
|
description: Response containing new access token and refresh token
|
|
properties:
|
|
accessToken:
|
|
description: New JWT access token
|
|
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1NTBlODQwMC1lMjliLTQxZDQtYTcxNi00NDY2NTU0NDAwMDAifQ.signature
|
|
type: string
|
|
refreshToken:
|
|
description: New base64 URL encoded refresh token
|
|
example: xK9mPqRsTuVwXyZ0AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abcdefgh
|
|
type: string
|
|
type: object
|
|
internal_catalog.DirectoryInfo:
|
|
description: Directory information including path and timestamps
|
|
properties:
|
|
createdAt:
|
|
description: When the directory was created (ISO 8601)
|
|
example: "2024-12-13T15:04:05Z"
|
|
type: string
|
|
deletedAt:
|
|
description: When the directory was trashed, null if not trashed (ISO 8601)
|
|
example: "2024-12-14T10:00:00Z"
|
|
type: string
|
|
id:
|
|
description: Unique directory identifier
|
|
example: kRp2XYTq9A55
|
|
type: string
|
|
kind:
|
|
description: Item type, always "directory"
|
|
example: directory
|
|
type: string
|
|
name:
|
|
description: Directory name
|
|
example: My Documents
|
|
type: string
|
|
path:
|
|
description: Full path from root (included when ?include=path)
|
|
items:
|
|
$ref: '#/definitions/github_com_get-drexa_drexa_internal_virtualfs.PathSegment'
|
|
type: array
|
|
updatedAt:
|
|
description: When the directory was last updated (ISO 8601)
|
|
example: "2024-12-13T16:30:00Z"
|
|
type: string
|
|
type: object
|
|
internal_catalog.FileInfo:
|
|
description: File information including name, size, and timestamps
|
|
properties:
|
|
createdAt:
|
|
description: When the file was created (ISO 8601)
|
|
example: "2024-12-13T15:04:05Z"
|
|
type: string
|
|
deletedAt:
|
|
description: When the file was trashed, null if not trashed (ISO 8601)
|
|
example: "2024-12-14T10:00:00Z"
|
|
type: string
|
|
id:
|
|
description: Unique file identifier
|
|
example: mElnUNCm8F22
|
|
type: string
|
|
kind:
|
|
description: Item type, always "file"
|
|
example: file
|
|
type: string
|
|
mimeType:
|
|
description: MIME type of the file
|
|
example: application/pdf
|
|
type: string
|
|
name:
|
|
description: File name
|
|
example: document.pdf
|
|
type: string
|
|
size:
|
|
description: File size in bytes
|
|
example: 1048576
|
|
type: integer
|
|
updatedAt:
|
|
description: When the file was last updated (ISO 8601)
|
|
example: "2024-12-13T16:30:00Z"
|
|
type: string
|
|
type: object
|
|
internal_catalog.createDirectoryRequest:
|
|
description: Request to create a new directory
|
|
properties:
|
|
name:
|
|
description: Name for the new directory
|
|
example: New Folder
|
|
type: string
|
|
parentID:
|
|
description: ID of the parent directory
|
|
example: kRp2XYTq9A55
|
|
type: string
|
|
type: object
|
|
internal_catalog.moveItemError:
|
|
description: Error details for a failed item move
|
|
properties:
|
|
error:
|
|
description: Error message describing what went wrong
|
|
example: permission denied
|
|
type: string
|
|
id:
|
|
description: ID of the item that failed to move
|
|
example: mElnUNCm8F22
|
|
type: string
|
|
type: object
|
|
internal_catalog.moveItemsToDirectoryResponse:
|
|
description: Response from moving items to a directory with status for each item
|
|
properties:
|
|
conflicts:
|
|
description: Array of IDs of items that conflicted with existing items in
|
|
the target directory
|
|
example:
|
|
- xYz123AbC456
|
|
items:
|
|
type: string
|
|
type: array
|
|
errors:
|
|
description: Array of errors that occurred during the move operation
|
|
items:
|
|
$ref: '#/definitions/internal_catalog.moveItemError'
|
|
type: array
|
|
items:
|
|
description: Array of items included in the request (files and directories)
|
|
items:
|
|
$ref: '#/definitions/internal_catalog.moveResponseItem'
|
|
type: array
|
|
moved:
|
|
description: Array of IDs of successfully moved items
|
|
example:
|
|
- mElnUNCm8F22
|
|
- kRp2XYTq9A55
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
internal_catalog.moveResponseItem:
|
|
description: 'Item included in the move operation. Check "kind" field to determine
|
|
type: "file" (has size, mimeType) or "directory"'
|
|
properties:
|
|
createdAt:
|
|
description: When the item was created (ISO 8601)
|
|
example: "2024-12-13T15:04:05Z"
|
|
type: string
|
|
deletedAt:
|
|
description: When the item was trashed, null if not trashed (ISO 8601)
|
|
example: "2024-12-14T10:00:00Z"
|
|
type: string
|
|
id:
|
|
description: Unique item identifier
|
|
example: mElnUNCm8F22
|
|
type: string
|
|
kind:
|
|
description: 'Item type: "file" or "directory"'
|
|
example: file
|
|
type: string
|
|
mimeType:
|
|
description: MIME type (only for files)
|
|
example: application/pdf
|
|
type: string
|
|
name:
|
|
description: Item name
|
|
example: document.pdf
|
|
type: string
|
|
size:
|
|
description: File size in bytes (only for files)
|
|
example: 1048576
|
|
type: integer
|
|
updatedAt:
|
|
description: When the item was last updated (ISO 8601)
|
|
example: "2024-12-13T16:30:00Z"
|
|
type: string
|
|
type: object
|
|
internal_catalog.patchDirectoryRequest:
|
|
description: Request to update directory properties
|
|
properties:
|
|
name:
|
|
description: New name for the directory
|
|
example: My Documents
|
|
type: string
|
|
type: object
|
|
internal_catalog.patchFileRequest:
|
|
description: Request to update file properties
|
|
properties:
|
|
name:
|
|
description: New name for the file
|
|
example: renamed-document.pdf
|
|
type: string
|
|
type: object
|
|
internal_catalog.postDirectoryContentRequest:
|
|
description: Request to move items into this directory
|
|
properties:
|
|
items:
|
|
description: Array of file/directory IDs to move
|
|
example:
|
|
- mElnUNCm8F22
|
|
- kRp2XYTq9A55
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
internal_upload.Status:
|
|
description: Upload status enumeration
|
|
enum:
|
|
- pending
|
|
- completed
|
|
- failed
|
|
type: string
|
|
x-enum-varnames:
|
|
- StatusPending
|
|
- StatusCompleted
|
|
- StatusFailed
|
|
internal_upload.Upload:
|
|
description: File upload session with status and upload URL
|
|
properties:
|
|
id:
|
|
description: Unique upload session identifier
|
|
example: xNq5RVBt3K88
|
|
type: string
|
|
status:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_upload.Status'
|
|
description: Current upload status
|
|
enum:
|
|
- pending
|
|
- completed
|
|
- failed
|
|
example: pending
|
|
uploadUrl:
|
|
description: URL to upload file content to
|
|
example: https://api.example.com/api/accounts/550e8400-e29b-41d4-a716-446655440000/uploads/xNq5RVBt3K88/content
|
|
type: string
|
|
type: object
|
|
internal_upload.createUploadRequest:
|
|
description: Request to initiate a file upload
|
|
properties:
|
|
name:
|
|
description: Name of the file being uploaded
|
|
example: document.pdf
|
|
type: string
|
|
parentId:
|
|
description: ID of the parent directory to upload into
|
|
example: kRp2XYTq9A55
|
|
type: string
|
|
type: object
|
|
internal_upload.updateUploadRequest:
|
|
description: Request to update upload status (e.g., mark as completed)
|
|
properties:
|
|
status:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_upload.Status'
|
|
description: New status for the upload
|
|
enum:
|
|
- completed
|
|
example: completed
|
|
type: object
|
|
internal_user.User:
|
|
description: User account information
|
|
properties:
|
|
displayName:
|
|
description: User's display name
|
|
example: John Doe
|
|
type: string
|
|
email:
|
|
description: User's email address
|
|
example: john@example.com
|
|
type: string
|
|
id:
|
|
description: Unique user identifier
|
|
example: 550e8400-e29b-41d4-a716-446655440000
|
|
type: string
|
|
type: object
|
|
host: localhost:8080
|
|
info:
|
|
contact:
|
|
name: Drexa Support
|
|
url: https://github.com/get-drexa/drexa
|
|
description: Drexa is a file storage and management API. It provides endpoints for
|
|
authentication, user management, file uploads, and virtual filesystem operations.
|
|
license:
|
|
name: MIT
|
|
url: https://opensource.org/licenses/MIT
|
|
title: Drexa API
|
|
version: "1.0"
|
|
paths:
|
|
/accounts:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Create a new user account with email and password. Returns the
|
|
account, user, and authentication tokens.
|
|
parameters:
|
|
- description: Registration details
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_account.registerAccountRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Account created successfully
|
|
schema:
|
|
$ref: '#/definitions/internal_account.registerAccountResponse'
|
|
"400":
|
|
description: Invalid request body
|
|
schema:
|
|
type: string
|
|
"409":
|
|
description: Email already registered
|
|
schema:
|
|
type: string
|
|
summary: Register new account
|
|
tags:
|
|
- accounts
|
|
/accounts/{accountID}:
|
|
get:
|
|
description: Retrieve account details including storage usage and quota
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Account details
|
|
schema:
|
|
$ref: '#/definitions/internal_account.Account'
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: Account not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get account
|
|
tags:
|
|
- accounts
|
|
/accounts/{accountID}/directories:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Create a new directory within a parent directory
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: Directory details
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.createDirectoryRequest'
|
|
- description: Include additional fields
|
|
enum:
|
|
- path
|
|
in: query
|
|
name: include
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Created directory
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.DirectoryInfo'
|
|
"400":
|
|
description: Parent not found or not a directory
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"409":
|
|
description: Directory already exists
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Create directory
|
|
tags:
|
|
- directories
|
|
/accounts/{accountID}/directories/{directoryID}:
|
|
delete:
|
|
description: Delete a directory permanently or move it to trash. Deleting a
|
|
directory also affects all its contents.
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: Directory ID
|
|
in: path
|
|
name: directoryID
|
|
required: true
|
|
type: string
|
|
- default: false
|
|
description: Move to trash instead of permanent delete
|
|
in: query
|
|
name: trash
|
|
type: boolean
|
|
responses:
|
|
"204":
|
|
description: Directory deleted
|
|
schema:
|
|
type: string
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: Directory not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Delete directory
|
|
tags:
|
|
- directories
|
|
get:
|
|
description: Retrieve metadata for a specific directory
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: Directory ID
|
|
in: path
|
|
name: directoryID
|
|
required: true
|
|
type: string
|
|
- description: Include additional fields
|
|
enum:
|
|
- path
|
|
in: query
|
|
name: include
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Directory metadata
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.DirectoryInfo'
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: Directory not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get directory info
|
|
tags:
|
|
- directories
|
|
patch:
|
|
consumes:
|
|
- application/json
|
|
description: Update directory properties such as name (rename)
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: Directory ID
|
|
in: path
|
|
name: directoryID
|
|
required: true
|
|
type: string
|
|
- description: Directory update
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.patchDirectoryRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Updated directory metadata
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.DirectoryInfo'
|
|
"400":
|
|
description: Invalid request
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: Directory not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Update directory
|
|
tags:
|
|
- directories
|
|
/accounts/{accountID}/directories/{directoryID}/content:
|
|
get:
|
|
description: Get all files and subdirectories within a directory
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: Directory ID
|
|
in: path
|
|
name: directoryID
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Array of FileInfo and DirectoryInfo objects
|
|
schema:
|
|
items: {}
|
|
type: array
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: Directory not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: List directory contents
|
|
tags:
|
|
- directories
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Move one or more files or directories into this directory. Returns
|
|
detailed status for each item including which were successfully moved, which
|
|
had conflicts, and which encountered errors.
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: Target directory ID
|
|
in: path
|
|
name: directoryID
|
|
required: true
|
|
type: string
|
|
- description: Items to move
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.postDirectoryContentRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Move operation results with moved, conflict, and error states
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.moveItemsToDirectoryResponse'
|
|
"400":
|
|
description: Invalid request or items not in same directory
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: One or more items not found
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Move items to directory
|
|
tags:
|
|
- directories
|
|
/accounts/{accountID}/files/{fileID}:
|
|
delete:
|
|
description: Delete a file permanently or move it to trash
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: File ID
|
|
in: path
|
|
name: fileID
|
|
required: true
|
|
type: string
|
|
- default: false
|
|
description: Move to trash instead of permanent delete
|
|
in: query
|
|
name: trash
|
|
type: boolean
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Trashed file info (when trash=true)
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.FileInfo'
|
|
"204":
|
|
description: Permanently deleted (when trash=false)
|
|
schema:
|
|
type: string
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: File not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Delete file
|
|
tags:
|
|
- files
|
|
get:
|
|
description: Retrieve metadata for a specific file
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: File ID
|
|
in: path
|
|
name: fileID
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: File metadata
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.FileInfo'
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: File not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get file info
|
|
tags:
|
|
- files
|
|
patch:
|
|
consumes:
|
|
- application/json
|
|
description: Update file properties such as name (rename)
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: File ID
|
|
in: path
|
|
name: fileID
|
|
required: true
|
|
type: string
|
|
- description: File update
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.patchFileRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Updated file metadata
|
|
schema:
|
|
$ref: '#/definitions/internal_catalog.FileInfo'
|
|
"400":
|
|
description: Invalid request
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: File not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Update file
|
|
tags:
|
|
- files
|
|
/accounts/{accountID}/files/{fileID}/content:
|
|
get:
|
|
description: Download the file content. May redirect to a signed URL for external
|
|
storage.
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: File ID
|
|
in: path
|
|
name: fileID
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/octet-stream
|
|
responses:
|
|
"200":
|
|
description: File content stream
|
|
schema:
|
|
type: file
|
|
"307":
|
|
description: Redirect to download URL
|
|
schema:
|
|
type: string
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: File not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Download file
|
|
tags:
|
|
- files
|
|
/accounts/{accountID}/uploads:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Start a new file upload session. Returns an upload URL to PUT file
|
|
content to.
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: Upload details
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_upload.createUploadRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Upload session created
|
|
schema:
|
|
$ref: '#/definitions/internal_upload.Upload'
|
|
"400":
|
|
description: Parent is not a directory
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: Parent directory not found
|
|
schema:
|
|
type: string
|
|
"409":
|
|
description: File with this name already exists
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Create upload session
|
|
tags:
|
|
- uploads
|
|
/accounts/{accountID}/uploads/{uploadID}:
|
|
patch:
|
|
consumes:
|
|
- application/json
|
|
description: Mark an upload as completed after content has been uploaded. This
|
|
finalizes the file in the filesystem.
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: Upload session ID
|
|
in: path
|
|
name: uploadID
|
|
required: true
|
|
type: string
|
|
- description: Status update
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_upload.updateUploadRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Upload completed
|
|
schema:
|
|
$ref: '#/definitions/internal_upload.Upload'
|
|
"400":
|
|
description: Content not uploaded yet or invalid status
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: Upload session not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Complete upload
|
|
tags:
|
|
- uploads
|
|
/accounts/{accountID}/uploads/{uploadID}/content:
|
|
put:
|
|
consumes:
|
|
- application/octet-stream
|
|
description: Stream file content to complete an upload. Send raw binary data
|
|
in the request body.
|
|
parameters:
|
|
- description: Account ID
|
|
format: uuid
|
|
in: path
|
|
name: accountID
|
|
required: true
|
|
type: string
|
|
- description: Upload session ID
|
|
in: path
|
|
name: uploadID
|
|
required: true
|
|
type: string
|
|
- description: File content (binary)
|
|
in: body
|
|
name: file
|
|
required: true
|
|
schema:
|
|
items:
|
|
type: integer
|
|
type: array
|
|
responses:
|
|
"204":
|
|
description: Content received successfully
|
|
schema:
|
|
type: string
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
"404":
|
|
description: Upload session not found
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Upload file content
|
|
tags:
|
|
- uploads
|
|
/auth/login:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Authenticate with email and password to receive JWT tokens. Tokens
|
|
can be delivered via HTTP-only cookies or in the response body based on the
|
|
tokenDelivery field.
|
|
parameters:
|
|
- description: Login credentials
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_auth.loginRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Successful authentication
|
|
schema:
|
|
$ref: '#/definitions/internal_auth.loginResponse'
|
|
"400":
|
|
description: Invalid request body or token delivery method
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Invalid email or password
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
summary: User login
|
|
tags:
|
|
- auth
|
|
/auth/tokens:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Exchange a valid refresh token for a new pair of access and refresh
|
|
tokens. The old refresh token is invalidated (rotation).
|
|
parameters:
|
|
- description: Refresh token
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_auth.refreshAccessTokenRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: New tokens
|
|
schema:
|
|
$ref: '#/definitions/internal_auth.tokenResponse'
|
|
"400":
|
|
description: Invalid request body
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Invalid, expired, or reused refresh token
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
summary: Refresh access token
|
|
tags:
|
|
- auth
|
|
/users/me:
|
|
get:
|
|
description: Retrieve the authenticated user's profile information
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: User profile
|
|
schema:
|
|
$ref: '#/definitions/internal_user.User'
|
|
"401":
|
|
description: Not authenticated
|
|
schema:
|
|
type: string
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get current user
|
|
tags:
|
|
- users
|
|
securityDefinitions:
|
|
BearerAuth:
|
|
description: 'JWT access token. Format: "Bearer {token}"'
|
|
in: header
|
|
name: Authorization
|
|
type: apiKey
|
|
swagger: "2.0"
|