feat():learning后台管理项目初始化

This commit is contained in:
yuj
2025-12-04 16:23:46 +08:00
parent 39886d50d2
commit 88e048f4d1
154 changed files with 28966 additions and 6 deletions

196
internal/models/sso.go Normal file
View File

@@ -0,0 +1,196 @@
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"`
}