🐛 修复邮件问题
This commit is contained in:
@@ -120,6 +120,43 @@ func NormalizeConfig(cfg EmailConfig) EmailConfig {
|
||||
return cfg
|
||||
}
|
||||
|
||||
func (s *EmailServiceV1) SaveAuthorizedOutlookConfig(ctx context.Context, cfg EmailConfig) error {
|
||||
cfg = NormalizeConfig(cfg)
|
||||
|
||||
configs := map[string]string{
|
||||
cst2.ConfigEmailAuthMode: AuthModeOutlookOAuth2,
|
||||
cst2.ConfigEmailFromEmail: cfg.FromEmail,
|
||||
cst2.ConfigEmailOAuthTenant: cfg.OAuthTenant,
|
||||
cst2.ConfigEmailOAuthClientID: cfg.OAuthClientID,
|
||||
cst2.ConfigEmailOAuthClientSecret: cfg.OAuthClientSecret,
|
||||
cst2.ConfigEmailOAuthRedirectURL: cfg.OAuthRedirectURL,
|
||||
cst2.ConfigEmailOAuthRefreshToken: cfg.OAuthRefreshToken,
|
||||
cst2.ConfigEmailOAuthScope: cfg.OAuthScope,
|
||||
}
|
||||
|
||||
for key, value := range configs {
|
||||
exists, err := db.Global.SysConfig.Query().Where(sysconfig.KeyEQ(key)).Exist(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if exists {
|
||||
if _, err = db.Global.SysConfig.Update().Where(sysconfig.KeyEQ(key)).SetValue(value).Save(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
}
|
||||
if _, err = db.Global.SysConfig.Create().
|
||||
SetKey(key).
|
||||
SetValue(value).
|
||||
SetDescription("邮件配置").
|
||||
Save(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *EmailServiceV1) ValidateConfig(cfg EmailConfig) error {
|
||||
cfg = NormalizeConfig(cfg)
|
||||
|
||||
|
||||
@@ -106,6 +106,14 @@ func (s *EmailServiceV1) ExchangeOutlookAuthorizeCode(ctx context.Context, state
|
||||
if token.RefreshToken == "" {
|
||||
return "", session.FrontendOrigin, fmt.Errorf("no refresh token returned, please ensure offline_access scope is granted")
|
||||
}
|
||||
|
||||
session.Config.AuthMode = AuthModeOutlookOAuth2
|
||||
session.Config.OAuthRedirectURL = session.CallbackURL
|
||||
session.Config.OAuthRefreshToken = token.RefreshToken
|
||||
if err = s.SaveAuthorizedOutlookConfig(ctx, session.Config); err != nil {
|
||||
return "", session.FrontendOrigin, err
|
||||
}
|
||||
|
||||
return token.RefreshToken, session.FrontendOrigin, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user