修复全量审查问题;设置接口PATCH化;回传指纹加固
CI / test (push) Successful in 32s

This commit is contained in:
2026-07-22 16:51:23 +08:00
parent 0614ef22af
commit f51fb6c722
66 changed files with 3997 additions and 687 deletions
+54 -21
View File
@@ -32,18 +32,19 @@ type OAuthProvidersView struct {
GithubDisabled bool `json:"githubDisabled"`
}
// UpdateOAuthInput 是保存 provider 配置的输入;
// secret 为 nil 沿用已存值,非 nil 覆盖(空串清除)。
// UpdateOAuthInput 是 provider 配置的部分更新:所有字段 nil=沿用已存值,
// 只落库出现的字段;并发编辑不同 provider 因此互不回滚(2026-07-22 审查 #18)。
// secret 非 nil 覆盖(空串清除),绝不回读。
type UpdateOAuthInput struct {
OidcIssuer string `json:"oidcIssuer"`
OidcClientID string `json:"oidcClientId"`
OidcIssuer *string `json:"oidcIssuer"`
OidcClientID *string `json:"oidcClientId"`
OidcClientSecret *string `json:"oidcClientSecret"`
OidcDisplayName string `json:"oidcDisplayName"`
OidcDisabled bool `json:"oidcDisabled"`
GithubClientID string `json:"githubClientId"`
OidcDisplayName *string `json:"oidcDisplayName"`
OidcDisabled *bool `json:"oidcDisabled"`
GithubClientID *string `json:"githubClientId"`
GithubClientSecret *string `json:"githubClientSecret"`
GithubDisplayName string `json:"githubDisplayName"`
GithubDisabled bool `json:"githubDisabled"`
GithubDisplayName *string `json:"githubDisplayName"`
GithubDisabled *bool `json:"githubDisabled"`
}
// OAuthView 返回脱敏后的 provider 配置。
@@ -77,19 +78,51 @@ func boolFlag(on bool) string {
return ""
}
// UpdateOAuth 保存 provider 配置;issuer 规范化去尾斜杠,secret 加密落库
func (s *SettingService) UpdateOAuth(ctx context.Context, in UpdateOAuthInput) error {
plain := map[string]string{
settingOauthOidcIssuer: strings.TrimRight(strings.TrimSpace(in.OidcIssuer), "/"),
settingOauthOidcClientID: strings.TrimSpace(in.OidcClientID),
settingOauthOidcDisplayName: strings.TrimSpace(in.OidcDisplayName),
settingOauthOidcDisabled: boolFlag(in.OidcDisabled),
settingOauthGithubClientID: strings.TrimSpace(in.GithubClientID),
settingOauthGithubDisplayName: strings.TrimSpace(in.GithubDisplayName),
settingOauthGithubDisabled: boolFlag(in.GithubDisabled),
// trimPtr / issuerPtr / flagPtr 把补丁字段规范化为存储值;nil 表示未出现不写
func trimPtr(p *string) *string {
if p == nil {
return nil
}
for key, value := range plain {
if err := s.set(ctx, key, value); err != nil {
v := strings.TrimSpace(*p)
return &v
}
func issuerPtr(p *string) *string {
if p == nil {
return nil
}
v := strings.TrimRight(strings.TrimSpace(*p), "/")
return &v
}
func flagPtr(p *bool) *string {
if p == nil {
return nil
}
v := boolFlag(*p)
return &v
}
// UpdateOAuth 部分更新 provider 配置:只落库非 nil 字段;
// issuer 规范化去尾斜杠,secret 加密落库(空串清除)。
func (s *SettingService) UpdateOAuth(ctx context.Context, in UpdateOAuthInput) error {
writes := []struct {
key string
val *string
}{
{settingOauthOidcIssuer, issuerPtr(in.OidcIssuer)},
{settingOauthOidcClientID, trimPtr(in.OidcClientID)},
{settingOauthOidcDisplayName, trimPtr(in.OidcDisplayName)},
{settingOauthOidcDisabled, flagPtr(in.OidcDisabled)},
{settingOauthGithubClientID, trimPtr(in.GithubClientID)},
{settingOauthGithubDisplayName, trimPtr(in.GithubDisplayName)},
{settingOauthGithubDisabled, flagPtr(in.GithubDisabled)},
}
for _, w := range writes {
if w.val == nil {
continue
}
if err := s.set(ctx, w.key, *w.val); err != nil {
return err
}
}