197 lines
6.3 KiB
Go
197 lines
6.3 KiB
Go
package models
|
||
|
||
import (
|
||
"time"
|
||
)
|
||
|
||
// SSOConfig SSO配置结构体
|
||
type SSOConfig struct {
|
||
// SSO服务器地址
|
||
SSOServerURL string `json:"sso_server_url"`
|
||
// OAuth客户端ID
|
||
ClientID string `json:"client_id"`
|
||
// OAuth客户端密钥
|
||
ClientSecret string `json:"client_secret"`
|
||
// 重定向URI
|
||
RedirectURI string `json:"redirect_uri"`
|
||
// 请求作用域
|
||
Scope string `json:"scope"`
|
||
// 资源受众
|
||
ResourceAud string `json:"resource_aud"`
|
||
// HTTP超时时间
|
||
Timeout time.Duration `json:"timeout"`
|
||
}
|
||
|
||
// TokenResponse OAuth令牌响应
|
||
type TokenResponse struct {
|
||
AccessToken string `json:"access_token"`
|
||
IDToken string `json:"id_token"`
|
||
RefreshToken string `json:"refresh_token"`
|
||
TokenType string `json:"token_type"`
|
||
ExpiresIn int `json:"expires_in"`
|
||
}
|
||
|
||
// SSOUserInfo SSO API 返回的用户信息(用于解析 SSO 响应)
|
||
type SSOUserInfo struct {
|
||
Sub string `json:"sub"`
|
||
Name string `json:"name,omitempty"`
|
||
Email string `json:"email,omitempty"`
|
||
PreferredUsername string `json:"preferred_username,omitempty"`
|
||
Roles interface{} `json:"roles,omitempty"` // 使用 interface{} 来接受任何类型
|
||
}
|
||
|
||
// UserInfo 用户信息(用于应用程序内部)
|
||
type UserInfo struct {
|
||
Sub string `json:"sub"`
|
||
Name string `json:"name,omitempty"`
|
||
Email string `json:"email,omitempty"`
|
||
PreferredUsername string `json:"preferred_username,omitempty"`
|
||
Pages []Page `json:"pages,omitempty"`
|
||
Roles []Role `json:"roles,omitempty"`
|
||
}
|
||
|
||
// OpenIDConfiguration OpenID配置
|
||
type OpenIDConfiguration struct {
|
||
Issuer string `json:"issuer"`
|
||
AuthorizationEndpoint string `json:"authorization_endpoint"`
|
||
TokenEndpoint string `json:"token_endpoint"`
|
||
UserinfoEndpoint string `json:"userinfo_endpoint"`
|
||
JwksURI string `json:"jwks_uri"`
|
||
ResponseTypesSupported []string `json:"response_types_supported"`
|
||
SubjectTypesSupported []string `json:"subject_types_supported"`
|
||
IDTokenSigningAlgValuesSupported []string `json:"id_token_signing_alg_values_supported"`
|
||
CodeChallengeMethodsSupported []string `json:"code_challenge_methods_supported"`
|
||
TokenEndpointAuthMethodsSupported []string `json:"token_endpoint_auth_methods_supported"`
|
||
}
|
||
|
||
// JWKS JSON Web Key Set
|
||
type JWKS struct {
|
||
Keys []map[string]interface{} `json:"keys"`
|
||
}
|
||
|
||
// AuthCodeRequest 授权码请求参数
|
||
type AuthCodeRequest struct {
|
||
ClientID string `json:"client_id"`
|
||
RedirectURI string `json:"redirect_uri"`
|
||
ResponseType string `json:"response_type"`
|
||
Scope string `json:"scope"`
|
||
State string `json:"state"`
|
||
CodeChallenge string `json:"code_challenge"`
|
||
CodeChallengeMethod string `json:"code_challenge_method"`
|
||
Prompt string `json:"prompt"`
|
||
}
|
||
|
||
// TokenRequest 令牌请求参数
|
||
type TokenRequest struct {
|
||
GrantType string `json:"grant_type"`
|
||
Code string `json:"code"`
|
||
RedirectURI string `json:"redirect_uri"`
|
||
CodeVerifier string `json:"code_verifier"`
|
||
RefreshToken string `json:"refresh_token"`
|
||
}
|
||
|
||
// Session 用户会话信息
|
||
type Session struct {
|
||
UserID string `json:"user_id"`
|
||
UserInfo *UserInfo `json:"user_info"`
|
||
TokenInfo *TokenResponse `json:"token_info"`
|
||
ExpiresAt time.Time `json:"expires_at"`
|
||
}
|
||
|
||
// SSOLoginRequest SSO登录请求
|
||
type SSOLoginRequest struct {
|
||
// 可以为空,用于初始化SSO登录流程
|
||
}
|
||
|
||
// SSOLoginResponse SSO登录响应
|
||
type SSOLoginResponse struct {
|
||
Success bool `json:"success"`
|
||
Message string `json:"message"`
|
||
AuthURL string `json:"auth_url"`
|
||
State string `json:"state"`
|
||
CodeVerifier string `json:"code_verifier"`
|
||
}
|
||
|
||
// SSOCallbackRequest SSO回调请求
|
||
type SSOCallbackRequest struct {
|
||
Code string `json:"code" binding:"required"`
|
||
State string `json:"state" binding:"required"`
|
||
}
|
||
|
||
// SSOCallbackResponse SSO回调响应
|
||
type SSOCallbackResponse struct {
|
||
Success bool `json:"success"`
|
||
Message string `json:"message"`
|
||
AccessToken string `json:"access_token,omitempty"`
|
||
IDToken string `json:"id_token,omitempty"`
|
||
RefreshToken string `json:"refresh_token,omitempty"`
|
||
ExpiresIn int `json:"expires_in,omitempty"`
|
||
UserInfo *UserInfo `json:"user_info,omitempty"`
|
||
UUID string `json:"uuid,omitempty"`
|
||
}
|
||
|
||
// RefreshTokenRequest 刷新令牌请求
|
||
type RefreshTokenRequest struct {
|
||
RefreshToken string `json:"refresh_token" binding:"required"`
|
||
}
|
||
|
||
// RefreshTokenResponse 刷新令牌响应
|
||
type RefreshTokenResponse struct {
|
||
Success bool `json:"success"`
|
||
Message string `json:"message"`
|
||
AccessToken string `json:"access_token,omitempty"`
|
||
IDToken string `json:"id_token,omitempty"`
|
||
RefreshToken string `json:"refresh_token,omitempty"`
|
||
ExpiresIn int `json:"expires_in,omitempty"`
|
||
}
|
||
|
||
// LogoutRequest 登出请求
|
||
type LogoutRequest struct {
|
||
// AccessToken字段保留用于向后兼容,但实际不再使用
|
||
AccessToken string `json:"access_token,omitempty"`
|
||
}
|
||
|
||
// LogoutResponse 登出响应
|
||
type LogoutResponse struct {
|
||
Success bool `json:"success"`
|
||
Message string `json:"message"`
|
||
}
|
||
|
||
// UserInfoResponse 用户信息响应
|
||
type UserInfoResponse struct {
|
||
Success bool `json:"success"`
|
||
Message string `json:"message"`
|
||
UserInfo *UserInfo `json:"user_info,omitempty"`
|
||
}
|
||
|
||
// PKCEState PKCE状态信息
|
||
type PKCEState struct {
|
||
BaseModel
|
||
State string `gorm:"size:191;uniqueIndex;column:state" json:"state"`
|
||
CodeVerifier string `gorm:"column:code_verifier" json:"code_verifier"`
|
||
}
|
||
|
||
func (p *PKCEState) TableName() string {
|
||
return "admin_pkce_states"
|
||
}
|
||
|
||
// LoginInfo 用户登录信息
|
||
type LoginInfo struct {
|
||
BaseModel
|
||
UserID int `gorm:"column:user_id;not null" json:"user_id"`
|
||
UserName string `gorm:"column:user_name;size:100;not null" json:"user_name"`
|
||
Email string `gorm:"column:email;size:255;not null" json:"email"`
|
||
UUID string `gorm:"column:uuid;size:100;not null" json:"uuid"`
|
||
IsOnline bool `gorm:"column:is_online;default:false" json:"is_online"`
|
||
}
|
||
|
||
func (l *LoginInfo) TableName() string {
|
||
return "admin_login_infos"
|
||
}
|
||
|
||
// ErrorResponse 错误响应
|
||
type ErrorResponse struct {
|
||
Error string `json:"error"`
|
||
Message string `json:"message"`
|
||
}
|