aboutsummaryrefslogtreecommitdiff
path: root/internal/db
diff options
context:
space:
mode:
authorᴜɴᴋɴᴡᴏɴ <u@gogs.io>2020-04-07 00:29:27 +0800
committerGitHub <noreply@github.com>2020-04-07 00:29:27 +0800
commit571be84e260300d001290a022232a45a86518331 (patch)
tree5e6cf4281a12f3af4f80c50eca6b35dd23f6739c /internal/db
parent2b3655fa118abaa33a0e064233fdc8c670487c62 (diff)
db: handle JSON conversion for `LoginSource` (#6075)
Diffstat (limited to 'internal/db')
-rw-r--r--internal/db/login_source.go20
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]
}