feat: add useIdAsName field for WeCom OAuth provider (#3797)

This commit is contained in:
DacongDA 2025-05-17 02:27:06 +08:00 committed by GitHub
parent d772b0b7a8
commit 4260efcfd0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 49 additions and 21 deletions

View File

@ -44,6 +44,7 @@ type ProviderInfo struct {
AppId string AppId string
HostUrl string HostUrl string
RedirectUrl string RedirectUrl string
DisableSsl bool
TokenURL string TokenURL string
AuthURL string AuthURL string
@ -79,9 +80,9 @@ func GetIdProvider(idpInfo *ProviderInfo, redirectUrl string) (IdProvider, error
return NewLinkedInIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl), nil return NewLinkedInIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl), nil
case "WeCom": case "WeCom":
if idpInfo.SubType == "Internal" { if idpInfo.SubType == "Internal" {
return NewWeComInternalIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl), nil return NewWeComInternalIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl, idpInfo.DisableSsl), nil
} else if idpInfo.SubType == "Third-party" { } else if idpInfo.SubType == "Third-party" {
return NewWeComIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl), nil return NewWeComIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl, idpInfo.DisableSsl), nil
} else { } else {
return nil, fmt.Errorf("WeCom provider subType: %s is not supported", idpInfo.SubType) return nil, fmt.Errorf("WeCom provider subType: %s is not supported", idpInfo.SubType)
} }

View File

@ -29,13 +29,16 @@ import (
type WeComInternalIdProvider struct { type WeComInternalIdProvider struct {
Client *http.Client Client *http.Client
Config *oauth2.Config Config *oauth2.Config
UseIdAsName bool
} }
func NewWeComInternalIdProvider(clientId string, clientSecret string, redirectUrl string) *WeComInternalIdProvider { func NewWeComInternalIdProvider(clientId string, clientSecret string, redirectUrl string, useIdAsName bool) *WeComInternalIdProvider {
idp := &WeComInternalIdProvider{} idp := &WeComInternalIdProvider{}
config := idp.getConfig(clientId, clientSecret, redirectUrl) config := idp.getConfig(clientId, clientSecret, redirectUrl)
idp.Config = config idp.Config = config
idp.UseIdAsName = useIdAsName
return idp return idp
} }
@ -169,5 +172,9 @@ func (idp *WeComInternalIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo,
userInfo.Id = userInfo.Username userInfo.Id = userInfo.Username
} }
if idp.UseIdAsName {
userInfo.Username = userInfo.Id
}
return &userInfo, nil return &userInfo, nil
} }

View File

@ -28,13 +28,16 @@ import (
type WeComIdProvider struct { type WeComIdProvider struct {
Client *http.Client Client *http.Client
Config *oauth2.Config Config *oauth2.Config
UseIdAsName bool
} }
func NewWeComIdProvider(clientId string, clientSecret string, redirectUrl string) *WeComIdProvider { func NewWeComIdProvider(clientId string, clientSecret string, redirectUrl string, useIdAsName bool) *WeComIdProvider {
idp := &WeComIdProvider{} idp := &WeComIdProvider{}
config := idp.getConfig(clientId, clientSecret, redirectUrl) config := idp.getConfig(clientId, clientSecret, redirectUrl)
idp.Config = config idp.Config = config
idp.UseIdAsName = useIdAsName
return idp return idp
} }
@ -183,6 +186,10 @@ func (idp *WeComIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error)
DisplayName: wecomUserInfo.UserInfo.Name, DisplayName: wecomUserInfo.UserInfo.Name,
AvatarUrl: wecomUserInfo.UserInfo.Avatar, AvatarUrl: wecomUserInfo.UserInfo.Avatar,
} }
if idp.UseIdAsName {
userInfo.Username = userInfo.Id
}
return &userInfo, nil return &userInfo, nil
} }

View File

@ -475,6 +475,7 @@ func FromProviderToIdpInfo(ctx *context.Context, provider *Provider) *idp.Provid
AuthURL: provider.CustomAuthUrl, AuthURL: provider.CustomAuthUrl,
UserInfoURL: provider.CustomUserInfoUrl, UserInfoURL: provider.CustomUserInfoUrl,
UserMapping: provider.UserMapping, UserMapping: provider.UserMapping,
DisableSsl: provider.DisableSsl,
} }
if provider.Type == "WeChat" { if provider.Type == "WeChat" {

View File

@ -692,6 +692,7 @@ class ProviderEditPage extends React.Component {
</Row> </Row>
{ {
this.state.provider.type !== "WeCom" ? null : ( this.state.provider.type !== "WeCom" ? null : (
<React.Fragment>
<Row style={{marginTop: "20px"}} > <Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={2}> <Col style={{marginTop: "5px"}} span={2}>
{Setting.getLabel(i18next.t("general:Method"), i18next.t("provider:Method - Tooltip"))} : {Setting.getLabel(i18next.t("general:Method"), i18next.t("provider:Method - Tooltip"))} :
@ -708,7 +709,18 @@ class ProviderEditPage extends React.Component {
} }
</Select> </Select>
</Col> </Col>
</Row>) </Row>
<Row style={{marginTop: "20px"}} >
<Col style={{marginTop: "5px"}} span={2}>
{Setting.getLabel(i18next.t("provider:Use id as name"), i18next.t("provider:Use id as name - Tooltip"))} :
</Col>
<Col span={22} >
<Switch checked={this.state.provider.disableSsl} onChange={checked => {
this.updateProviderField("disableSsl", checked);
}} />
</Col>
</Row>
</React.Fragment>)
} }
</React.Fragment> </React.Fragment>
) )