const OPEN_API_SPEC: &str = "openapi: 3.0.0\ninfo:\n version: 0.1.0\n title: mCaptcha/guard\nservers:\n - url: /\npaths:\n /api/v1/signup:\n post:\n summary: Registration endpoint\n operationId: registerUser\n tags:\n - user\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/RegisterUser\'\n example:\n username: testuser\n password: mysuperlongandsecurepassword\n email: testuser@example.com\n responses:\n \'200\':\n description: Successful registration\n \'400\':\n description: \'Bad request: username contains profainity/blacklisted words or email not acceptable or password too long/short or duplicate username/password\'\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/signin:\n post:\n summary: Login endpoint\n operationId: loginUser\n tags:\n - user\n - authentication\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/LoginUser\'\n example:\n username: testuser\n password: mysuperlongandsecurepassword\n responses:\n \'200\':\n description: Successful authentication\n \'401\':\n description: authentication failed, wrong password\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'404\':\n description: username not found\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/signout:\n post:\n security:\n - cookieAuth: []\n summary: Signout endpoint\n operationId: signoutUser\n tags:\n - user\n - authentication\n responses:\n \'200\':\n description: OK\n /api/v1/account/delete:\n post:\n security:\n - cookieAuth: []\n summary: Delete account\n operationId: deleteAccount\n tags:\n - user\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/DeleteUser\'\n example:\n password: mysuperlongandsecurepassword\n responses:\n \'200\':\n description: OK\n \'401\':\n description: (cookie)authentication required or wrong password\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'404\':\n description: username not found\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/account/username/exists:\n post:\n summary: Check if username exists\n operationId: usernameExists\n tags:\n - user\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/UserDetailCheck\'\n example:\n val: testuser\n responses:\n \'200\':\n description: OK\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/UserDetailCheckRes\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/account/email/exists:\n post:\n summary: Check if email exists\n operationId: emailExists\n tags:\n - user\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/UserDetailCheck\'\n example:\n val: testuser@example.com\n responses:\n \'200\':\n description: OK\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/UserDetailCheckRes\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/meta/health:\n get:\n summary: Health check\n operationId: healthCheck\n tags:\n - meta\n - health\n responses:\n \'200\':\n description: OK\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Health\'\n /api/v1/meta/build:\n get:\n summary: Get server binary build details\n operationId: buildDetails\n tags:\n - meta\n - build\n responses:\n \'200\':\n description: OK\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/BuildDetails\'\n /api/v1/mcaptcha/domain/token/add:\n post:\n security:\n - cookieAuth: []\n summary: Add token for registered domain\n operationId: addToken\n tags:\n - mcaptcha\n - domain\n - token\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/MCaptchaID\'\n responses:\n \'200\':\n description: OK\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/MCaptchaDetails\'\n \'400\':\n description: \'Bad request: Submited URI is not a URI or duplicate token name\'\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'401\':\n description: authentication failed\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/mcaptcha/domain/token/update:\n post:\n security:\n - cookieAuth: []\n summary: Update token key\n operationId: updateTokenKey\n tags:\n - mcaptcha\n - domain\n - token\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/MCaptchaID\'\n responses:\n \'200\':\n description: OK\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/MCaptchaDetails\'\n \'400\':\n description: \'Bad request: Submited URI is not a URI or duplicate token name\'\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'401\':\n description: authentication failed\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/mcaptcha/domain/token/get:\n post:\n security:\n - cookieAuth: []\n summary: Get token key\n operationId: getTokenKey\n tags:\n - mcaptcha\n - domain\n - token\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/MCaptchaID\'\n responses:\n \'200\':\n description: OK\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/MCaptchaDetails\'\n \'400\':\n description: \'Bad request: Submited URI is not a URI\'\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'401\':\n description: authentication failed\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'404\':\n description: token name not found\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/mcaptcha/domain/token/delete:\n post:\n security:\n - cookieAuth: []\n summary: Delete token from mcaptcha\n operationId: deleteToken\n tags:\n - mcaptcha\n - domain\n - token\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/MCaptchaID\'\n responses:\n \'200\':\n description: OK\n \'401\':\n description: authentication failed\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/mcaptcha/domain/token/levels/add:\n post:\n security:\n - cookieAuth: []\n summary: Add levels to a token\n operationId: addTokenLevels\n tags:\n - mcaptcha\n - domain\n - token\n - levels\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/AddLevels\'\n responses:\n \'200\':\n description: OK\n \'400\':\n description: duplicate visitor count or difficulty_factor is zero or difficulty_factor decreases with increase in visitor count\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'401\':\n description: authentication failed\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/mcaptcha/domain/token/levels/update:\n post:\n security:\n - cookieAuth: []\n summary: Update levels of a token\n operationId: updateTokenLevels\n tags:\n - mcaptcha\n - domain\n - token\n - levels\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/AddLevels\'\n responses:\n \'200\':\n description: OK\n \'400\':\n description: duplicate visitor count or difficulty_factor is zero or difficulty_factor decreases with increase in visitor count\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'401\':\n description: authentication failed\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/mcaptcha/domain/token/levels/delete:\n post:\n security:\n - cookieAuth: []\n tags:\n - mcaptcha\n - domain\n - token\n - levels\n summary: Delete levels of a token\n operationId: deleteTokenLevels\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/AddLevels\'\n responses:\n \'200\':\n description: OK\n \'401\':\n description: (cookie)authentication required or wrong password\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/mcaptcha/domain/token/levels/get:\n post:\n security:\n - cookieAuth: []\n tags:\n - mcaptcha\n - domain\n - token\n - levels\n summary: Get levels of a token\n operationId: getTokenLevels\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/AddLevels\'\n responses:\n \'200\':\n description: OK\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Levels\'\n \'401\':\n description: (cookie)authentication required or wrong password\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/mcaptcha/domain/token/token/get:\n post:\n security:\n - cookieAuth: []\n tags:\n - mcaptcha\n - domain\n - token\n - levels\n - duration\n summary: Get duration of a token\n operationId: getTokenDuration\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/GetDuration\'\n responses:\n \'200\':\n description: OK\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Duration\'\n \'401\':\n description: (cookie)authentication required or wrong password\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n /api/v1/mcaptcha/domain/token/token/update:\n post:\n security:\n - cookieAuth: []\n tags:\n - mcaptcha\n - domain\n - token\n - levels\n - duration\n summary: update duration of a token\n operationId: updateTokenDuration\n requestBody:\n required: true\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/UpdateDuration\'\n responses:\n \'200\':\n description: OK\n \'400\':\n description: \'Bad request: Duration must be greater than 0\'\n \'401\':\n description: (cookie)authentication required or wrong password\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\n \'500\':\n description: Internal server error\n content:\n application/json:\n schema:\n $ref: \'#/components/schemas/Error\'\ncomponents:\n schemas:\n RegisterUser:\n type: object\n required:\n - username\n - password\n - email\n properties:\n username:\n type: string\n email:\n type: string\n password:\n type: string\n format: password\n LoginUser:\n type: object\n required:\n - username\n - password\n properties:\n username:\n type: string\n password:\n type: string\n format: password\n DeleteUser:\n type: object\n required:\n - password\n properties:\n password:\n type: string\n format: password\n Error:\n type: object\n required:\n - error\n properties:\n error:\n type: string\n User:\n type: object\n required:\n - id\n - name\n properties:\n id:\n type: integer\n format: int64\n name:\n type: string\n UserDetailCheck:\n type: object\n required:\n - val\n properties:\n val:\n type: string\n Health:\n type: object\n required:\n - db\n properties:\n db:\n type: boolean\n UserDetailCheckRes:\n type: object\n required:\n - exists\n properties:\n val:\n type: boolean\n BuildDetails:\n type: object\n required:\n - version\n - git_commit_hash\n properties:\n version:\n type: string\n git_commit_hash:\n type: string\n AddDomain:\n type: object\n required:\n - name\n properties:\n name:\n type: string\n DomainVerificationChallenge:\n type: object\n required:\n - verification_challenge\n properties:\n verification_challenge:\n type: string\n MCaptchaID:\n type: object\n required:\n - name\n - domain\n properties:\n name:\n type: string\n domain:\n type: string\n MCaptchaDetails:\n type: object\n required:\n - name\n - key\n properties:\n name:\n type: string\n key:\n type: string\n Level:\n type: object\n required:\n - visitor_threshold\n - difficulty_factor\n properties:\n visitor_threshold:\n type: number\n minimum: 1\n maximum: 2147483647\n difficulty_factor:\n type: number\n minimum: 1\n GetLevels:\n type: object\n required:\n - token\n properties:\n token:\n type: string\n Levels:\n type: array\n items:\n $ref: \'#/components/schemas/Level\'\n AddLevels:\n type: object\n required:\n - name\n - levels\n properties:\n name:\n type: string\n levels:\n type: array\n items:\n $ref: \'#/components/schemas/Level\'\n GetDuration:\n type: object\n required:\n - token\n properties:\n token:\n type: string\n Duration:\n type: object\n required:\n - duration\n properties:\n duration:\n type: number\n minimum: 1\n maximum: 2147483647\n UpdateDuration:\n type: object\n required:\n - duration\n - token_name\n properties:\n token_name:\n type: string\n duration:\n type: number\n minimum: 1\n maximum: 2147483647\n securitySchemes:\n cookieAuth:\n type: apiKey\n in: cookie\n name: Authorization\n";