MCPcopy Index your code
hub / github.com/TruthHun/BookStack / ldapLogin

Method ldapLogin

models/member.go:106–156  ·  view source on GitHub ↗

ldapLogin 通过LDAP登陆

(account string, password string)

Source from the content-addressed store, hash-verified

104
105//ldapLogin 通过LDAP登陆
106func (m *Member) ldapLogin(account string, password string) (*Member, error) {
107 if beego.AppConfig.DefaultBool("ldap_enable", false) == false {
108 return m, ErrMemberAuthMethodInvalid
109 }
110 var err error
111 lc, err := ldap.Dial("tcp", fmt.Sprintf("%s:%d", beego.AppConfig.String("ldap_host"), beego.AppConfig.DefaultInt("ldap_port", 3268)))
112 if err != nil {
113 return m, ErrLDAPConnect
114 }
115 defer lc.Close()
116 err = lc.Bind(beego.AppConfig.String("ldap_user"), beego.AppConfig.String("ldap_password"))
117 if err != nil {
118 return m, ErrLDAPFirstBind
119 }
120 searchRequest := ldap.NewSearchRequest(
121 beego.AppConfig.String("ldap_base"),
122 ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
123 //修改objectClass通过配置文件获取值
124 fmt.Sprintf("(&(%s)(%s=%s))", beego.AppConfig.String("ldap_filter"), beego.AppConfig.String("ldap_attribute"), account),
125 []string{"dn", "mail"},
126 nil,
127 )
128 searchResult, err := lc.Search(searchRequest)
129 if err != nil {
130 return m, ErrLDAPSearch
131 }
132 if len(searchResult.Entries) != 1 {
133 return m, ErrLDAPUserNotFoundOrTooMany
134 }
135 userdn := searchResult.Entries[0].DN
136 err = lc.Bind(userdn, password)
137 if err != nil {
138 return m, ErrorMemberPasswordError
139 }
140 if m.Account == "" {
141 m.Account = account
142 m.Email = searchResult.Entries[0].GetAttributeValue("mail")
143 m.AuthMethod = "ldap"
144 m.Avatar = "/static/images/headimgurl.jpg"
145 m.Role = beego.AppConfig.DefaultInt("ldap_user_role", 2)
146 m.CreateTime = time.Now()
147
148 err = m.Add()
149 if err != nil {
150 logs.Error("自动注册LDAP用户错误", err)
151 return m, ErrorMemberPasswordError
152 }
153 m.ResolveRoleName()
154 }
155 return m, nil
156}
157
158// Add 添加一个用户.
159func (m *Member) Add() error {

Callers 1

LoginMethod · 0.95

Calls 4

AddMethod · 0.95
ResolveRoleNameMethod · 0.95
BindMethod · 0.45
SearchMethod · 0.45

Tested by

no test coverage detected