Переглянути джерело

Add VerifyUserLogin method

Andrea Fazzi 5 роки тому
батько
коміт
fc5b92cf4e
1 змінених файлів з 29 додано та 0 видалено
  1. 29 0
      ldap/ldap.go

+ 29 - 0
ldap/ldap.go

@@ -112,6 +112,35 @@ func (c *Client) UpdateUserPassword(user orm.User) error {
 	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 {
 	delRequest := ldap.NewDelRequest(user.DN(), nil)
 	err := c.Conn.Del(delRequest)