diff --git a/docs/controllers/AuthController.yaml b/docs/controllers/AuthController.yaml new file mode 100644 index 000000000..04b9a05a7 --- /dev/null +++ b/docs/controllers/AuthController.yaml @@ -0,0 +1,73 @@ +paths: + /login: + post: + summary: Login to the server + description: Logs in a client to the server, returning information about the user and server. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + username: + $ref: '../objects/entities/User.yaml#/components/schemas/username' + password: + $ref: '../objects/entities/User.yaml#/components/schemas/password' + required: + - username + - password + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + properties: + user: + type: object + properties: + $ref: '../objects/entities/User.yaml#/components/schemas/user' + '401': + description: Unauthorized - Invalid username or password. + content: + application/json: + schema: + type: object + properties: + message: + type: string + /logout: + post: + summary: Logout from the server + description: Logs out a client from the server. If the socketId parameter is provided, the server removes the socket from the client list. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + socketId: + $ref: '../objects/entities/User.yaml#/components/schemas/socketId' + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: Successfully logged out. + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + properties: + message: + type: string diff --git a/docs/objects/Bookmarks.yaml b/docs/objects/Bookmarks.yaml new file mode 100644 index 000000000..0099b42cc --- /dev/null +++ b/docs/objects/Bookmarks.yaml @@ -0,0 +1,18 @@ +components: + schemas: + time: + type: integer + description: The time (in ms since POSIX epoch) when the bookmark was created. + example: 1616239000 + bookmark: + properties: + libraryItemId: + $ref: 'LibraryItem.yaml#/components/schemas/libraryItemId' + title: + type: string + description: The title of the bookmark. + example: Chapter 1 + time: + $ref: '#/components/schemas/time' + createdAt: + $ref: '../schemas.yaml#/components/schemas/createdAt' \ No newline at end of file diff --git a/docs/objects/Media.yaml b/docs/objects/Media.yaml new file mode 100644 index 000000000..0809ef97e --- /dev/null +++ b/docs/objects/Media.yaml @@ -0,0 +1,42 @@ +components: + schemas: + mediaProgressId: + type: string + description: The ID of the media progress. + example: e4bb1afb-4a4f-4dd6-8be0-e615d233185b + format: uuid + mediaProgress: + type: object + properties: + id: + $ref: '#/components/schemas/mediaProgressId' + libraryItemId: + $ref: 'LibraryItem.yaml#/components/schemas/libraryItemId' + episodeId: + $ref: 'mediaTypes/Podcast.yaml#/components/schemas/podcastId' + duration: + $ref: '../schemas.yaml#/components/schemas/durationSec' + progress: + type: number + description: The user's progress in the media item. + example: 0.5 + currentTime: + type: number + description: The user's current time in the media item. + example: 0.5 + isFinished: + type: boolean + description: Whether the user has finished the media item. + example: false + hideFromContinueListening: + type: boolean + description: Whether the media item should be hidden from the continue listening section. + example: false + lastUpdate: + $ref: '../schemas.yaml#/components/schemas/updatedAt' + startedAt: + $ref: '../schemas.yaml#/components/schemas/createdAt' + finishedAt: + type: integer + description: The time (in ms since POSIX epoch) when the media was finished. Will be null if the media has is not finished. + example: 1616239000 \ No newline at end of file diff --git a/docs/objects/Permissions.yaml b/docs/objects/Permissions.yaml new file mode 100644 index 000000000..cfda324fb --- /dev/null +++ b/docs/objects/Permissions.yaml @@ -0,0 +1,55 @@ +components: + schemas: + downloads: + type: boolean + description: Whether the user has permission to download media. + example: true + update: + type: boolean + description: Whether the user has permission to update media. + example: true + delete: + type: boolean + description: Whether the user has permission to delete media. + example: true + upload: + type: boolean + description: Whether the user has permission to upload media. + example: true + accessAllLibraries: + type: boolean + description: Whether the user has permission to access all libraries. + example: true + accessAllTags: + type: boolean + description: Whether the user has permission to access all tags. + example: true + accessExplicitContent: + type: boolean + description: Whether the user has permission to access explicit content. + example: true + permissions: + type: object + properties: + downloads: + $ref: '#/components/schemas/downloads' + update: + $ref: '#/components/schemas/update' + delete: + $ref: '#/components/schemas/delete' + upload: + $ref: '#/components/schemas/upload' + accessAllLibraries: + $ref: '#/components/schemas/accessAllLibraries' + accessAllTags: + $ref: '#/components/schemas/accessAllTags' + accessExplicitContent: + $ref: '#/components/schemas/accessExplicitContent' + required: + - downloads + - update + - delete + - upload + - accessAllLibraries + - accessAllTags + - accessExplicitContent \ No newline at end of file diff --git a/docs/objects/entities/User.yaml b/docs/objects/entities/User.yaml new file mode 100644 index 000000000..15d1b5479 --- /dev/null +++ b/docs/objects/entities/User.yaml @@ -0,0 +1,86 @@ +components: + schemas: + username: + type: string + description: The username to log in with. + example: testuser + password: + type: string + description: The password of the user. + example: password + userId: + type: string + description: The ID of the user. + example: e4bb1afb-4a4f-4dd6-8be0-e615d233185b + format: uuid + userType: + type: string + description: The type of the user. + example: root + token: + type: string + description: The token of the user. + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3R1c2VyIiwiaWF0IjoxNTE2MjM5MDIyfQ.4k1jJ9 + socketId: + type: string + description: The socket ID of the user. + example: AFcTcb7xBLsSPnIzAAAV + isActive: + type: boolean + description: Whether the user is active. + example: true + isLocked: + type: boolean + description: Whether the user is locked. + example: false + lastSeen: + type: integer + description: The time (in ms since POSIX epoch) when the user was last seen. + example: 1616239000 + user: + type: object + description: A user object which includes the user's ID, username, type, token, and media progress. + properties: + id: + $ref: '#/components/schemas/userId' + username: + $ref: '#/components/schemas/username' + type: + $ref: '#/components/schemas/userType' + token: + $ref: '#/components/schemas/token' + mediaProgress: + description: The user's progress of media. + type: array + items: + $ref: '../Media.yaml#/components/schemas/mediaProgress' + seriesHideFromContinueListening: + description: The IDs of series to hide from the user's "Continue Series" shelf. + type: array + items: + $ref: '../LibraryItem.yaml#/components/schemas/libraryItemId' + bookmarks: + description: The user's bookmarks. + type: array + items: + $ref: '../Bookmarks.yaml#/components/schemas/bookmark' + lastSeen: + $ref: '#/components/schemas/lastSeen' + isActive: + $ref: '#/components/schemas/isActive' + isLocked: + $ref: '#/components/schemas/isLocked' + createdAt: + $ref: '../../schemas.yaml#/components/schemas/createdAt' + permissions: + $ref: '../Permissions.yaml#/components/schemas/permissions' + librariesAccessible: + description: The IDs of libraries the user has access to. + type: array + items: + $ref: '../Library.yaml#/components/schemas/libraryId' + itemTags: + $ref: '../../schemas.yaml#/components/schemas/tags' + + + \ No newline at end of file