Add warning tooltip if token expiration time out

This commit is contained in:
ArtemDzhereleiko 2021-09-23 13:02:00 +03:00
parent 942cadfc73
commit b57a58712e
5 changed files with 36 additions and 16 deletions

View File

@ -85,9 +85,9 @@
</button> </button>
</div> </div>
<div fxLayout="row" fxLayoutAlign=" center" style="padding-bottom: 16px;"> <div fxLayout="row" fxLayoutAlign=" center" style="padding-bottom: 16px;">
<button mat-raised-button ngxClipboard <button mat-raised-button
(cbOnSuccess)="onTokenCopied()" type="button"
[cbContent]="jwtToken"> (click)="copyToken()">
<mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon> <mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon>
<span>{{ 'profile.copy-jwt-token' | translate }}</span> <span>{{ 'profile.copy-jwt-token' | translate }}</span>
</button> </button>

View File

@ -36,6 +36,7 @@ import { isDefinedAndNotNull } from '@core/utils';
import { getCurrentAuthUser } from '@core/auth/auth.selectors'; import { getCurrentAuthUser } from '@core/auth/auth.selectors';
import { ActionNotificationShow } from '@core/notification/notification.actions'; import { ActionNotificationShow } from '@core/notification/notification.actions';
import { DatePipe } from '@angular/common'; import { DatePipe } from '@angular/common';
import { ClipboardService } from 'ngx-clipboard';
@Component({ @Component({
selector: 'tb-profile', selector: 'tb-profile',
@ -54,8 +55,12 @@ export class ProfileComponent extends PageComponent implements OnInit, HasConfir
return `Bearer ${localStorage.getItem('jwt_token')}`; return `Bearer ${localStorage.getItem('jwt_token')}`;
} }
get jwtTokenExpiration(): string {
return localStorage.getItem('jwt_token_expiration');
}
get expirationJwtData(): string { get expirationJwtData(): string {
const expirationData = this.datePipe.transform(localStorage.getItem('jwt_token_expiration'), 'yyyy-MM-dd HH:mm:ss'); const expirationData = this.datePipe.transform(this.jwtTokenExpiration, 'yyyy-MM-dd HH:mm:ss');
return this.translate.instant('profile.valid-till', { expirationData }); return this.translate.instant('profile.valid-till', { expirationData });
} }
@ -67,7 +72,8 @@ export class ProfileComponent extends PageComponent implements OnInit, HasConfir
public dialog: MatDialog, public dialog: MatDialog,
public dialogService: DialogService, public dialogService: DialogService,
public fb: FormBuilder, public fb: FormBuilder,
private datePipe: DatePipe) { private datePipe: DatePipe,
private clipboardService: ClipboardService) {
super(store); super(store);
this.authUser = getCurrentAuthUser(this.store); this.authUser = getCurrentAuthUser(this.store);
} }
@ -153,13 +159,24 @@ export class ProfileComponent extends PageComponent implements OnInit, HasConfir
return this.authUser.authority === Authority.SYS_ADMIN; return this.authUser.authority === Authority.SYS_ADMIN;
} }
onTokenCopied() { copyToken() {
this.store.dispatch(new ActionNotificationShow({ if (+this.jwtTokenExpiration < Date.now()) {
message: this.translate.instant('profile.tokenCopiedMessage'), this.store.dispatch(new ActionNotificationShow({
type: 'success', message: this.translate.instant('profile.tokenCopiedWarnMessage'),
duration: 750, type: 'warn',
verticalPosition: 'bottom', duration: 1500,
horizontalPosition: 'right' verticalPosition: 'bottom',
})); horizontalPosition: 'right'
}));
} else {
this.clipboardService.copyFromContent(this.jwtToken);
this.store.dispatch(new ActionNotificationShow({
message: this.translate.instant('profile.tokenCopiedSuccessMessage'),
type: 'success',
duration: 750,
verticalPosition: 'bottom',
horizontalPosition: 'right'
}));
}
} }
} }

View File

@ -2367,7 +2367,8 @@
"current-password": "Current password", "current-password": "Current password",
"copy-jwt-token": "Copy JWT token", "copy-jwt-token": "Copy JWT token",
"valid-till": "Valid till {{expirationData}}", "valid-till": "Valid till {{expirationData}}",
"tokenCopiedMessage": "JWT token has been copied to clipboard" "tokenCopiedSuccessMessage": "JWT token has been copied to clipboard",
"tokenCopiedWarnMessage": "JWT token is expired! Please, refresh the page."
}, },
"relation": { "relation": {
"relations": "Relations", "relations": "Relations",

View File

@ -1265,7 +1265,8 @@
"current-password": "Текущий пароль", "current-password": "Текущий пароль",
"copy-jwt-token": "Копировать JWT токен", "copy-jwt-token": "Копировать JWT токен",
"valid-till": "Действителен до {{expirationData}}", "valid-till": "Действителен до {{expirationData}}",
"tokenCopiedMessage": "JWT токен скопирован в буфер обмена" "tokenCopiedMessage": "JWT токен скопирован в буфер обмена",
"tokenCopiedWarnMessage": "JWT токен недействителен! Перезагрузите страницу."
}, },
"relation": { "relation": {
"relations": "Отношения", "relations": "Отношения",

View File

@ -1680,7 +1680,8 @@
"current-password": "Поточний пароль", "current-password": "Поточний пароль",
"copy-jwt-token": "Копіювати JWT токен", "copy-jwt-token": "Копіювати JWT токен",
"valid-till": "Дійсний до {{expirationData}}", "valid-till": "Дійсний до {{expirationData}}",
"tokenCopiedMessage": "JWT токен скопійовано в буфер обміну" "tokenCopiedMessage": "JWT токен скопійовано в буфер обміну",
"tokenCopiedWarnMessage": "JWT токен не є дійсним! Перезавантажте сторінку."
}, },
"relation": { "relation": {
"relations": "Відношення", "relations": "Відношення",