forgejo/models/login.go

118 lines
2.4 KiB
Go
Raw Normal View History

2014-04-26 06:21:04 +00:00
package models
2014-05-03 02:48:14 +00:00
import (
"encoding/json"
2014-05-05 08:40:25 +00:00
"errors"
2014-05-03 02:48:14 +00:00
"time"
2014-04-26 06:21:04 +00:00
2014-05-03 02:48:14 +00:00
"github.com/go-xorm/core"
2014-05-05 08:40:25 +00:00
"github.com/go-xorm/xorm"
2014-05-03 02:48:14 +00:00
"github.com/gogits/gogs/modules/auth/ldap"
)
2014-04-26 06:21:04 +00:00
2014-05-05 08:40:25 +00:00
// Login types.
const (
2014-04-26 06:21:04 +00:00
LT_PLAIN = iota + 1
LT_LDAP
LT_SMTP
2014-05-05 08:40:25 +00:00
)
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",
}
2014-04-26 06:21:04 +00:00
var _ core.Conversion = &LDAPConfig{}
type LDAPConfig struct {
2014-05-03 02:48:14 +00:00
ldap.Ldapsource
2014-04-26 06:21:04 +00:00
}
// implement
func (cfg *LDAPConfig) FromDB(bs []byte) error {
2014-05-03 02:48:14 +00:00
return json.Unmarshal(bs, &cfg.Ldapsource)
2014-04-26 06:21:04 +00:00
}
func (cfg *LDAPConfig) ToDB() ([]byte, error) {
2014-05-03 02:48:14 +00:00
return json.Marshal(cfg.Ldapsource)
2014-04-26 06:21:04 +00:00
}
type LoginSource struct {
2014-05-03 02:48:14 +00:00
Id int64
Type int
2014-05-05 08:40:25 +00:00
Name string `xorm:"unique"`
IsActived bool `xorm:"not null default false"`
2014-05-03 02:48:14 +00:00
Cfg core.Conversion `xorm:"TEXT"`
Created time.Time `xorm:"created"`
Updated time.Time `xorm:"updated"`
}
2014-05-05 08:40:25 +00:00
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)
}
}
}
2014-05-03 02:48:14 +00:00
func GetAuths() ([]*LoginSource, error) {
var auths = make([]*LoginSource, 0)
err := orm.Find(&auths)
return auths, err
}
2014-05-05 08:40:25 +00:00
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
}
2014-05-03 02:48:14 +00:00
func AddLDAPSource(name string, cfg *LDAPConfig) error {
_, err := orm.Insert(&LoginSource{Type: LT_LDAP,
Name: name,
IsActived: true,
Cfg: cfg,
})
return err
}
2014-05-05 08:40:25 +00:00
func UpdateLDAPSource(source *LoginSource) error {
_, err := orm.AllCols().Id(source.Id).Update(source)
2014-05-03 02:48:14 +00:00
return err
}
2014-05-05 08:40:25 +00:00
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{})
2014-05-03 02:48:14 +00:00
return err
2014-04-26 06:21:04 +00:00
}