diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2014-05-05 16:42:15 +0800 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2014-05-05 16:42:15 +0800 |
commit | d8136c9c3cf0f7d84510402f01cbe07a656a0587 (patch) | |
tree | 2a1a7553a111a008a0322625c30130ca952b6acd /models | |
parent | 02687cbdf37be3c89005abe45c7d1f6240e339e0 (diff) | |
parent | 1652dd5068f2f3ae1851bc2321832c88af85d570 (diff) | |
download | gitea-d8136c9c3cf0f7d84510402f01cbe07a656a0587.tar.gz gitea-d8136c9c3cf0f7d84510402f01cbe07a656a0587.zip |
Merge branch 'dev-ldap' into dev
Diffstat (limited to 'models')
-rw-r--r-- | models/ldap.go | 2 | ||||
-rw-r--r-- | models/login.go | 117 | ||||
-rw-r--r-- | models/models.go | 2 | ||||
-rw-r--r-- | models/user.go | 7 |
4 files changed, 120 insertions, 8 deletions
diff --git a/models/ldap.go b/models/ldap.go index cc9058765f..1da5b87540 100644 --- a/models/ldap.go +++ b/models/ldap.go @@ -30,7 +30,7 @@ func LoginUserLdap(name, passwd string) (*User, error) { Email: mail} _, err := RegisterUser(&user) if err != nil { - log.Debug("LDAP local user %s fond (%s) ", name, err) + log.Debug("LDAP local user %s found (%s) ", name, err) } // simulate local user login localUser, err2 := GetUserByName(user.Name) diff --git a/models/login.go b/models/login.go new file mode 100644 index 0000000000..d5905eb36b --- /dev/null +++ b/models/login.go @@ -0,0 +1,117 @@ +package models + +import ( + "encoding/json" + "errors" + "time" + + "github.com/go-xorm/core" + "github.com/go-xorm/xorm" + "github.com/gogits/gogs/modules/auth/ldap" +) + +// 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{} + +type LDAPConfig struct { + ldap.Ldapsource +} + +// implement +func (cfg *LDAPConfig) FromDB(bs []byte) error { + return json.Unmarshal(bs, &cfg.Ldapsource) +} + +func (cfg *LDAPConfig) ToDB() ([]byte, error) { + return json.Marshal(cfg.Ldapsource) +} + +type LoginSource struct { + Id int64 + Type int + 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, + IsActived: true, + Cfg: cfg, + }) + return err +} + +func UpdateLDAPSource(source *LoginSource) error { + _, err := orm.AllCols().Id(source.Id).Update(source) + return err +} + +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 +} diff --git a/models/models.go b/models/models.go index 09b530ced1..b565f22ab1 100644 --- a/models/models.go +++ b/models/models.go @@ -34,7 +34,7 @@ var ( func init() { tables = append(tables, new(User), new(PublicKey), new(Repository), new(Watch), new(Action), new(Access), new(Issue), new(Comment), new(Oauth2), new(Follow), - new(Mirror), new(Release)) + new(Mirror), new(Release), new(LoginSource)) } func LoadModelsConfig() { diff --git a/models/user.go b/models/user.go index 27140cf1c1..a4b753f8e1 100644 --- a/models/user.go +++ b/models/user.go @@ -26,12 +26,6 @@ const ( UT_ORGANIZATION ) -// Login types. -const ( - LT_PLAIN = iota + 1 - LT_LDAP -) - var ( ErrUserOwnRepos = errors.New("User still have ownership of repositories") ErrUserAlreadyExist = errors.New("User already exist") @@ -50,6 +44,7 @@ type User struct { Email string `xorm:"unique not null"` Passwd string `xorm:"not null"` LoginType int + LoginSource int64 `xorm:"not null default 0"` Type int NumFollowers int NumFollowings int |