kra-oa/internal/service/security.go

67 lines
2.8 KiB
Go

package service
import (
"context"
"kra/internal/biz"
"kra/internal/service/dto"
)
func securityDTO(v *biz.SecurityConfig) map[string]any {
return map[string]any{"ID": v.ID, "captchaOpen": v.CaptchaOpen, "captchaTimeout": v.CaptchaTimeout, "keyLong": v.KeyLong, "imgWidth": v.ImgWidth, "imgHeight": v.ImgHeight, "pwdMinLength": v.PwdMinLength, "pwdRequireUpper": v.PwdRequireUpper, "pwdRequireLower": v.PwdRequireLower, "pwdRequireDigit": v.PwdRequireDigit, "pwdRequireSpecial": v.PwdRequireSpecial, "limitEnable": v.LimitEnable, "limitWindow": v.LimitWindow, "limitCount": v.LimitCount, "lockEnable": v.LockEnable, "lockThreshold": v.LockThreshold, "lockDuration": v.LockDuration, "pwdExpireEnable": v.PwdExpireEnable, "pwdExpireDays": v.PwdExpireDays, "forceNewUserChangePassword": v.ForceNewUserChangePassword}
}
func (s *SecurityService) CurrentSecurity(ctx context.Context) (*biz.SecurityConfig, error) {
s.securityMu.RLock()
if s.securityCache != nil {
copy := *s.securityCache
s.securityMu.RUnlock()
return &copy, nil
}
s.securityMu.RUnlock()
value, err := s.uc.SecurityConfig(ctx)
if err != nil {
return nil, err
}
s.securityMu.Lock()
s.securityCache = value
copy := *value
s.securityMu.Unlock()
return &copy, nil
}
func (s *SecurityService) Security(ctx context.Context) (map[string]any, error) {
value, err := s.CurrentSecurity(ctx)
if err != nil {
return nil, err
}
return securityDTO(value), nil
}
func (s *SecurityService) SaveSecurity(ctx context.Context, value *biz.SecurityConfig) (map[string]any, error) {
if err := s.uc.UpdateSecurity(ctx, value); err != nil {
return nil, err
}
s.securityMu.Lock()
s.securityCache = value
s.securityMu.Unlock()
return securityDTO(value), nil
}
func (s *SecurityService) SaveSecurityRequest(ctx context.Context, value *dto.SecurityConfigRequest) (map[string]any, error) {
return s.SaveSecurity(ctx, &biz.SecurityConfig{
ID: value.ID, CaptchaOpen: value.CaptchaOpen, CaptchaTimeout: value.CaptchaTimeout,
KeyLong: value.KeyLong, ImgWidth: value.ImgWidth, ImgHeight: value.ImgHeight,
PwdMinLength: value.PwdMinLength, PwdRequireUpper: value.PwdRequireUpper,
PwdRequireLower: value.PwdRequireLower, PwdRequireDigit: value.PwdRequireDigit,
PwdRequireSpecial: value.PwdRequireSpecial, LimitEnable: value.LimitEnable,
LimitWindow: value.LimitWindow, LimitCount: value.LimitCount, LockEnable: value.LockEnable,
LockThreshold: value.LockThreshold, LockDuration: value.LockDuration,
PwdExpireEnable: value.PwdExpireEnable, PwdExpireDays: value.PwdExpireDays,
ForceNewUserChangePassword: value.ForceNewUserChangePassword,
})
}
func (s *SecurityService) ValidatePassword(ctx context.Context, password string) error {
cfg, err := s.CurrentSecurity(ctx)
if err != nil {
return err
}
return s.uc.ValidatePassword(cfg, password)
}