// Code generated by swaggo/swag. DO NOT EDIT. package v1 import "github.com/swaggo/swag" const docTemplate = `{ "schemes": {{ marshal .Schemes }}, "swagger": "2.0", "info": { "description": "{{escape .Description}}", "title": "{{.Title}}", "contact": { "name": "API Support", "url": "https://github.com/orgs/usememos/discussions" }, "license": { "name": "MIT License", "url": "https://github.com/usememos/memos/blob/main/LICENSE" }, "version": "{{.Version}}" }, "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { "/api/v1/auth/signin": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Sign-in to memos.", "parameters": [ { "description": "Sign-in object", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.SignIn" } } ], "responses": { "200": { "description": "User information", "schema": { "$ref": "#/definitions/store.User" } }, "400": { "description": "Malformatted signin request" }, "401": { "description": "Password login is deactivated | Incorrect login credentials, please try again" }, "403": { "description": "User has been archived with username %s" }, "500": { "description": "Failed to find system setting | Failed to unmarshal system setting | Incorrect login credentials, please try again | Failed to generate tokens | Failed to create activity" } } } }, "/api/v1/auth/signin/sso": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Sign-in to memos using SSO.", "parameters": [ { "description": "SSO sign-in object", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.SSOSignIn" } } ], "responses": { "200": { "description": "User information", "schema": { "$ref": "#/definitions/store.User" } }, "400": { "description": "Malformatted signin request" }, "401": { "description": "Access denied, identifier does not match the filter." }, "403": { "description": "User has been archived with username {username}" }, "404": { "description": "Identity provider not found" }, "500": { "description": "Failed to find identity provider | Failed to create identity provider instance | Failed to exchange token | Failed to get user info | Failed to compile identifier filter | Incorrect login credentials, please try again | Failed to generate random password | Failed to generate password hash | Failed to create user | Failed to generate tokens | Failed to create activity" } } } }, "/api/v1/auth/signout": { "post": { "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Sign-out from memos.", "responses": { "200": { "description": "Sign-out success", "schema": { "type": "boolean" } } } } }, "/api/v1/auth/signup": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Sign-up to memos.", "parameters": [ { "description": "Sign-up object", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.SignUp" } } ], "responses": { "200": { "description": "User information", "schema": { "$ref": "#/definitions/store.User" } }, "400": { "description": "Malformatted signup request | Failed to find users" }, "401": { "description": "signup is disabled" }, "403": { "description": "Forbidden" }, "404": { "description": "Not found" }, "500": { "description": "Failed to find system setting | Failed to unmarshal system setting allow signup | Failed to generate password hash | Failed to create user | Failed to generate tokens | Failed to create activity" } } } }, "/api/v1/idp": { "get": { "description": "*clientSecret is only available for host user", "produces": [ "application/json" ], "tags": [ "idp" ], "summary": "Get a list of identity providers", "responses": { "200": { "description": "List of available identity providers", "schema": { "type": "array", "items": { "$ref": "#/definitions/v1.IdentityProvider" } } }, "500": { "description": "Failed to find identity provider list | Failed to find user" } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "idp" ], "summary": "Create Identity Provider", "parameters": [ { "description": "Identity provider information", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.CreateIdentityProviderRequest" } } ], "responses": { "200": { "description": "Identity provider information", "schema": { "$ref": "#/definitions/store.IdentityProvider" } }, "400": { "description": "Malformatted post identity provider request" }, "401": { "description": "Missing user in session | Unauthorized" }, "500": { "description": "Failed to find user | Failed to create identity provider" } } } }, "/api/v1/idp/{idpId}": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "idp" ], "summary": "Get an identity provider by ID", "parameters": [ { "type": "integer", "description": "Identity provider ID", "name": "idpId", "in": "path", "required": true } ], "responses": { "200": { "description": "Requested identity provider", "schema": { "$ref": "#/definitions/store.IdentityProvider" } }, "400": { "description": "ID is not a number: %s" }, "401": { "description": "Missing user in session | Unauthorized" }, "404": { "description": "Identity provider not found" }, "500": { "description": "Failed to find identity provider list | Failed to find user" } } }, "delete": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "idp" ], "summary": "Delete an identity provider by ID", "parameters": [ { "type": "integer", "description": "Identity Provider ID", "name": "idpId", "in": "path", "required": true } ], "responses": { "200": { "description": "Identity Provider deleted", "schema": { "type": "boolean" } }, "400": { "description": "ID is not a number: %s | Malformatted patch identity provider request" }, "401": { "description": "Missing user in session | Unauthorized" }, "500": { "description": "Failed to find user | Failed to patch identity provider" } } }, "patch": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "idp" ], "summary": "Update an identity provider by ID", "parameters": [ { "type": "integer", "description": "Identity Provider ID", "name": "idpId", "in": "path", "required": true }, { "description": "Patched identity provider information", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.UpdateIdentityProviderRequest" } } ], "responses": { "200": { "description": "Patched identity provider", "schema": { "$ref": "#/definitions/store.IdentityProvider" } }, "400": { "description": "ID is not a number: %s | Malformatted patch identity provider request" }, "401": { "description": "Missing user in session | Unauthorized" }, "500": { "description": "Failed to find user | Failed to patch identity provider" } } } }, "/api/v1/memo": { "get": { "produces": [ "application/json" ], "tags": [ "memo" ], "summary": "Get a list of memos matching optional filters", "parameters": [ { "type": "integer", "description": "Creator ID", "name": "creatorId", "in": "query" }, { "type": "string", "description": "Creator username", "name": "creatorUsername", "in": "query" }, { "enum": [ "NORMAL", "ARCHIVED" ], "type": "string", "description": "Row status", "name": "rowStatus", "in": "query" }, { "type": "boolean", "description": "Pinned", "name": "pinned", "in": "query" }, { "type": "string", "description": "Search for tag. Do not append #", "name": "tag", "in": "query" }, { "type": "string", "description": "Search for content", "name": "content", "in": "query" }, { "type": "integer", "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "Memo list", "schema": { "type": "array", "items": { "$ref": "#/definitions/store.Memo" } } }, "400": { "description": "Missing user to find memo" }, "500": { "description": "Failed to get memo display with updated ts setting value | Failed to fetch memo list | Failed to compose memo response" } } }, "post": { "description": "Visibility can be PUBLIC, PROTECTED or PRIVATE\n*You should omit fields to use their default values", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "memo" ], "summary": "Create a memo", "parameters": [ { "description": "Request object.", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.CreateMemoRequest" } } ], "responses": { "200": { "description": "Stored memo", "schema": { "$ref": "#/definitions/store.Memo" } }, "400": { "description": "Malformatted post memo request | Content size overflow, up to 1MB" }, "401": { "description": "Missing user in session" }, "404": { "description": "User not found | Memo not found: %d" }, "500": { "description": "Failed to find user setting | Failed to unmarshal user setting value | Failed to find system setting | Failed to unmarshal system setting | Failed to find user | Failed to create memo | Failed to create activity | Failed to upsert memo resource | Failed to upsert memo relation | Failed to compose memo | Failed to compose memo response" } } } }, "/api/v1/memo/all": { "get": { "description": "This should also list protected memos if the user is logged in\nAuthentication is optional", "produces": [ "application/json" ], "tags": [ "memo" ], "summary": "Get a list of public memos matching optional filters", "parameters": [ { "type": "integer", "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "Memo list", "schema": { "type": "array", "items": { "$ref": "#/definitions/store.Memo" } } }, "500": { "description": "Failed to get memo display with updated ts setting value | Failed to fetch all memo list | Failed to compose memo response" } } } }, "/api/v1/memo/stats": { "get": { "description": "Used to generate the heatmap", "produces": [ "application/json" ], "tags": [ "memo" ], "summary": "Get memo stats by creator ID or username", "parameters": [ { "type": "integer", "description": "Creator ID", "name": "creatorId", "in": "query" }, { "type": "string", "description": "Creator username", "name": "creatorUsername", "in": "query" } ], "responses": { "200": { "description": "Memo createdTs list", "schema": { "type": "array", "items": { "type": "integer" } } }, "400": { "description": "Missing user id to find memo" }, "500": { "description": "Failed to get memo display with updated ts setting value | Failed to find memo list | Failed to compose memo response" } } } }, "/api/v1/memo/{memoId}": { "get": { "produces": [ "application/json" ], "tags": [ "memo" ], "summary": "Get memo by ID", "parameters": [ { "type": "integer", "description": "Memo ID", "name": "memoId", "in": "path", "required": true } ], "responses": { "200": { "description": "Memo list", "schema": { "type": "array", "items": { "$ref": "#/definitions/store.Memo" } } }, "400": { "description": "ID is not a number: %s" }, "401": { "description": "Missing user in session" }, "403": { "description": "this memo is private only | this memo is protected, missing user in session" }, "404": { "description": "Memo not found: %d" }, "500": { "description": "Failed to find memo by ID: %v | Failed to compose memo response" } } }, "delete": { "produces": [ "application/json" ], "tags": [ "memo" ], "summary": "Delete memo by ID", "parameters": [ { "type": "integer", "description": "Memo ID to delete", "name": "memoId", "in": "path", "required": true } ], "responses": { "200": { "description": "Memo deleted", "schema": { "type": "boolean" } }, "400": { "description": "ID is not a number: %s" }, "401": { "description": "Missing user in session | Unauthorized" }, "404": { "description": "Memo not found: %d" }, "500": { "description": "Failed to find memo | Failed to delete memo ID: %v" } } }, "patch": { "description": "Visibility can be PUBLIC, PROTECTED or PRIVATE\n*You should omit fields to use their default values", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "memo" ], "summary": "Update a memo", "parameters": [ { "type": "integer", "description": "ID of memo to update", "name": "memoId", "in": "path", "required": true }, { "description": "Patched object.", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.PatchMemoRequest" } } ], "responses": { "200": { "description": "Stored memo", "schema": { "$ref": "#/definitions/store.Memo" } }, "400": { "description": "ID is not a number: %s | Malformatted patch memo request | Content size overflow, up to 1MB" }, "401": { "description": "Missing user in session | Unauthorized" }, "404": { "description": "Memo not found: %d" }, "500": { "description": "Failed to find memo | Failed to patch memo | Failed to upsert memo resource | Failed to delete memo resource | Failed to compose memo response" } } } }, "/api/v1/memo/{memoId}/organizer": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "memo-organizer" ], "summary": "Organize memo (pin/unpin)", "parameters": [ { "type": "integer", "description": "ID of memo to organize", "name": "memoId", "in": "path", "required": true }, { "description": "Memo organizer object", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.UpsertMemoOrganizerRequest" } } ], "responses": { "200": { "description": "Memo information", "schema": { "$ref": "#/definitions/store.Memo" } }, "400": { "description": "ID is not a number: %s | Malformatted post memo organizer request" }, "401": { "description": "Missing user in session | Unauthorized" }, "404": { "description": "Memo not found: %v" }, "500": { "description": "Failed to find memo | Failed to upsert memo organizer | Failed to find memo by ID: %v | Failed to compose memo response" } } } }, "/api/v1/memo/{memoId}/relation": { "get": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "memo-relation" ], "summary": "Get a list of Memo Relations", "parameters": [ { "type": "integer", "description": "ID of memo to find relations", "name": "memoId", "in": "path", "required": true } ], "responses": { "200": { "description": "Memo relation information list", "schema": { "type": "array", "items": { "$ref": "#/definitions/store.MemoRelation" } } }, "400": { "description": "ID is not a number: %s" }, "500": { "description": "Failed to list memo relations" } } }, "post": { "description": "Create a relation between two memos", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "memo-relation" ], "summary": "Create Memo Relation", "parameters": [ { "type": "integer", "description": "ID of memo to relate", "name": "memoId", "in": "path", "required": true }, { "description": "Memo relation object", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.UpsertMemoRelationRequest" } } ], "responses": { "200": { "description": "Memo relation information", "schema": { "$ref": "#/definitions/store.MemoRelation" } }, "400": { "description": "ID is not a number: %s | Malformatted post memo relation request" }, "500": { "description": "Failed to upsert memo relation" } } } }, "/api/v1/memo/{memoId}/relation/{relatedMemoId}/type/{relationType}": { "delete": { "description": "Removes a relation between two memos", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "memo-relation" ], "summary": "Delete a Memo Relation", "parameters": [ { "type": "integer", "description": "ID of memo to find relations", "name": "memoId", "in": "path", "required": true }, { "type": "integer", "description": "ID of memo to remove relation to", "name": "relatedMemoId", "in": "path", "required": true }, { "enum": [ "REFERENCE", "ADDITIONAL" ], "type": "string", "description": "Type of relation to remove", "name": "relationType", "in": "path", "required": true } ], "responses": { "200": { "description": "Memo relation deleted", "schema": { "type": "boolean" } }, "400": { "description": "Memo ID is not a number: %s | Related memo ID is not a number: %s" }, "500": { "description": "Failed to delete memo relation" } } } }, "/api/v1/ping": { "get": { "produces": [ "application/json" ], "tags": [ "system" ], "summary": "Ping the system", "responses": { "200": { "description": "If succeed to ping the system", "schema": { "type": "boolean" } } } } }, "/api/v1/resource": { "get": { "produces": [ "application/json" ], "tags": [ "resource" ], "summary": "Get a list of resources", "parameters": [ { "type": "integer", "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "Resource list", "schema": { "type": "array", "items": { "$ref": "#/definitions/store.Resource" } } }, "401": { "description": "Missing user in session" }, "500": { "description": "Failed to fetch resource list" } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "resource" ], "summary": "Create resource", "parameters": [ { "description": "Request object.", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.CreateResourceRequest" } } ], "responses": { "200": { "description": "Created resource", "schema": { "$ref": "#/definitions/store.Resource" } }, "400": { "description": "Malformatted post resource request | Invalid external link | Invalid external link scheme | Failed to request %s | Failed to read %s | Failed to read mime from %s" }, "401": { "description": "Missing user in session" }, "500": { "description": "Failed to save resource | Failed to create resource | Failed to create activity" } } } }, "/api/v1/resource/blob": { "post": { "consumes": [ "multipart/form-data" ], "produces": [ "application/json" ], "tags": [ "resource" ], "summary": "Upload resource", "parameters": [ { "type": "file", "description": "File to upload", "name": "file", "in": "formData", "required": true } ], "responses": { "200": { "description": "Created resource", "schema": { "$ref": "#/definitions/store.Resource" } }, "400": { "description": "Upload file not found | File size exceeds allowed limit of %d MiB | Failed to parse upload data" }, "401": { "description": "Missing user in session" }, "500": { "description": "Failed to get uploading file | Failed to open file | Failed to save resource | Failed to create resource | Failed to create activity" } } } }, "/api/v1/resource/{resourceId}": { "delete": { "produces": [ "application/json" ], "tags": [ "resource" ], "summary": "Delete a resource", "parameters": [ { "type": "integer", "description": "Resource ID", "name": "resourceId", "in": "path", "required": true } ], "responses": { "200": { "description": "Resource deleted", "schema": { "type": "boolean" } }, "400": { "description": "ID is not a number: %s" }, "401": { "description": "Missing user in session" }, "404": { "description": "Resource not found: %d" }, "500": { "description": "Failed to find resource | Failed to delete resource" } } }, "patch": { "produces": [ "application/json" ], "tags": [ "resource" ], "summary": "Update a resource", "parameters": [ { "type": "integer", "description": "Resource ID", "name": "resourceId", "in": "path", "required": true }, { "description": "Patch resource request", "name": "patch", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.UpdateResourceRequest" } } ], "responses": { "200": { "description": "Updated resource", "schema": { "$ref": "#/definitions/store.Resource" } }, "400": { "description": "ID is not a number: %s | Malformatted patch resource request" }, "401": { "description": "Missing user in session | Unauthorized" }, "404": { "description": "Resource not found: %d" }, "500": { "description": "Failed to find resource | Failed to patch resource" } } } }, "/api/v1/status": { "get": { "produces": [ "application/json" ], "tags": [ "system" ], "summary": "Get system GetSystemStatus", "responses": { "200": { "description": "System GetSystemStatus", "schema": { "$ref": "#/definitions/v1.SystemStatus" } }, "401": { "description": "Missing user in session | Unauthorized" }, "500": { "description": "Failed to find host user | Failed to find system setting list | Failed to unmarshal system setting customized profile value" } } } }, "/api/v1/storage": { "get": { "produces": [ "application/json" ], "tags": [ "storage" ], "summary": "Get a list of storages", "responses": { "200": { "description": "List of storages", "schema": { "type": "array", "items": { "$ref": "#/definitions/store.Storage" } } }, "401": { "description": "Missing user in session | Unauthorized" }, "500": { "description": "Failed to find user | Failed to convert storage" } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "storage" ], "summary": "Create storage", "parameters": [ { "description": "Request object.", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.CreateStorageRequest" } } ], "responses": { "200": { "description": "Created storage", "schema": { "$ref": "#/definitions/store.Storage" } }, "400": { "description": "Malformatted post storage request" }, "401": { "description": "Missing user in session" }, "500": { "description": "Failed to find user | Failed to create storage | Failed to convert storage" } } } }, "/api/v1/storage/{storageId}": { "delete": { "produces": [ "application/json" ], "tags": [ "storage" ], "summary": "Delete a storage", "parameters": [ { "type": "integer", "description": "Storage ID", "name": "storageId", "in": "path", "required": true } ], "responses": { "200": { "description": "Storage deleted", "schema": { "type": "boolean" } }, "400": { "description": "ID is not a number: %s | Storage service %d is using" }, "401": { "description": "Missing user in session | Unauthorized" }, "500": { "description": "Failed to find user | Failed to find storage | Failed to unmarshal storage service id | Failed to delete storage" } } }, "patch": { "produces": [ "application/json" ], "tags": [ "storage" ], "summary": "Update a storage", "parameters": [ { "type": "integer", "description": "Storage ID", "name": "storageId", "in": "path", "required": true }, { "description": "Patch request", "name": "patch", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.UpdateStorageRequest" } } ], "responses": { "200": { "description": "Updated resource", "schema": { "$ref": "#/definitions/store.Storage" } }, "400": { "description": "ID is not a number: %s | Malformatted patch storage request | Malformatted post storage request" }, "401": { "description": "Missing user in session | Unauthorized" }, "500": { "description": "Failed to find user | Failed to patch storage | Failed to convert storage" } } } }, "/api/v1/system/setting": { "get": { "produces": [ "application/json" ], "tags": [ "system-setting" ], "summary": "Get a list of system settings", "responses": { "200": { "description": "System setting list", "schema": { "type": "array", "items": { "$ref": "#/definitions/v1.SystemSetting" } } }, "401": { "description": "Missing user in session | Unauthorized" }, "500": { "description": "Failed to find user | Failed to find system setting list" } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "system-setting" ], "summary": "Create system setting", "parameters": [ { "description": "Request object.", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.UpsertSystemSettingRequest" } } ], "responses": { "200": { "description": "Created system setting", "schema": { "$ref": "#/definitions/store.SystemSetting" } }, "400": { "description": "Malformatted post system setting request | invalid system setting" }, "401": { "description": "Missing user in session | Unauthorized" }, "403": { "description": "Cannot disable passwords if no SSO identity provider is configured." }, "500": { "description": "Failed to find user | Failed to upsert system setting" } } } }, "/api/v1/system/vacuum": { "post": { "produces": [ "application/json" ], "tags": [ "system" ], "summary": "Vacuum the database", "responses": { "200": { "description": "Database vacuumed", "schema": { "type": "boolean" } }, "401": { "description": "Missing user in session | Unauthorized" }, "500": { "description": "Failed to find user | Failed to ExecVacuum database" } } } }, "/api/v1/tag": { "get": { "produces": [ "application/json" ], "tags": [ "tag" ], "summary": "Get a list of tags", "responses": { "200": { "description": "Tag list", "schema": { "type": "array", "items": { "type": "string" } } }, "400": { "description": "Missing user id to find tag" }, "500": { "description": "Failed to find tag list" } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "tag" ], "summary": "Create a tag", "parameters": [ { "description": "Request object.", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.UpsertTagRequest" } } ], "responses": { "200": { "description": "Created tag name", "schema": { "type": "string" } }, "400": { "description": "Malformatted post tag request | Tag name shouldn't be empty" }, "401": { "description": "Missing user in session" }, "500": { "description": "Failed to upsert tag | Failed to create activity" } } } }, "/api/v1/tag/delete": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "tag" ], "summary": "Delete a tag", "parameters": [ { "description": "Request object.", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.DeleteTagRequest" } } ], "responses": { "200": { "description": "Tag deleted", "schema": { "type": "boolean" } }, "400": { "description": "Malformatted post tag request | Tag name shouldn't be empty" }, "401": { "description": "Missing user in session" }, "500": { "description": "Failed to delete tag name: %v" } } } }, "/api/v1/tag/suggestion": { "get": { "produces": [ "application/json" ], "tags": [ "tag" ], "summary": "Get a list of tags suggested from other memos contents", "responses": { "200": { "description": "Tag list", "schema": { "type": "array", "items": { "type": "string" } } }, "400": { "description": "Missing user session" }, "500": { "description": "Failed to find memo list | Failed to find tag list" } } } }, "/api/v1/user": { "get": { "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Get a list of users", "responses": { "200": { "description": "User list", "schema": { "type": "array", "items": { "$ref": "#/definitions/store.User" } } }, "500": { "description": "Failed to fetch user list" } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Create a user", "parameters": [ { "description": "Request object", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.CreateUserRequest" } } ], "responses": { "200": { "description": "Created user", "schema": { "$ref": "#/definitions/store.User" } }, "400": { "description": "Malformatted post user request | Invalid user create format" }, "401": { "description": "Missing auth session | Unauthorized to create user" }, "403": { "description": "Could not create host user" }, "500": { "description": "Failed to find user by id | Failed to generate password hash | Failed to create user | Failed to create activity" } } } }, "/api/v1/user/me": { "get": { "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Get current user", "responses": { "200": { "description": "Current user", "schema": { "$ref": "#/definitions/store.User" } }, "401": { "description": "Missing auth session" }, "500": { "description": "Failed to find user | Failed to find userSettingList" } } } }, "/api/v1/user/name/{username}": { "get": { "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Get user by username", "parameters": [ { "type": "string", "description": "Username", "name": "username", "in": "path", "required": true } ], "responses": { "200": { "description": "Requested user", "schema": { "$ref": "#/definitions/store.User" } }, "404": { "description": "User not found" }, "500": { "description": "Failed to find user" } } } }, "/api/v1/user/setting": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user-setting" ], "summary": "Upsert user setting", "parameters": [ { "description": "Request object.", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.UpsertUserSettingRequest" } } ], "responses": { "200": { "description": "Created user setting", "schema": { "$ref": "#/definitions/github_com_usememos_memos_store.UserSetting" } }, "400": { "description": "Malformatted post user setting upsert request | Invalid user setting format" }, "401": { "description": "Missing auth session" }, "500": { "description": "Failed to upsert user setting" } } } }, "/api/v1/user/{id}": { "get": { "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Get user by id", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Requested user", "schema": { "$ref": "#/definitions/store.User" } }, "400": { "description": "Malformatted user id" }, "404": { "description": "User not found" }, "500": { "description": "Failed to find user" } } }, "delete": { "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Delete a user", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "User deleted", "schema": { "type": "boolean" } }, "400": { "description": "ID is not a number: %s | Current session user not found with ID: %d" }, "401": { "description": "Missing user in session" }, "403": { "description": "Unauthorized to delete user" }, "500": { "description": "Failed to find user | Failed to delete user" } } }, "patch": { "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Update a user", "parameters": [ { "type": "string", "description": "User ID", "name": "id", "in": "path", "required": true }, { "description": "Patch request", "name": "patch", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1.UpdateUserRequest" } } ], "responses": { "200": { "description": "Updated user", "schema": { "$ref": "#/definitions/store.User" } }, "400": { "description": "ID is not a number: %s | Current session user not found with ID: %d | Malformatted patch user request | Invalid update user request" }, "401": { "description": "Missing user in session" }, "403": { "description": "Unauthorized to update user" }, "500": { "description": "Failed to find user | Failed to generate password hash | Failed to patch user | Failed to find userSettingList" } } } }, "/explore/rss.xml": { "get": { "produces": [ "text/xml" ], "tags": [ "rss" ], "summary": "Get RSS", "responses": { "200": { "description": "RSS" }, "500": { "description": "Failed to get system customized profile | Failed to find memo list | Failed to generate rss" } } } }, "/o/get/GetImage": { "get": { "produces": [ "GetImage/*" ], "tags": [ "get" ], "summary": "Get GetImage from URL", "parameters": [ { "type": "string", "description": "Image url", "name": "url", "in": "query", "required": true } ], "responses": { "200": { "description": "Image" }, "400": { "description": "Missing GetImage url | Wrong url | Failed to get GetImage url: %s" }, "500": { "description": "Failed to write GetImage blob" } } } }, "/o/get/GetWebsiteMetadata": { "get": { "produces": [ "application/json" ], "tags": [ "get" ], "summary": "Get website metadata", "parameters": [ { "type": "string", "description": "Website URL", "name": "url", "in": "query", "required": true } ], "responses": { "200": { "description": "Extracted metadata", "schema": { "$ref": "#/definitions/getter.HTMLMeta" } }, "400": { "description": "Missing website url | Wrong url" }, "406": { "description": "Failed to get website meta with url: %s" } } } }, "/o/r/{resourceId}": { "get": { "description": "*Swagger UI may have problems displaying other file types than images", "produces": [ "application/octet-stream" ], "tags": [ "resource" ], "summary": "Stream a resource", "parameters": [ { "type": "integer", "description": "Resource ID", "name": "resourceId", "in": "path", "required": true }, { "type": "integer", "description": "Thumbnail", "name": "thumbnail", "in": "query" } ], "responses": { "200": { "description": "Requested resource" }, "400": { "description": "ID is not a number: %s | Failed to get resource visibility" }, "401": { "description": "Resource visibility not match" }, "404": { "description": "Resource not found: %d" }, "500": { "description": "Failed to find resource by ID: %v | Failed to open the local resource: %s | Failed to read the local resource: %s" } } } }, "/u/{id}/rss.xml": { "get": { "produces": [ "text/xml" ], "tags": [ "rss" ], "summary": "Get RSS for a user", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "RSS" }, "400": { "description": "User id is not a number" }, "500": { "description": "Failed to get system customized profile | Failed to find memo list | Failed to generate rss" } } } } }, "definitions": { "getter.HTMLMeta": { "type": "object", "properties": { "description": { "type": "string" }, "image": { "type": "string" }, "title": { "type": "string" } } }, "github_com_usememos_memos_store.UserSetting": { "type": "object", "properties": { "key": { "type": "string" }, "userID": { "type": "integer" }, "value": { "type": "string" } } }, "profile.Profile": { "type": "object", "properties": { "mode": { "description": "Mode can be \"prod\" or \"dev\" or \"demo\"", "type": "string" }, "version": { "description": "Version is the current version of server", "type": "string" } } }, "store.FieldMapping": { "type": "object", "properties": { "displayName": { "type": "string" }, "email": { "type": "string" }, "identifier": { "type": "string" } } }, "store.IdentityProvider": { "type": "object", "properties": { "config": { "$ref": "#/definitions/store.IdentityProviderConfig" }, "id": { "type": "integer" }, "identifierFilter": { "type": "string" }, "name": { "type": "string" }, "type": { "$ref": "#/definitions/store.IdentityProviderType" } } }, "store.IdentityProviderConfig": { "type": "object", "properties": { "oauth2Config": { "$ref": "#/definitions/store.IdentityProviderOAuth2Config" } } }, "store.IdentityProviderOAuth2Config": { "type": "object", "properties": { "authUrl": { "type": "string" }, "clientId": { "type": "string" }, "clientSecret": { "type": "string" }, "fieldMapping": { "$ref": "#/definitions/store.FieldMapping" }, "scopes": { "type": "array", "items": { "type": "string" } }, "tokenUrl": { "type": "string" }, "userInfoUrl": { "type": "string" } } }, "store.IdentityProviderType": { "type": "string", "enum": [ "OAUTH2" ], "x-enum-varnames": [ "IdentityProviderOAuth2Type" ] }, "store.Memo": { "type": "object", "properties": { "content": { "description": "Domain specific fields", "type": "string" }, "createdTs": { "type": "integer" }, "creatorID": { "type": "integer" }, "id": { "type": "integer" }, "pinned": { "description": "Composed fields", "type": "boolean" }, "relationList": { "type": "array", "items": { "$ref": "#/definitions/store.MemoRelation" } }, "resourceIDList": { "type": "array", "items": { "type": "integer" } }, "rowStatus": { "description": "Standard fields", "allOf": [ { "$ref": "#/definitions/store.RowStatus" } ] }, "updatedTs": { "type": "integer" }, "visibility": { "$ref": "#/definitions/store.Visibility" } } }, "store.MemoRelation": { "type": "object", "properties": { "memoID": { "type": "integer" }, "relatedMemoID": { "type": "integer" }, "type": { "$ref": "#/definitions/store.MemoRelationType" } } }, "store.MemoRelationType": { "type": "string", "enum": [ "REFERENCE", "ADDITIONAL" ], "x-enum-varnames": [ "MemoRelationReference", "MemoRelationAdditional" ] }, "store.Resource": { "type": "object", "properties": { "blob": { "type": "array", "items": { "type": "integer" } }, "createdTs": { "type": "integer" }, "creatorID": { "description": "Standard fields", "type": "integer" }, "externalLink": { "type": "string" }, "filename": { "description": "Domain specific fields", "type": "string" }, "id": { "type": "integer" }, "internalPath": { "type": "string" }, "memoID": { "type": "integer" }, "size": { "type": "integer" }, "type": { "type": "string" }, "updatedTs": { "type": "integer" } } }, "store.Role": { "type": "string", "enum": [ "HOST", "ADMIN", "USER" ], "x-enum-varnames": [ "RoleHost", "RoleAdmin", "RoleUser" ] }, "store.RowStatus": { "type": "string", "enum": [ "NORMAL", "ARCHIVED" ], "x-enum-varnames": [ "Normal", "Archived" ] }, "store.Storage": { "type": "object", "properties": { "config": { "type": "string" }, "id": { "type": "integer" }, "name": { "type": "string" }, "type": { "type": "string" } } }, "store.SystemSetting": { "type": "object", "properties": { "description": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" } } }, "store.User": { "type": "object", "properties": { "avatarURL": { "type": "string" }, "createdTs": { "type": "integer" }, "email": { "type": "string" }, "id": { "type": "integer" }, "nickname": { "type": "string" }, "passwordHash": { "type": "string" }, "role": { "$ref": "#/definitions/store.Role" }, "rowStatus": { "description": "Standard fields", "allOf": [ { "$ref": "#/definitions/store.RowStatus" } ] }, "updatedTs": { "type": "integer" }, "username": { "description": "Domain specific fields", "type": "string" } } }, "store.Visibility": { "type": "string", "enum": [ "PUBLIC", "PROTECTED", "PRIVATE" ], "x-enum-varnames": [ "Public", "Protected", "Private" ] }, "v1.CreateIdentityProviderRequest": { "type": "object", "properties": { "config": { "$ref": "#/definitions/v1.IdentityProviderConfig" }, "identifierFilter": { "type": "string" }, "name": { "type": "string" }, "type": { "$ref": "#/definitions/v1.IdentityProviderType" } } }, "v1.CreateMemoRequest": { "type": "object", "properties": { "content": { "type": "string" }, "createdTs": { "type": "integer" }, "relationList": { "type": "array", "items": { "$ref": "#/definitions/v1.UpsertMemoRelationRequest" } }, "resourceIdList": { "description": "Related fields", "type": "array", "items": { "type": "integer" } }, "visibility": { "description": "Domain specific fields", "allOf": [ { "$ref": "#/definitions/v1.Visibility" } ] } } }, "v1.CreateResourceRequest": { "type": "object", "properties": { "externalLink": { "type": "string" }, "filename": { "type": "string" }, "internalPath": { "type": "string" }, "type": { "type": "string" } } }, "v1.CreateStorageRequest": { "type": "object", "properties": { "config": { "$ref": "#/definitions/v1.StorageConfig" }, "name": { "type": "string" }, "type": { "$ref": "#/definitions/v1.StorageType" } } }, "v1.CreateUserRequest": { "type": "object", "properties": { "email": { "type": "string" }, "nickname": { "type": "string" }, "password": { "type": "string" }, "role": { "$ref": "#/definitions/v1.Role" }, "username": { "type": "string" } } }, "v1.CustomizedProfile": { "type": "object", "properties": { "appearance": { "description": "Appearance is the server default appearance.", "type": "string" }, "description": { "description": "Description is the server description.", "type": "string" }, "externalUrl": { "description": "ExternalURL is the external url of server. e.g. https://usermemos.com", "type": "string" }, "locale": { "description": "Locale is the server default locale.", "type": "string" }, "logoUrl": { "description": "LogoURL is the url of logo image.", "type": "string" }, "name": { "description": "Name is the server name, default is ` + "`" + `memos` + "`" + `", "type": "string" } } }, "v1.DeleteTagRequest": { "type": "object", "properties": { "name": { "type": "string" } } }, "v1.FieldMapping": { "type": "object", "properties": { "displayName": { "type": "string" }, "email": { "type": "string" }, "identifier": { "type": "string" } } }, "v1.IdentityProvider": { "type": "object", "properties": { "config": { "$ref": "#/definitions/v1.IdentityProviderConfig" }, "id": { "type": "integer" }, "identifierFilter": { "type": "string" }, "name": { "type": "string" }, "type": { "$ref": "#/definitions/v1.IdentityProviderType" } } }, "v1.IdentityProviderConfig": { "type": "object", "properties": { "oauth2Config": { "$ref": "#/definitions/v1.IdentityProviderOAuth2Config" } } }, "v1.IdentityProviderOAuth2Config": { "type": "object", "properties": { "authUrl": { "type": "string" }, "clientId": { "type": "string" }, "clientSecret": { "type": "string" }, "fieldMapping": { "$ref": "#/definitions/v1.FieldMapping" }, "scopes": { "type": "array", "items": { "type": "string" } }, "tokenUrl": { "type": "string" }, "userInfoUrl": { "type": "string" } } }, "v1.IdentityProviderType": { "type": "string", "enum": [ "OAUTH2" ], "x-enum-varnames": [ "IdentityProviderOAuth2Type" ] }, "v1.MemoRelationType": { "type": "string", "enum": [ "REFERENCE", "ADDITIONAL" ], "x-enum-varnames": [ "MemoRelationReference", "MemoRelationAdditional" ] }, "v1.PatchMemoRequest": { "type": "object", "properties": { "content": { "description": "Domain specific fields", "type": "string" }, "createdTs": { "description": "Standard fields", "type": "integer" }, "relationList": { "type": "array", "items": { "$ref": "#/definitions/v1.UpsertMemoRelationRequest" } }, "resourceIdList": { "description": "Related fields", "type": "array", "items": { "type": "integer" } }, "rowStatus": { "$ref": "#/definitions/v1.RowStatus" }, "updatedTs": { "type": "integer" }, "visibility": { "$ref": "#/definitions/v1.Visibility" } } }, "v1.Role": { "type": "string", "enum": [ "HOST", "ADMIN", "USER" ], "x-enum-varnames": [ "RoleHost", "RoleAdmin", "RoleUser" ] }, "v1.RowStatus": { "type": "string", "enum": [ "NORMAL", "ARCHIVED" ], "x-enum-varnames": [ "Normal", "Archived" ] }, "v1.SSOSignIn": { "type": "object", "properties": { "code": { "type": "string" }, "identityProviderId": { "type": "integer" }, "redirectUri": { "type": "string" } } }, "v1.SignIn": { "type": "object", "properties": { "password": { "type": "string" }, "username": { "type": "string" } } }, "v1.SignUp": { "type": "object", "properties": { "password": { "type": "string" }, "username": { "type": "string" } } }, "v1.StorageConfig": { "type": "object", "properties": { "s3Config": { "$ref": "#/definitions/v1.StorageS3Config" } } }, "v1.StorageS3Config": { "type": "object", "properties": { "accessKey": { "type": "string" }, "bucket": { "type": "string" }, "endPoint": { "type": "string" }, "path": { "type": "string" }, "region": { "type": "string" }, "secretKey": { "type": "string" }, "urlPrefix": { "type": "string" }, "urlSuffix": { "type": "string" } } }, "v1.StorageType": { "type": "string", "enum": [ "S3" ], "x-enum-varnames": [ "StorageS3" ] }, "v1.SystemSetting": { "type": "object", "properties": { "description": { "type": "string" }, "name": { "$ref": "#/definitions/v1.SystemSettingName" }, "value": { "description": "Value is a JSON string with basic value.", "type": "string" } } }, "v1.SystemSettingName": { "type": "string", "enum": [ "server-id", "secret-session", "allow-signup", "disable-password-login", "disable-public-memos", "max-upload-size-mib", "additional-style", "additional-script", "customized-profile", "storage-service-id", "local-storage-path", "telegram-bot-token", "memo-display-with-updated-ts", "auto-backup-interval" ], "x-enum-varnames": [ "SystemSettingServerIDName", "SystemSettingSecretSessionName", "SystemSettingAllowSignUpName", "SystemSettingDisablePasswordLoginName", "SystemSettingDisablePublicMemosName", "SystemSettingMaxUploadSizeMiBName", "SystemSettingAdditionalStyleName", "SystemSettingAdditionalScriptName", "SystemSettingCustomizedProfileName", "SystemSettingStorageServiceIDName", "SystemSettingLocalStoragePathName", "SystemSettingTelegramBotTokenName", "SystemSettingMemoDisplayWithUpdatedTsName", "SystemSettingAutoBackupIntervalName" ] }, "v1.SystemStatus": { "type": "object", "properties": { "additionalScript": { "description": "Additional script.", "type": "string" }, "additionalStyle": { "description": "Additional style.", "type": "string" }, "allowSignUp": { "description": "System settings\nAllow sign up.", "type": "boolean" }, "autoBackupInterval": { "description": "Auto Backup Interval.", "type": "integer" }, "customizedProfile": { "description": "Customized server profile, including server name and external url.", "allOf": [ { "$ref": "#/definitions/v1.CustomizedProfile" } ] }, "dbSize": { "type": "integer" }, "disablePasswordLogin": { "description": "Disable password login.", "type": "boolean" }, "disablePublicMemos": { "description": "Disable public memos.", "type": "boolean" }, "host": { "$ref": "#/definitions/v1.User" }, "localStoragePath": { "description": "Local storage path.", "type": "string" }, "maxUploadSizeMiB": { "description": "Max upload size.", "type": "integer" }, "memoDisplayWithUpdatedTs": { "description": "Memo display with updated timestamp.", "type": "boolean" }, "profile": { "$ref": "#/definitions/profile.Profile" }, "storageServiceId": { "description": "Storage service ID.", "type": "integer" } } }, "v1.UpdateIdentityProviderRequest": { "type": "object", "properties": { "config": { "$ref": "#/definitions/v1.IdentityProviderConfig" }, "identifierFilter": { "type": "string" }, "name": { "type": "string" }, "type": { "$ref": "#/definitions/v1.IdentityProviderType" } } }, "v1.UpdateResourceRequest": { "type": "object", "properties": { "filename": { "type": "string" } } }, "v1.UpdateStorageRequest": { "type": "object", "properties": { "config": { "$ref": "#/definitions/v1.StorageConfig" }, "name": { "type": "string" }, "type": { "$ref": "#/definitions/v1.StorageType" } } }, "v1.UpdateUserRequest": { "type": "object", "properties": { "avatarUrl": { "type": "string" }, "email": { "type": "string" }, "nickname": { "type": "string" }, "password": { "type": "string" }, "rowStatus": { "$ref": "#/definitions/v1.RowStatus" }, "username": { "type": "string" } } }, "v1.UpsertMemoOrganizerRequest": { "type": "object", "properties": { "pinned": { "type": "boolean" } } }, "v1.UpsertMemoRelationRequest": { "type": "object", "properties": { "relatedMemoId": { "type": "integer" }, "type": { "$ref": "#/definitions/v1.MemoRelationType" } } }, "v1.UpsertSystemSettingRequest": { "type": "object", "properties": { "description": { "type": "string" }, "name": { "$ref": "#/definitions/v1.SystemSettingName" }, "value": { "type": "string" } } }, "v1.UpsertTagRequest": { "type": "object", "properties": { "name": { "type": "string" } } }, "v1.UpsertUserSettingRequest": { "type": "object", "properties": { "key": { "$ref": "#/definitions/v1.UserSettingKey" }, "value": { "type": "string" } } }, "v1.User": { "type": "object", "properties": { "avatarUrl": { "type": "string" }, "createdTs": { "type": "integer" }, "email": { "type": "string" }, "id": { "type": "integer" }, "nickname": { "type": "string" }, "role": { "$ref": "#/definitions/v1.Role" }, "rowStatus": { "description": "Standard fields", "allOf": [ { "$ref": "#/definitions/v1.RowStatus" } ] }, "updatedTs": { "type": "integer" }, "userSettingList": { "type": "array", "items": { "$ref": "#/definitions/v1.UserSetting" } }, "username": { "description": "Domain specific fields", "type": "string" } } }, "v1.UserSetting": { "type": "object", "properties": { "key": { "$ref": "#/definitions/v1.UserSettingKey" }, "userId": { "type": "integer" }, "value": { "type": "string" } } }, "v1.UserSettingKey": { "type": "string", "enum": [ "locale", "appearance", "memo-visibility", "telegram-user-id" ], "x-enum-varnames": [ "UserSettingLocaleKey", "UserSettingAppearanceKey", "UserSettingMemoVisibilityKey", "UserSettingTelegramUserIDKey" ] }, "v1.Visibility": { "type": "string", "enum": [ "PUBLIC", "PROTECTED", "PRIVATE" ], "x-enum-varnames": [ "Public", "Protected", "Private" ] } }, "externalDocs": { "description": "Find out more about Memos.", "url": "https://usememos.com/" } }` // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ Version: "1.0", Host: "", BasePath: "/", Schemes: []string{}, Title: "memos API", Description: "A privacy-first, lightweight note-taking service.", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, LeftDelim: "{{", RightDelim: "}}", } func init() { swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) }