diff --git a/Elsa.sln.DotSettings b/Elsa.sln.DotSettings index 2850b89bf..12055bae2 100644 --- a/Elsa.sln.DotSettings +++ b/Elsa.sln.DotSettings @@ -2,4 +2,5 @@ True True True + True True \ No newline at end of file diff --git a/src/designer/elsa-workflows-designer/src/modules/login/components/login-page.tsx b/src/designer/elsa-workflows-designer/src/modules/login/components/login-page.tsx index c9f72e1a6..96740e08b 100644 --- a/src/designer/elsa-workflows-designer/src/modules/login/components/login-page.tsx +++ b/src/designer/elsa-workflows-designer/src/modules/login/components/login-page.tsx @@ -1,7 +1,6 @@ import {Component, h, State, Event, EventEmitter} from "@stencil/core"; import {LoginApi} from "../services"; import {Container} from "typedi"; -import jwt_decode from "jwt-decode"; import {AuthContext} from "../../../services"; import {SignedInArgs} from "../models"; @@ -43,7 +42,7 @@ export class LoginPage { const accessToken = loginResponse.accessToken; const refreshToken = loginResponse.refreshToken; const authContext = Container.get(AuthContext); - await authContext.signinTokens(accessToken, refreshToken, rememberMe); + await authContext.signin(accessToken, refreshToken, rememberMe); } private renderError = () => { diff --git a/src/designer/elsa-workflows-designer/src/modules/login/plugin.tsx b/src/designer/elsa-workflows-designer/src/modules/login/plugin.tsx index 58621ca6b..e80e31bee 100644 --- a/src/designer/elsa-workflows-designer/src/modules/login/plugin.tsx +++ b/src/designer/elsa-workflows-designer/src/modules/login/plugin.tsx @@ -6,7 +6,6 @@ import {Container, Service} from "typedi"; import {StudioService, AuthContext, EventBus, ElsaClient, ElsaClientProvider} from "../../services"; import descriptorsStore from '../../data/descriptors-store'; import {SignedInArgs} from "./models"; -import {AxiosInstance} from "axios"; import {LoginApi} from "./services"; @Service() @@ -64,14 +63,16 @@ export class LoginPlugin implements Plugin { }, async onResponseError(error) { - if (error.response.status !== 401 || error.response.config.hasRetriedRequest) + + if (error.response.status !== 401 || error.response.config.hasRetriedRequest) return; const authContext = Container.get(AuthContext); const loginResponse = await loginApi.refreshAccessToken(authContext.getRefreshToken()); + if (loginResponse.isAuthenticated) { - - await authContext.signinTokens(loginResponse.accessToken, loginResponse.refreshToken, true); + + await authContext.updateTokens(loginResponse.accessToken, loginResponse.refreshToken, true); const t = await service.http({ ...error.config, @@ -85,7 +86,7 @@ export class LoginPlugin implements Plugin { return t; } else { - authContext.signOut(); + await authContext.signOut(); } } }); diff --git a/src/designer/elsa-workflows-designer/src/modules/login/services.ts b/src/designer/elsa-workflows-designer/src/modules/login/services.ts index 8c40a0727..93ae3e8f9 100644 --- a/src/designer/elsa-workflows-designer/src/modules/login/services.ts +++ b/src/designer/elsa-workflows-designer/src/modules/login/services.ts @@ -1,9 +1,8 @@ import 'reflect-metadata'; -import {Container, Service} from "typedi"; -import {ElsaClientProvider, EventBus, ServerSettings} from "../../services"; +import {Service} from "typedi"; +import {ElsaClientProvider, ServerSettings} from "../../services"; import {LoginResponse} from "./models"; -import axios, {AxiosError, AxiosRequestConfig} from "axios"; -import {EventTypes} from "../../models"; +import axios, {AxiosRequestConfig} from "axios"; @Service() export class LoginApi { @@ -32,4 +31,4 @@ export class LoginApi { .then(response => response.data) .catch(error => error.response) } -} \ No newline at end of file +} diff --git a/src/designer/elsa-workflows-designer/src/services/auth.ts b/src/designer/elsa-workflows-designer/src/services/auth.ts index 7703987c5..dd23e3d2d 100644 --- a/src/designer/elsa-workflows-designer/src/services/auth.ts +++ b/src/designer/elsa-workflows-designer/src/services/auth.ts @@ -29,14 +29,19 @@ export class AuthContext { } } - async signinTokens(accessToken: string, refreshToken: string, createPersistentCookie: boolean){ + async signin(accessToken: string, refreshToken: string, createPersistentCookie: boolean){ + await this.updateTokens(accessToken, refreshToken, createPersistentCookie); + await this.eventBus.emit(EventTypes.Auth.SignedIn) + } + + async updateTokens(accessToken: string, refreshToken: string, createPersistentCookie: boolean){ const claims = jwt_decode(accessToken); const permissions = claims.permissions || []; const name = claims.name || ''; - await this.signIn(name, permissions, accessToken, refreshToken, createPersistentCookie); + await this.updateSession(name, permissions, accessToken, refreshToken, createPersistentCookie); } - async signIn(name: string, permissions: Array, accessToken: string, refreshToken: string, createPersistentCookie: boolean) { + updateSession(name: string, permissions: Array, accessToken: string, refreshToken: string, createPersistentCookie: boolean) { authStore.name = name; authStore.permissions = permissions; authStore.signedIn = true; @@ -49,8 +54,6 @@ export class AuthContext { if (createPersistentCookie) { cookies.set("dashboard-session", data); } - - await this.eventBus.emit(EventTypes.Auth.SignedIn) } async signOut() {