Skip to content

Commit 384cef4

Browse files
feat(keycloak): redirect to keycloak instance depending on hostname
1 parent 12f6fa5 commit 384cef4

File tree

1 file changed

+44
-2
lines changed

1 file changed

+44
-2
lines changed

src/common/api/Keycloak.js

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,48 @@ let keycloak = null
44
let isInitialized = false
55
let initPromise = null
66

7+
// check out [ENT]/HMDA-Operations/hmda-devops/blob/master/eks/hmda_urls.md for more details
8+
// about the different HMDA environments
9+
10+
const prodKeycloakDomain = 'ffiec.cfpb.gov'
11+
const domainsToBeRedirectedToProdKeycloak = [
12+
'ffiec.beta.cfpb.gov',
13+
'prod-regtech',
14+
'ffiec-beta-test',
15+
'ffiec-test',
16+
]
17+
18+
const devKeycloakDomain = 'hmdadev.cfpb.gov'
19+
const domainsToBeRedirectedToDevKeycloak = ['hmda4-beta.demo']
20+
21+
const getKeycloakInstance = (hostname) => {
22+
const isRedirectedToProd = domainsToBeRedirectedToProdKeycloak.some(
23+
(domain) => hostname.includes(domain),
24+
)
25+
const isRedirectedToDev = domainsToBeRedirectedToDevKeycloak.some((domain) =>
26+
hostname.includes(domain),
27+
)
28+
29+
if (isRedirectedToProd) return prodKeycloakDomain
30+
if (isRedirectedToDev) return devKeycloakDomain
31+
32+
// if hostname doesn't match any known redirect patterns, assume keycloak is hosted on the same domain
33+
return hostname
34+
}
35+
36+
const hostname = window.location.hostname
37+
const keycloakInstance = getKeycloakInstance(hostname)
38+
39+
const keycloakConfig = {
40+
realm: 'hmda2',
41+
url: `https://${keycloakInstance}/auth`,
42+
clientId: 'hmda2-api',
43+
'public-client': true,
44+
'use-resource-role-mappings': true,
45+
'confidential-port': 0,
46+
'ssl-required': 'all',
47+
}
48+
749
export const setKeycloak = (cloak) => {
850
keycloak = cloak
951
return keycloak
@@ -28,12 +70,12 @@ export const initKeycloak = (overrides) => {
2870
} else if (import.meta.env.MODE === 'development') {
2971
keycloak = new Keycloak('/local_keycloak.json')
3072
} else {
31-
keycloak = new Keycloak('/keycloak.json')
73+
keycloak = new Keycloak(keycloakConfig)
3274
}
3375
}
3476

3577
initPromise = keycloak
36-
.init({ pkceMethod: 'S256' })
78+
.init({ pkceMethod: 'S256', checkLoginIframe: false })
3779
.then((authenticated) => {
3880
console.log('Keycloak initialized, authenticated:', authenticated)
3981
isInitialized = true

0 commit comments

Comments
 (0)