|
@@ -112,6 +112,35 @@ func (c *Client) UpdateUserPassword(user orm.User) error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func (c *Client) VerifyUserLogin(username, password string) error {
|
|
|
|
+ // Search for the given username
|
|
|
|
+ searchRequest := ldap.NewSearchRequest(
|
|
|
|
+ c.DomainDN(),
|
|
|
|
+ ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
|
|
|
|
+ fmt.Sprintf("(&(objectClass=organizationalPerson)(uid=%s))", username),
|
|
|
|
+ []string{"dn"},
|
|
|
|
+ nil,
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ sr, err := c.Conn.Search(searchRequest)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if len(sr.Entries) != 1 {
|
|
|
|
+ return errors.New("User does not exist or too many entries returned")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ userdn := sr.Entries[0].DN
|
|
|
|
+
|
|
|
|
+ // Bind as the user to verify their password
|
|
|
|
+ err = c.Conn.Bind(userdn, password)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ return nil
|
|
|
|
+}
|
|
|
|
+
|
|
func (c *Client) DeleteUser(user orm.User) error {
|
|
func (c *Client) DeleteUser(user orm.User) error {
|
|
delRequest := ldap.NewDelRequest(user.DN(), nil)
|
|
delRequest := ldap.NewDelRequest(user.DN(), nil)
|
|
err := c.Conn.Del(delRequest)
|
|
err := c.Conn.Del(delRequest)
|