Files
team-api/api/tenant/v1/auth.go
T
79b9224968 注册功能优化 (#10)
* fix:修复权限问题

* fix:修复项目key类型错误问题

* fix:修复rbac权限问题

* fix:修复api密钥未及时失效的问题

* improve:优化渠道调度稳定性

* improve:优化路由

* fix:修复项目预算控制缺陷

* fix:加强限流等安全措施

* feat:添加限流相关字段的前端展示及接口字段

* improve:优化注册时密码要求,只需要字母和数字即可

* feat(setting):添加注册限流设置

* improve:优化前端数字类型转换

* chore:rbac权限放行

* feat:团队功能作为可选项,允许不设置团队的情况下进行注册

* feat:团队code只能设置一次

* improve:优化组织名称限制

* chore:合并数据库版本文件

---------

Co-authored-by: chengqian <wuchengqian@kkidc.com>
Co-authored-by: qian <wuchengqian5@163.com>
2026-06-23 23:07:36 +08:00

137 lines
6.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package v1
import "github.com/gogf/gf/v2/frame/g"
// TenantRegisterReq 租户注册请求
type TenantRegisterReq struct {
g.Meta `path:"/auth/register" method:"post" mime:"json" tags:"租户控制台-认证" summary:"租户注册" group:"public" middleware:"-"`
Email string `json:"email" v:"required|email#请输入邮箱|邮箱格式不正确" dc:"邮箱"`
Code string `json:"code" dc:"邮箱验证码(邮箱验证开启时必填)"`
Password string `json:"password" v:"required|length:8,64#请输入密码|密码长度为8-64位" dc:"密码"`
TenantName string `json:"tenant_name" dc:"组织名称(可选,留空自动生成;汉字最多8个,字母最多16个)"`
TenantCode string `json:"tenant_code" v:"length:3,30|regex:^[a-z0-9][a-z0-9-]*[a-z0-9]$#组织代码长度为3-30位|组织代码格式不正确" dc:"组织代码(可选,留空自动生成)"`
Username string `json:"username" v:"required|length:3,50#请输入用户名|用户名长度为3-50位" dc:"用户名"`
CaptchaKey string `json:"captcha_key" dc:"滑块验证码key(Turnstile关闭时必填)"`
CaptchaX int `json:"captcha_x" dc:"滑块X坐标(Turnstile关闭时必填)"`
TurnstileToken string `json:"turnstile_token" dc:"Cloudflare Turnstile验证token(Turnstile启用时必填)"`
}
type TenantRegisterRes struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresAt string `json:"expires_at"`
Tenant struct {
ID int64 `json:"id"`
Name string `json:"name"`
Code string `json:"code"`
TeamEnabled bool `json:"team_enabled"`
} `json:"tenant"`
User struct {
ID int64 `json:"id"`
Username string `json:"username"`
Role string `json:"role"`
} `json:"user"`
PendingAgreements []*TenantLoginPendingAgreement `json:"pending_agreements,omitempty"` // 待接受协议列表
}
// TenantLoginReq 租户登录请求
type TenantLoginReq struct {
g.Meta `path:"/auth/login" method:"post" mime:"json" tags:"租户控制台-认证" summary:"租户登录" group:"public" middleware:"-"`
Account string `json:"account" v:"required#请输入账号" dc:"账号(username@tenant_code 或邮箱)"`
Password string `json:"password" v:"required#请输入密码" dc:"密码"`
Type string `json:"type" v:"required|in:ram,admin#请选择登录方式|登录方式无效" dc:"登录方式:ram(RAM账号)/ admin(管理员邮箱)"`
CaptchaKey string `json:"captcha_key" dc:"验证码key(Turnstile关闭时必填)"`
CaptchaX int `json:"captcha_x" dc:"滑块X坐标(Turnstile关闭时必填)"`
TurnstileToken string `json:"turnstile_token" dc:"Cloudflare Turnstile验证token(Turnstile启用时必填)"`
}
type TenantLoginRes struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresAt string `json:"expires_at"`
TotpRequired bool `json:"totp_required"` // 是否需要 2FA 验证
ProvisionalToken string `json:"provisional_token,omitempty"` // 2FA 临时令牌
Tenant struct {
ID int64 `json:"id"`
Name string `json:"name"`
Code string `json:"code"`
TeamEnabled bool `json:"team_enabled"`
} `json:"tenant"`
User struct {
ID int64 `json:"id"`
Username string `json:"username"`
Role string `json:"role"`
} `json:"user"`
MaintenanceInfo *LoginMaintenanceInfo `json:"maintenance_info,omitempty"`
PendingAgreements []*TenantLoginPendingAgreement `json:"pending_agreements,omitempty"` // 待接受协议列表
}
// TenantLoginPendingAgreement 登录时返回的待接受协议信息
type TenantLoginPendingAgreement struct {
Id int64 `json:"id"`
Code string `json:"code"`
Title string `json:"title"`
Version string `json:"version"`
}
// LoginMaintenanceInfo 维护模式信息
type LoginMaintenanceInfo struct {
Enabled bool `json:"enabled"`
Message string `json:"message"`
Duration string `json:"duration"`
}
// TenantLogoutReq 租户登出请求
type TenantLogoutReq struct {
g.Meta `path:"/auth/logout" method:"post" mime:"json" tags:"租户控制台-认证" summary:"租户登出"`
}
type TenantLogoutRes struct{}
// TenantRefreshReq 刷新 Token 请求
type TenantRefreshReq struct {
g.Meta `path:"/auth/refresh" method:"post" mime:"json" tags:"租户控制台-认证" summary:"刷新 Token" group:"public" middleware:"-"`
RefreshToken string `json:"refresh_token" v:"required#请提供刷新令牌" dc:"刷新令牌"`
}
type TenantRefreshRes struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresAt string `json:"expires_at"`
}
// TenantChangePasswordReq 修改密码请求
type TenantChangePasswordReq struct {
g.Meta `path:"/auth/change-password" method:"put" mime:"json" tags:"租户控制台-认证" summary:"修改密码"`
OldPassword string `json:"old_password" v:"required#请输入原密码" dc:"原密码"`
NewPassword string `json:"new_password" v:"required|length:8,64#请输入新密码|密码长度为8-64位" dc:"新密码"`
}
type TenantChangePasswordRes struct{}
// TenantSessionListReq 活跃会话列表请求
type TenantSessionListReq struct {
g.Meta `path:"/auth/sessions" method:"get" mime:"json" tags:"租户控制台-认证" summary:"活跃会话列表"`
}
type TenantSessionListRes struct {
List []TenantSessionItem `json:"list"`
}
type TenantSessionItem struct {
ID int64 `json:"id"`
IpAddress string `json:"ip_address"`
DeviceInfo string `json:"device_info"`
ExpiresAt string `json:"expires_at"`
CreatedAt string `json:"created_at"`
IsCurrent bool `json:"is_current"`
}
// TenantRevokeSessionReq 踢出指定会话请求
type TenantRevokeSessionReq struct {
g.Meta `path:"/auth/sessions/{id}" method:"delete" mime:"json" tags:"租户控制台-认证" summary:"踢出指定会话"`
Id int64 `json:"id" in:"path" v:"required#请指定会话ID"`
}
type TenantRevokeSessionRes struct{}