Skip to content

Commit 2f5b979

Browse files
committed
Create NUS Entra ID claim extractor
1 parent 973b9ca commit 2f5b979

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
defmodule Cadet.Auth.Providers.NusEntraIdClaimExtractor do
2+
@moduledoc """
3+
Extracts fields from NUS' Microsoft Entra ID JWTs.
4+
"""
5+
6+
@behaviour Cadet.Auth.Providers.OpenID.ClaimExtractor
7+
8+
def get_username(claims, access_token) do
9+
get_userinfo(claims, "samAccountName")
10+
end
11+
12+
def get_name(claims, access_token) do
13+
get_userinfo(claims, "displayName")
14+
end
15+
16+
def get_token_type, do: "id_token"
17+
18+
# Allowed Active Directory (AD) domains; modify as needed
19+
@allowed_domains ~w(student alum staff)
20+
21+
defp check_allowed_domain(claims) do
22+
domain = Map.get(claims, "ExtensionAttribute6")
23+
domain in @allowed_domains
24+
end
25+
26+
defp map_key_to_raw(key), do: key
27+
28+
defp get_userinfo(claims, key) do
29+
with true <- check_allowed_domain(claims),
30+
mapped_key <- map_key_to_raw(key),
31+
value when not is_nil(value) <- Map.get(claims, mapped_key) do
32+
value
33+
else
34+
false -> nil
35+
_ -> nil
36+
end
37+
end
38+
end

0 commit comments

Comments
 (0)