aboutsummaryrefslogtreecommitdiff
path: root/models/login.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2014-05-05 16:42:15 +0800
committerLunny Xiao <xiaolunwen@gmail.com>2014-05-05 16:42:15 +0800
commitd8136c9c3cf0f7d84510402f01cbe07a656a0587 (patch)
tree2a1a7553a111a008a0322625c30130ca952b6acd /models/login.go
parent02687cbdf37be3c89005abe45c7d1f6240e339e0 (diff)
parent1652dd5068f2f3ae1851bc2321832c88af85d570 (diff)
Merge branch 'dev-ldap' into dev
Diffstat (limited to 'models/login.go')
-rw-r--r--models/login.go117
1 files changed, 117 insertions, 0 deletions
diff --git a/models/login.go b/models/login.go
new file mode 100644
index 00000000..d5905eb3
--- /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
+}