2023-08-31 21:49:20 +08:00
|
|
|
|
package config
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
sysapp "mayfly-go/internal/sys/application"
|
2024-01-18 17:18:17 +08:00
|
|
|
|
"mayfly-go/pkg/utils/conv"
|
2023-08-31 21:49:20 +08:00
|
|
|
|
"mayfly-go/pkg/utils/stringx"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
|
ConfigKeyAccountLoginSecurity string = "AccountLoginSecurity" // 账号登录安全配置
|
|
|
|
|
|
ConfigKeyOauth2Login string = "Oauth2Login" // oauth2认证登录配置
|
|
|
|
|
|
ConfigKeyLdapLogin string = "LdapLogin" // ldap登录配置
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type AccountLoginSecurity struct {
|
|
|
|
|
|
UseCaptcha bool // 是否使用登录验证码
|
|
|
|
|
|
UseOtp bool // 是否双因素校验
|
|
|
|
|
|
OtpIssuer string // otp发行人
|
|
|
|
|
|
LoginFailCount int // 允许失败次数
|
|
|
|
|
|
LoginFailMin int // 登录失败指定次数后禁止的分钟数
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取账号登录安全相关配置
|
|
|
|
|
|
func GetAccountLoginSecurity() *AccountLoginSecurity {
|
|
|
|
|
|
c := sysapp.GetConfigApp().GetConfig(ConfigKeyAccountLoginSecurity)
|
|
|
|
|
|
jm := c.GetJsonMap()
|
|
|
|
|
|
als := new(AccountLoginSecurity)
|
|
|
|
|
|
als.UseCaptcha = c.ConvBool(jm["useCaptcha"], true)
|
|
|
|
|
|
als.UseOtp = c.ConvBool(jm["useOtp"], false)
|
2024-01-18 17:18:17 +08:00
|
|
|
|
als.LoginFailCount = conv.Str2Int(jm["loginFailCount"], 5)
|
|
|
|
|
|
als.LoginFailMin = conv.Str2Int(jm["loginFailMin"], 10)
|
2023-08-31 21:49:20 +08:00
|
|
|
|
otpIssuer := jm["otpIssuer"]
|
|
|
|
|
|
if otpIssuer == "" {
|
|
|
|
|
|
otpIssuer = "mayfly-go"
|
|
|
|
|
|
}
|
|
|
|
|
|
als.OtpIssuer = otpIssuer
|
|
|
|
|
|
return als
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type Oauth2Login struct {
|
|
|
|
|
|
Enable bool // 是否启用
|
|
|
|
|
|
Name string
|
|
|
|
|
|
ClientId string `json:"clientId"`
|
|
|
|
|
|
ClientSecret string `json:"clientSecret"`
|
|
|
|
|
|
AuthorizationURL string `json:"authorizationURL"`
|
|
|
|
|
|
AccessTokenURL string `json:"accessTokenURL"`
|
|
|
|
|
|
RedirectURL string `json:"redirectURL"`
|
|
|
|
|
|
Scopes string `json:"scopes"`
|
|
|
|
|
|
ResourceURL string `json:"resourceURL"`
|
|
|
|
|
|
UserIdentifier string `json:"userIdentifier"`
|
|
|
|
|
|
AutoRegister bool `json:"autoRegister"` // 是否自动注册
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取Oauth2登录相关配置
|
|
|
|
|
|
func GetOauth2Login() *Oauth2Login {
|
|
|
|
|
|
c := sysapp.GetConfigApp().GetConfig(ConfigKeyOauth2Login)
|
|
|
|
|
|
jm := c.GetJsonMap()
|
|
|
|
|
|
ol := new(Oauth2Login)
|
|
|
|
|
|
ol.Enable = c.ConvBool(jm["enable"], false)
|
|
|
|
|
|
ol.Name = jm["name"]
|
|
|
|
|
|
ol.ClientId = jm["clientId"]
|
|
|
|
|
|
ol.ClientSecret = jm["clientSecret"]
|
|
|
|
|
|
ol.AuthorizationURL = jm["authorizationURL"]
|
|
|
|
|
|
ol.AccessTokenURL = jm["accessTokenURL"]
|
|
|
|
|
|
ol.RedirectURL = jm["redirectURL"]
|
|
|
|
|
|
ol.Scopes = stringx.Trim(jm["scopes"])
|
|
|
|
|
|
ol.ResourceURL = jm["resourceURL"]
|
|
|
|
|
|
ol.UserIdentifier = jm["userIdentifier"]
|
|
|
|
|
|
ol.AutoRegister = c.ConvBool(jm["autoRegister"], true)
|
|
|
|
|
|
return ol
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type LdapLogin struct {
|
|
|
|
|
|
Enable bool // 是否启用
|
|
|
|
|
|
Host string
|
|
|
|
|
|
Port string `json:"port"`
|
|
|
|
|
|
SkipTLSVerify bool `json:"skipTLSVerify"` // 客户端是否跳过 TLS 证书验证
|
|
|
|
|
|
SecurityProtocol string `json:"securityProtocol"` // 安全协议(为Null不使用安全协议),如: StartTLS, LDAPS
|
|
|
|
|
|
BindDN string `json:"bindDn"` // LDAP 服务的管理员账号,如: "cn=admin,dc=example,dc=com"
|
|
|
|
|
|
BindPwd string `json:"bindPwd"` // LDAP 服务的管理员密码
|
|
|
|
|
|
BaseDN string `json:"baseDN"` // 用户所在的 base DN, 如: "ou=users,dc=example,dc=com"
|
|
|
|
|
|
UserFilter string `json:"userFilter"` // 过滤用户的方式, 如: "(uid=%s)"
|
|
|
|
|
|
UidMap string `json:"UidMap"` // 用户id和 LDAP 字段名之间的映射关系
|
|
|
|
|
|
UdnMap string `json:"UdnMap"` // 用户姓名(dispalyName)和 LDAP 字段名之间的映射关系
|
|
|
|
|
|
EmailMap string `json:"emailMap"` // 用户email和 LDAP 字段名之间的映射关系
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取LdapLogin相关配置
|
|
|
|
|
|
func GetLdapLogin() *LdapLogin {
|
|
|
|
|
|
c := sysapp.GetConfigApp().GetConfig(ConfigKeyLdapLogin)
|
|
|
|
|
|
jm := c.GetJsonMap()
|
|
|
|
|
|
ll := new(LdapLogin)
|
|
|
|
|
|
ll.Enable = c.ConvBool(jm["enable"], false)
|
|
|
|
|
|
ll.Host = jm["host"]
|
|
|
|
|
|
ll.Port = jm["port"]
|
|
|
|
|
|
ll.SkipTLSVerify = c.ConvBool(jm["skipTLSVerify"], true)
|
|
|
|
|
|
ll.SecurityProtocol = jm["securityProtocol"]
|
|
|
|
|
|
ll.BindDN = stringx.Trim(jm["bindDN"])
|
|
|
|
|
|
ll.BindPwd = stringx.Trim(jm["bindPwd"])
|
|
|
|
|
|
ll.BaseDN = stringx.Trim(jm["baseDN"])
|
|
|
|
|
|
ll.UserFilter = stringx.Trim(jm["userFilter"])
|
|
|
|
|
|
ll.UidMap = stringx.Trim(jm["uidMap"])
|
|
|
|
|
|
ll.UdnMap = stringx.Trim(jm["udnMap"])
|
|
|
|
|
|
ll.EmailMap = stringx.Trim(jm["emailMap"])
|
|
|
|
|
|
return ll
|
|
|
|
|
|
}
|