diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2014-05-05 16:40:25 +0800 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2014-05-05 16:40:25 +0800 |
commit | 1652dd5068f2f3ae1851bc2321832c88af85d570 (patch) | |
tree | d8bee76f5c1016c7ee432334fe02390387b9a8e9 /models/login.go | |
parent | 79ea34e70ebe989f1a5f8fbd71cfe3109c6f8a58 (diff) |
basic authentications
Diffstat (limited to 'models/login.go')
-rw-r--r-- | models/login.go | 73 |
1 files changed, 60 insertions, 13 deletions
diff --git a/models/login.go b/models/login.go index 6d9e5494..d5905eb3 100644 --- a/models/login.go +++ b/models/login.go @@ -2,17 +2,31 @@ package models import ( "encoding/json" + "errors" "time" "github.com/go-xorm/core" + "github.com/go-xorm/xorm" "github.com/gogits/gogs/modules/auth/ldap" ) -/*const ( +// Login types. +const ( LT_PLAIN = iota + 1 LT_LDAP LT_SMTP -)*/ +) + +var ( + ErrAuthenticationAlreadyExist = errors.New("Authentication already exist") + ErrAuthenticationNotExist = errors.New("Authentication is not exist") + ErrAuthenticationUserUsed = errors.New("Authentication has been used by some users") +) + +var LoginTypes = map[int]string{ + LT_LDAP: "LDAP", + LT_SMTP: "SMTP", +} var _ core.Conversion = &LDAPConfig{} @@ -32,19 +46,50 @@ func (cfg *LDAPConfig) ToDB() ([]byte, error) { type LoginSource struct { Id int64 Type int - Name string - IsActived bool + Name string `xorm:"unique"` + IsActived bool `xorm:"not null default false"` Cfg core.Conversion `xorm:"TEXT"` Created time.Time `xorm:"created"` Updated time.Time `xorm:"updated"` } +func (source *LoginSource) TypeString() string { + return LoginTypes[source.Type] +} + +func (source *LoginSource) LDAP() *LDAPConfig { + return source.Cfg.(*LDAPConfig) +} + +// for xorm callback +func (source *LoginSource) BeforeSet(colName string, val xorm.Cell) { + if colName == "type" { + ty := (*val).(int64) + switch ty { + case LT_LDAP: + source.Cfg = new(LDAPConfig) + } + } +} + func GetAuths() ([]*LoginSource, error) { var auths = make([]*LoginSource, 0) err := orm.Find(&auths) return auths, err } +func GetLoginSourceById(id int64) (*LoginSource, error) { + source := new(LoginSource) + has, err := orm.Id(id).Get(source) + if err != nil { + return nil, err + } + if !has { + return nil, ErrAuthenticationNotExist + } + return source, nil +} + func AddLDAPSource(name string, cfg *LDAPConfig) error { _, err := orm.Insert(&LoginSource{Type: LT_LDAP, Name: name, @@ -54,17 +99,19 @@ func AddLDAPSource(name string, cfg *LDAPConfig) error { return err } -func UpdateLDAPSource(id int64, name string, cfg *LDAPConfig) error { - _, err := orm.AllCols().Id(id).Update(&LoginSource{ - Id: id, - Type: LT_LDAP, - Name: name, - Cfg: cfg, - }) +func UpdateLDAPSource(source *LoginSource) error { + _, err := orm.AllCols().Id(source.Id).Update(source) return err } -func DelLoginSource(id int64) error { - _, err := orm.Id(id).Delete(&LoginSource{}) +func DelLoginSource(source *LoginSource) error { + cnt, err := orm.Count(&User{LoginSource: source.Id}) + if err != nil { + return err + } + if cnt > 0 { + return ErrAuthenticationUserUsed + } + _, err = orm.Id(source.Id).Delete(&LoginSource{}) return err } |