Skip to content

Commit 256b000

Browse files
authored
Merge pull request #31 from SamhammerAG/ASMO-6562-firefox-auth-fix
Asmo-6562: firefox auth fix
2 parents c023b49 + 9c2adb2 commit 256b000

File tree

3 files changed

+43
-17
lines changed

3 files changed

+43
-17
lines changed

sources/src/AuthLogger.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class AuthLogger {
2+
private prefix = "[SAGAUTH]";
3+
4+
public debug(...messages: unknown[]) {
5+
console.debug(this.prefix, ...messages);
6+
}
7+
8+
public log(...messages: unknown[]) {
9+
console.log(this.prefix, ...messages);
10+
}
11+
12+
public warn(...messages: unknown[]) {
13+
console.warn(this.prefix, ...messages);
14+
}
15+
16+
public error(...messages: unknown[]) {
17+
console.error(this.prefix, ...messages);
18+
}
19+
}
20+
21+
export default new AuthLogger();

sources/src/AuthPlugin.ts

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { v4 as uuidv4 } from "uuid";
55
import type { AuthOptions } from "./AuthOptions";
66
import { AuthEvents, AuthEventNames } from "./AuthEvents";
77
import StoreProvider from "./StoreProvider";
8+
import AuthLogger from "./AuthLogger";
89

910
export class AuthPlugin {
1011
private authOptions: AuthOptions | undefined;
@@ -130,11 +131,14 @@ class KeycloakPlugin {
130131
idTokenKey: `${authOptions.appClientId}-idToken`
131132
};
132133

133-
return this.initKeycloak();
134+
AuthLogger.log("Init keycloak");
135+
return await this.initKeycloak();
134136
} catch (error) {
135-
console.error("auth init failed", error);
137+
AuthLogger.warn("Init keycloak failed", error);
136138
await this.clearStorage();
137-
return false;
139+
140+
AuthLogger.log("Retry init keycloak without tokens");
141+
return await this.initKeycloak();
138142
}
139143
}
140144

@@ -158,9 +162,7 @@ class KeycloakPlugin {
158162
...this.pluginState.authOptions.keycloakInitOptions
159163
});
160164

161-
if (authenticated) {
162-
console.debug("authenticated keycloak");
163-
}
165+
AuthLogger.debug(authenticated ? "Authenticated keycloak" : "Not authenticated keycloak");
164166

165167
return authenticated;
166168
}
@@ -171,28 +173,28 @@ class KeycloakPlugin {
171173
}
172174

173175
public async login(redirectUri: string, idp: string): Promise<void> {
174-
console.debug("login navigating to keycloak with returnUrl", redirectUri);
176+
AuthLogger.debug("Login navigating to keycloak with returnUrl", redirectUri);
175177

176178
if (!this.pluginState || !this.pluginState?.keycloak) throw new Error("Init has to be called first");
177179
await this.pluginState.keycloak.login({ redirectUri, idpHint: idp });
178180
}
179181

180182
public createLoginUrl(redirectUri: string, idp: string): string {
181-
console.debug("create loginUrl to keycloak with returnUrl", redirectUri);
183+
AuthLogger.debug("Create loginUrl to keycloak with returnUrl", redirectUri);
182184

183185
if (!this.pluginState || !this.pluginState.keycloak) throw new Error("Init has to be called first");
184186
return this.pluginState.keycloak.createLoginUrl({ redirectUri, idpHint: idp });
185187
}
186188

187189
public createLogoutUrl(redirectUri: string): string {
188-
console.debug("create logoutUrl to keycloak with returnUrl", redirectUri);
190+
AuthLogger.debug("Create logoutUrl to keycloak with returnUrl", redirectUri);
189191

190192
if (!this.pluginState || !this.pluginState.keycloak) throw new Error("Init has to be called first");
191193
return this.pluginState.keycloak.createLogoutUrl({ redirectUri });
192194
}
193195

194196
public async logout(redirectUri: string): Promise<void> {
195-
console.debug("logout navigating to keycloak with returnUrl", redirectUri);
197+
AuthLogger.debug("Logout navigating to keycloak with returnUrl", redirectUri);
196198

197199
await this.clearStorage();
198200

@@ -223,10 +225,10 @@ class KeycloakPlugin {
223225
const successful: boolean = await this.pluginState.keycloak.updateToken(minValidity);
224226

225227
if (successful) {
226-
console.debug("token refreshed");
228+
AuthLogger.debug("Token refreshed");
227229
}
228230
} catch (error) {
229-
console.error("token refresh failed", error || "token may be empty");
231+
AuthLogger.error("Token refresh failed", error || "token may be empty");
230232
}
231233
}
232234

@@ -277,7 +279,9 @@ class GuestPlugin {
277279

278280
if (guestId) {
279281
guestRoles = authOptions.guestRoles || ["User"];
280-
console.debug("authenticated guest");
282+
AuthLogger.debug("Authenticated guest");
283+
} else {
284+
AuthLogger.debug("Not authenticated guest");
281285
}
282286

283287
this.pluginState = {
@@ -290,7 +294,7 @@ class GuestPlugin {
290294
}
291295

292296
public async login(authOptions: AuthOptions): Promise<void> {
293-
console.debug("login guest");
297+
AuthLogger.debug("Login guest");
294298

295299
if (!this.pluginState) throw new Error("Init has to be called first");
296300

@@ -301,7 +305,7 @@ class GuestPlugin {
301305
}
302306

303307
public async logout(): Promise<void> {
304-
console.debug("logout guest");
308+
AuthLogger.debug("Logout guest");
305309

306310
if (!this.pluginState) return;
307311

sources/src/AxiosAuthInterceptor.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { AxiosError, AxiosInstance } from "axios";
22
import { AuthEvents, AuthEventNames } from "./AuthEvents";
33
import Auth from "./index";
4+
import AuthLogger from "./AuthLogger";
45

56
export class AxiosAuthInterceptor {
67
public static addAuthTokenInterceptor(axiosInstance: AxiosInstance): number {
@@ -22,10 +23,10 @@ export class AxiosAuthInterceptor {
2223
public static addAuthErrorInterceptor(axiosInstance: AxiosInstance): number {
2324
return axiosInstance.interceptors.response.use(null, (error: AxiosError) => {
2425
if (error.response?.status === 401) {
25-
console.warn("axios api request requires authentication", error.config?.url, error.message);
26+
AuthLogger.warn("Axios api request requires authentication", error.config?.url, error.message);
2627
AuthEvents.emit(AuthEventNames.loginRequired);
2728
} else if (error.response?.status === 403) {
28-
console.warn("axios api request requires permission", error.config?.url, error.message);
29+
AuthLogger.warn("Axios api request requires permission", error.config?.url, error.message);
2930
AuthEvents.emit(AuthEventNames.permissionDenied);
3031
}
3132

0 commit comments

Comments
 (0)