diff --git a/src/lib/utils/AuthService.ts b/src/lib/utils/AuthService.ts new file mode 100644 index 00000000..44aa56a8 --- /dev/null +++ b/src/lib/utils/AuthService.ts @@ -0,0 +1,52 @@ +import { + AUTH_URL, + AUTH_CLIENT_ID, + AUTH_REDIRECT_URI, + AUTH_SILENT_REDIRECT_URI, + AUTH_POST_LOGOUT_URI +} from '$lib/config'; +import { User, UserManager } from 'oidc-client-ts'; + +export class AuthService { + userManager: UserManager; + + constructor() { + const settings = { + authority: AUTH_URL, + client_id: AUTH_CLIENT_ID, + redirect_uri: AUTH_REDIRECT_URI, + silent_redirect_uri: AUTH_SILENT_REDIRECT_URI, + post_logout_redirect_uri: AUTH_POST_LOGOUT_URI, + scope: 'openid online_access', + }; + this.userManager = new UserManager(settings); + } + + getUser(): Promise { + return this.userManager.getUser(); + } + + login(): Promise { + return this.userManager.signinRedirect(); + } + + renewToken(): Promise { + return this.userManager.signinSilent(); + } + + logout(): Promise { + return this.userManager.signoutRedirect(); + } + + async isAuthenticated(): Promise { + return this.getUser().then((user) => { + if (user?.access_token) { + return true; + } else { + return this.renewToken().then((user) => { + return user?.access_token ? true : false; + }); + } + }); + } +} \ No newline at end of file