ssi-security-commons 0.0.21 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/lib/alert/alert.component.mjs +5 -5
- package/esm2022/lib/services/auth-interceptor.service.mjs +162 -0
- package/esm2022/lib/services/crypto.service.mjs +41 -0
- package/esm2022/lib/services/jwt.service.mjs +29 -0
- package/{esm2020 → esm2022}/lib/services/messages.service.mjs +4 -4
- package/esm2022/lib/services/session.service.mjs +318 -0
- package/esm2022/lib/shared/constants.mjs +5 -0
- package/esm2022/lib/ssi-security-commons.component.mjs +13 -0
- package/esm2022/lib/ssi-security-commons.module.mjs +56 -0
- package/{esm2020 → esm2022}/lib/ssi-security-commons.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/user.model.mjs +1 -1
- package/esm2022/public-api.mjs +14 -0
- package/{fesm2020 → fesm2022}/ssi-security-commons.mjs +224 -132
- package/fesm2022/ssi-security-commons.mjs.map +1 -0
- package/lib/alert/alert.component.d.ts +1 -1
- package/lib/services/auth-interceptor.service.d.ts +2 -1
- package/lib/services/jwt.service.d.ts +6 -0
- package/lib/services/session.service.d.ts +14 -6
- package/lib/shared/constants.d.ts +4 -0
- package/lib/ssi-security-commons.component.d.ts +1 -1
- package/lib/user.model.d.ts +13 -1
- package/package.json +10 -16
- package/public-api.d.ts +2 -0
- package/esm2020/lib/services/auth-interceptor.service.mjs +0 -162
- package/esm2020/lib/services/crypto.service.mjs +0 -35
- package/esm2020/lib/services/session.service.mjs +0 -258
- package/esm2020/lib/ssi-security-commons.component.mjs +0 -17
- package/esm2020/lib/ssi-security-commons.module.mjs +0 -55
- package/esm2020/public-api.mjs +0 -12
- package/fesm2015/ssi-security-commons.mjs +0 -768
- package/fesm2015/ssi-security-commons.mjs.map +0 -1
- package/fesm2020/ssi-security-commons.mjs.map +0 -1
- /package/{esm2020 → esm2022}/ssi-security-commons.mjs +0 -0
- /package/{ssi-security-commons.d.ts → index.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssi-security-commons.mjs","sources":["../../../projects/ssi-security-commons/src/lib/ssi-security-commons.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.component.ts","../../../projects/ssi-security-commons/src/lib/services/crypto.service.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.ts","../../../projects/ssi-security-commons/src/lib/alert/alert.component.html","../../../projects/ssi-security-commons/src/lib/shared/constants.ts","../../../projects/ssi-security-commons/src/lib/services/jwt.service.ts","../../../projects/ssi-security-commons/src/lib/services/session.service.ts","../../../projects/ssi-security-commons/src/lib/services/messages.service.ts","../../../projects/ssi-security-commons/src/lib/ssi-security-commons.module.ts","../../../projects/ssi-security-commons/src/lib/services/auth-interceptor.service.ts","../../../projects/ssi-security-commons/src/public-api.ts","../../../projects/ssi-security-commons/src/ssi-security-commons.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SsiSecurityCommonsService {\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ssi-security-commons',\n template: ` <p>ssi-security-commons works!</p>\n `,\n styles: [\n ]\n})\nexport class SsiSecurityCommonsComponent {\n\n}\n","import { Injectable } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\n\n@Injectable()\nexport class CryptoService {\n\n private configuration: any;\n private key: any;\n private secret = '&E)H@McQfThWmZq4';\n\n constructor() {\n this.configuration = {\n mode: CryptoJS.mode.ECB\n };\n const hash = CryptoJS.SHA1(this.secret);\n this.key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n }\n\n encrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.encrypt(text, this.key, this.configuration).toString();\n }\n\n decrypt(text: string): string {\n if (!text) {return '';}\n return CryptoJS.AES.decrypt(text, this.key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n encryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.encrypt(text, key, this.configuration).toString();\n }\n\n decryptWithSecret(text: string, secret: string): string {\n const hash = CryptoJS.SHA1(secret);\n const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));\n return CryptoJS.AES.decrypt(text, key, this.configuration).toString(CryptoJS.enc.Utf8);\n }\n\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nexport interface DialogData {\n title?: string;\n icon?: string;\n type?: string;\n message?: string;\n okText?: string;\n cancelText?: string;\n}\n\n@Component({\n selector: 'lib-app-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss']\n})\nexport class AlertComponent {\n\n constructor(\n public dialogRef: MatDialogRef<AlertComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) { }\n\n onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n onCancel(): void {\n this.dialogRef.close(null);\n }\n}\n","<h1 mat-dialog-title>{{data.title?data.title:'Alert'}}</h1>\n<div mat-dialog-content class=\"alert-min-width\">\n <div>\n {{data.message}}\n </div>\n</div>\n<div mat-dialog-actions align=\"end\">\n <button *ngIf=\"data?.cancelText\" mat-button (click)=\"onCancel()\">{{data.cancelText ? data.cancelText : 'Cancel'}}</button>\n <button mat-button color=\"primary\" (click)=\"onConfirm()\">{{data.okText ? data.okText : 'OK'}}</button>\n</div>\n","export const TOKEN = 'TOKEN';\nexport const REFRESH_TOKEN = 'REFRESH_TOKEN';\nexport const USERDATA = 'USERDATA';\nexport const LANG = 'LANG';\n","/* eslint-disable */\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class JwtService {\n\n public decodeToken(token: string) {\n const _decodeToken = (token: string) => {\n try {\n return JSON.parse(atob(token));\n } catch {\n return;\n }\n };\n return token\n .split('.')\n .map(token => _decodeToken(token))\n .reduce((acc, curr) => {\n if (!!curr) acc = { ...acc, ...curr };\n return acc;\n }, Object.create(null));\n }\n\n}\n","/* eslint-disable max-lines-per-function */\n/* eslint-disable arrow-body-style */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { FrontEndException, UserData } from '../user.model';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CrossStorageClient } from 'cross-storage';\nimport { JwtService } from './jwt.service';\nimport { CryptoService } from './crypto.service';\nimport { REFRESH_TOKEN, TOKEN, USERDATA } from '../shared/constants';\n\n\n@Injectable()\nexport class SessionService {\n\n userdata: UserData | undefined;\n token: string | undefined;\n refreshToken: string | undefined;\n endPoint: string;\n loginUrl = 'http://localhost:4200/login';\n storage: any;\n applicationId: any;\n environment: any;\n\n constructor(private http: HttpClient,\n @Inject('environment') environment: any,\n private cryptoService: CryptoService,\n private jwtService: JwtService) {\n this.endPoint = environment.endPoint;\n this.applicationId = environment.applicationId;\n const urlHub = environment.sessionHub;\n this.environment = environment;\n console.log(urlHub);\n this.storage = new CrossStorageClient(urlHub, {timeout: 5000});\n }\n\n public checkSessionData(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n let data;\n let token;\n let refreshToken;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n \n this.storage.onConnect().then(function () {\n if (self.environment.production) {\n const u = self.cryptoService.encrypt(USERDATA);\n const t = self.cryptoService.encrypt(TOKEN);\n const r = self.cryptoService.encrypt(REFRESH_TOKEN);\n return self.storage.get(u, t, r);\n } else {\n return self.storage.get(USERDATA, TOKEN, REFRESH_TOKEN);\n }\n }).then(function (res: any) {\n console.log(res);\n if (self.environment.production) {\n data = self.cryptoService.decrypt(res[0]);\n token = self.cryptoService.decrypt(res[1]);\n refreshToken = self.cryptoService.decrypt(res[2]);\n } else {\n data = res[0];\n token = res[1];\n refreshToken = res[2];\n }\n if (data && token && refreshToken) {\n self.saveCredentials(token, refreshToken);\n self.checkAppPermissions().then((res1) => {\n console.log(res1);\n resolve('OK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n } else {\n self.destroyCredentials();\n self.destroyUserData();\n self.getLoginUrl().subscribe(res1 => {\n console.log(res1);\n self.loginUrl = res1.data;\n const url = window.location.href;\n if (url.indexOf('/login')<0 && url.indexOf('/forgot')<0 && url.indexOf('/reset')<0) {\n window.location.href = self.loginUrl + '?continue='+encodeURIComponent(url);\n }\n resolve('NOK');\n }, (err) => {\n console.error(err);\n reject(err);\n });\n }\n\n }).catch(function (err: any) {\n console.error(err);\n reject(err);\n });\n });\n return promise;\n }\n\n public buildUserdataFromToken(token: string): any {\n const tokenData = this.jwtService.decodeToken(token);\n const userData: UserData = {\n givenName: tokenData.given_name,\n familyName: tokenData.family_name,\n name: tokenData.name,\n roles: tokenData.realm_access.roles,\n userId: tokenData.sub,\n username: tokenData.preferred_username,\n email: tokenData.email,\n emailVerified: tokenData.email_verified\n };\n return userData;\n }\n\n public async reviewSessionData(): Promise<any> {\n const value = await this.checkSessionData() as any;\n console.log(`async result: ${value}`);\n return value;\n }\n\n public setUserdata(userdata: any): void {\n this.userdata = userdata;\n }\n\n public setTokens(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n }\n\n public getUserdata(): UserData | undefined {\n return this.userdata;\n }\n\n public setRefreshToken(refreshToken: any): void {\n this.refreshToken = refreshToken;\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n }\n\n public getRefreshToken(): string | undefined {\n return this.refreshToken;\n }\n\n public setToken(token: any): any {\n this.token = token;\n this.saveStorageData(TOKEN, token);\n }\n\n public getToken(): any {\n return this.token;\n }\n\n public destroyCredentials(): void {\n this.token = undefined;\n this.refreshToken = undefined;\n this.deleteStorageData(TOKEN);\n this.deleteStorageData(REFRESH_TOKEN);\n }\n\n public destroyUserData(): void {\n this.userdata = undefined;\n this.deleteStorageData(USERDATA);\n }\n\n public saveCredentials(token: any, refreshToken: any): void {\n this.token = token;\n this.refreshToken = refreshToken;\n this.saveStorageData(TOKEN, token);\n this.saveStorageData(REFRESH_TOKEN, refreshToken);\n this.saveUserData(this.buildUserdataFromToken(token));\n }\n\n public saveUserData(userData: any): void {\n this.userdata = userData;\n this.saveStorageData(USERDATA, JSON.stringify(userData));\n }\n\n public isLoggedIn(): boolean {\n return !!this.userdata;\n }\n\n logout(): Promise<any> {\n return new Promise((resolve, reject) => {\n this.logoutApi().subscribe(res => {\n console.log(res);\n this.destroyCredentials();\n this.destroyUserData();\n this.goToLogin();\n resolve(null);\n }, (err) => {\n this.destroyCredentials();\n this.destroyUserData();\n console.error(err);\n reject(err);\n });\n });\n }\n\n getNewToken(refreshToken: string): any {\n console.log('getNewToken');\n const body = 'grant_type=refresh_token' + '&refresh_token=' + refreshToken + '&client_id=' + this.environment.authClient;\n\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/token`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n getLoginUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/login/url')\n .pipe(\n map(res => res));\n }\n\n getHomeUrl(): Observable<any> {\n return this.http.get<any>(this.endPoint + '/auth/home/url')\n .pipe(\n map(res => res));\n }\n\n logoutApi(): Observable<any> {\n const body = 'refresh_token=' + this.refreshToken + '&client_id=' + this.environment.authClient;\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post<any>(`${this.environment.authEndPoint}/realms/${this.environment.authRealm}/protocol/openid-connect/logout`,\n body, {headers})\n .pipe(\n map(res => res));\n }\n\n goToLogin(): void {\n this.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n window.location.href = loginUrl;\n }, (err) => {\n console.error(err);\n });\n }\n\n public loadSessionData(): void {\n let data;\n let token;\n let refreshToken;\n if (this.environment.production) {\n const u = this.cryptoService.encrypt(USERDATA);\n const t = this.cryptoService.encrypt(TOKEN);\n const r = this.cryptoService.encrypt(REFRESH_TOKEN);\n data = window.localStorage.getItem(u);\n token = window.localStorage.getItem(t);\n refreshToken = window.localStorage.getItem(r);\n } else {\n data = window.localStorage.getItem(USERDATA);\n token = window.localStorage.getItem(TOKEN);\n refreshToken = window.localStorage.getItem(REFRESH_TOKEN);\n }\n if (data && token && refreshToken) {\n const user = JSON.parse(data);\n this.setTokens(token, refreshToken);\n this.setUserdata(user);\n }\n }\n\n userHasOptionsInApp(userId: any, applicationId: any): Observable<any> {\n return this.http.get<any>(this.endPoint + `/security/option/${applicationId}/${userId}`)\n .pipe(\n map(res => res));\n }\n\n checkAppPermissions(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n console.log(this.userdata?.userId, this.applicationId);\n if (this.applicationId) {\n this.userHasOptionsInApp(this.userdata?.userId, this.applicationId).subscribe(res => {\n console.log(res);\n if (res.data) {\n resolve('ok');\n } else {\n this.getHomeUrl().subscribe(res1 => {\n console.log(res1);\n const homeUrl = res1.data;\n window.location.href = homeUrl;\n reject('nok');\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n }\n }, (err) => {\n console.error(err);\n reject('nok');\n });\n } else {\n resolve('ok');\n }\n });\n return promise;\n }\n\n\n // eslint-disable-next-line max-len\n public getOptionsUser(applicationId: number | null, type: string | null, language: string | null, entityCode: string | null, parentOptionId: number | null, includeData: boolean | null): Observable<any> {\n const param = {\n userId: this.userdata?.userId,\n applicationId,\n type,\n language,\n entityCode,\n parentOptionId,\n includeData\n };\n return this.http.post<any>(this.endPoint + '/security/option/user', param)\n .pipe(\n map(res => res));\n }\n\n registerException(param: FrontEndException): Observable<any> {\n const headers = new HttpHeaders().set('skipError', 'true');\n return this.http.post<any>(this.endPoint + '/auth/exception/log', param, {headers})\n .pipe(\n map(res => res));\n }\n\n saveStorageData(key: string, value: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n const v = this.cryptoService.encrypt(value);\n window.localStorage.setItem(k, v);\n this.storage.onConnect().then(() => {\n return this.storage.set(k, v);\n });\n } else {\n window.localStorage.setItem(key, value);\n this.storage.onConnect().then(() => {\n return this.storage.set(key, value);\n });\n }\n }\n\n deleteStorageData(key: string): void {\n if (this.environment.production) {\n const k = this.cryptoService.encrypt(key);\n window.localStorage.removeItem(k);\n this.storage.onConnect().then(() => {\n return this.storage.del(k);\n });\n } else {\n window.localStorage.removeItem(key);\n this.storage.onConnect().then(() => {\n return this.storage.del(key);\n });\n }\n }\n\n}\n\n","/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable max-lines-per-function */\n/* eslint-disable quote-props */\nimport { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n// import { Router } from '@angular/router';\nimport { AlertComponent } from '../alert/alert.component';\nimport { FrontEndException } from '../user.model';\nimport { SessionService } from './session.service';\n\n\n@Injectable()\nexport class MessagesService {\n\n private interceptorMessages: any;\n applicationId: any;\n\n constructor(\n public auth: SessionService,\n // private router: Router,\n private snackBar: MatSnackBar,\n public dialog: MatDialog,\n @Inject('environment') environment: any\n ) {\n this.applicationId = environment.applicationId;\n }\n\n\n // eslint-disable-next-line max-lines-per-function\n showErrorMessage(error: HttpErrorResponse, request: HttpRequest<any>): void {\n console.log('error: ', error);\n this.registerLog(error, request);\n const msgs: any = this.getInterceptorMessages();\n switch (error.status) {\n case 302: {\n this.messageSnackError(error);\n break;\n }\n case 400: {\n this.showSnackError(error.message, ['snack-error']);\n break;\n }\n case 403: {\n this.goNavigateLogin(msgs);\n break;\n }\n case 404: {\n this.showSnackError(msgs.auth_interceptor.not_found, ['snack-error']);\n break;\n }\n case 409: {\n this.messageAlertDialog(error, msgs);\n break;\n }\n case 412: {\n this.showSnackError(error.error.responseMessage, ['snack-error']);\n break;\n }\n case 422: {\n this.messageAlertDialog(error, msgs);\n break;\n }\n case 428: {\n this.showSnackError(error.error.responseMessage, ['snack-error']);\n break;\n }\n case 500: {\n this.messageAlertDialog(error, msgs);\n break;\n }\n case 503: {\n this.showSnackError(msgs.auth_interceptor.unavailable, ['snack-error']);\n break;\n }\n case -1: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n case 0: {\n this.showSnackError(msgs.auth_interceptor.connection_error);\n break;\n }\n }\n }\n\n messageSnackError(error: any): void {\n const errorMessage = error.error && error.error.responseMessage ? error.error.responseMessage :\n error.error.message ? error.error.message : error.message;\n this.showSnackError(errorMessage, ['snack-error']);\n }\n\n goNavigateLogin(msgs: any): void {\n // if (this.router.url !== '/login') {\n this.showSnackError(msgs.auth_interceptor.session_lost, ['snack-error']);\n // this.router.navigate(['/login']);\n this.auth.destroyCredentials();\n this.auth.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n if (url.indexOf(loginUrl)<0) {\n window.location.href = loginUrl + '?continue='+encodeURIComponent(url);\n }\n }, (err) => {\n console.error(err);\n });\n // }\n }\n\n messageAlertDialog(error: any, msgs: any): void {\n console.log(error);\n let message = '';\n if (error.error.description) {\n message = error.error.description;\n if (error.error.exception)\n {message = message + '\\n\\n'+msgs.auth_interceptor.code+': ' + error.error.exception;}\n } else if (error.error.responseMessage) {\n message = error.error.responseMessage;\n if (error.error.exceptionId)\n {message = message + '\\n\\n'+msgs.auth_interceptor.code+': ' + error.error.exceptionId;}\n } else if (error.error.message) {\n message = error.error.message;\n if (error.error.exceptionId)\n {message = message + '\\n\\n'+msgs.auth_interceptor.code+': ' + error.error.exceptionId;}\n } else if (error.message) {\n message = error.message;\n if (error.error.exceptionId)\n {message = message + '\\n\\n'+msgs.auth_interceptor.code+': ' + error.error.exceptionId;}\n } else {\n message = msgs.auth_interceptor.message;\n }\n this.dialog.open(AlertComponent, {\n disableClose: true,\n data: { title: msgs.auth_interceptor.title, message }\n });\n }\n\n showSnackError(message: any, panelClass: any[] = []): void {\n console.log(message);\n setTimeout(() => {\n this.snackBar.open(message, undefined, {\n duration: 5000,\n panelClass,\n verticalPosition: 'top'\n });\n });\n }\n\n setInterceptorMessages(message: any): void {\n this.interceptorMessages = message;\n }\n\n // eslint-disable-next-line max-lines-per-function\n getInterceptorMessages(): string {\n if (!this.interceptorMessages) {\n const lang = window.localStorage.getItem('LANG');\n const messagesEn = {\n auth_interceptor : {\n session_lost :'Session lost, you have to login again.',\n not_found: 'Resource not found',\n title: 'We are sorry!',\n message: 'We had a problem trying to process your request.',\n code:'Code',\n unavailable:'Service unavailable, please try again in a few minutes.',\n connection_error:'Could not connect to server, please check your network connection.'\n }\n };\n const messagesEs = {\n auth_interceptor: {\n session_lost: 'Su sesión expiró, debe iniciar sesión nuevamente.',\n not_found: 'Recurso no encontrado',\n title: '¡Lo sentimos!',\n message: 'Tuvimos un problema al tratar de procesar su solicitud.',\n code: 'Código',\n unavailable: 'Servicio no disponible, inténtelo de nuevo en unos minutos.',\n connection_error: 'No se pudo conectar al servidor, verifique su conexión de red.'\n }\n };\n if (lang && lang==='en') {\n this.interceptorMessages = messagesEn;\n } else {\n this.interceptorMessages = messagesEs;\n }\n }\n return this.interceptorMessages;\n }\n\n\n registerLog(error: HttpErrorResponse, request: HttpRequest<any>): void {\n const u = this.auth.getUserdata();\n const param: FrontEndException = {\n httpStatus: error.status,\n httpStatusText: error.statusText,\n errorMessage: error.message,\n currentUrl: window.location.href,\n requestUrl: request.urlWithParams?request.urlWithParams: undefined,\n requestBody: request.body?JSON.stringify(request.body):undefined,\n userId: u?u.userId: undefined,\n applicationId: this.applicationId,\n requestDate: new Date()\n };\n this.auth.registerException(param).subscribe({\n next: (response) => {\n console.log('registerException', response);\n },\n error: (err: any) => {\n console.error('registerException', err);\n }\n });\n }\n\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CryptoService } from './services/crypto.service';\nimport { AlertComponent } from './alert/alert.component';\nimport { MessagesService } from './services/messages.service';\nimport { SessionService } from './services/session.service';\nimport { SsiSecurityCommonsComponent } from './ssi-security-commons.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { JwtService } from './services/jwt.service';\n\n\n@NgModule({\n declarations: [\n SsiSecurityCommonsComponent,\n AlertComponent\n ],\n imports: [\n MatSnackBarModule,\n MatDialogModule,\n MatButtonModule\n ],\n exports: [\n SsiSecurityCommonsComponent\n ],\n providers: [\n MessagesService,\n SessionService,\n CryptoService,\n JwtService\n ]\n})\nexport class SsiSecurityCommonsModule {\n static forRoot(environment: any): ModuleWithProviders<SsiSecurityCommonsModule> {\n return {\n ngModule: SsiSecurityCommonsModule,\n providers: [{provide: 'environment', useValue: environment}]\n };\n }\n}\n","/* eslint-disable */\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport {\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor,\n HttpErrorResponse,\n HttpResponse\n} from '@angular/common/http';\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\nimport { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators';\nimport { MessagesService } from './messages.service';\nimport { CryptoService } from './crypto.service';\nimport { Router } from '@angular/router';\nimport { SessionService } from './session.service';\nimport { LANG, TOKEN } from '../shared/constants';\n\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n private environment;\n\n constructor(private cryptoService: CryptoService, @Inject('environment') environment: any) {\n console.log('AuthInterceptor constructor');\n this.environment = environment;\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n let token;\n if(this.environment.production) {\n const t = this.cryptoService.encrypt(TOKEN);\n const to = window.localStorage.getItem(t);\n if (to) {\n token = this.cryptoService.decrypt(to);\n }\n } else {\n token = window.localStorage.getItem(TOKEN);\n }\n\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true'){\n let body = request.body;\n let bodyStr = JSON.stringify(body);\n var newBody = {\n encrypted: this.cryptoService.encrypt(bodyStr)\n }\n request = request.clone({\n body: newBody\n });\n }\n if (token) {\n request = request.clone({\n setHeaders: {\n Authorization: 'Bearer ' + token,\n }\n });\n }\n\n const l = window.localStorage.getItem(LANG);\n if (l && request.url.indexOf(this.environment.authEndPoint)<0) {\n request = request.clone({\n headers: request.headers.append('Language', l)\n });\n }\n return next.handle(request);\n }\n}\n\n\n@Injectable()\nexport class ResponseInterceptor implements HttpInterceptor {\n\n private messages: MessagesService | undefined;\n private isRefreshing = false;\n private refreshTokenSubject: BehaviorSubject<any> = new BehaviorSubject<any>(null);\n\n constructor(private injector: Injector,\n private router: Router,\n private cryptoService: CryptoService,\n private sessionService: SessionService) {\n setTimeout(() => {\n this.messages = this.injector.get(MessagesService);\n })\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n\n return next.handle(request).pipe(\n map((event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n let encrypt = request.headers.get('encrypted');\n if(encrypt && encrypt === 'true' && event.body.encrypted){\n event = event.clone({body: this.decryptBody(event.body)});\n }\n }\n return event;\n }),\n catchError(error => {\n if (error instanceof HttpErrorResponse) {\n console.error(error);\n let nerror = error;\n if (this.router.url != '/login' && this.router.url.indexOf('/login')<0) {\n if (nerror.status === 401) {\n return this.handle401Error(request, next);\n } else {\n let skipError = request.headers.get('skipError');\n if(skipError && skipError==='true'){\n return throwError(nerror);\n } else {\n this.messages?.showErrorMessage(nerror, request);\n }\n }\n } else {\n return throwError(nerror);\n }\n }\n })) as Observable<HttpEvent<any>>;\n }\n\n decryptBody(body: any): any {\n let encrypted = body.encrypted;\n let strJson = this.cryptoService.decrypt(encrypted);\n return JSON.parse(strJson);\n }\n\n\n private handle401Error(request: HttpRequest<any>, next: HttpHandler) {\n if (!this.isRefreshing) {\n this.isRefreshing = true;\n this.refreshTokenSubject.next(null);\n const refreshToken = this.sessionService.getRefreshToken();\n if (refreshToken){\n return this.sessionService.getNewToken(refreshToken).pipe(\n switchMap((res: any) => {\n console.log('refresh token response');\n console.log(res);\n this.isRefreshing = false;\n this.sessionService.setToken(res.data.accessToken);\n this.sessionService.setRefreshToken(res.data.refreshToken);\n this.refreshTokenSubject.next(res.data.accessToken);\n return next.handle(this.addTokenHeader(request, res.data.accessToken));\n }),\n catchError((err) => {\n this.isRefreshing = false;\n this.sessionService.logout();\n this.goToLogin();\n return throwError(err);\n })\n );\n }\n } else {\n return this.refreshTokenSubject.pipe(\n filter(token => token !== null),\n take(1),\n switchMap((token) => next.handle(this.addTokenHeader(request, token)))\n );\n }\n }\n\n private addTokenHeader(request: HttpRequest<any>, token: string) {\n return request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });\n }\n\n private goToLogin(): void {\n this.sessionService.getLoginUrl().subscribe(res => {\n console.log(res);\n const loginUrl = res.data;\n const url = window.location.href;\n if (url.indexOf(loginUrl)<0) {\n window.location.href = loginUrl + '?continue='+encodeURIComponent(url);\n }\n }, (err) => {\n console.error(err);\n });\n }\n\n}\n\n\n\n\n","/*\n * Public API Surface of ssi-security-commons\n */\n\nexport * from './lib/ssi-security-commons.service';\nexport * from './lib/ssi-security-commons.component';\nexport * from './lib/ssi-security-commons.module';\nexport * from './lib/services/auth-interceptor.service';\nexport * from './lib/services/session.service';\nexport * from './lib/services/messages.service';\nexport * from './lib/user.model';\nexport * from './lib/services/crypto.service';\nexport * from './lib/services/jwt.service';\nexport * from './lib/shared/constants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.CryptoService","i3.JwtService","i2","i1.CryptoService","i3.SessionService"],"mappings":"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"}
|
|
@@ -15,5 +15,5 @@ export declare class AlertComponent {
|
|
|
15
15
|
onConfirm(): void;
|
|
16
16
|
onCancel(): void;
|
|
17
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<AlertComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AlertComponent, "lib-app-alert", never, {}, {}, never, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AlertComponent, "lib-app-alert", never, {}, {}, never, never, false, never>;
|
|
19
19
|
}
|
|
@@ -7,7 +7,8 @@ import { SessionService } from './session.service';
|
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export declare class AuthInterceptor implements HttpInterceptor {
|
|
9
9
|
private cryptoService;
|
|
10
|
-
|
|
10
|
+
private environment;
|
|
11
|
+
constructor(cryptoService: CryptoService, environment: any);
|
|
11
12
|
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
|
|
12
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<AuthInterceptor, never>;
|
|
13
14
|
static ɵprov: i0.ɵɵInjectableDeclaration<AuthInterceptor>;
|
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { FrontEndException,
|
|
2
|
+
import { FrontEndException, UserData } from '../user.model';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
|
+
import { JwtService } from './jwt.service';
|
|
5
|
+
import { CryptoService } from './crypto.service';
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
5
7
|
export declare class SessionService {
|
|
6
8
|
private http;
|
|
7
|
-
|
|
9
|
+
private cryptoService;
|
|
10
|
+
private jwtService;
|
|
11
|
+
userdata: UserData | undefined;
|
|
8
12
|
token: string | undefined;
|
|
9
13
|
refreshToken: string | undefined;
|
|
10
14
|
endPoint: string;
|
|
11
15
|
loginUrl: string;
|
|
12
16
|
storage: any;
|
|
13
17
|
applicationId: any;
|
|
14
|
-
|
|
18
|
+
environment: any;
|
|
19
|
+
constructor(http: HttpClient, environment: any, cryptoService: CryptoService, jwtService: JwtService);
|
|
15
20
|
checkSessionData(): Promise<any>;
|
|
21
|
+
buildUserdataFromToken(token: string): any;
|
|
16
22
|
reviewSessionData(): Promise<any>;
|
|
17
23
|
setUserdata(userdata: any): void;
|
|
18
24
|
setTokens(token: any, refreshToken: any): void;
|
|
19
|
-
getUserdata():
|
|
25
|
+
getUserdata(): UserData | undefined;
|
|
20
26
|
setRefreshToken(refreshToken: any): void;
|
|
21
27
|
getRefreshToken(): string | undefined;
|
|
22
28
|
setToken(token: any): any;
|
|
@@ -24,19 +30,21 @@ export declare class SessionService {
|
|
|
24
30
|
destroyCredentials(): void;
|
|
25
31
|
destroyUserData(): void;
|
|
26
32
|
saveCredentials(token: any, refreshToken: any): void;
|
|
27
|
-
saveUserData(
|
|
33
|
+
saveUserData(userData: any): void;
|
|
28
34
|
isLoggedIn(): boolean;
|
|
29
35
|
logout(): Promise<any>;
|
|
30
36
|
getNewToken(refreshToken: string): any;
|
|
31
37
|
getLoginUrl(): Observable<any>;
|
|
32
38
|
getHomeUrl(): Observable<any>;
|
|
33
|
-
logoutApi(
|
|
39
|
+
logoutApi(): Observable<any>;
|
|
34
40
|
goToLogin(): void;
|
|
35
41
|
loadSessionData(): void;
|
|
36
42
|
userHasOptionsInApp(userId: any, applicationId: any): Observable<any>;
|
|
37
43
|
checkAppPermissions(): Promise<any>;
|
|
38
44
|
getOptionsUser(applicationId: number | null, type: string | null, language: string | null, entityCode: string | null, parentOptionId: number | null, includeData: boolean | null): Observable<any>;
|
|
39
45
|
registerException(param: FrontEndException): Observable<any>;
|
|
46
|
+
saveStorageData(key: string, value: string): void;
|
|
47
|
+
deleteStorageData(key: string): void;
|
|
40
48
|
static ɵfac: i0.ɵɵFactoryDeclaration<SessionService, never>;
|
|
41
49
|
static ɵprov: i0.ɵɵInjectableDeclaration<SessionService>;
|
|
42
50
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
export declare class SsiSecurityCommonsComponent {
|
|
3
3
|
static ɵfac: i0.ɵɵFactoryDeclaration<SsiSecurityCommonsComponent, never>;
|
|
4
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SsiSecurityCommonsComponent, "lib-ssi-security-commons", never, {}, {}, never, never>;
|
|
4
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SsiSecurityCommonsComponent, "lib-ssi-security-commons", never, {}, {}, never, never, false, never>;
|
|
5
5
|
}
|
package/lib/user.model.d.ts
CHANGED
|
@@ -25,10 +25,22 @@ export interface FrontEndException {
|
|
|
25
25
|
errorMessage?: string;
|
|
26
26
|
requestBody?: string;
|
|
27
27
|
responseBody?: string;
|
|
28
|
-
userId?:
|
|
28
|
+
userId?: string;
|
|
29
29
|
requestDate?: Date;
|
|
30
30
|
applicationName?: string;
|
|
31
31
|
applicationId?: number;
|
|
32
32
|
requestUrl?: string;
|
|
33
33
|
currentUrl?: string;
|
|
34
34
|
}
|
|
35
|
+
export interface UserData {
|
|
36
|
+
givenName: string;
|
|
37
|
+
familyName: string;
|
|
38
|
+
name: string;
|
|
39
|
+
roles: string[];
|
|
40
|
+
userId: string;
|
|
41
|
+
username: string;
|
|
42
|
+
email: string;
|
|
43
|
+
emailVerified: boolean;
|
|
44
|
+
workPlace?: WorkPlace;
|
|
45
|
+
channel?: Channel;
|
|
46
|
+
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ssi-security-commons",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "^
|
|
6
|
-
"@angular/core": "^
|
|
7
|
-
"@angular/material": "^
|
|
5
|
+
"@angular/common": "^16.0.3",
|
|
6
|
+
"@angular/core": "^16.0.3",
|
|
7
|
+
"@angular/material": "^16.0.2",
|
|
8
8
|
"@types/crypto-js": "^4.1.1",
|
|
9
9
|
"@types/cross-storage": "^0.8.30",
|
|
10
10
|
"crypto-js": "^4.1.1",
|
|
@@ -13,23 +13,17 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"tslib": "^2.3.0"
|
|
15
15
|
},
|
|
16
|
-
"module": "
|
|
17
|
-
"
|
|
18
|
-
"esm2020": "esm2020/ssi-security-commons.mjs",
|
|
19
|
-
"fesm2020": "fesm2020/ssi-security-commons.mjs",
|
|
20
|
-
"fesm2015": "fesm2015/ssi-security-commons.mjs",
|
|
21
|
-
"typings": "ssi-security-commons.d.ts",
|
|
16
|
+
"module": "fesm2022/ssi-security-commons.mjs",
|
|
17
|
+
"typings": "index.d.ts",
|
|
22
18
|
"exports": {
|
|
23
19
|
"./package.json": {
|
|
24
20
|
"default": "./package.json"
|
|
25
21
|
},
|
|
26
22
|
".": {
|
|
27
|
-
"types": "./
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"node": "./fesm2015/ssi-security-commons.mjs",
|
|
32
|
-
"default": "./fesm2020/ssi-security-commons.mjs"
|
|
23
|
+
"types": "./index.d.ts",
|
|
24
|
+
"esm2022": "./esm2022/ssi-security-commons.mjs",
|
|
25
|
+
"esm": "./esm2022/ssi-security-commons.mjs",
|
|
26
|
+
"default": "./fesm2022/ssi-security-commons.mjs"
|
|
33
27
|
}
|
|
34
28
|
},
|
|
35
29
|
"sideEffects": false
|
package/public-api.d.ts
CHANGED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
|
|
4
|
-
import { BehaviorSubject, throwError } from 'rxjs';
|
|
5
|
-
import { catchError, filter, map, switchMap, take } from 'rxjs/operators';
|
|
6
|
-
import { MessagesService } from './messages.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "./crypto.service";
|
|
9
|
-
import * as i2 from "@angular/router";
|
|
10
|
-
import * as i3 from "./session.service";
|
|
11
|
-
export class AuthInterceptor {
|
|
12
|
-
constructor(cryptoService) {
|
|
13
|
-
this.cryptoService = cryptoService;
|
|
14
|
-
console.log('AuthInterceptor constructor');
|
|
15
|
-
}
|
|
16
|
-
intercept(request, next) {
|
|
17
|
-
//console.log('intercept');
|
|
18
|
-
const token = window.localStorage.getItem('TOKEN');
|
|
19
|
-
//console.log(token);
|
|
20
|
-
//console.log(request);
|
|
21
|
-
let encrypt = request.headers.get('encrypted');
|
|
22
|
-
if (encrypt && encrypt === 'true') {
|
|
23
|
-
let body = request.body;
|
|
24
|
-
let bodyStr = JSON.stringify(body);
|
|
25
|
-
var newBody = {
|
|
26
|
-
encrypted: this.cryptoService.encrypt(bodyStr)
|
|
27
|
-
};
|
|
28
|
-
request = request.clone({
|
|
29
|
-
body: newBody
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
if (token) {
|
|
33
|
-
request = request.clone({
|
|
34
|
-
setHeaders: {
|
|
35
|
-
Authorization: 'Bearer ' + token,
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
return next.handle(request);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
AuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: AuthInterceptor, deps: [{ token: i1.CryptoService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
43
|
-
AuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: AuthInterceptor });
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: AuthInterceptor, decorators: [{
|
|
45
|
-
type: Injectable
|
|
46
|
-
}], ctorParameters: function () { return [{ type: i1.CryptoService }]; } });
|
|
47
|
-
export class ResponseInterceptor {
|
|
48
|
-
constructor(injector, router, cryptoService, sessionService) {
|
|
49
|
-
this.injector = injector;
|
|
50
|
-
this.router = router;
|
|
51
|
-
this.cryptoService = cryptoService;
|
|
52
|
-
this.sessionService = sessionService;
|
|
53
|
-
this.isRefreshing = false;
|
|
54
|
-
this.refreshTokenSubject = new BehaviorSubject(null);
|
|
55
|
-
//console.log('ResponseInterceptor constructor');
|
|
56
|
-
setTimeout(() => {
|
|
57
|
-
this.messages = this.injector.get(MessagesService);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
intercept(request, next) {
|
|
61
|
-
return next.handle(request).pipe(map((event) => {
|
|
62
|
-
if (event instanceof HttpResponse) {
|
|
63
|
-
//console.log(request.headers.get('encrypted'));
|
|
64
|
-
let encrypt = request.headers.get('encrypted');
|
|
65
|
-
if (encrypt && encrypt === 'true' && event.body.encrypted) {
|
|
66
|
-
event = event.clone({ body: this.decryptBody(event.body) });
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return event;
|
|
70
|
-
}), catchError(error => {
|
|
71
|
-
if (error instanceof HttpErrorResponse) {
|
|
72
|
-
console.error(error);
|
|
73
|
-
let nerror = error;
|
|
74
|
-
/*let encrypt = request.headers.get('encrypted');
|
|
75
|
-
if(encrypt && encrypt === 'true'){
|
|
76
|
-
nerror = new HttpErrorResponse({
|
|
77
|
-
error: this.decryptBody(error.error),
|
|
78
|
-
headers: error.headers,
|
|
79
|
-
status: error.status,
|
|
80
|
-
statusText: error.statusText,
|
|
81
|
-
url: error.url || request.urlWithParams || undefined,
|
|
82
|
-
});
|
|
83
|
-
}*/
|
|
84
|
-
if (nerror.status === 401) {
|
|
85
|
-
console.log(this.router.url);
|
|
86
|
-
if (this.router.url != '/login' && this.router.url.indexOf('/login') < 0) {
|
|
87
|
-
console.log('401--->' + request.url);
|
|
88
|
-
return this.handle401Error(request, next);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
return throwError(nerror);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
let skipError = request.headers.get('skipError');
|
|
96
|
-
if (skipError && skipError === 'true') {
|
|
97
|
-
return throwError(nerror);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
this.messages?.showErrorMessage(nerror, request);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}));
|
|
105
|
-
}
|
|
106
|
-
decryptBody(body) {
|
|
107
|
-
let encrypted = body.encrypted;
|
|
108
|
-
let strJson = this.cryptoService.decrypt(encrypted);
|
|
109
|
-
return JSON.parse(strJson);
|
|
110
|
-
}
|
|
111
|
-
handle401Error(request, next) {
|
|
112
|
-
//console.log('handle401Error');
|
|
113
|
-
//console.log(this.isRefreshing);
|
|
114
|
-
if (!this.isRefreshing) {
|
|
115
|
-
this.isRefreshing = true;
|
|
116
|
-
this.refreshTokenSubject.next(null);
|
|
117
|
-
const refreshToken = this.sessionService.getRefreshToken();
|
|
118
|
-
//console.log(refreshToken);
|
|
119
|
-
if (refreshToken) {
|
|
120
|
-
return this.sessionService.getNewToken(refreshToken).pipe(switchMap((res) => {
|
|
121
|
-
console.log('refresh token response');
|
|
122
|
-
console.log(res);
|
|
123
|
-
this.isRefreshing = false;
|
|
124
|
-
this.sessionService.setToken(res.data.accessToken);
|
|
125
|
-
this.sessionService.setRefreshToken(res.data.refreshToken);
|
|
126
|
-
this.refreshTokenSubject.next(res.data.accessToken);
|
|
127
|
-
return next.handle(this.addTokenHeader(request, res.data.accessToken));
|
|
128
|
-
}), catchError((err) => {
|
|
129
|
-
this.isRefreshing = false;
|
|
130
|
-
this.sessionService.logout();
|
|
131
|
-
//this.router.navigate(['/login']);
|
|
132
|
-
this.goToLogin();
|
|
133
|
-
return throwError(err);
|
|
134
|
-
}));
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
return this.refreshTokenSubject.pipe(filter(token => token !== null), take(1), switchMap((token) => next.handle(this.addTokenHeader(request, token))));
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
addTokenHeader(request, token) {
|
|
142
|
-
return request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });
|
|
143
|
-
}
|
|
144
|
-
goToLogin() {
|
|
145
|
-
this.sessionService.getLoginUrl().subscribe(res => {
|
|
146
|
-
console.log(res);
|
|
147
|
-
const loginUrl = res.data;
|
|
148
|
-
const url = window.location.href;
|
|
149
|
-
if (url.indexOf(loginUrl) < 0) {
|
|
150
|
-
window.location.href = loginUrl + '?continue=' + encodeURIComponent(url);
|
|
151
|
-
}
|
|
152
|
-
}, (err) => {
|
|
153
|
-
console.error(err);
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
ResponseInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ResponseInterceptor, deps: [{ token: i0.Injector }, { token: i2.Router }, { token: i1.CryptoService }, { token: i3.SessionService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
158
|
-
ResponseInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ResponseInterceptor });
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ResponseInterceptor, decorators: [{
|
|
160
|
-
type: Injectable
|
|
161
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i2.Router }, { type: i1.CryptoService }, { type: i3.SessionService }]; } });
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1pbnRlcmNlcHRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zZXJ2aWNlcy9hdXRoLWludGVyY2VwdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUtMLGlCQUFpQixFQUNqQixZQUFZLEVBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFPckQsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUVwRCwyQkFBMkI7UUFFM0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQscUJBQXFCO1FBQ3JCLHVCQUF1QjtRQUV2QixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyxJQUFHLE9BQU8sSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFDO1lBQy9CLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxP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LEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDekUsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUF5QixFQUFFLEtBQWE7UUFDN0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxTQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzFCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2pDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBQyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsR0FBRyxZQUFZLEdBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztnSEExSFUsbUJBQW1CO29IQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBSZXNwb25zZVxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1lc3NhZ2VzU2VydmljZSB9IGZyb20gJy4vbWVzc2FnZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDcnlwdG9TZXJ2aWNlIH0gZnJvbSAnLi9jcnlwdG8uc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlKSB7XG4gICAgY29uc29sZS5sb2coJ0F1dGhJbnRlcmNlcHRvciBjb25zdHJ1Y3RvcicpO1xuICB9XG5cbiAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuXG4gICAgLy9jb25zb2xlLmxvZygnaW50ZXJjZXB0Jyk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnVE9LRU4nKTtcblxuICAgIC8vY29uc29sZS5sb2codG9rZW4pO1xuICAgIC8vY29uc29sZS5sb2cocmVxdWVzdCk7XG5cbiAgICBsZXQgZW5jcnlwdCA9IHJlcXVlc3QuaGVhZGVycy5nZXQoJ2VuY3J5cHRlZCcpO1xuICAgIGlmKGVuY3J5cHQgJiYgZW5jcnlwdCA9PT0gJ3RydWUnKXtcbiAgICAgIGxldCBib2R5ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgbGV0IGJvZHlTdHIgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICAgIHZhciBuZXdCb2R5ID0ge1xuICAgICAgICBlbmNyeXB0ZWQ6IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KGJvZHlTdHIpXG4gICAgICB9XG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XG4gICAgICAgIGJvZHk6IG5ld0JvZHlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0b2tlbikge1xuICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgdG9rZW4sXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCk7XG4gIH1cbn1cblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgcHJpdmF0ZSBtZXNzYWdlczogTWVzc2FnZXNTZXJ2aWNlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHJlZnJlc2hUb2tlblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2Vzc2lvblNlcnZpY2U6IFNlc3Npb25TZXJ2aWNlKSB7XG4gICAgLy9jb25zb2xlLmxvZygnUmVzcG9uc2VJbnRlcmNlcHRvciBjb25zdHJ1Y3RvcicpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5tZXNzYWdlcyA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1lc3NhZ2VzU2VydmljZSk7XG4gICAgfSlcbiAgfVxuXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcblxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxuICAgICAgbWFwKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmVxdWVzdC5oZWFkZXJzLmdldCgnZW5jcnlwdGVkJykpO1xuICAgICAgICAgICAgbGV0IGVuY3J5cHQgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdlbmNyeXB0ZWQnKTtcbiAgICAgICAgICAgIGlmKGVuY3J5cHQgJiYgZW5jcnlwdCA9PT0gJ3RydWUnICYmIGV2ZW50LmJvZHkuZW5jcnlwdGVkKXtcbiAgICAgICAgICAgICAgZXZlbnQgPSBldmVudC5jbG9uZSh7Ym9keTogdGhpcy5kZWNyeXB0Qm9keShldmVudC5ib2R5KX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBsZXQgbmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAvKmxldCBlbmNyeXB0ID0gcmVxdWVzdC5oZWFkZXJzLmdldCgnZW5jcnlwdGVkJyk7XG4gICAgICAgICAgICBpZihlbmNyeXB0ICYmIGVuY3J5cHQgPT09ICd0cnVlJyl7XG4gICAgICAgICAgICAgIG5lcnJvciA9IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IHRoaXMuZGVjcnlwdEJvZHkoZXJyb3IuZXJyb3IpLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGVycm9yLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogZXJyb3Iuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgICAgICB1cmw6IGVycm9yLnVybCB8fCByZXF1ZXN0LnVybFdpdGhQYXJhbXMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0qL1xuICAgICAgICAgICAgaWYgKG5lcnJvci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsICE9ICcvbG9naW4nICYmIHRoaXMucm91dGVyLnVybC5pbmRleE9mKCcvbG9naW4nKTwwKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnNDAxLS0tPicrIHJlcXVlc3QudXJsKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZTQwMUVycm9yKHJlcXVlc3QsIG5leHQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKG5lcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxldCBza2lwRXJyb3IgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdza2lwRXJyb3InKTtcbiAgICAgICAgICAgICAgaWYoc2tpcEVycm9yICYmIHNraXBFcnJvcj09PSd0cnVlJyl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmVycm9yKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VzPy5zaG93RXJyb3JNZXNzYWdlKG5lcnJvciwgcmVxdWVzdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkpIGFzIE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+O1xuICB9XG5cbiAgZGVjcnlwdEJvZHkoYm9keTogYW55KTogYW55IHtcbiAgICBsZXQgZW5jcnlwdGVkID0gYm9keS5lbmNyeXB0ZWQ7XG4gICAgbGV0IHN0ckpzb24gPSB0aGlzLmNyeXB0b1NlcnZpY2UuZGVjcnlwdChlbmNyeXB0ZWQpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0ckpzb24pO1xuICB9XG5cblxuICBwcml2YXRlIGhhbmRsZTQwMUVycm9yKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgLy9jb25zb2xlLmxvZygnaGFuZGxlNDAxRXJyb3InKTtcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMuaXNSZWZyZXNoaW5nKTtcbiAgICBpZiAoIXRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2cocmVmcmVzaFRva2VuKTtcbiAgICAgICAgaWYgKHJlZnJlc2hUb2tlbil7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uU2VydmljZS5nZXROZXdUb2tlbihyZWZyZXNoVG9rZW4pLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaCB0b2tlbiByZXNwb25zZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnNldFRva2VuKHJlcy5kYXRhLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRSZWZyZXNoVG9rZW4ocmVzLmRhdGEucmVmcmVzaFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQocmVzLmRhdGEuYWNjZXNzVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5hZGRUb2tlbkhlYWRlcihyZXF1ZXN0LCByZXMuZGF0YS5hY2Nlc3NUb2tlbikpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICAgICAgICAgICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdvVG9Mb2dpbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKHRva2VuID0+IHRva2VuICE9PSBudWxsKSxcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHRva2VuKSA9PiBuZXh0LmhhbmRsZSh0aGlzLmFkZFRva2VuSGVhZGVyKHJlcXVlc3QsIHRva2VuKSkpXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRUb2tlbkhlYWRlcihyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCB0b2tlbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QuY2xvbmUoeyBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgdG9rZW4pIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnb1RvTG9naW4oKTogdm9pZCB7XG4gICAgdGhpcy5zZXNzaW9uU2VydmljZS5nZXRMb2dpblVybCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgIGNvbnN0IGxvZ2luVXJsID0gcmVzLmRhdGE7XG4gICAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGlmICh1cmwuaW5kZXhPZihsb2dpblVybCk8MCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGxvZ2luVXJsICsgJz9jb250aW51ZT0nK2VuY29kZVVSSUNvbXBvbmVudCh1cmwpO1xuICAgICAgfVxuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9KTtcbiAgfVxuXG59XG5cblxuXG5cbiJdfQ==
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as CryptoJS from 'crypto-js';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class CryptoService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.secret = '&E)H@McQfThWmZq4';
|
|
7
|
-
this.configuration = {
|
|
8
|
-
mode: CryptoJS.mode.ECB
|
|
9
|
-
};
|
|
10
|
-
const hash = CryptoJS.SHA1(this.secret);
|
|
11
|
-
this.key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));
|
|
12
|
-
}
|
|
13
|
-
encrypt(text) {
|
|
14
|
-
return CryptoJS.AES.encrypt(text, this.key, this.configuration).toString();
|
|
15
|
-
}
|
|
16
|
-
decrypt(text) {
|
|
17
|
-
return CryptoJS.AES.decrypt(text, this.key, this.configuration).toString(CryptoJS.enc.Utf8);
|
|
18
|
-
}
|
|
19
|
-
encryptWithSecret(text, secret) {
|
|
20
|
-
const hash = CryptoJS.SHA1(secret);
|
|
21
|
-
const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));
|
|
22
|
-
return CryptoJS.AES.encrypt(text, key, this.configuration).toString();
|
|
23
|
-
}
|
|
24
|
-
decryptWithSecret(text, secret) {
|
|
25
|
-
const hash = CryptoJS.SHA1(secret);
|
|
26
|
-
const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));
|
|
27
|
-
return CryptoJS.AES.decrypt(text, key, this.configuration).toString(CryptoJS.enc.Utf8);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
CryptoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: CryptoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
31
|
-
CryptoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: CryptoService });
|
|
32
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: CryptoService, decorators: [{
|
|
33
|
-
type: Injectable
|
|
34
|
-
}], ctorParameters: function () { return []; } });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zc2ktc2VjdXJpdHktY29tbW9ucy9zcmMvbGliL3NlcnZpY2VzL2NyeXB0by5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7O0FBR3RDLE1BQU0sT0FBTyxhQUFhO0lBTXhCO1FBRlEsV0FBTSxHQUFHLGtCQUFrQixDQUFDO1FBR2xDLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRztTQUN4QixDQUFDO1FBQ0YsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUNsQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDbEIsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVksRUFBRSxNQUFjO1FBQzVDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsTUFBYztRQUM1QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RixDQUFDOzswR0FoQ1UsYUFBYTs4R0FBYixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ3J5cHRvU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBhbnk7XG4gIHByaXZhdGUga2V5OiBhbnk7XG4gIHByaXZhdGUgc2VjcmV0ID0gJyZFKUhATWNRZlRoV21acTQnO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHtcbiAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuRUNCXG4gICAgfTtcbiAgICBjb25zdCBoYXNoID0gQ3J5cHRvSlMuU0hBMSh0aGlzLnNlY3JldCk7XG4gICAgdGhpcy5rZXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShoYXNoLndvcmRzLnNsaWNlKDAsIDE2IC8gNCkpO1xuICB9XG5cbiAgZW5jcnlwdCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdCh0ZXh0LCB0aGlzLmtleSwgdGhpcy5jb25maWd1cmF0aW9uKS50b1N0cmluZygpO1xuICB9XG5cbiAgZGVjcnlwdCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCB0aGlzLmtleSwgdGhpcy5jb25maWd1cmF0aW9uKS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG4gIH1cblxuICBlbmNyeXB0V2l0aFNlY3JldCh0ZXh0OiBzdHJpbmcsIHNlY3JldDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBoYXNoID0gQ3J5cHRvSlMuU0hBMShzZWNyZXQpO1xuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKGhhc2gud29yZHMuc2xpY2UoMCwgMTYgLyA0KSk7XG4gICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwgdGhpcy5jb25maWd1cmF0aW9uKS50b1N0cmluZygpO1xuICB9XG5cbiAgZGVjcnlwdFdpdGhTZWNyZXQodGV4dDogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzaCA9IENyeXB0b0pTLlNIQTEoc2VjcmV0KTtcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShoYXNoLndvcmRzLnNsaWNlKDAsIDE2IC8gNCkpO1xuICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHRoaXMuY29uZmlndXJhdGlvbikudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xuICB9XG5cbn1cbiJdfQ==
|