From 571be84e260300d001290a022232a45a86518331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=B4=9C=C9=B4=E1=B4=8B=C9=B4=E1=B4=A1=E1=B4=8F=C9=B4?= Date: Tue, 7 Apr 2020 00:29:27 +0800 Subject: [PATCH] db: handle JSON conversion for `LoginSource` (#6075) --- internal/db/login_source.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/internal/db/login_source.go b/internal/db/login_source.go index aabca1459..b6665f4ee 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] }