From 7f6de94ab572be66d7f10758c37dcf10af46b4e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jovan=20Kruni=C4=87?= Date: Tue, 11 Apr 2023 16:29:53 +0200 Subject: [PATCH] fix: browser logout only if endSession url defined Closes #395 --- src/app/modules/auth/auth-helper.service.ts | 30 +++++++++++++++++-- .../page/profile-page-section.component.ts | 30 ++----------------- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/app/modules/auth/auth-helper.service.ts b/src/app/modules/auth/auth-helper.service.ts index 0de61a59..fa0534be 100644 --- a/src/app/modules/auth/auth-helper.service.ts +++ b/src/app/modules/auth/auth-helper.service.ts @@ -29,6 +29,7 @@ import {StorageProvider} from '../storage/storage.provider'; import {DefaultAuthService} from './default-auth.service'; import {PAIAAuthService} from './paia/paia-auth.service'; import {SimpleBrowser} from '../../util/browser.factory'; +import {AlertController} from '@ionic/angular'; const AUTH_ORIGIN_PATH = 'stapps.auth.origin_path'; @@ -45,6 +46,7 @@ export class AuthHelperService { private defaultAuth: DefaultAuthService, private paiaAuth: PAIAAuthService, private browser: SimpleBrowser, + private alertController: AlertController, ) { this.userConfigurationMap = ( this.configProvider.getAnyValue('auth') as { @@ -118,11 +120,33 @@ export class AuthHelperService { /** * Ends browser session by opening endSessionEndpoint URL of the provider + * + * @param providerType Type of the provider (e.g. 'default' or 'paia') */ async endBrowserSession(providerType: SCAuthorizationProviderType) { - const endSessionEndpoint = (await this.getProvider(providerType).configuration).endSessionEndpoint ?? ''; - if (endSessionEndpoint.length > 0) { - this.browser.open(new URL(endSessionEndpoint).href); + const endSessionEndpoint = (await this.getProvider(providerType).configuration).endSessionEndpoint; + + if (endSessionEndpoint) { + const alert: HTMLIonAlertElement = await this.alertController.create({ + header: this.translateService.instant(`auth.messages.${providerType}.log_out_alert.header`), + message: this.translateService.instant(`auth.messages.${providerType}.log_out_alert.message`), + buttons: [ + { + text: this.translateService.instant('no'), + cssClass: 'default', + }, + { + text: this.translateService.instant('yes'), + role: 'confirm', + cssClass: 'preferred', + handler: () => { + this.browser.open(new URL(endSessionEndpoint).href); + }, + }, + ], + }); + + await alert.present(); } } } diff --git a/src/app/modules/profile/page/profile-page-section.component.ts b/src/app/modules/profile/page/profile-page-section.component.ts index 6e7b2b52..f9103d52 100644 --- a/src/app/modules/profile/page/profile-page-section.component.ts +++ b/src/app/modules/profile/page/profile-page-section.component.ts @@ -19,8 +19,6 @@ import {AuthHelperService} from '../../auth/auth-helper.service'; import {Observable, Subscription} from 'rxjs'; import {SCAuthorizationProviderType} from '@openstapps/core'; import Swiper from 'swiper'; -import {AlertController} from '@ionic/angular'; -import {TranslateService} from '@ngx-translate/core'; @Component({ selector: 'stapps-profile-page-section', @@ -55,11 +53,7 @@ export class ProfilePageSectionComponent implements OnInit, OnDestroy { }, }; - constructor( - private authHelper: AuthHelperService, - private alertController: AlertController, - private translateService: TranslateService, - ) {} + constructor(private authHelper: AuthHelperService) {} ngOnInit() { if (this.item.authProvider) { @@ -100,27 +94,7 @@ export class ProfilePageSectionComponent implements OnInit, OnDestroy { async signOut(providerType: SCAuthorizationProviderType) { await this.authHelper.getProvider(providerType).signOut(); - - const alert: HTMLIonAlertElement = await this.alertController.create({ - header: this.translateService.instant(`auth.messages.${providerType}.log_out_alert.header`), - message: this.translateService.instant(`auth.messages.${providerType}.log_out_alert.message`), - buttons: [ - { - text: this.translateService.instant('no'), - cssClass: 'default', - }, - { - text: this.translateService.instant('yes'), - role: 'confirm', - cssClass: 'preferred', - handler: () => { - this.authHelper.endBrowserSession(providerType); - }, - }, - ], - }); - - await alert.present(); + await this.authHelper.endBrowserSession(providerType); } ngOnDestroy() {