| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | 
							- 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
 
- }
 
 
  |