db: handle JSON conversion for `LoginSource` (#6075)

pull/6077/head
ᴜɴᴋɴᴡᴏɴ 2020-04-07 00:29:27 +08:00 committed by GitHub
parent 2b3655fa11
commit 571be84e26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 1 deletions

View File

@ -151,7 +151,8 @@ type LoginSource struct {
Name string `xorm:"UNIQUE"`
IsActived bool `xorm:"NOT NULL DEFAULT false"`
IsDefault bool `xorm:"DEFAULT false"`
Cfg core.Conversion `xorm:"TEXT"`
Cfg core.Conversion `xorm:"TEXT" gorm:"COLUMN:remove-me-when-migrated-to-gorm"`
RawCfg string `xorm:"-" gorm:"COLUMN:cfg"` // TODO: Remove me when migrated to GORM.
Created time.Time `xorm:"-" json:"-"`
CreatedUnix int64
@ -208,6 +209,23 @@ func (s *LoginSource) AfterSet(colName string, _ xorm.Cell) {
}
}
// NOTE: This is a GORM query hook.
func (s *LoginSource) AfterFind() error {
switch s.Type {
case LoginLDAP, LoginDLDAP:
s.Cfg = new(LDAPConfig)
case LoginSMTP:
s.Cfg = new(SMTPConfig)
case LoginPAM:
s.Cfg = new(PAMConfig)
case LoginGitHub:
s.Cfg = new(GitHubConfig)
default:
return fmt.Errorf("unrecognized login source type: %v", s.Type)
}
return jsoniter.UnmarshalFromString(s.RawCfg, s.Cfg)
}
func (s *LoginSource) TypeName() string {
return LoginNames[s.Type]
}