diff --git a/smp-angular/src/app/common/dialogs/session-expiration-dialog/session-expiration-dialog.component.html b/smp-angular/src/app/common/dialogs/session-expiration-dialog/session-expiration-dialog.component.html index 593b9c2c81022ae3357d9875baeef579572a6601..e4bfc80e945b3fde7ae9deb0936d12e2fa26bad0 100644 --- a/smp-angular/src/app/common/dialogs/session-expiration-dialog/session-expiration-dialog.component.html +++ b/smp-angular/src/app/common/dialogs/session-expiration-dialog/session-expiration-dialog.component.html @@ -1,6 +1,7 @@ <h2 mat-dialog-title>{{ "session.expiration.dialog.title" | translate }}</h2> <mat-dialog-content> - <div innerHTML='{{"session.expiration.dialog.label.session.about.to.expire" | translate:{timeLeft: data.timeLeft, timeout: data.timeout} }}'></div> + <div innerHTML='{{"session.expiration.dialog.label.session.about.to.expire" | translate:{timeLeft: data.timeLeft, + timeoutMinutes: sessionDurationInMinutes, timeoutSeconds: sessionDurationInMinutesReminder} }}'></div> </mat-dialog-content> <mat-dialog-actions> <button mat-raised-button mat-dialog-close (click)="onLogoutClicked()" tabindex="-1"> diff --git a/smp-angular/src/app/common/dialogs/session-expiration-dialog/session-expiration-dialog.component.ts b/smp-angular/src/app/common/dialogs/session-expiration-dialog/session-expiration-dialog.component.ts index 126f7d769912facedf070c48b6f90cad443a4743..403310ef55eaa63f8138bd41aab2633e435b7560 100644 --- a/smp-angular/src/app/common/dialogs/session-expiration-dialog/session-expiration-dialog.component.ts +++ b/smp-angular/src/app/common/dialogs/session-expiration-dialog/session-expiration-dialog.component.ts @@ -24,5 +24,13 @@ export class SessionExpirationDialogComponent { this.securityService.logout(); this.dialogRef.close(); } + + get sessionDurationInMinutes() { + return Math.floor(this.data.timeout / 60); + } + + get sessionDurationInMinutesReminder() { + return this.data.timeout % 60; + } } diff --git a/smp-angular/src/app/http/http-session-interceptor.ts b/smp-angular/src/app/http/http-session-interceptor.ts index d3cd24c4fb91786ec07936f6f4871a78cd8c7214..2e6a7f1cde465472910665a655097406c53b34fa 100644 --- a/smp-angular/src/app/http/http-session-interceptor.ts +++ b/smp-angular/src/app/http/http-session-interceptor.ts @@ -7,6 +7,7 @@ import {MatDialog} from "@angular/material/dialog"; import { SessionExpirationDialogComponent } from "../common/dialogs/session-expiration-dialog/session-expiration-dialog.component"; +import {TranslateService} from "@ngx-translate/core"; /* * A custom interceptor that handles session expiration before it happens. @@ -26,6 +27,8 @@ export class HttpSessionInterceptor implements HttpInterceptor { private timerToLogoutId: number; constructor(public securityService: SecurityService, + private alertService: AlertMessageService, + private translateService: TranslateService, private dialog: MatDialog) { } @@ -33,7 +36,7 @@ export class HttpSessionInterceptor implements HttpInterceptor { clearTimeout(this.timerId); clearTimeout(this.timerToLogoutId); let user = this.securityService.getCurrentUser(); - if (user && user.sessionMaxIntervalTimeoutInSeconds && user.sessionMaxIntervalTimeoutInSeconds > this.TIME_BEFORE_EXPIRATION_IN_SECONDS) { + if (user?.sessionMaxIntervalTimeoutInSeconds && user.sessionMaxIntervalTimeoutInSeconds > this.TIME_BEFORE_EXPIRATION_IN_SECONDS) { let timeout = Math.min((user.sessionMaxIntervalTimeoutInSeconds - this.TIME_BEFORE_EXPIRATION_IN_SECONDS) * 1000, this.MAXIMUM_TIMEOUT_VALUE); this.timerId = setTimeout(() => this.sessionExpiringSoon(user.sessionMaxIntervalTimeoutInSeconds), timeout); } @@ -44,6 +47,7 @@ export class HttpSessionInterceptor implements HttpInterceptor { // Logout the user after the session expires this.timerToLogoutId = setTimeout(() => { this.securityService.logout(); + this.alertService.errorForTranslation("session.alert.message.logout.expired", true); }, this.TIME_BEFORE_EXPIRATION_IN_SECONDS * 1000); this.dialog.open(SessionExpirationDialogComponent, { diff --git a/smp-angular/src/assets/i18n/en.json b/smp-angular/src/assets/i18n/en.json index 21eef02b49fd3562839039a75cce41d18920989c..a367f0d5a647ed2bdf39964f05f3601c9b3fcf0c 100644 --- a/smp-angular/src/assets/i18n/en.json +++ b/smp-angular/src/assets/i18n/en.json @@ -92,7 +92,8 @@ "session.expiration.dialog.button.expire": "Extend", "session.expiration.dialog.button.logout": "Logout", "session.expiration.dialog.title": "Extend session", - "session.expiration.dialog.label.session.about.to.expire": "Your session is about to expire in <b>{{timeLeft}}</b> seconds!<br />Would you like to logout now or extend it for another <b>{{timeout}}</b> seconds?", + "session.expiration.dialog.label.session.about.to.expire": "Your session is about to expire in <b>{{timeLeft}}</b> seconds!<br />Would you like to logout now or extend it<br /> for another <b>{{timeoutMinutes}}</b> minute(s) and <b>{{timeoutSeconds}}</b> second(s)?", + "session.alert.message.logout.expired": "Your session has expired, and you have been logged out", "alert.panel.title": "Alerts", "alert.panel.user.title": "{{value}} (Email: '{{mailTo}}')", "certificate.panel.title": "Selected certificate data",