Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes Keycloak js integration Closes #553 #554

Merged
merged 1 commit into from
Nov 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/app/providers/UserContextProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ const UserContextProvider = ({ children }) => {
if (eitherAuth.isRight()) {
if (eitherAuth.value.keycloakConfig) {
// Keycloak
KeycloakService.init(eitherAuth.value.keycloakConfig)
KeycloakService.Instance.init(eitherAuth.value.keycloakConfig)
.catch((err) => {
console.error(err);
setInit('SERVER_ERROR');
Expand All @@ -48,8 +48,8 @@ const UserContextProvider = ({ children }) => {
localStorage.setItem('react-token', KeycloakService.keycloakAuth.token as string);
localStorage.setItem('react-refresh-token', KeycloakService.keycloakAuth.refreshToken as string);
setTimeout(() => {
KeycloakService.Instance.getToken().then((token) => {
localStorage.setItem('react-token', token);
KeycloakService.Instance.getToken().then((result) => {
localStorage.setItem('react-token', KeycloakService.keycloakAuth.token as string);
});
}, 60000);
setInit('DONE');
Expand All @@ -72,7 +72,7 @@ const UserContextProvider = ({ children }) => {
}, []);

useEffect(() => {
if (loadingAcl && init != 'PENDING') {
if (loadingAcl && init !== 'PENDING' && init !== 'SERVER_ERROR') {
ConsoleServices.security()
.userAcl()
.then((eitherAcl) => {
Expand All @@ -82,8 +82,8 @@ const UserContextProvider = ({ children }) => {
} else {
setError(eitherAcl.value.message);
}
setLoadingAcl(false);
});
})
.finally(() => setLoadingAcl(false));
}
}, [loadingAcl, init]);

Expand Down
66 changes: 16 additions & 50 deletions src/services/keycloakService.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Keycloak, { KeycloakConfig, KeycloakLoginOptions } from 'keycloak-js';
import Keycloak, { KeycloakError, KeycloakLoginOptions } from 'keycloak-js';

export class KeycloakService {
private initialized = false;
Expand All @@ -13,24 +13,21 @@ export class KeycloakService {
return this.instance;
}

public static init(configOptions: KeycloakConfig | undefined): Promise<void> {
public init(configOptions: Keycloak.KeycloakConfig | undefined): Promise<boolean> {
if (!configOptions) {
console.error('Unable to init Keycloak with undefined configOptions');
return new Promise((resolve, reject) => reject('Unable to init Keycloak with undefined configOptions'));
} else {
KeycloakService.keycloakAuth = new Keycloak(configOptions);

return new Promise((resolve, reject) => {
KeycloakService.keycloakAuth
.init({})
.then(() => {
KeycloakService.Instance.initialized = true;
resolve();
})
.catch((errorData) => {
reject(errorData);
});
});
return KeycloakService.keycloakAuth
.init()
.catch((errorData: KeycloakError) => {
console.error(errorData);
return false;
})
.finally(() => {
KeycloakService.Instance.initialized = true;
});
}
}

Expand All @@ -42,30 +39,12 @@ export class KeycloakService {
return KeycloakService.keycloakAuth.authenticated ? KeycloakService.keycloakAuth.authenticated : false;
}

public login(options?: KeycloakLoginOptions): Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
KeycloakService.keycloakAuth
.login(options)
.then(() => {
resolve(true);
})
.catch(() => {
reject(false);
});
});
public login(options?: KeycloakLoginOptions): Promise<void> {
return KeycloakService.keycloakAuth.login(options);
}

public logout(redirectUri?: string): Promise<void> {
return new Promise<void>((resolve, reject) => {
KeycloakService.keycloakAuth
.logout({ redirectUri: redirectUri })
.then(() => {
resolve();
})
.catch(() => {
reject();
});
});
return KeycloakService.keycloakAuth.logout({ redirectUri: redirectUri });
}

public account(): void {
Expand All @@ -81,20 +60,7 @@ export class KeycloakService {
return KeycloakService.keycloakAuth.realm;
}

public getToken(): Promise<string> {
return new Promise<string>((resolve, reject) => {
if (KeycloakService.keycloakAuth.token) {
KeycloakService.keycloakAuth
.updateToken(5)
.then(() => {
resolve(KeycloakService.keycloakAuth.token as string);
})
.catch(() => {
reject('Failed to refresh token');
});
} else {
reject('Not logged in');
}
});
public getToken(): Promise<boolean> {
return KeycloakService.keycloakAuth.updateToken(5);
}
}