You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/models/oauth_provider.go

56 lines
2.2 KiB
Go

//
// Copyright (C) 2024 veypi <i@veypi.com>
// 2025-03-04 16:08:06
// Distributed under terms of the MIT license.
//
package models
import (
"github.com/veypi/vigo"
)
// OAuthProvider 动态 OAuth 提供商配置
type OAuthProvider struct {
vigo.Model
Code string `gorm:"uniqueIndex;size:50;not null" json:"code"` // 唯一标识: google/github/feishu/...
Name string `gorm:"size:50" json:"name"` // 显示名称
Icon string `gorm:"size:100" json:"icon"` // 图标
Enabled bool `json:"enabled"` // 是否启用
SortOrder int `json:"sort_order" gorm:"default:0"` // 排序权重
// OAuth 配置
ClientID string `json:"client_id" gorm:"size:200"`
ClientSecret string `json:"client_secret" gorm:"size:200"` // 建议加密存储
AuthURL string `json:"auth_url" gorm:"size:500"`
TokenURL string `json:"token_url" gorm:"size:500"`
UserInfoURL string `json:"user_info_url" gorm:"size:500"`
Scopes []string `json:"scopes" gorm:"serializer:json"`
RedirectURI string `json:"redirect_uri" gorm:"size:500"` // 为空则使用默认 /auth/callback/{code}
// 用户信息字段映射JSON Path
UserIDPath string `json:"user_id_path" gorm:"size:100;default:'id'"`
UserNamePath string `json:"user_name_path" gorm:"size:100;default:'name'"`
UserEmailPath string `json:"user_email_path" gorm:"size:100;default:'email'"`
UserAvatarPath string `json:"user_avatar_path" gorm:"size:100"`
// 特殊平台配置
ExtraConfig map[string]string `json:"extra_config" gorm:"serializer:json"` // 如: {"appid_param": "appid"}
// 是否内置(内置的不可删除,只能禁用)
IsBuiltIn bool `json:"is_built_in" gorm:"default:false"`
}
// TableName 表名
func (OAuthProvider) TableName() string {
return "oauth_providers"
}
// OAuthProviderExtra 常用特殊配置键
const (
OAuthExtraAppIDParam = "appid_param" // 微信: appid 参数名不同
OAuthExtraUsePostToken = "use_post_token" // 是否 POST 获取 token
OAuthExtraTokenInBody = "token_in_body" // token 是否在 body 中返回
OAuthExtraStateParam = "state_param" // 自定义 state 参数名
)