diff options
author | ᴜɴᴋɴᴡᴏɴ <u@gogs.io> | 2020-04-07 00:29:27 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-07 00:29:27 +0800 |
commit | 571be84e260300d001290a022232a45a86518331 (patch) | |
tree | 5e6cf4281a12f3af4f80c50eca6b35dd23f6739c /internal/db | |
parent | 2b3655fa118abaa33a0e064233fdc8c670487c62 (diff) |
db: handle JSON conversion for `LoginSource` (#6075)
Diffstat (limited to 'internal/db')
-rw-r--r-- | internal/db/login_source.go | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/internal/db/login_source.go b/internal/db/login_source.go index aabca145..b6665f4e 100644 --- a/internal/db/login_source.go +++ b/internal/db/login_source.go @@ -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] } |