ldapLogin 通过LDAP登陆
(account string, password string)
| 104 | |
| 105 | //ldapLogin 通过LDAP登陆 |
| 106 | func (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 添加一个用户. |
| 159 | func (m *Member) Add() error { |
no test coverage detected