basePath: / definitions: handlers.CreateInviteRequest: properties: expiresAt: type: string maxUses: type: integer note: type: string type: object handlers.CreateUserRequest: properties: account: type: string avatarUrl: type: string bio: type: string email: type: string level: type: integer password: type: string phone: type: string secondaryEmails: items: type: string type: array sproutCoins: type: integer username: type: string websiteUrl: type: string type: object handlers.ForgotPasswordRequest: properties: account: type: string email: type: string type: object handlers.LoginRequest: properties: account: type: string clientId: type: string clientName: type: string password: type: string turnstileToken: type: string type: object handlers.OAuthBindURLRequest: properties: returnTo: type: string type: object handlers.PutAdminOAuthRequest: properties: allowOAuthSignUpWhenInviteRequired: type: boolean allowedReturnPrefixes: items: type: string type: array giteaBaseUrl: type: string giteaClientId: type: string giteaClientSecret: type: string giteaEnabled: type: boolean giteaLogoUrl: type: string githubClientId: type: string githubClientSecret: type: string githubEnabled: type: boolean githubLogoUrl: type: string googleClientId: type: string googleClientSecret: type: string googleEnabled: type: boolean googleLogoUrl: type: string linuxdoClientId: type: string linuxdoClientSecret: type: string linuxdoConnectBaseUrl: type: string linuxdoEnabled: type: boolean linuxdoLogoUrl: type: string microsoftClientId: type: string microsoftClientSecret: type: string microsoftEnabled: type: boolean microsoftLogoUrl: type: string microsoftTenant: type: string type: object handlers.PutAdminTurnstileRequest: properties: enabled: type: boolean secretKey: type: string siteKey: type: string type: object handlers.RegisterRequest: properties: account: type: string email: type: string inviteCode: type: string password: type: string turnstileToken: type: string username: type: string type: object handlers.ResetPasswordRequest: properties: account: type: string code: type: string newPassword: type: string type: object handlers.SecondaryEmailRequest: properties: email: type: string type: object handlers.UpdateCheckInConfigRequest: properties: rewardCoins: type: integer type: object handlers.UpdateProfileRequest: properties: avatarUrl: type: string bio: type: string password: type: string phone: type: string username: type: string websiteUrl: type: string type: object handlers.UpdateRegistrationPolicyRequest: properties: forbiddenAccounts: type: string inviteRegisterRewardCoins: description: nil 表示不修改此项 type: integer requireInviteCode: type: boolean type: object handlers.UpdateUserRequest: properties: avatarUrl: type: string banReason: type: string banned: type: boolean bio: type: string email: type: string level: type: integer password: type: string phone: type: string secondaryEmails: items: type: string type: array sproutCoins: type: integer username: type: string websiteUrl: type: string type: object handlers.VerifyEmailRequest: properties: account: type: string code: type: string type: object handlers.VerifyRequest: properties: token: type: string type: object handlers.VerifySecondaryEmailRequest: properties: code: type: string email: type: string type: object host: localhost:8080 info: contact: {} description: 统一认证、用户资料、每日签到、公开用户主页与管理端等 JSON HTTP 接口。 title: 萌芽账户认证中心 API version: 0.1.0 paths: /: get: description: 与 GET /api 相同,返回名称、版本与路由前缀说明。 produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object summary: API 简介 JSON tags: - meta /api: get: description: 与 GET / 相同。 produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object summary: API 简介 JSON tags: - meta /api/admin/check-in/config: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - AdminToken: [] summary: 签到奖励配置(管理端也可用) tags: - admin put: consumes: - application/json parameters: - description: rewardCoins in: body name: body required: true schema: $ref: '#/definitions/handlers.UpdateCheckInConfigRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - AdminToken: [] summary: 更新签到奖励 tags: - admin /api/admin/oauth: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - AdminToken: [] summary: OAuth 配置(脱敏) tags: - admin put: consumes: - application/json parameters: - description: 配置 in: body name: body required: true schema: $ref: '#/definitions/handlers.PutAdminOAuthRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - AdminToken: [] summary: 更新 OAuth 配置 tags: - admin /api/admin/registration: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - AdminToken: [] summary: 注册策略与邀请码列表 tags: - admin put: consumes: - application/json parameters: - description: 策略 in: body name: body required: true schema: $ref: '#/definitions/handlers.UpdateRegistrationPolicyRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - AdminToken: [] summary: 更新注册策略 tags: - admin /api/admin/registration/invites: post: consumes: - application/json parameters: - description: 邀请配置 in: body name: body required: true schema: $ref: '#/definitions/handlers.CreateInviteRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - AdminToken: [] summary: 创建邀请码 tags: - admin /api/admin/registration/invites/{code}: delete: parameters: - description: 邀请码 in: path name: code required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Not Found schema: additionalProperties: true type: object security: - AdminToken: [] summary: 删除邀请码 tags: - admin /api/admin/turnstile: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object security: - AdminToken: [] summary: Turnstile 配置(脱敏) tags: - admin put: consumes: - application/json parameters: - description: siteKey、secretKey in: body name: body required: true schema: $ref: '#/definitions/handlers.PutAdminTurnstileRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - AdminToken: [] summary: 更新 Turnstile 配置 tags: - admin /api/admin/users: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - AdminToken: [] summary: 用户列表 tags: - admin post: consumes: - application/json parameters: - description: 用户 in: body name: body required: true schema: $ref: '#/definitions/handlers.CreateUserRequest' produces: - application/json responses: "201": description: Created schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - AdminToken: [] summary: 创建用户 tags: - admin /api/admin/users/{account}: delete: parameters: - description: 账号 in: path name: account required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - AdminToken: [] summary: 删除用户 tags: - admin put: consumes: - application/json parameters: - description: 账号 in: path name: account required: true type: string - description: 可部分更新 in: body name: body required: true schema: $ref: '#/definitions/handlers.UpdateUserRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Not Found schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - AdminToken: [] summary: 更新用户 tags: - admin /api/auth/check-in: post: consumes: - application/json produces: - application/json responses: "200": description: checkedIn、user、checkIn 等 schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - BearerAuth: [] summary: 每日签到 tags: - auth /api/auth/forgot-password: post: consumes: - application/json parameters: - description: 账号与邮箱 in: body name: body required: true schema: $ref: '#/definitions/handlers.ForgotPasswordRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object summary: 忘记密码(发重置邮件) tags: - auth /api/auth/login: post: consumes: - application/json description: 可选 Turnstile:开启时 body 需带 turnstileToken。 parameters: - description: 登录请求 in: body name: body required: true schema: $ref: '#/definitions/handlers.LoginRequest' produces: - application/json responses: "200": description: token、expiresAt、user schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object summary: 账号密码登录 tags: - auth /api/auth/me: get: consumes: - application/json description: '需要 Authorization: Bearer。可选头:X-Visit-Ip、X-Visit-Location、X-Auth-Client、X-Auth-Client-Name。' parameters: - description: 访客 IP in: header name: X-Visit-Ip type: string - description: 访客地区展示文案 in: header name: X-Visit-Location type: string - description: 接入应用 ID in: header name: X-Auth-Client type: string - description: 接入应用名称 in: header name: X-Auth-Client-Name type: string produces: - application/json responses: "200": description: user、checkIn schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - BearerAuth: [] summary: 当前用户(含签到摘要) tags: - auth /api/auth/oauth/{provider}: delete: consumes: - application/json parameters: - description: github|gitea|google|microsoft|linuxdo in: path name: provider required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - BearerAuth: [] summary: 解绑 OAuth 提供商 tags: - oauth /api/auth/oauth/{provider}/bind: post: consumes: - application/json parameters: - description: github|gitea|google|microsoft|linuxdo in: path name: provider required: true type: string - description: returnTo in: body name: body required: true schema: $ref: '#/definitions/handlers.OAuthBindURLRequest' produces: - application/json responses: "200": description: url schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object "503": description: Service Unavailable schema: additionalProperties: true type: object security: - BearerAuth: [] summary: 已登录用户绑定 OAuth(返回授权 URL) tags: - oauth /api/auth/oauth/{provider}/callback: get: description: 成功时通常 302 回 return_to 并带 token;失败时 JSON 或重定向错误页。 parameters: - description: 提供商 in: path name: provider required: true type: string - description: 授权码 in: query name: code type: string - description: state in: query name: state type: string - description: IdP 错误码 in: query name: error type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "302": description: 重定向至客户端 "400": description: Bad Request schema: additionalProperties: true type: object "404": description: Not Found schema: additionalProperties: true type: object summary: OAuth 回调(IdP 重定向) tags: - oauth /api/auth/oauth/{provider}/start: get: parameters: - description: github|gitea|google|microsoft|linuxdo in: path name: provider required: true type: string - description: 登录完成回跳 URL(须符合后台允许前缀) in: query name: return_to required: true type: string - description: Turnstile 开启时必填 in: query name: turnstile_token type: string produces: - application/json responses: "302": description: 重定向至 IdP "400": description: Bad Request schema: additionalProperties: true type: object "404": description: Not Found schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object "503": description: Service Unavailable schema: additionalProperties: true type: object summary: OAuth 登录起点(重定向 IdP) tags: - oauth /api/auth/profile: put: consumes: - application/json parameters: - description: 资料字段 in: body name: body required: true schema: $ref: '#/definitions/handlers.UpdateProfileRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - BearerAuth: [] summary: 更新个人资料(可选改密码) tags: - auth /api/auth/register: post: consumes: - application/json parameters: - description: 注册请求 in: body name: body required: true schema: $ref: '#/definitions/handlers.RegisterRequest' produces: - application/json responses: "200": description: sent、expiresAt schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object summary: 自助注册(发验证邮件) tags: - auth /api/auth/reset-password: post: consumes: - application/json parameters: - description: 账号、验证码、新密码 in: body name: body required: true schema: $ref: '#/definitions/handlers.ResetPasswordRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object summary: 重置密码 tags: - auth /api/auth/secondary-email/request: post: consumes: - application/json parameters: - description: 邮箱 in: body name: body required: true schema: $ref: '#/definitions/handlers.SecondaryEmailRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - BearerAuth: [] summary: 请求验证辅助邮箱(发邮件) tags: - auth /api/auth/secondary-email/verify: post: consumes: - application/json parameters: - description: 邮箱与验证码 in: body name: body required: true schema: $ref: '#/definitions/handlers.VerifySecondaryEmailRequest' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - BearerAuth: [] summary: 验证并绑定辅助邮箱 tags: - auth /api/auth/verify: post: consumes: - application/json description: 校验 token 是否有效;可在请求头带 X-Auth-Client / X-Auth-Client-Name 记录接入应用。 parameters: - description: token in: body name: body required: true schema: $ref: '#/definitions/handlers.VerifyRequest' produces: - application/json responses: "200": description: valid、user schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object summary: 校验 JWT tags: - auth /api/auth/verify-email: post: consumes: - application/json parameters: - description: 账号与验证码 in: body name: body required: true schema: $ref: '#/definitions/handlers.VerifyEmailRequest' produces: - application/json responses: "201": description: created、user schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object summary: 邮箱验证并完成注册 tags: - auth /api/health: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object summary: 健康检查 tags: - meta /api/public/registration-policy: get: produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object summary: 公开注册策略与 OAuth/Turnstile 开关 tags: - public /api/public/users: get: produces: - application/json responses: "200": description: total、users schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object summary: 公开用户目录 tags: - public /api/public/users/{account}: get: description: 可选 Authorization:登录用户可看到点赞状态等扩展字段。 parameters: - description: 账号 in: path name: account required: true type: string - description: Bearer(可选) in: header name: Authorization type: string produces: - application/json responses: "200": description: user、profileLikeCount 等 schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "404": description: Not Found schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object summary: 公开用户主页 tags: - public /api/public/users/{account}/like: post: consumes: - application/json parameters: - description: 被点赞用户账号 in: path name: account required: true type: string produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: additionalProperties: true type: object "401": description: Unauthorized schema: additionalProperties: true type: object "404": description: Not Found schema: additionalProperties: true type: object "500": description: Internal Server Error schema: additionalProperties: true type: object security: - BearerAuth: [] summary: 主页点赞 tags: - public schemes: - http - https securityDefinitions: AdminToken: description: 管理端令牌;也可使用 Query `token` 或与部分客户端相同的 `Authorization` 头(见实现)。 in: header name: X-Admin-Token type: apiKey BearerAuth: description: JWT:Authorization 头填写「Bearer 」+ token(示例:Bearer eyJ...)。 in: header name: Authorization type: apiKey swagger: "2.0"