Packages
Ueberauth strategy for Active Directory authentication
Current section
Files
Jump to
Current section
Files
lib/ueberauth/strategy/active_directory.ex
defmodule Ueberauth.Strategy.ActiveDirectory do
use Ueberauth.Strategy, uid_field: :username
alias Ueberauth.Strategy.ActiveDirectory.Ldap
alias Ueberauth.Auth.Info
alias Ueberauth.Auth.Extra
def handle_callback!(conn) do
{:ok, ldap_conn} = Ldap.connect
case Ldap.authenticate(ldap_conn, conn.params["username"], conn.params["password"]) do
{:ok, user} ->
Ldap.close(ldap_conn)
put_private(conn, :user, user)
{:error, reason} -> set_errors!(conn, [error("login_failed", reason)])
end
end
def handle_cleanup!(conn) do
conn
|> put_private(:user, nil)
end
def uid(conn) do
conn.private.user['sAMAccountName'] |> List.first |> to_string
end
def info(conn) do
user = conn.private.user
%Info{
name: Ldap.first_result(user['displayName']),
first_name: Ldap.first_result(user['firstName']),
last_name: Ldap.first_result(user['sn']),
email: Ldap.first_result(user['mail']),
nickname: Ldap.first_result(user['sAMAccountName'])
}
end
def extra(conn) do
%Extra{
raw_info: %{
ldap_user: conn.private.user,
ldap_groups: conn.private.user['memberOf']
}
}
end
end