@dflat-core/web 1.0.0-beta → 1.0.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/README.md +54 -4
- package/assets/images/DFlat Finder 1000.png +0 -0
- package/assets/images/DFlat Finder 400.png +0 -0
- package/assets/images/DFlat Finder 600.png +0 -0
- package/assets/images/DFlat Finder Grand.png +0 -0
- package/assets/images/DFlatNew.png +0 -0
- package/assets/images/LogoDFlat.svg +1 -0
- package/assets/images/blue-camera.svg +2 -0
- package/assets/images/camera.svg +1 -0
- package/assets/images/checkout/amex.svg +14 -0
- package/assets/images/checkout/default.svg +1 -0
- package/assets/images/checkout/diners.svg +15 -0
- package/assets/images/checkout/maestro.svg +29 -0
- package/assets/images/checkout/mastercard.svg +31 -0
- package/assets/images/checkout/security.svg +8 -0
- package/assets/images/checkout/visa.svg +17 -0
- package/assets/images/heart-regular.svg +6 -0
- package/assets/images/heart-solid.svg +6 -0
- package/assets/images/image-spinner.gif +0 -0
- package/assets/images/map/blue/client.png +0 -0
- package/assets/images/map/blue/client.svg +1 -0
- package/assets/images/map/blue/deliveryman.png +0 -0
- package/assets/images/map/blue/deliveryman.svg +1 -0
- package/assets/images/map/blue/kezako.png +0 -0
- package/assets/images/map/blue/kezako.svg +1 -0
- package/assets/images/map/blue/store.png +0 -0
- package/assets/images/map/blue/store.svg +1 -0
- package/assets/images/map/main/client.png +0 -0
- package/assets/images/map/main/client.svg +1 -0
- package/assets/images/map/main/deliveryman.png +0 -0
- package/assets/images/map/main/deliveryman.svg +1 -0
- package/assets/images/map/main/kezako.png +0 -0
- package/assets/images/map/main/kezako.svg +1 -0
- package/assets/images/map/main/store.png +0 -0
- package/assets/images/map/main/store.svg +1 -0
- package/assets/images/map/primary/client.png +0 -0
- package/assets/images/map/primary/client.svg +1 -0
- package/assets/images/map/primary/deliveryman.png +0 -0
- package/assets/images/map/primary/deliveryman.svg +1 -0
- package/assets/images/map/primary/kezako.png +0 -0
- package/assets/images/map/primary/kezako.svg +1 -0
- package/assets/images/map/primary/store.png +0 -0
- package/assets/images/map/primary/store.svg +1 -0
- package/assets/images/paginator/first.svg +9 -0
- package/assets/images/paginator/last.svg +9 -0
- package/assets/images/paginator/next.svg +9 -0
- package/assets/images/paginator/previous.svg +9 -0
- package/assets/images/qlik.jpg +0 -0
- package/assets/images/qlik.png +0 -0
- package/assets/images/spinner.gif +0 -0
- package/assets/images/timeline-solid.svg +1 -0
- package/core/lib/global/EnvironmentBase.d.ts +15 -0
- package/fesm2022/dflat-core-web-core-services.mjs +3 -3
- package/fesm2022/dflat-core-web-core-services.mjs.map +1 -1
- package/fesm2022/dflat-core-web-core-ux.mjs +4 -4
- package/fesm2022/dflat-core-web-core-ux.mjs.map +1 -1
- package/fesm2022/dflat-core-web-core.mjs.map +1 -1
- package/fesm2022/dflat-core-web-system-ux.mjs +1034 -202
- package/fesm2022/dflat-core-web-system-ux.mjs.map +1 -1
- package/package.json +17 -13
- package/scss/dflat-app.scss +83 -0
- package/system-ux/index.d.ts +13 -0
- package/system-ux/lib/app/access-denied/access-denied.component.d.ts +9 -0
- package/system-ux/lib/app/dflat-app.module.d.ts +49 -0
- package/system-ux/lib/app/history/history.component.d.ts +16 -0
- package/system-ux/lib/app/homepage/homepage.component.d.ts +19 -0
- package/system-ux/lib/app/layout/dflat-layout.component.d.ts +38 -0
- package/system-ux/lib/app/search/search-result/search-result.component.d.ts +42 -0
- package/system-ux/lib/app/search/search.component.d.ts +68 -0
- package/system-ux/lib/app/services/dflat-app.service.d.ts +19 -0
- package/system-ux/lib/app/services/dflat-auth.interceptor.d.ts +16 -0
- package/system-ux/lib/app/services/dflat-permission.service.d.ts +7 -0
- package/system-ux/lib/app/spinner/dflat-spinner.component.d.ts +11 -0
- package/system-ux/lib/app/user-menu/user-menu.component.d.ts +56 -0
- package/system-ux/lib/app/user-profile/user-profile.component.d.ts +35 -0
- package/system-ux/lib/reset-password/reset-password.component.d.ts +1 -1
- package/system-ux/lib/system-ux.module.d.ts +92 -82
- package/assets/images/LogoMarsow.svg +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dflat-core-web-core-services.mjs","sources":["../../core-services/src/lib/services/appConfig.service.ts","../../core-services/src/lib/services/app-keys.ts","../../core-services/src/lib/services/busmessage.service.ts","../../core-services/src/lib/services/local-store-manager.service.ts","../../core-services/src/lib/services/headers.service.ts","../../core-services/src/lib/services/server-url.ts","../../core-services/src/lib/services/permission.service.ts","../../core-services/src/lib/services/menu.service.ts","../../core-services/src/lib/services/auth.service.ts","../../core-services/src/lib/services/auth-guard.service.ts","../../core-services/src/lib/services/breadcrumb.service.ts","../../core-services/src/lib/services/filter.service.ts","../../core-services/src/lib/services/geolocation.service.ts","../../core-services/src/lib/services/notifications.service.ts","../../core-services/src/lib/services/hub.service.ts","../../core-services/src/lib/services/message.service.ts","../../core-services/src/lib/services/screen.service.ts","../../core-services/src/lib/services/user.service.ts","../../core-services/src/lib/core-services.module.ts","../../core-services/src/lib/services/auth.interceptor.ts","../../core-services/src/lib/services/can-activate-guard.service.ts","../../core-services/src/lib/services/string.function.ts","../../core-services/src/lib/model/model.ts","../../core-services/src/dflat-core-web-core-services.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class AppConfiguration {\r\n searchText = \"\";\r\n isSearchAllowed = false;\r\n\r\n constructor( ) {\r\n }\r\n\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class AppKeys {\r\n public static readonly CURRENT_USER = \"current_user\";\r\n public static readonly ACCESS_TOKEN = \"access_token\";\r\n public static readonly REFRESH_TOKEN = \"refresh_token\";\r\n public static readonly TOKEN_EXPIRES_IN = \"expires_in\";\r\n public static readonly REMEMBER_ME = \"remember_me\";\r\n public static readonly PERMISSIONS = \"permissions\";\r\n public static readonly LAST_GEOLOCATIONS = \"geolocations\";\r\n \r\n public static readonly REFERENCE_SUPPLIER_ID = \"refsuppid\";\r\n public static readonly USER_COMPANY_ID = \"companyid\";\r\n public static readonly SELECTED_COMPANY = \"selectedcompany\";\r\n}","\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { Message, Notification } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\n\nimport { Utilities } from '@dflat-core/web/core';\n\n@Injectable()\nexport class BusMessageService {\n private message$: Subject<Message>;\n\n constructor() {\n this.message$ = new Subject<Message>();\n }\n\n public publish<T>(message: T): void {\n const channel = (<any>message.constructor).name;\n this.message$.next({ Channel: channel, Data: message });\n }\n\n public of<T>(messageType: new(...args: any[]) => T): Observable<T> {\n const channel = (<any>messageType).name;\n return this.message$.pipe(filter(m => m.Channel === channel), map(m => m.Data));\n }\n}\n\n@Injectable()\nexport class NotificationMqService {\n private message$: Subject<Message>;\n\n constructor() {\n this.message$ = new Subject<Message>();\n }\n\n public publish<T extends Notification>(message: T): void {\n const defaultchannel = message.entityType\n this.message$.next({ Channel: defaultchannel, Data: message });\n\n if (!Utilities.IsUndefined(message.entityId)) {\n const detailchannel = `${message.entityType}-${message.entityId}`;\n this.message$.next({ Channel: detailchannel, Data: message });\n }\n }\n\n public of<T extends Notification>(channelKey: string): Observable<T> {\n const channel = channelKey;\n return this.message$.pipe(filter(m => m.Channel === channel), map(m => m.Data));\n }\n}\n","import { Observable, Subject } from 'rxjs';\n\nimport { Utilities } from '@dflat-core/web/core';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class LocalStoreManager {\n\n private static syncListenerInitialised = false;\n private syncKeys: string[] = [];\n private initEvent = new Subject();\n\n private reservedKeys: string[] = ['sync_keys', 'addToSyncKeys', 'removeFromSyncKeys',\n 'getSessionStorage', 'setSessionStorage', 'addToSessionStorage', 'removeFromSessionStorage', 'clearAllSessionsStorage'];\n\n public static readonly DBKEY_USER_DATA = \"user_data\";\n private static readonly DBKEY_SYNC_KEYS = \"sync_keys\";\n\n\n //Todo: Implement EventListeners for the various event operations and a SessionStorageEvent for specific data keys\n\n public initialiseStorageSyncListener() {\n if (LocalStoreManager.syncListenerInitialised == true)\n return;\n\n LocalStoreManager.syncListenerInitialised = true;\n window.addEventListener(\"storage\", this.sessionStorageTransferHandler, false);\n this.syncSessionStorage();\n }\n\n\n\n public deinitialiseStorageSyncListener() {\n window.removeEventListener(\"storage\", this.sessionStorageTransferHandler, false);\n LocalStoreManager.syncListenerInitialised = false;\n }\n\n\n private sessionStorageTransferHandler = (event: StorageEvent) => {\n if (!event.newValue)\n return;\n\n if (event.key == 'getSessionStorage') {\n\n if (sessionStorage.length) {\n this.localStorageSetItem('setSessionStorage', sessionStorage);\n localStorage.removeItem('setSessionStorage');\n }\n }\n else if (event.key == 'setSessionStorage') {\n\n if (!this.syncKeys.length)\n this.loadSyncKeys();\n\n let data = JSON.parse(event.newValue);\n //console.info(\"Set => Key: Transfer setSessionStorage\" + \", data: \" + JSON.stringify(data));\n\n for (let key in data) {\n\n if (this.syncKeysContains(key))\n this.sessionStorageSetItem(key, JSON.parse(data[key]));\n }\n\n this.onInit();\n }\n else if (event.key === 'addToSessionStorage') {\n\n let data = JSON.parse(event.newValue);\n\n //console.warn(\"Set => Key: Transfer addToSessionStorage\" + \", data: \" + JSON.stringify(data));\n\n this.addToSessionStorageHelper(data[\"data\"], data[\"key\"]);\n }\n else if (event.key === 'removeFromSessionStorage') {\n\n this.removeFromSessionStorageHelper(event.newValue);\n }\n else if (event.key === 'clearAllSessionsStorage' && sessionStorage.length) {\n\n this.clearInstanceSessionStorage();\n }\n else if (event.key === 'addToSyncKeys') {\n\n this.addToSyncKeysHelper(event.newValue);\n }\n else if (event.key === 'removeFromSyncKeys') {\n\n this.removeFromSyncKeysHelper(event.newValue);\n }\n }\n\n private syncSessionStorage() {\n\n localStorage.setItem('getSessionStorage', '_dummy');\n localStorage.removeItem('getSessionStorage');\n }\n\n\n public clearAllStorage() {\n this.clearAllSessionsStorage();\n this.clearLocalStorage();\n }\n\n\n public clearAllSessionsStorage() {\n this.clearInstanceSessionStorage();\n localStorage.removeItem(LocalStoreManager.DBKEY_SYNC_KEYS);\n localStorage.setItem('clearAllSessionsStorage', '_dummy');\n localStorage.removeItem('clearAllSessionsStorage');\n }\n\n\n public clearInstanceSessionStorage() {\n\n sessionStorage.clear();\n this.syncKeys = [];\n }\n\n\n public clearLocalStorage() {\n localStorage.clear();\n }\n\n\n private addToSessionStorage(data: any, key: string) {\n this.addToSessionStorageHelper(data, key);\n this.addToSyncKeysBackup(key);\n\n this.localStorageSetItem('addToSessionStorage', { key: key, data: data });\n localStorage.removeItem('addToSessionStorage');\n }\n\n private addToSessionStorageHelper(data: any, key: string) {\n\n this.addToSyncKeysHelper(key);\n this.sessionStorageSetItem(key, data);\n }\n\n\n private removeFromSessionStorage(keyToRemove: string) {\n this.removeFromSessionStorageHelper(keyToRemove);\n this.removeFromSyncKeysBackup(keyToRemove);\n\n localStorage.setItem('removeFromSessionStorage', keyToRemove);\n localStorage.removeItem('removeFromSessionStorage');\n }\n\n private removeFromSessionStorageHelper(keyToRemove: string) {\n sessionStorage.removeItem(keyToRemove);\n this.removeFromSyncKeysHelper(keyToRemove);\n }\n\n\n private testForInvalidKeys(key: string) {\n if (!key)\n throw new Error(\"key cannot be empty\")\n\n if (this.reservedKeys.some(x => x === key))\n throw new Error(`The storage key \"${key}\" is reserved and cannot be used. Please use a different key`);\n }\n\n private syncKeysContains(key: string) {\n return this.syncKeys.some(x => x === key);\n }\n\n\n private loadSyncKeys() {\n if (this.syncKeys.length)\n return;\n\n this.syncKeys = this.getSyncKeysFromStorage();\n }\n\n\n private getSyncKeysFromStorage(defaultValue: string[] = []): string[] {\n let data = this.localStorageGetItem(LocalStoreManager.DBKEY_SYNC_KEYS);\n\n if (data == null)\n return defaultValue;\n else\n return <string[]>data;\n }\n\n\n private addToSyncKeys(key: string) {\n this.addToSyncKeysHelper(key);\n this.addToSyncKeysBackup(key);\n\n localStorage.setItem('addToSyncKeys', key);\n localStorage.removeItem('addToSyncKeys');\n }\n\n\n private addToSyncKeysBackup(key: string) {\n let storedSyncKeys = this.getSyncKeysFromStorage();\n\n if (!storedSyncKeys.some(x => x === key)) {\n storedSyncKeys.push(key);\n this.localStorageSetItem(LocalStoreManager.DBKEY_SYNC_KEYS, storedSyncKeys);\n }\n }\n\n private removeFromSyncKeysBackup(key: string) {\n\n let storedSyncKeys = this.getSyncKeysFromStorage();\n let index = storedSyncKeys.indexOf(key);\n\n if (index > -1) {\n storedSyncKeys.splice(index, 1);\n this.localStorageSetItem(LocalStoreManager.DBKEY_SYNC_KEYS, storedSyncKeys);\n }\n }\n\n\n private addToSyncKeysHelper(key: string) {\n if (!this.syncKeysContains(key))\n this.syncKeys.push(key);\n }\n\n\n private removeFromSyncKeys(key: string) {\n this.removeFromSyncKeysHelper(key);\n this.removeFromSyncKeysBackup(key);\n\n localStorage.setItem('removeFromSyncKeys', key);\n localStorage.removeItem('removeFromSyncKeys');\n }\n\n\n private removeFromSyncKeysHelper(key: string) {\n let index = this.syncKeys.indexOf(key);\n\n if (index > -1) {\n this.syncKeys.splice(index, 1);\n }\n }\n\n\n public saveSessionData(data: any, key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n this.removeFromSyncKeys(key);\n localStorage.removeItem(key);\n this.sessionStorageSetItem(key, data);\n }\n\n\n public saveSyncedSessionData(data: any, key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n localStorage.removeItem(key);\n this.addToSessionStorage(data, key);\n }\n\n\n public savePermanentData(data: any, key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n this.removeFromSessionStorage(key);\n this.localStorageSetItem(key, data);\n }\n\n\n\n public moveDataToSessionStorage(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n let data = this.getData(key);\n\n if (data == null)\n return;\n\n this.saveSessionData(data, key);\n }\n\n\n public moveDataToSyncedSessionStorage(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n let data = this.getData(key);\n\n if (data == null)\n return;\n\n this.saveSyncedSessionData(data, key);\n }\n\n\n public moveDataToPermanentStorage(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n let data = this.getData(key);\n\n if (data == null)\n return;\n\n this.savePermanentData(data, key);\n }\n\n\n public exists(key = LocalStoreManager.DBKEY_USER_DATA) {\n let data = sessionStorage.getItem(key);\n\n if (data == null)\n data = localStorage.getItem(key);\n\n return data != null;\n }\n\n\n public getData(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n let data = this.sessionStorageGetItem(key);\n\n if (data == null)\n data = this.localStorageGetItem(key);\n\n return data;\n }\n\n\n public getDataObject<T>(key = LocalStoreManager.DBKEY_USER_DATA, isDateType = false): T {\n let data = this.getData(key);\n\n if (data != null) {\n if (isDateType)\n data = new Date(data);\n\n return <T>data;\n }\n else {\n return null;\n }\n }\n\n\n public deleteData(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n this.removeFromSessionStorage(key);\n localStorage.removeItem(key);\n }\n\n private localStorageSetItem(key: string, data: any) {\n localStorage.setItem(key, JSON.stringify(data));\n }\n\n private sessionStorageSetItem(key: string, data: any) {\n sessionStorage.setItem(key, JSON.stringify(data));\n }\n\n private localStorageGetItem(key: string) {\n return Utilities.JSonTryParse(localStorage.getItem(key));\n }\n\n private sessionStorageGetItem(key: string) {\n return Utilities.JSonTryParse(sessionStorage.getItem(key));\n }\n\n private onInit() {\n setTimeout(() => {\n this.initEvent.next({});\n this.initEvent.complete();\n });\n }\n\n public getInitEvent(): Observable<{}> {\n return this.initEvent.asObservable();\n }\n}\n","\nimport { Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { LocalStoreManager } from './local-store-manager.service';\nimport { AppKeys } from './app-keys';\nimport { Utilities } from '@dflat-core/web/core';\n@Injectable()\nexport class HeadersService {\n\n\n constructor(private localStorage: LocalStoreManager) { }\n\n // for requesting secure data using json\n authJsonHeaders() {\n let result: HttpHeaders = new HttpHeaders()\n .set('Content-Type', 'application/json')\n .set('Accept', 'application/json')\n .set('Authorization', `Bearer ${this.geJWTToken}`);\n return result;\n }\n\n // for requesting secure data from a form post\n authFormHeaders() {\n let result: HttpHeaders = new HttpHeaders()\n .set('Content-Type', 'application/x-www-form-urlencoded')\n .set('Accept', 'application/json')\n .set('Authorization', `Bearer ${this.geJWTToken}`);\n return result;\n }\n\n authFileUploadHeaders()\n {\n return new HttpHeaders()\n .set('Authorization', `Bearer ${this.geJWTToken}`);\n }\n\n // for requesting unsecured data using json\n jsonHeaders() {\n return new HttpHeaders()\n .set('Content-Type', 'application/json')\n .set('Accept', 'application/json');\n }\n\n // for requesting unsecured data using form post\n contentHeadersV2() {\n return new HttpHeaders()\n .set('Content-Type', 'application/x-www-form-urlencoded')\n .set('Accept', 'application/json');\n }\n\n get geJWTToken(): string {\n let result: string = this.localStorage.getDataObject<string>(AppKeys.ACCESS_TOKEN);\n \n if ( Utilities.IsNil(result))\n return '';\n \n return result;\n }\n}\n","export class ServerUrl {\r\n static isProduction: boolean = false;\r\n\r\n // POUR TESTER L'ENVIRONNEMENT DE PROD EN LOCAL DECOMMENTER LES LIGNES\r\n // static baseUrl = (ServerUrl.isProduction ? 'http://localhost:56407' : 'http://localhost:56407');\r\n static baseUrl = (ServerUrl.isProduction ? '' : 'http://localhost:56407');\r\n static apiUrl = ServerUrl.baseUrl + '/api';\r\n static hubUrl = ServerUrl.baseUrl + '/hub';\r\n\r\n static loginPath = '/Account/Login';\r\n static connectPath = '/Account/Connect';\r\n static registerPath = '/Account/Register';\r\n static activatePath = '/Account/Activate';\r\n static refreshPath = '/Account/RefreshToken';\r\n static disconnectPath = '/Account/Disconnect';\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { LocalStoreManager } from './local-store-manager.service';\r\nimport { AppKeys } from './app-keys';\r\n\r\n@Injectable()\r\nexport class PermissionService {\r\n\r\n constructor( private localStorage: LocalStoreManager) {}\r\n\r\n hasPermission(permission: string): boolean {\r\n return this.permissions != null && this.permissions.some(p => p === permission) || this.isAdmin;\r\n }\r\n\r\n get permissions(): Array<any> {\r\n let permissions = this.localStorage.getDataObject<string>(AppKeys.PERMISSIONS);\r\n let parsed_permissions = <Array<any>>JSON.parse(permissions);\r\n return parsed_permissions\r\n }\r\n\r\n get isAdmin(): boolean {\r\n let parsed = JSON.parse(this.currentUser);\r\n return parsed && parsed.IsAdmin || false;\r\n }\r\n\r\n get currentUser(): string {\r\n return this.localStorage.getDataObject<string>(AppKeys.CURRENT_USER);\r\n }\r\n}\r\n","import { ReplaySubject } from 'rxjs';\n\nimport { Utilities } from '@dflat-core/web/core';\nimport { DictionnaryWrapper } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\n\nimport { MenuItem } from '../model/model';\nimport { PermissionService } from './permission.service';\n\n@Injectable()\nexport abstract class MenuService {\n private current: ReplaySubject<MenuItem[]> = new ReplaySubject<MenuItem[]>(1);\n private _permissionRouteMap: DictionnaryWrapper<string>;\n\n public constructor(private permissionService: PermissionService) {\n }\n\n abstract getAllMenuItems(isAdmin:boolean): MenuItem[];\n abstract getAccessGrantedMenuItems(): MenuItem[];\n\n public setCurrent(menu: MenuItem[]) {\n this.current.next(menu);\n }\n\n public getCurrent() {\n return this.current;\n }\n\n get permissionRouteMap() {\n if (Utilities.IsNil(this._permissionRouteMap)) {\n this._permissionRouteMap = new DictionnaryWrapper<string>();\n this.getAllMenuItems(true).forEach(item => {\n if (! Utilities.IsNil(item.sublinks)) {\n item.sublinks.forEach( subItem=> {\n if (subItem.permissionKey) {\n this._permissionRouteMap.dictionary[subItem.link] = subItem.permissionKey;\n }\n });\n }\n });\n }\n\n return this._permissionRouteMap;\n }\n\n\n resetPermissionMap(){\n this._permissionRouteMap = undefined;\n }\n\n hasAccessToThisRoute(url: string):boolean {\n let menuItems = this.getAccessGrantedMenuItems();\n if ( ! Utilities.IsNil( menuItems) && menuItems.findIndex(f => f.link === url) >= 0)\n return true;\n\n if(this.permissionRouteMap.containsKeyOrPartKey(url)){\n return this.hasPermission(this.permissionRouteMap.getPartKey(url));\n }\n // Le menu n'a pas de permissions associé, on renvoie true\n return true;\n }\n\n\n\n pushItem(items: Array<MenuItem>, menuItem: MenuItem, isAdmin:boolean) {\n if (Utilities.IsNil(menuItem.permissionKey) ||\n isAdmin || this.hasPermission(menuItem.permissionKey)\n ) {\n items.push(menuItem);\n }\n }\n\n hasPermission = (permKey: string) => {\n if ( permKey === undefined )\n return true;\n return this.permissionService.hasPermission(permKey);\n }\n\n hasAnyPermission = (permKeys: (string | undefined)[]) => {\n let result = false;\n permKeys.forEach(p => result = result || this.hasPermission(p));\n return result;\n }\n\n getMenuItems(isAdmin: boolean): MenuItem[] {\n\n let results = this.getAllMenuItems(isAdmin);\n\n for(let i = 0; i < results.length; i++)\n results[i].id = i;\n\n return this.sortLinks(results);\n }\n\n private sortLinks(links: MenuItem[]) {\n return links.map(t => { return { ...t, sublinks: this.sortLinksSubLevel(t.sublinks) } });\n }\n\n private sortLinksSubLevel(links: MenuItem[]) {\n if (!links) return null;\n return links.sort((a, b) => a.title.localeCompare(b.title));\n }\n\n// private fillmap(map: Map<string,MenuItem>,menuItems: MenuItem[], parent: string = null )\n// {\n// if ( ! Utilities.IsNil(menuItems)) {\n// menuItems.forEach(x =>{\n// if ( ! Utilities.IsNil(parent))\n// parent = parent.concat(\"/\" + x.title);\n// else\n// parent = x.title;\n// map.set(parent,x);\n// this.fillmap(map,x.sublinks,parent);\n// });\n// }\n// return map;\n// }\n// public mergeall(Menus:MenuItem[][]): MenuItem[]\n// {\n// let menuItem = Array<MenuItem>();\n// let map = new Map<string,MenuItem>();\n// Menus.forEach(menuItem => {\n// this.fillmap(map,menuItem,null);\n\n// });\n// let sortedmap = new Map([...map].sort());\n// sortedmap.forEach(element => {\n// menuItem.push()\n\n// });\n// return menuItem;\n// }\n public merge(Menus:MenuItem[]): MenuItem[]\n {\n // let titles : string[];\n\n // if (!(item.title in titles)){\n // titles.push(item.title);\n // menu.push(item);\n // }\n // else{\n let menu : MenuItem[] = [];\n Menus.forEach(item => {\n \n let index = menu.findIndex(x=>x.title == item.title);\n if(index >= 0)\n menu[index].sublinks = [...menu[index].sublinks,...item.sublinks];\n else\n menu.push(item);\n })\n return menu;\n}\n}\n","\nimport jwt_decode from 'jwt-decode';\nimport { Observable, Subscription, throwError, timer } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\nimport { Utilities, EnvironmentBase } from '@dflat-core/web/core';\nimport { IUserCredential, UserUpdatedMessage } from '@dflat-core/web/core-model';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\n\nimport { AppKeys } from './app-keys';\nimport { BusMessageService } from './busmessage.service';\nimport { HeadersService } from './headers.service';\nimport { LocalStoreManager } from './local-store-manager.service';\nimport { ServerUrl } from './server-url';\nimport { MenuService } from './menu.service';\n\nexport enum AuthTokenType {\n AccessToken,\n RefreshToken\n}\n\n@Injectable()\nexport class AuthService {\n baseUrl = this.env.apiUrl;\n public loginRedirectUrl: string;\n private refreshTokenSubscription: Subscription;\n \n constructor(\n private headersService: HeadersService,\n private busMsg: BusMessageService,\n private httpClient: HttpClient,\n private router: Router,\n private localStorage: LocalStoreManager,\n private menuService : MenuService,\n private env: EnvironmentBase\n ) { \n this.scheduleRefreshToken(this.isLoggedIn,false);\n }\n\n // After a successful login, save token data into session storage\n // note: use \"localStorage\" for persistent, browser-wide logins; \"sessionStorage\" for per-session storage.\n login(username: string, password: string, rememberMe: boolean): Observable<IUserCredential> {\n // console.log(`login base url : ${this.baseUrl} (environment is production : ${this.env.production})`);\n let body = JSON.stringify({ \"username\": username, \"password\": password });\n let _url = this.baseUrl + ServerUrl.connectPath;\n return this.httpClient.post(_url, body, { headers: this.headersService.authJsonHeaders() }).pipe(\n map((resp: Response) => {\n // login successful if there's a jwt token in the response\n // let user = (resp as any) as IUserCredential;\n let user: IUserCredential = (resp as any) as IUserCredential;\n if (user && user.AccessToken) {\n // store user details and jwt token in local storage to keep user logged in between page refreshes\n this.saveUserInfos(user, JSON.stringify(user), rememberMe);\n // publish token\n this.busMsg.publish(new UserUpdatedMessage(user.AccessToken));\n // schedule refresh token\n this.scheduleRefreshToken(true, true);\n \n return user;\n }\n }));\n }\n\n // After a successful login, save token data into session storage\n // note: use \"localStorage\" for persistent, browser-wide logins; \"sessionStorage\" for per-session storage.\n register(captchaToken: string, firstName: string, lastName: string, email: string, password: string, rememberMe: boolean) : Observable<IUserCredential> {\n // console.log(`login base url : ${this.baseUrl} (environment is production : ${this.env.production})`);\n let body = JSON.stringify({ \"CaptchaToken\": captchaToken, \"FirstName\": firstName, \"LastName\": lastName, \"Email\": email, \"Password\": password });\n let _url = this.baseUrl + ServerUrl.registerPath;\n return this.httpClient.post(_url, body, { headers: this.headersService.authJsonHeaders() }).pipe(\n map((resp: Response) => {\n // login successful if there's a jwt token in the response\n let user: IUserCredential = (resp as any) as IUserCredential;\n if (user && user.AccessToken) {\n // store user details and jwt token in local storage to keep user logged in between page refreshes\n this.saveUserInfos(user, JSON.stringify(user), rememberMe);\n // publish token\n this.busMsg.publish(new UserUpdatedMessage(user.AccessToken));\n // schedule refresh token\n this.scheduleRefreshToken(true, true);\n \n return user;\n }\n }));\n }\n\n // Activation d'un utilisateur\n activate(code: string) {\n // console.log(`login base url : ${this.baseUrl} (environment is production : ${this.env.production})`);\n let body = JSON.stringify({ \"ActivationCode\": code });\n let _url = this.baseUrl + ServerUrl.activatePath;\n return this.httpClient.post(_url, body, { headers: this.headersService.authJsonHeaders() }).pipe(\n map((resp: Response) => {\n return resp;\n }));\n }\n\n\n\n saveUserInfos(user: any, userDetails: string, rememberMe?: boolean) {\n\n // check permissions \n let permissions = user.Permissions || new Array<any>();\n // this.getPermissions(user.AccessToken) || new Array<any>();\n\n if (rememberMe) {\n this.localStorage.savePermanentData(user.AccessToken, AppKeys.ACCESS_TOKEN);\n this.localStorage.savePermanentData(user.RefreshToken, AppKeys.REFRESH_TOKEN);\n this.localStorage.savePermanentData(userDetails, AppKeys.CURRENT_USER);\n this.localStorage.savePermanentData(JSON.stringify(permissions), AppKeys.PERMISSIONS);\n }\n else {\n this.localStorage.saveSyncedSessionData(user.AccessToken, AppKeys.ACCESS_TOKEN);\n this.localStorage.saveSyncedSessionData(user.RefreshToken, AppKeys.REFRESH_TOKEN);\n this.localStorage.saveSyncedSessionData(userDetails, AppKeys.CURRENT_USER);\n this.localStorage.saveSyncedSessionData(JSON.stringify(permissions), AppKeys.PERMISSIONS);\n }\n\n if (rememberMe) {\n this.localStorage.savePermanentData(rememberMe, AppKeys.REMEMBER_ME);\n }\n }\n\n getPermissions(token: any) {\n let decodedToken = jwt_decode(token);\n let permissions = new Array<any>();\n if (decodedToken.permissions) {\n permissions = Array.isArray(decodedToken.permissions) ? decodedToken.permissions : [decodedToken.permissions];\n }\n return permissions;\n }\n\n removeUserInfos() {\n this.localStorage.deleteData(AppKeys.ACCESS_TOKEN);\n this.localStorage.deleteData(AppKeys.REFRESH_TOKEN);\n this.localStorage.deleteData(AppKeys.CURRENT_USER);\n this.loginRedirectUrl = '/';\n }\n\n // called when logging out user; clears tokens from browser\n logout(pseudo: string) {\n this.disconnect(pseudo);\n }\n\n disconnect(pseudo: string) {\n const headers = new HttpHeaders({ \"Content-Type\": \"application/json\" });\n const model = { refreshToken: this.refreshToken };\n\n return this.httpClient\n .post(`${this.baseUrl}${ServerUrl.disconnectPath}`, model, { headers: headers })\n .pipe(\n map(response => response || {}),\n finalize(() => {\n this.ensureLogout();\n // navigate to home page\n this.router.navigate(['/']);\n }\n )).subscribe(result => {\n console.log(\"logout\", result);\n });\n \n }\n\n ensureLogout() {\n this.menuService.resetPermissionMap();\n this.busMsg.publish(new UserUpdatedMessage(null));\n this.removeUserInfos();\n this.unscheduleRefreshToken(true);\n }\n\n redirectLoginUser() {\n let redirect = this.loginRedirectUrl && this.loginRedirectUrl !== '/' ? this.loginRedirectUrl : '/';\n this.loginRedirectUrl = null;\n\n let urlParamsAndFragment = Utilities.splitInTwo(redirect, '#');\n let urlAndParams = Utilities.splitInTwo(urlParamsAndFragment.firstPart, '?');\n\n let navigationExtras: NavigationExtras = {\n fragment: urlParamsAndFragment.secondPart,\n queryParams: Utilities.getQueryParamsFromString(urlAndParams.secondPart),\n queryParamsHandling: \"merge\"\n };\n\n this.router.navigate([urlAndParams.firstPart], navigationExtras);\n }\n\n invalidateCurrentTabId() {\n if (!this.rememberMe) {\n return;\n }\n const currentTabId = this.getCurrentTabId();\n if (this.timerStat && this.timerStat.tabId === currentTabId) {\n this.setRefreshTokenTimerStopped();\n }\n }\n\n scheduleRefreshToken(isAuthUserLoggedIn: boolean, calledFromLogin: boolean) {\n this.unscheduleRefreshToken(false);\n\n if (!this.isLoggedIn) {\n return;\n }\n\n const expDateUtc = this.getAccessTokenExpirationDateUtc();\n if (!expDateUtc) {\n throw new Error(\"This access token has not the `exp` property.\");\n }\n const expiresAtUtc = expDateUtc.valueOf();\n const nowUtc = new Date().valueOf();\n // 3s pour empêcher les timers des autres onglets de tourner moins de 3s\n const initialDelay = Math.max(1, expiresAtUtc - nowUtc - 3000);\n const timerSource$ = timer(initialDelay);\n this.refreshTokenSubscription = timerSource$.subscribe(() => {\n if (calledFromLogin || !this.isRefreshTokenTimerStartedInAnotherTab()) {\n this.updateToken();\n } else {\n this.scheduleRefreshToken(isAuthUserLoggedIn, false);\n }\n });\n\n if (calledFromLogin || !this.isRefreshTokenTimerStartedInAnotherTab()) {\n this.setRefreshTokenTimerStarted();\n }\n }\n\n private refreshTokenTimerCheckId = \"is_refreshToken_timer_started\";\n private setRefreshTokenTimerStopped(): void {\n this.localStorage.savePermanentData(JSON.stringify({\n isStarted: false,\n tabId: -1\n }), this.refreshTokenTimerCheckId);\n }\n\n private setRefreshTokenTimerStarted(): void {\n this.localStorage.savePermanentData(JSON.stringify(\n {\n isStarted: true,\n tabId: this.getCurrentTabId()\n }), this.refreshTokenTimerCheckId);\n }\n\n private deleteRefreshTokenTimerCheckId() {\n this.localStorage.deleteData(this.refreshTokenTimerCheckId);\n }\n\n private isRefreshTokenTimerStartedInAnotherTab(): boolean {\n if (!this.rememberMe) {\n return false; // Chaque onglet gère son token (infos stockés dans le local storage)\n }\n\n const currentTabId = this.getCurrentTabId();\n // console.log(\"RefreshTokenTimer Check\", {\n // refreshTokenTimerCheckId: this.timerStat,\n // currentTabId: currentTabId\n // });\n const isStarted = this.timerStat && this.timerStat.isStarted === true && this.timerStat.tabId !== currentTabId;\n // if (isStarted) {\n // console.log(`RefreshToken timer has already been started in another tab with tabId=${this.timerStat.tabId}.\n // currentTabId=${currentTabId}.`);\n // }\n return isStarted;\n }\n\n getCurrentTabId(): number {\n const tabIdToken = \"currentTabId\";\n let tabId = this.localStorage.getData(tabIdToken);\n if (tabId) {\n return tabId;\n }\n tabId = Math.random();\n this.localStorage.saveSyncedSessionData(tabId, tabIdToken);\n return tabId;\n }\n\n getAccessTokenExpirationDateUtc(): Date | null {\n const decoded = this.getDecodedAccessToken();\n if (decoded.exp === undefined) {\n return null;\n }\n const date = new Date(0);\n date.setUTCSeconds(decoded.exp);\n // console.log(`Token Expires at ${date}`);\n return date;\n }\n\n isAccessTokenTokenExpired(): boolean {\n const expirationDateUtc = this.getAccessTokenExpirationDateUtc();\n if (!expirationDateUtc) {\n return true;\n }\n return !(expirationDateUtc.valueOf() > new Date().valueOf());\n }\n\n getDecodedAccessToken(): any {\n return jwt_decode(this.token);\n }\n\n isEmptyString(value: string): boolean {\n return !value || 0 === value.length;\n }\n\n unscheduleRefreshToken(cancelTimerCheckToken: boolean) {\n if (this.refreshTokenSubscription) {\n this.refreshTokenSubscription.unsubscribe();\n }\n\n if (cancelTimerCheckToken) {\n this.deleteRefreshTokenTimerCheckId();\n }\n }\n\n updateToken() {\n console.log(`Entering updateToken()`);\n const headers = new HttpHeaders({ \"Content-Type\": \"application/json\" });\n const model = { refreshToken: this.refreshToken };\n return this.httpClient\n .post(`${this.baseUrl}${ServerUrl.refreshPath}`, model, { headers: headers })\n .pipe(\n map(response => response || {}),\n catchError((error: HttpErrorResponse) =>throwError(() => new Error(error.error)))\n )\n .subscribe(resp => {\n // login successful if there's a jwt token in the response\n let user = (resp as any) as { AccessToken: string, RefreshToken: string, Username?: string, FirstName?: string, LastName?: string, IsAdmin?: boolean, Id?: number };\n if (user && user.AccessToken) {\n // store user details and jwt token in local storage to keep user logged in between page refreshes\n this.saveUserInfos(user, JSON.stringify(user),this.rememberMe);\n // publish token\n this.busMsg.publish(new UserUpdatedMessage(user.AccessToken));\n this.scheduleRefreshToken(this.isLoggedIn, false);\n return user;\n }\n });\n }\n\n hasPermission(permission: string): boolean {\n return this.permissions != null && this.permissions.some(p => p === permission) || this.isAdmin;\n }\n\n //#region Fields\n\n get timerStat() : any {\n const timerStat_key = this.localStorage.getDataObject<string>(this.refreshTokenTimerCheckId);\n const timerStat = JSON.parse(timerStat_key);\n return timerStat;\n }\n\n get isLoggedIn(): boolean {\n const accessToken = this.token;\n const refreshToken = this.refreshToken;\n const hasTokens = !this.isEmptyString(accessToken) && !this.isEmptyString(refreshToken);\n return hasTokens && !this.isAccessTokenTokenExpired();\n }\n\n get isAdmin(): boolean {\n let parsed = JSON.parse(this.currentUser);\n if ( Utilities.IsNil(parsed))\n return false;\n return parsed.IsAdmin || false;\n }\n\n get pseudo(): string {\n let parsed = JSON.parse(this.currentUser);\n return parsed.Username || '';\n }\n\n get userId(): number {\n let parsed = JSON.parse(this.currentUser);\n return parsed.Id || 0;\n }\n\n get currentUser(): string {\n return this.localStorage.getDataObject<string>(AppKeys.CURRENT_USER);\n }\n\n get rememberMe(): boolean {\n return this.localStorage.getDataObject<boolean>(AppKeys.REMEMBER_ME) === true;\n }\n\n get token(): string {\n return this.localStorage.getDataObject<string>(AppKeys.ACCESS_TOKEN);\n }\n\n get refreshToken(): string {\n return this.localStorage.getDataObject<string>(AppKeys.REFRESH_TOKEN);\n }\n\n get permissions(): Array<any> {\n let permissions = this.localStorage.getDataObject<string>(AppKeys.PERMISSIONS);\n let parsed_permissions = <Array<any>>JSON.parse(permissions);\n return parsed_permissions\n }\n\n get companyId() : number {\n const decoded = this.getDecodedAccessToken();\n if (Utilities.IsNil(decoded[AppKeys.USER_COMPANY_ID])) {\n return null;\n }\n return <number>decoded[AppKeys.USER_COMPANY_ID];\n }\n\n get referenceSupplierId() : number {\n const decoded = this.getDecodedAccessToken();\n if (Utilities.IsNil(decoded[AppKeys.REFERENCE_SUPPLIER_ID])) {\n return null;\n }\n return <number>decoded[AppKeys.REFERENCE_SUPPLIER_ID];\n }\n\n //#endregion \n\n navigateToHome(){\n this.router.navigate(['/']);\n }\n}\n","import { Utilities } from '@dflat-core/web/core';\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Route, Router, RouterStateSnapshot } from '@angular/router';\n\nimport { AuthService } from './auth.service';\nimport { MenuService } from './menu.service';\n\n@Injectable()\nexport class AuthGuard {\n constructor(\n private authService: AuthService,\n private menuService: MenuService,\n private router: Router\n ) {}\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): boolean {\n let url: string = state.url;\n return this.checkLogin(url);\n }\n\n canActivateChild(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): boolean {\n return this.canActivate(route, state);\n }\n\n canLoad(route: Route): boolean {\n let url = `/${route.path}`;\n return this.checkLogin(url);\n }\n\n checkLogin(url: string): boolean {\n if (this.authService.isLoggedIn) {\n if (url === '/accessDenied' || this.authService.isAdmin) {\n return true;\n }\n\n return this.hasAuthUserAccessToThisRoute(url);\n }\n\n this.menuService.resetPermissionMap();\n this.authService.loginRedirectUrl = url;\n this.router.navigate(['/login']);\n\n return false;\n }\n\n private hasAuthUserAccessToThisRoute(returnUrl: string): boolean {\n if ( ! this.menuService.hasAccessToThisRoute(Utilities.splitInTwo(returnUrl, '?').firstPart ) ) {\n this.showAccessDenied(returnUrl);\n return false;\n }\n\n return true;\n }\n\n private showAccessDenied(returnUrl: string) {\n this.router.navigate(['/accessDenied']);\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { Title } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\nexport class BreadcrumbService {\r\n public current: ReplaySubject<any>;\r\n private initialData: any = {\r\n description: '',\r\n display: false,\r\n header : '',\r\n\r\n levels: [\r\n {\r\n icon: 'clock-o',\r\n link: ['/'],\r\n title: 'Default'\r\n }\r\n ]\r\n };\r\n\r\n constructor(protected title: Title ) {\r\n this.current = new ReplaySubject(1);\r\n this.clear();\r\n }\r\n\r\n public setCurrent(data: any) {\r\n if ( data.description !== undefined && data.description !== '') {\r\n\r\n this.title.setTitle('Marsow - ' + data.levels[data.levels.length - 1].title);\r\n }\r\n else\r\n this.title.setTitle('Marsow');\r\n\r\n this.current.next(data);\r\n }\r\n\r\n public getCurrent() {\r\n return this.current;\r\n }\r\n\r\n public clear() {\r\n this.setCurrent(this.initialData);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class FilterService {\r\n \r\n private displayFilterChangedSubject = new BehaviorSubject<boolean>(false);\r\n public filterChanged$ = this.displayFilterChangedSubject.asObservable();\r\n \r\n displayFilter: boolean = true;\r\n get DisplayFilter() { return this.displayFilter; } \r\n\r\n \r\n keywords: string ='';\r\n get Keywords() { return this.keywords; } \r\n set Keywords(value: string) { this.keywords = value; } \r\n\r\n public constructor() {\r\n\r\n }\r\n setFilterDisplay(value: boolean) {\r\n if ( this.displayFilter != value ) {\r\n this.displayFilter = value;\r\n \r\n // Déclenchement de l'évènement de changement d'affichage du filtre\r\n this.displayFilterChangedSubject.next(this.displayFilter);\r\n }\r\n }\r\n\r\n toggleFilterDisplay() {\r\n this.displayFilter = !this.displayFilter;\r\n \r\n // Déclenchement de l'évènement de changement d'affichage du filtre\r\n this.displayFilterChangedSubject.next(this.displayFilter);\r\n }\r\n}","import { Utilities } from \"@dflat-core/web/core\";\nimport { EventEmitter, Injectable } from \"@angular/core\";\nimport { NamedPosition } from \"../model/model\";\nimport { AppKeys } from \"./app-keys\";\nimport { LocalStoreManager } from \"./local-store-manager.service\";\n\n\n@Injectable()\nexport class GeolocationService {\n\n positionsHistory: Array<NamedPosition> = new Array<NamedPosition>(0);\n positionChanged: EventEmitter<NamedPosition> = new EventEmitter();\n \n constructor(protected localStore: LocalStoreManager) {\n try {\n let saveLocations = localStore.getDataObject<Array<NamedPosition>>(AppKeys.LAST_GEOLOCATIONS, false);\n if ( ! Utilities.IsNil(saveLocations))\n this.positionsHistory = saveLocations; \n }\n catch {}\n }\n\n getCurrentPosition(): NamedPosition {\n // Retourne la dernière valeur de l'historique\n if (! Utilities.IsNil(this.positionsHistory) && this.positionsHistory.length > 0)\n return this.positionsHistory[0];\n }\n\n setCurrentPosition(formattedName: string, placeId:string , latitude: number, longitude: number) {\n\n // Création d'un objet de type NamedPosition\n let currentPosition : NamedPosition = { \n placeId: placeId,\n formattedName: formattedName,\n latitude:latitude,\n longitude: longitude\n };\n\n // Insertion de la dernière position dans l'historique (on ne garde que les 5 dernières positions)\n this.positionsHistory.unshift(currentPosition);\n if ( this.positionsHistory.length > 5 )\n this.positionsHistory.pop();\n\n // Sauvegarde dans le localStorage\n this.localStore.savePermanentData(this.positionsHistory, AppKeys.LAST_GEOLOCATIONS);\n\n // Déclenchement de l'évènement de changemetn de position courante.\n this.positionChanged.emit(currentPosition);\n }\n\n /**\n * Calcule la distance en mètres entre la position courante et le point dont les coordonnées GPS sont spécifiées en paramètre.\n * @param latitude Latitude du point\n * @param longitude Longitude du point\n * @returns La distance en mètres entre la position courante et le point dont les coordonnées GPS sont spécifiées en paramètre.\n */\n getDistanceToCurrent(latitude : number, longitude: number) : number {\n \n // Distance entre les coordonnées spécifiées et la position courante.\n let position : NamedPosition = this.getCurrentPosition();\n if ( Utilities.IsNil(position) )\n return undefined;\n\n return this.getDistance(position.latitude, position.longitude, latitude, longitude);\n }\n\n /** Calcule la distance en mètres entre 2 points en coordonnées GPS.\n * @param latitude1 Latitude du point 1\n * @param longitude1 Longitude du point 1\n * @param latitude2 Latitude du point 2\n * @param longitude2 Longitude du point 2\n * @returns Une estimation la distance en mètres entre les point GPS 1 et 2 dont les coordonnées sont spécifiées.\n */\n getDistance(latitude1: number, longitude1 : number, latitude2: number, longitude2 : number) {\n \n // Connaissant la position de deux points A et B sur une sphère, calculer la distance entre eux\n // revient à calculer l'abscisse curviligne S (AB) sur le grand cercle passant par A et B.\n // Si l’on considère deux points A et B sur la sphère, de latitudes ϕA et ϕB et de longitudes λA et λB, \n // alors la distance angulaire en radians SA-B entre A et B est donnée par la relation fondamentale de trigonométrie\n // sphérique, utilisant dλ = λB – λA :\n // SA-B = arc cos (sin ϕA sin ϕB + cos ϕA cos ϕB cos dλ)\n // La distance S en mètres, s’obtient en multipliant SA-B par un rayon de la Terre conventionnel (6 378 137 mètres par exemple).\n\n // Conversion en radian\n let a: number = latitude1 * Math.PI / 180;\n let b: number = longitude1 * Math.PI / 180;\n let c: number = latitude2 * Math.PI / 180;\n let d: number = longitude2 * Math.PI / 180;\n\n // Calcul de la distance en m\n let e = Math.sin(a) * Math.sin(c) + Math.cos(a) * Math.cos(c) * Math.cos(d - b);\n let result = 6378137 * Math.acos(e);\n\n return result;\n }\n\n \n\n}","\nimport { map } from 'rxjs/operators';\nimport { ReplaySubject, Subject } from 'rxjs';\n\n// based on https://github.com/ng-book/angular2-rxjs-chat/blob/master/app/ts/services/NotificationsService.ts\nimport { Notification } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\n\ntype INotificationsOperation = (notifications: Notification[]) => Notification[];\n\n@Injectable()\nexport class NotificationsService {\n private notificationsList: Notification[] = [];\n \n // a stream that publishes new notifications only once\n public newNotifications: Subject<Notification> = new Subject<Notification>();\n\n // `notifications` is a stream that emits an array of the most up to date notifications\n public notifications: ReplaySubject<Notification[]> = new ReplaySubject<Notification[]>(1);\n\n // `updates` receives _operations_ to be applied to our `notifications`\n // it's a way we can perform changes on *all* notifications (that are currently\n // stored in `notifications`)\n public updates: Subject<any> = new Subject<any>();\n\n // action streams\n public create: Subject<Notification> = new Subject<Notification>();\n // public markThreadAsRead: Subject<any> = new Subject<any>();\n\n constructor() {\n // recois des operation, et les fais sur la liste interne, puis diffuse le resultat sur notifications\n this.updates.subscribe((ope) => {\n this.notificationsList = ope(this.notificationsList);\n this.notifications.next(this.notificationsList);\n });\n\n this.newNotifications.pipe(\n map(function(notification: Notification): INotificationsOperation {\n return (notifications: Notification[]) => {\n return notifications.concat(notification);\n };\n }))\n .subscribe(this.updates);\n\n }\n\n // an imperative function call to this action stream\n public addNotification(notification: Notification): void {\n this.newNotifications.next(notification);\n }\n\n}\n","import { Notification, UserUpdatedMessage } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\n\nimport { AppKeys } from './app-keys';\nimport { AuthService } from './auth.service';\nimport { BusMessageService, NotificationMqService } from './busmessage.service';\nimport { LocalStoreManager } from './local-store-manager.service';\nimport { NotificationsService } from './notifications.service';\nimport { EnvironmentBase } from '@dflat-core/web/core';\n\nenum RequestState {\n Pending = 0,\n InProgress = 1,\n Success = 2,\n Error = 3,\n Warning = 4,\n}\n/*\n signalR Hub Service.\n Currently chimera class, both registering to a the marsowHub and registering handlers.\n TODO Extract handlers elsewhere.\n*/\n@Injectable()\nexport class HubService {\n\n protected hubUrl = this.env.hubUrl;\n private timer$: any;\n\n protected hubConnection: signalR.HubConnection = null;\n isConnected: boolean = false;\n isReconnect: boolean = false;\n isInit: boolean;\n isConnecting: boolean;\n\n get hubOptions(): signalR.IHttpConnectionOptions {\n let _self = this;\n var options = {\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets,\n accessTokenFactory: () => {\n const token = _self.localStorage.getDataObject<string>(AppKeys.ACCESS_TOKEN);\n return token;\n }\n };\n return options;\n }\n\n constructor(\n protected localStorage: LocalStoreManager,\n protected notificationService: NotificationsService,\n protected busMsg: BusMessageService,\n protected mqMsg: NotificationMqService,\n protected authService: AuthService,\n protected env: EnvironmentBase\n ) {\n this.busMsg.of(UserUpdatedMessage).subscribe(msg =>\n {\n // log out\n if(msg.userKey === null){\n this.disposeConnection();\n }\n else {\n this.startHub();\n }\n });\n }\n\n //TODO REFACTO\n\n init() {\n\n if ( ! this.isInit ) {\n this.startHub();\n this.isInit = true;\n }\n }\n\n disposeConnection() {\n if (this.hubConnection) {\n this.hubConnection.stop();\n }\n }\n\n startHub() {\n\n // Si la connnexion est déjà active ou qu'un utilisateur n'est pas connecté on ne fait rien.\n if(this.isConnected || ! this.authService.isLoggedIn || this.isConnecting)\n return;\n\n\n this.isConnecting = true;\n\n var options = this.hubOptions;;\n this.hubConnection = new signalR.HubConnectionBuilder()\n .withUrl(this.hubUrl, options)\n .configureLogging(signalR.LogLevel.Trace)\n .build();\n this.hubConnection.serverTimeoutInMilliseconds = 30000;\n\n this.configure();\n\n this.hubConnection\n .start()\n .then(() => {\n console.log('*****Connection started!');\n this.isConnected = true;\n this.isConnecting = false;\n clearInterval(this.timer$);\n })\n .catch(err => {\n console.log('Error while establishing connection :(', err);\n this.isConnected = false;\n this.isConnecting = false;\n clearInterval(this.timer$);\n this.scheduleStartingHub();\n })\n }\n configure() {\n // subscribe to operation log from server\n this.hubConnection.on('OperationLog', (uid: string, message: string) => {\n this.publishEvents(new Notification({ id: undefined, content: message, class: undefined, entityType: uid, entityId: undefined }));\n });\n\n // subscribe to broadcasted messagse from server\n this.hubConnection.on('BroadcastMessage', (name: string, message: string) => {\n // console.log(`BroadcastMessage received : ${message}, ${name}`);\n });\n\n //Subscriptions have to be prior the connection start so the server hub knows which 'events' this client is eligible for.\n this.hubConnection.on(\"ReportProgress\", (name: string, message: string, state: RequestState, entityType: string, entityId: number) => {\n // console.log(`ReportProgress: name: ${name} | message: ${message} | state: ${state} | entityType: ${entityType} | entityId: ${entityId} `);\n //let end = state === RequestState.Success || state === RequestState.Error || state === RequestState.Warning ;\n let classNotif = \"info\";\n\n //if (end) {\n\n const notif = new Notification({ id: name, content: message, class: classNotif, entityType: entityType, entityId: entityId });\n this.publishEvents(notif);\n //}\n });\n\n //Registers a handler that will be invoked when the connection is closed.\n this.hubConnection.onclose(e => {\n console.log(`Hub connection closed !`);\n this.isConnected = false;\n this.scheduleStartingHub();\n\n });\n }\n\n\n scheduleStartingHub(){\n\n // chaque 30s\n this.timer$ = setInterval(() => {\n console.log(\"retry start hub\");\n this.startHub();\n }, 30000);\n\n }\n\n publishEvents(notif: Notification) {\n this.mqMsg.publish(notif);\n }\n}\n\n","\nimport { map } from 'rxjs/operators';\nimport { ReplaySubject, Subject } from 'rxjs';\n\n// based on https://github.com/ng-book/angular2-rxjs-chat/blob/master/app/ts/services/MessagesService.ts\nimport { Message } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\n\ntype IMessagesOperation = (messages: Message[]) => Message[];\n\n@Injectable()\nexport class MessagesService {\n private messagesList: Message[] = [];\n // a stream that publishes new messages only once\n public newMessages: Subject<Message> = new Subject<Message>();\n\n // `messages` is a stream that emits an array of the most up to date messages\n public messages: ReplaySubject<Message[]> = new ReplaySubject<Message[]>(1);\n\n // `updates` receives _operations_ to be applied to our `messages`\n // it's a way we can perform changes on *all* messages (that are currently\n // stored in `messages`)\n public updates: Subject<any> = new Subject<any>();\n\n // action streams\n public create: Subject<Message> = new Subject<Message>();\n // public markThreadAsRead: Subject<any> = new Subject<any>();\n\n constructor() {\n // recois des operation, et les fais sur la liste interne, puis diffuse le resultat sur messages\n this.updates.subscribe((ope) => {\n this.messagesList = ope(this.messagesList);\n this.messages.next(this.messagesList);\n });\n\n this.newMessages.pipe(\n map(function(message: Message): IMessagesOperation {\n return (messages: Message[]) => {\n return messages.concat(message);\n };\n }))\n .subscribe(this.updates);\n\n }\n\n // an imperative function call to this action stream\n public addMessage(message: Message): void {\n this.newMessages.next(message);\n }\n\n}\n","import { Utilities } from '@dflat-core/web/core';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { ScreenConfiguration } from '../model/model';\n\n\n@Injectable()\nexport class ScreenService {\n screenChanged: EventEmitter<ScreenConfiguration> = new EventEmitter();\n scrollChanged: EventEmitter<Element> = new EventEmitter();\n \n config: ScreenConfiguration;\n \n public constructor() {\n\n }\n\n getScreenConfiguration(): ScreenConfiguration {\n return this.config;\n }\n\n setScreenConfiguration(value: ScreenConfiguration) {\n // Si la valeur passée est vide, on ne fait rien.\n if ( Utilities.IsNil(value))\n return;\n\n // Sinon, on vérifie qu'une des valeurs de configuration a changé\n if (Utilities.IsNil(this.config) \n || this.config.isExtraSmallScreen != value.isExtraSmallScreen\n || this.config.isSmallScreen != value.isSmallScreen\n || this.config.isLargeScreen != value.isLargeScreen\n ) {\n this.config = value;\n\n // Déclenchement de l'évènement de changemetn de position courante.\n this.screenChanged.emit(this.config);\n }\n }\n\n scroll(elt: Element){\n \n // Déclenchement de l'évènement de scrolling\n this.scrollChanged.emit(elt);\n }\n\n\n}","\nimport { ReplaySubject } from 'rxjs';\n\nimport { IUserCredential, User } from '@dflat-core/web/core-model';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { AuthService } from './auth.service';\nimport { Utilities } from '@dflat-core/web/core';\n\n\n@Injectable()\nexport class UserService {\n\n public userChanged: EventEmitter<User> = new EventEmitter<User>();\n private current: ReplaySubject<User> = new ReplaySubject<User>(1);\n private editUser: ReplaySubject<any> = new ReplaySubject<any>( 1 );\n constructor(\n private router: Router,\n private authService: AuthService\n ) { }\n\n public setCurrent(user: User) {\n this.current.next(user);\n this.userChanged.emit(user);\n }\n \n public getCurrent() {\n return this.current;\n }\n\n public openEditUser(){\n this.editUser.next(1);\n }\n\n public getEditUser(){\n return this.editUser;\n }\n\n get AuthenticatedUser(): User {\n let user = this.authService.currentUser;\n let parsed = JSON.parse(user);\n let login : IUserCredential = parsed as IUserCredential;\n if ( Utilities.IsNil(login))\n return undefined;\n return new User(login);\n }\n\n public logout() {\n const user = new User({} as IUserCredential);\n user.IsConnected = false;\n this.setCurrent(user); \n this.authService.logout(this.authService.pseudo);\n \n }\n}\n","// IMPORTANT : DANS LE BUT DE FACILITER LES MERGE ET LA LECTURE DU CODE.\n\n// 1. TOUJOURS CONSERVER LE TRI SUR LES IMPORTS\n// UTILISER L'EXTENSION \"TypeScript Import Sorter\" DANS VSCODE.\n// CONFIGURER L'EXTENSION POUR ACTIVER LA MISE EN FORME AUTOMATIQUE A LA SAUVEGARDE \n\n// 2. UTILISER CTRL-SHIFT O POUR SUPPRIMER AUTOMATIQUEMENT LES IMPORTS INUTILES\n\n// 3. TRIER LES COMPOSANTS OU DEPENDANCES DANS LES DECLARATIONS (IMPORTS, EXPORTS)\n// SELECTION DU TEXTE PUIS CTRL-SHIFT P, \"Sort Lines Ascending\"\n// ON PEUT PARAMETRER DES RACCOURCIS CLAVIER DANS VSCODE\nimport { EnsureModuleLoadedOnceGuard } from '@dflat-core/web/core';\nimport { CoreModelModule } from '@dflat-core/web/core-model';\n// PAR EXEMPLE : CTRL-T UP (TRI CROISSANT) ou CTRL-T DOWN (TRI DECDROISSANT)\nimport { CommonModule } from '@angular/common';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { AppConfiguration } from './services/appConfig.service';\nimport { AuthGuard } from './services/auth-guard.service';\nimport { AuthService } from './services/auth.service';\nimport { BreadcrumbService } from './services/breadcrumb.service';\nimport { BusMessageService, NotificationMqService } from './services/busmessage.service';\nimport { FilterService } from './services/filter.service';\nimport { GeolocationService } from './services/geolocation.service';\nimport { HeadersService } from './services/headers.service';\nimport { HubService } from './services/hub.service';\nimport { LocalStoreManager } from './services/local-store-manager.service';\nimport { MessagesService } from './services/message.service';\nimport { NotificationsService } from './services/notifications.service';\nimport { PermissionService } from './services/permission.service';\nimport { ScreenService } from './services/screen.service';\nimport { UserService } from './services/user.service';\n\n\n@NgModule({ exports: [],\n declarations: [], imports: [CommonModule, CoreModelModule], providers: [\n LocalStoreManager,\n GeolocationService,\n MessagesService,\n NotificationsService,\n PermissionService,\n UserService,\n AuthGuard,\n AuthService,\n HeadersService,\n BusMessageService,\n BreadcrumbService,\n ScreenService,\n AppConfiguration,\n HubService,\n NotificationMqService,\n FilterService,\n provideHttpClient(withInterceptorsFromDi())\n ] })\n// Ensure that CoreServicesModule is only loaded into AppModule\nexport class CoreServicesModule extends EnsureModuleLoadedOnceGuard {\n\n // Looks for the module in the parent injector to see if it's already been loaded (only want it loaded once)\n constructor( @Optional() @SkipSelf() parentModule: CoreServicesModule) {\n super(parentModule);\n }\n}\n\n","\nimport { Observable, empty as observableEmpty, throwError as observableThrowError } from 'rxjs';\n\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\nimport { Injectable, Injector } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { catchError } from 'rxjs/operators';\n\nimport { AuthService } from \"./auth.service\";\nimport { HeadersService } from \"./headers.service\";\n\nimport { ApiError, ApiErrorTypes } from '@dflat-core/web/core-model';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n constructor(\n protected router: Router,\n protected injector: Injector,\n \n ) {\n\n }\n\n intercept(\n req: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n const headersService = this.injector.get(HeadersService);\n const authService = this.injector.get(AuthService);\n switch (req.method) {\n case \"GET\":\n req = req.clone({ headers: headersService.authFormHeaders(), withCredentials: true });\n break;\n case \"POST\":\n // let isFileUpload = req.url.match(/Upload|File/)\n // let headers;\n // if (isFileUpload) {\n // headers = headersService.authFileUploadHeaders();\n // }\n // else {\n // headers = headersService.authJsonHeaders();\n //}\n\n if ( req.headers['lazyUpdate'] == null) {\n req = req.clone({ headers: headersService.authJsonHeaders(), withCredentials: true });\n }\n break;\n default:\n req = req;\n break;\n }\n\n const r = req;\n\n return next.handle(req).pipe(catchError(err => {\n console.log(err);\n if (err instanceof HttpErrorResponse) {\n\n // Ignore signalr failure\n if (r.url.includes(\"/hub/\")) {\n return observableEmpty();\n }\n if (err.status === 401 || err.status === 403) {\n // Ignore login failed\n if (!(r.url.endsWith(\"/api/Account/Connect\"))) {\n authService.ensureLogout();\n this.router.navigate(['/login']);\n return observableEmpty();\n }\n }\n else if (err.status === 400) {\n let apiError: ApiError = {};\n apiError.ApiErrorType = ApiErrorTypes.UserError;\n apiError.Message = err.error;\n\n this.onError(err, apiError);\n\n }\n else {\n\n\n try {\n\n if ( err.error instanceof Blob) {\n err.error.text().then((str=>{\n let apiError: ApiError = JSON.parse(str) as ApiError;\n this.onError(err, apiError);\n }));\n }\n else {\n let apiError: ApiError = err.error as ApiError;\n this.onError(err, apiError);\n }\n\n // if (typeof err.error === \"string\") {\n\n\n // }\n // else {\n\n // let reader = new FileReader();\n // reader.addEventListener(\"loadend\",\n // () => {\n // let result = reader.result as string;\n // result = trimChar(result, \"\\\"\");\n // this.onError(err, result);\n\n // });\n // reader.readAsText(err.error);\n // }\n }\n catch (error) {\n let apiError: ApiError = {};\n apiError.ApiErrorType = ApiErrorTypes.UserError;\n apiError.Message = \"Une erreur a été détectée. Merci de contacter le service technique !\";\n\n this.onError(err, apiError);\n\n }\n }\n }\n return observableThrowError(err);\n }));\n }\n\n\n onError(errResponse : HttpErrorResponse, error: ApiError) {\n console.log(error.Message);\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { UserService } from './user.service';\r\n\r\n@Injectable()\r\nexport class CanActivateGuard {\r\n private connected = false;\r\n\r\n constructor(\r\n private router: Router,\r\n private userService: UserService\r\n ) {\r\n this.userService.getCurrent().subscribe((user) => {\r\n this.connected = user.IsConnected;\r\n });\r\n }\r\n\r\n public canActivate() {\r\n if ( !this.connected ) {\r\n this.router.navigate( [ 'login' ] );\r\n }\r\n return this.connected;\r\n }\r\n}\r\n","export function trimChar(str:string,c:string)\r\n{\r\n // Escape special char when needed\r\n c = c === \"]\"\r\n ? \"\\\\]\"\r\n : c === \"\\\\\"\r\n ? \"\\\\\\\\\"\r\n : c;\r\n return str.replace(new RegExp(`^[${c}]+|[${c}]+$`,\"g\"),\"\");\r\n}","export interface IErrorHandler {\r\n handleError(error: any);\r\n}\r\n\r\nexport class MenuItem {\r\n public id?: number;\r\n public title?: string;\r\n public link?: string;\r\n public icon?: string;\r\n public sublinks?: MenuItem[];\r\n public permissionKey?: string;\r\n public external?: boolean = false;\r\n public target?: string = '';\r\n \r\n public constructor(title?: string,\r\n link?: string,\r\n icon?: string,\r\n sublinks?: MenuItem[],\r\n permissionKey?: string)\r\n {\r\n this.title = title;\r\n this.link = link;\r\n this.icon = icon;\r\n this.sublinks = sublinks;\r\n this.permissionKey = permissionKey;\r\n }\r\n}\r\n\r\nexport interface NamedPosition {\r\n formattedName: string;\r\n placeId: string;\r\n latitude: number;\r\n longitude:number;\r\n\r\n}\r\n\r\nexport interface ScreenConfiguration {\r\n isSmallScreen: boolean;\r\n isExtraSmallScreen: boolean;\r\n isLargeScreen: boolean;\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.LocalStoreManager","i1.PermissionService","i1.HeadersService","i2.BusMessageService","i4","i5.LocalStoreManager","i6.MenuService","i1.AuthService","i2.MenuService","i3","i1","i2.NotificationsService","i3.BusMessageService","i3.NotificationMqService","i4.AuthService","i5","i2.AuthService","observableEmpty","observableThrowError","i2.UserService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dflat-core-web-core-services.mjs","sources":["../../core-services/src/lib/services/appConfig.service.ts","../../core-services/src/lib/services/app-keys.ts","../../core-services/src/lib/services/busmessage.service.ts","../../core-services/src/lib/services/local-store-manager.service.ts","../../core-services/src/lib/services/headers.service.ts","../../core-services/src/lib/services/server-url.ts","../../core-services/src/lib/services/permission.service.ts","../../core-services/src/lib/services/menu.service.ts","../../core-services/src/lib/services/auth.service.ts","../../core-services/src/lib/services/auth-guard.service.ts","../../core-services/src/lib/services/breadcrumb.service.ts","../../core-services/src/lib/services/filter.service.ts","../../core-services/src/lib/services/geolocation.service.ts","../../core-services/src/lib/services/notifications.service.ts","../../core-services/src/lib/services/hub.service.ts","../../core-services/src/lib/services/message.service.ts","../../core-services/src/lib/services/screen.service.ts","../../core-services/src/lib/services/user.service.ts","../../core-services/src/lib/core-services.module.ts","../../core-services/src/lib/services/auth.interceptor.ts","../../core-services/src/lib/services/can-activate-guard.service.ts","../../core-services/src/lib/services/string.function.ts","../../core-services/src/lib/model/model.ts","../../core-services/src/dflat-core-web-core-services.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class AppConfiguration {\r\n searchText = \"\";\r\n isSearchAllowed = false;\r\n\r\n constructor( ) {\r\n }\r\n\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class AppKeys {\r\n public static readonly CURRENT_USER = \"current_user\";\r\n public static readonly ACCESS_TOKEN = \"access_token\";\r\n public static readonly REFRESH_TOKEN = \"refresh_token\";\r\n public static readonly TOKEN_EXPIRES_IN = \"expires_in\";\r\n public static readonly REMEMBER_ME = \"remember_me\";\r\n public static readonly PERMISSIONS = \"permissions\";\r\n public static readonly LAST_GEOLOCATIONS = \"geolocations\";\r\n \r\n public static readonly REFERENCE_SUPPLIER_ID = \"refsuppid\";\r\n public static readonly USER_COMPANY_ID = \"companyid\";\r\n public static readonly SELECTED_COMPANY = \"selectedcompany\";\r\n}","\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { Message, Notification } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\n\nimport { Utilities } from '@dflat-core/web/core';\n\n@Injectable()\nexport class BusMessageService {\n private message$: Subject<Message>;\n\n constructor() {\n this.message$ = new Subject<Message>();\n }\n\n public publish<T>(message: T): void {\n const channel = (<any>message.constructor).name;\n this.message$.next({ Channel: channel, Data: message });\n }\n\n public of<T>(messageType: new(...args: any[]) => T): Observable<T> {\n const channel = (<any>messageType).name;\n return this.message$.pipe(filter(m => m.Channel === channel), map(m => m.Data));\n }\n}\n\n@Injectable()\nexport class NotificationMqService {\n private message$: Subject<Message>;\n\n constructor() {\n this.message$ = new Subject<Message>();\n }\n\n public publish<T extends Notification>(message: T): void {\n const defaultchannel = message.entityType\n this.message$.next({ Channel: defaultchannel, Data: message });\n\n if (!Utilities.IsUndefined(message.entityId)) {\n const detailchannel = `${message.entityType}-${message.entityId}`;\n this.message$.next({ Channel: detailchannel, Data: message });\n }\n }\n\n public of<T extends Notification>(channelKey: string): Observable<T> {\n const channel = channelKey;\n return this.message$.pipe(filter(m => m.Channel === channel), map(m => m.Data));\n }\n}\n","import { Observable, Subject } from 'rxjs';\n\nimport { Utilities } from '@dflat-core/web/core';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class LocalStoreManager {\n\n private static syncListenerInitialised = false;\n private syncKeys: string[] = [];\n private initEvent = new Subject();\n\n private reservedKeys: string[] = ['sync_keys', 'addToSyncKeys', 'removeFromSyncKeys',\n 'getSessionStorage', 'setSessionStorage', 'addToSessionStorage', 'removeFromSessionStorage', 'clearAllSessionsStorage'];\n\n public static readonly DBKEY_USER_DATA = \"user_data\";\n private static readonly DBKEY_SYNC_KEYS = \"sync_keys\";\n\n\n //Todo: Implement EventListeners for the various event operations and a SessionStorageEvent for specific data keys\n\n public initialiseStorageSyncListener() {\n if (LocalStoreManager.syncListenerInitialised == true)\n return;\n\n LocalStoreManager.syncListenerInitialised = true;\n window.addEventListener(\"storage\", this.sessionStorageTransferHandler, false);\n this.syncSessionStorage();\n }\n\n\n\n public deinitialiseStorageSyncListener() {\n window.removeEventListener(\"storage\", this.sessionStorageTransferHandler, false);\n LocalStoreManager.syncListenerInitialised = false;\n }\n\n\n private sessionStorageTransferHandler = (event: StorageEvent) => {\n if (!event.newValue)\n return;\n\n if (event.key == 'getSessionStorage') {\n\n if (sessionStorage.length) {\n this.localStorageSetItem('setSessionStorage', sessionStorage);\n localStorage.removeItem('setSessionStorage');\n }\n }\n else if (event.key == 'setSessionStorage') {\n\n if (!this.syncKeys.length)\n this.loadSyncKeys();\n\n let data = JSON.parse(event.newValue);\n //console.info(\"Set => Key: Transfer setSessionStorage\" + \", data: \" + JSON.stringify(data));\n\n for (let key in data) {\n\n if (this.syncKeysContains(key))\n this.sessionStorageSetItem(key, JSON.parse(data[key]));\n }\n\n this.onInit();\n }\n else if (event.key === 'addToSessionStorage') {\n\n let data = JSON.parse(event.newValue);\n\n //console.warn(\"Set => Key: Transfer addToSessionStorage\" + \", data: \" + JSON.stringify(data));\n\n this.addToSessionStorageHelper(data[\"data\"], data[\"key\"]);\n }\n else if (event.key === 'removeFromSessionStorage') {\n\n this.removeFromSessionStorageHelper(event.newValue);\n }\n else if (event.key === 'clearAllSessionsStorage' && sessionStorage.length) {\n\n this.clearInstanceSessionStorage();\n }\n else if (event.key === 'addToSyncKeys') {\n\n this.addToSyncKeysHelper(event.newValue);\n }\n else if (event.key === 'removeFromSyncKeys') {\n\n this.removeFromSyncKeysHelper(event.newValue);\n }\n }\n\n private syncSessionStorage() {\n\n localStorage.setItem('getSessionStorage', '_dummy');\n localStorage.removeItem('getSessionStorage');\n }\n\n\n public clearAllStorage() {\n this.clearAllSessionsStorage();\n this.clearLocalStorage();\n }\n\n\n public clearAllSessionsStorage() {\n this.clearInstanceSessionStorage();\n localStorage.removeItem(LocalStoreManager.DBKEY_SYNC_KEYS);\n localStorage.setItem('clearAllSessionsStorage', '_dummy');\n localStorage.removeItem('clearAllSessionsStorage');\n }\n\n\n public clearInstanceSessionStorage() {\n\n sessionStorage.clear();\n this.syncKeys = [];\n }\n\n\n public clearLocalStorage() {\n localStorage.clear();\n }\n\n\n private addToSessionStorage(data: any, key: string) {\n this.addToSessionStorageHelper(data, key);\n this.addToSyncKeysBackup(key);\n\n this.localStorageSetItem('addToSessionStorage', { key: key, data: data });\n localStorage.removeItem('addToSessionStorage');\n }\n\n private addToSessionStorageHelper(data: any, key: string) {\n\n this.addToSyncKeysHelper(key);\n this.sessionStorageSetItem(key, data);\n }\n\n\n private removeFromSessionStorage(keyToRemove: string) {\n this.removeFromSessionStorageHelper(keyToRemove);\n this.removeFromSyncKeysBackup(keyToRemove);\n\n localStorage.setItem('removeFromSessionStorage', keyToRemove);\n localStorage.removeItem('removeFromSessionStorage');\n }\n\n private removeFromSessionStorageHelper(keyToRemove: string) {\n sessionStorage.removeItem(keyToRemove);\n this.removeFromSyncKeysHelper(keyToRemove);\n }\n\n\n private testForInvalidKeys(key: string) {\n if (!key)\n throw new Error(\"key cannot be empty\")\n\n if (this.reservedKeys.some(x => x === key))\n throw new Error(`The storage key \"${key}\" is reserved and cannot be used. Please use a different key`);\n }\n\n private syncKeysContains(key: string) {\n return this.syncKeys.some(x => x === key);\n }\n\n\n private loadSyncKeys() {\n if (this.syncKeys.length)\n return;\n\n this.syncKeys = this.getSyncKeysFromStorage();\n }\n\n\n private getSyncKeysFromStorage(defaultValue: string[] = []): string[] {\n let data = this.localStorageGetItem(LocalStoreManager.DBKEY_SYNC_KEYS);\n\n if (data == null)\n return defaultValue;\n else\n return <string[]>data;\n }\n\n\n private addToSyncKeys(key: string) {\n this.addToSyncKeysHelper(key);\n this.addToSyncKeysBackup(key);\n\n localStorage.setItem('addToSyncKeys', key);\n localStorage.removeItem('addToSyncKeys');\n }\n\n\n private addToSyncKeysBackup(key: string) {\n let storedSyncKeys = this.getSyncKeysFromStorage();\n\n if (!storedSyncKeys.some(x => x === key)) {\n storedSyncKeys.push(key);\n this.localStorageSetItem(LocalStoreManager.DBKEY_SYNC_KEYS, storedSyncKeys);\n }\n }\n\n private removeFromSyncKeysBackup(key: string) {\n\n let storedSyncKeys = this.getSyncKeysFromStorage();\n let index = storedSyncKeys.indexOf(key);\n\n if (index > -1) {\n storedSyncKeys.splice(index, 1);\n this.localStorageSetItem(LocalStoreManager.DBKEY_SYNC_KEYS, storedSyncKeys);\n }\n }\n\n\n private addToSyncKeysHelper(key: string) {\n if (!this.syncKeysContains(key))\n this.syncKeys.push(key);\n }\n\n\n private removeFromSyncKeys(key: string) {\n this.removeFromSyncKeysHelper(key);\n this.removeFromSyncKeysBackup(key);\n\n localStorage.setItem('removeFromSyncKeys', key);\n localStorage.removeItem('removeFromSyncKeys');\n }\n\n\n private removeFromSyncKeysHelper(key: string) {\n let index = this.syncKeys.indexOf(key);\n\n if (index > -1) {\n this.syncKeys.splice(index, 1);\n }\n }\n\n\n public saveSessionData(data: any, key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n this.removeFromSyncKeys(key);\n localStorage.removeItem(key);\n this.sessionStorageSetItem(key, data);\n }\n\n\n public saveSyncedSessionData(data: any, key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n localStorage.removeItem(key);\n this.addToSessionStorage(data, key);\n }\n\n\n public savePermanentData(data: any, key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n this.removeFromSessionStorage(key);\n this.localStorageSetItem(key, data);\n }\n\n\n\n public moveDataToSessionStorage(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n let data = this.getData(key);\n\n if (data == null)\n return;\n\n this.saveSessionData(data, key);\n }\n\n\n public moveDataToSyncedSessionStorage(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n let data = this.getData(key);\n\n if (data == null)\n return;\n\n this.saveSyncedSessionData(data, key);\n }\n\n\n public moveDataToPermanentStorage(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n let data = this.getData(key);\n\n if (data == null)\n return;\n\n this.savePermanentData(data, key);\n }\n\n\n public exists(key = LocalStoreManager.DBKEY_USER_DATA) {\n let data = sessionStorage.getItem(key);\n\n if (data == null)\n data = localStorage.getItem(key);\n\n return data != null;\n }\n\n\n public getData(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n let data = this.sessionStorageGetItem(key);\n\n if (data == null)\n data = this.localStorageGetItem(key);\n\n return data;\n }\n\n\n public getDataObject<T>(key = LocalStoreManager.DBKEY_USER_DATA, isDateType = false): T {\n let data = this.getData(key);\n\n if (data != null) {\n if (isDateType)\n data = new Date(data);\n\n return <T>data;\n }\n else {\n return null;\n }\n }\n\n\n public deleteData(key = LocalStoreManager.DBKEY_USER_DATA) {\n this.testForInvalidKeys(key);\n\n this.removeFromSessionStorage(key);\n localStorage.removeItem(key);\n }\n\n private localStorageSetItem(key: string, data: any) {\n localStorage.setItem(key, JSON.stringify(data));\n }\n\n private sessionStorageSetItem(key: string, data: any) {\n sessionStorage.setItem(key, JSON.stringify(data));\n }\n\n private localStorageGetItem(key: string) {\n return Utilities.JSonTryParse(localStorage.getItem(key));\n }\n\n private sessionStorageGetItem(key: string) {\n return Utilities.JSonTryParse(sessionStorage.getItem(key));\n }\n\n private onInit() {\n setTimeout(() => {\n this.initEvent.next({});\n this.initEvent.complete();\n });\n }\n\n public getInitEvent(): Observable<{}> {\n return this.initEvent.asObservable();\n }\n}\n","\nimport { Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { LocalStoreManager } from './local-store-manager.service';\nimport { AppKeys } from './app-keys';\nimport { Utilities } from '@dflat-core/web/core';\n@Injectable()\nexport class HeadersService {\n\n\n constructor(private localStorage: LocalStoreManager) { }\n\n // for requesting secure data using json\n authJsonHeaders() {\n let result: HttpHeaders = new HttpHeaders()\n .set('Content-Type', 'application/json')\n .set('Accept', 'application/json')\n .set('Authorization', `Bearer ${this.geJWTToken}`);\n return result;\n }\n\n // for requesting secure data from a form post\n authFormHeaders() {\n let result: HttpHeaders = new HttpHeaders()\n .set('Content-Type', 'application/x-www-form-urlencoded')\n .set('Accept', 'application/json')\n .set('Authorization', `Bearer ${this.geJWTToken}`);\n return result;\n }\n\n authFileUploadHeaders()\n {\n return new HttpHeaders()\n .set('Authorization', `Bearer ${this.geJWTToken}`);\n }\n\n // for requesting unsecured data using json\n jsonHeaders() {\n return new HttpHeaders()\n .set('Content-Type', 'application/json')\n .set('Accept', 'application/json');\n }\n\n // for requesting unsecured data using form post\n contentHeadersV2() {\n return new HttpHeaders()\n .set('Content-Type', 'application/x-www-form-urlencoded')\n .set('Accept', 'application/json');\n }\n\n get geJWTToken(): string {\n let result: string = this.localStorage.getDataObject<string>(AppKeys.ACCESS_TOKEN);\n \n if ( Utilities.IsNil(result))\n return '';\n \n return result;\n }\n}\n","export class ServerUrl {\r\n static isProduction: boolean = false;\r\n\r\n // POUR TESTER L'ENVIRONNEMENT DE PROD EN LOCAL DECOMMENTER LES LIGNES\r\n // static baseUrl = (ServerUrl.isProduction ? 'http://localhost:56407' : 'http://localhost:56407');\r\n static baseUrl = (ServerUrl.isProduction ? '' : 'http://localhost:56407');\r\n static apiUrl = ServerUrl.baseUrl + '/api';\r\n static hubUrl = ServerUrl.baseUrl + '/hub';\r\n\r\n static loginPath = '/Account/Login';\r\n static connectPath = '/Account/Connect';\r\n static registerPath = '/Account/Register';\r\n static activatePath = '/Account/Activate';\r\n static refreshPath = '/Account/RefreshToken';\r\n static disconnectPath = '/Account/Disconnect';\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { LocalStoreManager } from './local-store-manager.service';\r\nimport { AppKeys } from './app-keys';\r\n\r\n@Injectable()\r\nexport class PermissionService {\r\n\r\n constructor( private localStorage: LocalStoreManager) {}\r\n\r\n hasPermission(permission: string): boolean {\r\n return this.permissions != null && this.permissions.some(p => p === permission) || this.isAdmin;\r\n }\r\n\r\n get permissions(): Array<any> {\r\n let permissions = this.localStorage.getDataObject<string>(AppKeys.PERMISSIONS);\r\n let parsed_permissions = <Array<any>>JSON.parse(permissions);\r\n return parsed_permissions\r\n }\r\n\r\n get isAdmin(): boolean {\r\n let parsed = JSON.parse(this.currentUser);\r\n return parsed && parsed.IsAdmin || false;\r\n }\r\n\r\n get currentUser(): string {\r\n return this.localStorage.getDataObject<string>(AppKeys.CURRENT_USER);\r\n }\r\n}\r\n","import { ReplaySubject } from 'rxjs';\n\nimport { Utilities } from '@dflat-core/web/core';\nimport { DictionnaryWrapper } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\n\nimport { MenuItem } from '../model/model';\nimport { PermissionService } from './permission.service';\n\n@Injectable()\nexport abstract class MenuService {\n private current: ReplaySubject<MenuItem[]> = new ReplaySubject<MenuItem[]>(1);\n private _permissionRouteMap: DictionnaryWrapper<string>;\n\n public constructor(private permissionService: PermissionService) {\n }\n\n abstract getAllMenuItems(isAdmin:boolean): MenuItem[];\n abstract getAccessGrantedMenuItems(): MenuItem[];\n\n public setCurrent(menu: MenuItem[]) {\n this.current.next(menu);\n }\n\n public getCurrent() {\n return this.current;\n }\n\n get permissionRouteMap() {\n if (Utilities.IsNil(this._permissionRouteMap)) {\n this._permissionRouteMap = new DictionnaryWrapper<string>();\n this.getAllMenuItems(true).forEach(item => {\n if (! Utilities.IsNil(item.sublinks)) {\n item.sublinks.forEach( subItem=> {\n if (subItem.permissionKey) {\n this._permissionRouteMap.dictionary[subItem.link] = subItem.permissionKey;\n }\n });\n }\n });\n }\n\n return this._permissionRouteMap;\n }\n\n\n resetPermissionMap(){\n this._permissionRouteMap = undefined;\n }\n\n hasAccessToThisRoute(url: string):boolean {\n let menuItems = this.getAccessGrantedMenuItems();\n if ( ! Utilities.IsNil( menuItems) && menuItems.findIndex(f => f.link === url) >= 0)\n return true;\n\n if(this.permissionRouteMap.containsKeyOrPartKey(url)){\n return this.hasPermission(this.permissionRouteMap.getPartKey(url));\n }\n // Le menu n'a pas de permissions associé, on renvoie true\n return true;\n }\n\n\n\n pushItem(items: Array<MenuItem>, menuItem: MenuItem, isAdmin:boolean) {\n if (Utilities.IsNil(menuItem.permissionKey) ||\n isAdmin || this.hasPermission(menuItem.permissionKey)\n ) {\n items.push(menuItem);\n }\n }\n\n hasPermission = (permKey: string) => {\n if ( permKey === undefined )\n return true;\n return this.permissionService.hasPermission(permKey);\n }\n\n hasAnyPermission = (permKeys: (string | undefined)[]) => {\n let result = false;\n permKeys.forEach(p => result = result || this.hasPermission(p));\n return result;\n }\n\n getMenuItems(isAdmin: boolean): MenuItem[] {\n\n let results = this.getAllMenuItems(isAdmin);\n\n for(let i = 0; i < results.length; i++)\n results[i].id = i;\n\n return this.sortLinks(results);\n }\n\n private sortLinks(links: MenuItem[]) {\n return links.map(t => { return { ...t, sublinks: this.sortLinksSubLevel(t.sublinks) } });\n }\n\n private sortLinksSubLevel(links: MenuItem[]) {\n if (!links) return null;\n return links.sort((a, b) => a.title.localeCompare(b.title));\n }\n\n// private fillmap(map: Map<string,MenuItem>,menuItems: MenuItem[], parent: string = null )\n// {\n// if ( ! Utilities.IsNil(menuItems)) {\n// menuItems.forEach(x =>{\n// if ( ! Utilities.IsNil(parent))\n// parent = parent.concat(\"/\" + x.title);\n// else\n// parent = x.title;\n// map.set(parent,x);\n// this.fillmap(map,x.sublinks,parent);\n// });\n// }\n// return map;\n// }\n// public mergeall(Menus:MenuItem[][]): MenuItem[]\n// {\n// let menuItem = Array<MenuItem>();\n// let map = new Map<string,MenuItem>();\n// Menus.forEach(menuItem => {\n// this.fillmap(map,menuItem,null);\n\n// });\n// let sortedmap = new Map([...map].sort());\n// sortedmap.forEach(element => {\n// menuItem.push()\n\n// });\n// return menuItem;\n// }\n public merge(Menus:MenuItem[]): MenuItem[]\n {\n // let titles : string[];\n\n // if (!(item.title in titles)){\n // titles.push(item.title);\n // menu.push(item);\n // }\n // else{\n let menu : MenuItem[] = [];\n Menus.forEach(item => {\n \n let index = menu.findIndex(x=>x.title == item.title);\n if(index >= 0)\n menu[index].sublinks = [...menu[index].sublinks,...item.sublinks];\n else\n menu.push(item);\n })\n return menu;\n}\n}\n","\nimport jwt_decode from 'jwt-decode';\nimport { Observable, Subscription, throwError, timer } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\nimport { Utilities, EnvironmentBase } from '@dflat-core/web/core';\nimport { IUserCredential, UserUpdatedMessage } from '@dflat-core/web/core-model';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\n\nimport { AppKeys } from './app-keys';\nimport { BusMessageService } from './busmessage.service';\nimport { HeadersService } from './headers.service';\nimport { LocalStoreManager } from './local-store-manager.service';\nimport { ServerUrl } from './server-url';\nimport { MenuService } from './menu.service';\n\nexport enum AuthTokenType {\n AccessToken,\n RefreshToken\n}\n\n@Injectable()\nexport class AuthService {\n baseUrl = this.env.apiUrl;\n public loginRedirectUrl: string;\n private refreshTokenSubscription: Subscription;\n \n constructor(\n private headersService: HeadersService,\n private busMsg: BusMessageService,\n private httpClient: HttpClient,\n private router: Router,\n private localStorage: LocalStoreManager,\n private menuService : MenuService,\n private env: EnvironmentBase\n ) { \n this.scheduleRefreshToken(this.isLoggedIn,false);\n }\n\n // After a successful login, save token data into session storage\n // note: use \"localStorage\" for persistent, browser-wide logins; \"sessionStorage\" for per-session storage.\n login(username: string, password: string, rememberMe: boolean): Observable<IUserCredential> {\n // console.log(`login base url : ${this.baseUrl} (environment is production : ${this.env.production})`);\n let body = JSON.stringify({ \"username\": username, \"password\": password });\n let _url = this.baseUrl + ServerUrl.connectPath;\n return this.httpClient.post(_url, body, { headers: this.headersService.authJsonHeaders() }).pipe(\n map((resp: Response) => {\n // login successful if there's a jwt token in the response\n // let user = (resp as any) as IUserCredential;\n let user: IUserCredential = (resp as any) as IUserCredential;\n if (user && user.AccessToken) {\n // store user details and jwt token in local storage to keep user logged in between page refreshes\n this.saveUserInfos(user, JSON.stringify(user), rememberMe);\n // publish token\n this.busMsg.publish(new UserUpdatedMessage(user.AccessToken));\n // schedule refresh token\n this.scheduleRefreshToken(true, true);\n \n return user;\n }\n }));\n }\n\n // After a successful login, save token data into session storage\n // note: use \"localStorage\" for persistent, browser-wide logins; \"sessionStorage\" for per-session storage.\n register(captchaToken: string, firstName: string, lastName: string, email: string, password: string, rememberMe: boolean) : Observable<IUserCredential> {\n // console.log(`login base url : ${this.baseUrl} (environment is production : ${this.env.production})`);\n let body = JSON.stringify({ \"CaptchaToken\": captchaToken, \"FirstName\": firstName, \"LastName\": lastName, \"Email\": email, \"Password\": password });\n let _url = this.baseUrl + ServerUrl.registerPath;\n return this.httpClient.post(_url, body, { headers: this.headersService.authJsonHeaders() }).pipe(\n map((resp: Response) => {\n // login successful if there's a jwt token in the response\n let user: IUserCredential = (resp as any) as IUserCredential;\n if (user && user.AccessToken) {\n // store user details and jwt token in local storage to keep user logged in between page refreshes\n this.saveUserInfos(user, JSON.stringify(user), rememberMe);\n // publish token\n this.busMsg.publish(new UserUpdatedMessage(user.AccessToken));\n // schedule refresh token\n this.scheduleRefreshToken(true, true);\n \n return user;\n }\n }));\n }\n\n // Activation d'un utilisateur\n activate(code: string) {\n // console.log(`login base url : ${this.baseUrl} (environment is production : ${this.env.production})`);\n let body = JSON.stringify({ \"ActivationCode\": code });\n let _url = this.baseUrl + ServerUrl.activatePath;\n return this.httpClient.post(_url, body, { headers: this.headersService.authJsonHeaders() }).pipe(\n map((resp: Response) => {\n return resp;\n }));\n }\n\n\n\n saveUserInfos(user: any, userDetails: string, rememberMe?: boolean) {\n\n // check permissions \n let permissions = user.Permissions || new Array<any>();\n // this.getPermissions(user.AccessToken) || new Array<any>();\n\n if (rememberMe) {\n this.localStorage.savePermanentData(user.AccessToken, AppKeys.ACCESS_TOKEN);\n this.localStorage.savePermanentData(user.RefreshToken, AppKeys.REFRESH_TOKEN);\n this.localStorage.savePermanentData(userDetails, AppKeys.CURRENT_USER);\n this.localStorage.savePermanentData(JSON.stringify(permissions), AppKeys.PERMISSIONS);\n }\n else {\n this.localStorage.saveSyncedSessionData(user.AccessToken, AppKeys.ACCESS_TOKEN);\n this.localStorage.saveSyncedSessionData(user.RefreshToken, AppKeys.REFRESH_TOKEN);\n this.localStorage.saveSyncedSessionData(userDetails, AppKeys.CURRENT_USER);\n this.localStorage.saveSyncedSessionData(JSON.stringify(permissions), AppKeys.PERMISSIONS);\n }\n\n if (rememberMe) {\n this.localStorage.savePermanentData(rememberMe, AppKeys.REMEMBER_ME);\n }\n }\n\n getPermissions(token: any) {\n let decodedToken = jwt_decode(token);\n let permissions = new Array<any>();\n if (decodedToken.permissions) {\n permissions = Array.isArray(decodedToken.permissions) ? decodedToken.permissions : [decodedToken.permissions];\n }\n return permissions;\n }\n\n removeUserInfos() {\n this.localStorage.deleteData(AppKeys.ACCESS_TOKEN);\n this.localStorage.deleteData(AppKeys.REFRESH_TOKEN);\n this.localStorage.deleteData(AppKeys.CURRENT_USER);\n this.loginRedirectUrl = '/';\n }\n\n // called when logging out user; clears tokens from browser\n logout(pseudo: string) {\n this.disconnect(pseudo);\n }\n\n disconnect(pseudo: string) {\n const headers = new HttpHeaders({ \"Content-Type\": \"application/json\" });\n const model = { refreshToken: this.refreshToken };\n\n return this.httpClient\n .post(`${this.baseUrl}${ServerUrl.disconnectPath}`, model, { headers: headers })\n .pipe(\n map(response => response || {}),\n finalize(() => {\n this.ensureLogout();\n // navigate to home page\n this.router.navigate(['/']);\n }\n )).subscribe(result => {\n console.log(\"logout\", result);\n });\n \n }\n\n ensureLogout() {\n this.menuService.resetPermissionMap();\n this.busMsg.publish(new UserUpdatedMessage(null));\n this.removeUserInfos();\n this.unscheduleRefreshToken(true);\n }\n\n redirectLoginUser() {\n let redirect = this.loginRedirectUrl && this.loginRedirectUrl !== '/' ? this.loginRedirectUrl : '/';\n this.loginRedirectUrl = null;\n\n let urlParamsAndFragment = Utilities.splitInTwo(redirect, '#');\n let urlAndParams = Utilities.splitInTwo(urlParamsAndFragment.firstPart, '?');\n\n let navigationExtras: NavigationExtras = {\n fragment: urlParamsAndFragment.secondPart,\n queryParams: Utilities.getQueryParamsFromString(urlAndParams.secondPart),\n queryParamsHandling: \"merge\"\n };\n\n this.router.navigate([urlAndParams.firstPart], navigationExtras);\n }\n\n invalidateCurrentTabId() {\n if (!this.rememberMe) {\n return;\n }\n const currentTabId = this.getCurrentTabId();\n if (this.timerStat && this.timerStat.tabId === currentTabId) {\n this.setRefreshTokenTimerStopped();\n }\n }\n\n scheduleRefreshToken(isAuthUserLoggedIn: boolean, calledFromLogin: boolean) {\n this.unscheduleRefreshToken(false);\n\n if (!this.isLoggedIn) {\n return;\n }\n\n const expDateUtc = this.getAccessTokenExpirationDateUtc();\n if (!expDateUtc) {\n throw new Error(\"This access token has not the `exp` property.\");\n }\n const expiresAtUtc = expDateUtc.valueOf();\n const nowUtc = new Date().valueOf();\n // 3s pour empêcher les timers des autres onglets de tourner moins de 3s\n const initialDelay = Math.max(1, expiresAtUtc - nowUtc - 3000);\n const timerSource$ = timer(initialDelay);\n this.refreshTokenSubscription = timerSource$.subscribe(() => {\n if (calledFromLogin || !this.isRefreshTokenTimerStartedInAnotherTab()) {\n this.updateToken();\n } else {\n this.scheduleRefreshToken(isAuthUserLoggedIn, false);\n }\n });\n\n if (calledFromLogin || !this.isRefreshTokenTimerStartedInAnotherTab()) {\n this.setRefreshTokenTimerStarted();\n }\n }\n\n private refreshTokenTimerCheckId = \"is_refreshToken_timer_started\";\n private setRefreshTokenTimerStopped(): void {\n this.localStorage.savePermanentData(JSON.stringify({\n isStarted: false,\n tabId: -1\n }), this.refreshTokenTimerCheckId);\n }\n\n private setRefreshTokenTimerStarted(): void {\n this.localStorage.savePermanentData(JSON.stringify(\n {\n isStarted: true,\n tabId: this.getCurrentTabId()\n }), this.refreshTokenTimerCheckId);\n }\n\n private deleteRefreshTokenTimerCheckId() {\n this.localStorage.deleteData(this.refreshTokenTimerCheckId);\n }\n\n private isRefreshTokenTimerStartedInAnotherTab(): boolean {\n if (!this.rememberMe) {\n return false; // Chaque onglet gère son token (infos stockés dans le local storage)\n }\n\n const currentTabId = this.getCurrentTabId();\n // console.log(\"RefreshTokenTimer Check\", {\n // refreshTokenTimerCheckId: this.timerStat,\n // currentTabId: currentTabId\n // });\n const isStarted = this.timerStat && this.timerStat.isStarted === true && this.timerStat.tabId !== currentTabId;\n // if (isStarted) {\n // console.log(`RefreshToken timer has already been started in another tab with tabId=${this.timerStat.tabId}.\n // currentTabId=${currentTabId}.`);\n // }\n return isStarted;\n }\n\n getCurrentTabId(): number {\n const tabIdToken = \"currentTabId\";\n let tabId = this.localStorage.getData(tabIdToken);\n if (tabId) {\n return tabId;\n }\n tabId = Math.random();\n this.localStorage.saveSyncedSessionData(tabId, tabIdToken);\n return tabId;\n }\n\n getAccessTokenExpirationDateUtc(): Date | null {\n const decoded = this.getDecodedAccessToken();\n if (decoded.exp === undefined) {\n return null;\n }\n const date = new Date(0);\n date.setUTCSeconds(decoded.exp);\n // console.log(`Token Expires at ${date}`);\n return date;\n }\n\n isAccessTokenTokenExpired(): boolean {\n const expirationDateUtc = this.getAccessTokenExpirationDateUtc();\n if (!expirationDateUtc) {\n return true;\n }\n return !(expirationDateUtc.valueOf() > new Date().valueOf());\n }\n\n getDecodedAccessToken(): any {\n return jwt_decode(this.token);\n }\n\n isEmptyString(value: string): boolean {\n return !value || 0 === value.length;\n }\n\n unscheduleRefreshToken(cancelTimerCheckToken: boolean) {\n if (this.refreshTokenSubscription) {\n this.refreshTokenSubscription.unsubscribe();\n }\n\n if (cancelTimerCheckToken) {\n this.deleteRefreshTokenTimerCheckId();\n }\n }\n\n updateToken() {\n console.log(`Entering updateToken()`);\n const headers = new HttpHeaders({ \"Content-Type\": \"application/json\" });\n const model = { refreshToken: this.refreshToken };\n return this.httpClient\n .post(`${this.baseUrl}${ServerUrl.refreshPath}`, model, { headers: headers })\n .pipe(\n map(response => response || {}),\n catchError((error: HttpErrorResponse) =>throwError(() => new Error(error.error)))\n )\n .subscribe(resp => {\n // login successful if there's a jwt token in the response\n let user = (resp as any) as { AccessToken: string, RefreshToken: string, Username?: string, FirstName?: string, LastName?: string, IsAdmin?: boolean, Id?: number };\n if (user && user.AccessToken) {\n // store user details and jwt token in local storage to keep user logged in between page refreshes\n this.saveUserInfos(user, JSON.stringify(user),this.rememberMe);\n // publish token\n this.busMsg.publish(new UserUpdatedMessage(user.AccessToken));\n this.scheduleRefreshToken(this.isLoggedIn, false);\n return user;\n }\n });\n }\n\n hasPermission(permission: string): boolean {\n return this.permissions != null && this.permissions.some(p => p === permission) || this.isAdmin;\n }\n\n //#region Fields\n\n get timerStat() : any {\n const timerStat_key = this.localStorage.getDataObject<string>(this.refreshTokenTimerCheckId);\n const timerStat = JSON.parse(timerStat_key);\n return timerStat;\n }\n\n get isLoggedIn(): boolean {\n const accessToken = this.token;\n const refreshToken = this.refreshToken;\n const hasTokens = !this.isEmptyString(accessToken) && !this.isEmptyString(refreshToken);\n return hasTokens && !this.isAccessTokenTokenExpired();\n }\n\n get isAdmin(): boolean {\n let parsed = JSON.parse(this.currentUser);\n if ( Utilities.IsNil(parsed))\n return false;\n return parsed.IsAdmin || false;\n }\n\n get pseudo(): string {\n let parsed = JSON.parse(this.currentUser);\n return parsed.Username || '';\n }\n\n get userId(): number {\n let parsed = JSON.parse(this.currentUser);\n return parsed.Id || 0;\n }\n\n get currentUser(): string {\n return this.localStorage.getDataObject<string>(AppKeys.CURRENT_USER);\n }\n\n get rememberMe(): boolean {\n return this.localStorage.getDataObject<boolean>(AppKeys.REMEMBER_ME) === true;\n }\n\n get token(): string {\n return this.localStorage.getDataObject<string>(AppKeys.ACCESS_TOKEN);\n }\n\n get refreshToken(): string {\n return this.localStorage.getDataObject<string>(AppKeys.REFRESH_TOKEN);\n }\n\n get permissions(): Array<any> {\n let permissions = this.localStorage.getDataObject<string>(AppKeys.PERMISSIONS);\n let parsed_permissions = <Array<any>>JSON.parse(permissions);\n return parsed_permissions\n }\n\n get companyId() : number {\n const decoded = this.getDecodedAccessToken();\n if (Utilities.IsNil(decoded[AppKeys.USER_COMPANY_ID])) {\n return null;\n }\n return <number>decoded[AppKeys.USER_COMPANY_ID];\n }\n\n get referenceSupplierId() : number {\n const decoded = this.getDecodedAccessToken();\n if (Utilities.IsNil(decoded[AppKeys.REFERENCE_SUPPLIER_ID])) {\n return null;\n }\n return <number>decoded[AppKeys.REFERENCE_SUPPLIER_ID];\n }\n\n //#endregion \n\n navigateToHome(){\n this.router.navigate(['/']);\n }\n}\n","import { Utilities } from '@dflat-core/web/core';\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Route, Router, RouterStateSnapshot } from '@angular/router';\n\nimport { AuthService } from './auth.service';\nimport { MenuService } from './menu.service';\n\n@Injectable()\nexport class AuthGuard {\n constructor(\n private authService: AuthService,\n private menuService: MenuService,\n private router: Router\n ) {}\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): boolean {\n let url: string = state.url;\n return this.checkLogin(url);\n }\n\n canActivateChild(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): boolean {\n return this.canActivate(route, state);\n }\n\n canLoad(route: Route): boolean {\n let url = `/${route.path}`;\n return this.checkLogin(url);\n }\n\n checkLogin(url: string): boolean {\n if (this.authService.isLoggedIn) {\n if (url === '/accessDenied' || this.authService.isAdmin) {\n return true;\n }\n\n return this.hasAuthUserAccessToThisRoute(url);\n }\n\n this.menuService.resetPermissionMap();\n this.authService.loginRedirectUrl = url;\n this.router.navigate(['/login']);\n\n return false;\n }\n\n private hasAuthUserAccessToThisRoute(returnUrl: string): boolean {\n if ( ! this.menuService.hasAccessToThisRoute(Utilities.splitInTwo(returnUrl, '?').firstPart ) ) {\n this.showAccessDenied(returnUrl);\n return false;\n }\n\n return true;\n }\n\n private showAccessDenied(returnUrl: string) {\n this.router.navigate(['/accessDenied']);\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { Title } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\nexport class BreadcrumbService {\r\n public current: ReplaySubject<any>;\r\n private initialData: any = {\r\n description: '',\r\n display: false,\r\n header : '',\r\n\r\n levels: [\r\n {\r\n icon: 'clock-o',\r\n link: ['/'],\r\n title: 'Default'\r\n }\r\n ]\r\n };\r\n\r\n constructor(protected title: Title ) {\r\n this.current = new ReplaySubject(1);\r\n this.clear();\r\n }\r\n\r\n public setCurrent(data: any) {\r\n if ( data.description !== undefined && data.description !== '') {\r\n\r\n this.title.setTitle('DFlat - ' + data.levels[data.levels.length - 1].title);\r\n }\r\n else\r\n this.title.setTitle('DFlat');\r\n\r\n this.current.next(data);\r\n }\r\n\r\n public getCurrent() {\r\n return this.current;\r\n }\r\n\r\n public clear() {\r\n this.setCurrent(this.initialData);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class FilterService {\r\n \r\n private displayFilterChangedSubject = new BehaviorSubject<boolean>(false);\r\n public filterChanged$ = this.displayFilterChangedSubject.asObservable();\r\n \r\n displayFilter: boolean = true;\r\n get DisplayFilter() { return this.displayFilter; } \r\n\r\n \r\n keywords: string ='';\r\n get Keywords() { return this.keywords; } \r\n set Keywords(value: string) { this.keywords = value; } \r\n\r\n public constructor() {\r\n\r\n }\r\n setFilterDisplay(value: boolean) {\r\n if ( this.displayFilter != value ) {\r\n this.displayFilter = value;\r\n \r\n // Déclenchement de l'évènement de changement d'affichage du filtre\r\n this.displayFilterChangedSubject.next(this.displayFilter);\r\n }\r\n }\r\n\r\n toggleFilterDisplay() {\r\n this.displayFilter = !this.displayFilter;\r\n \r\n // Déclenchement de l'évènement de changement d'affichage du filtre\r\n this.displayFilterChangedSubject.next(this.displayFilter);\r\n }\r\n}","import { Utilities } from \"@dflat-core/web/core\";\nimport { EventEmitter, Injectable } from \"@angular/core\";\nimport { NamedPosition } from \"../model/model\";\nimport { AppKeys } from \"./app-keys\";\nimport { LocalStoreManager } from \"./local-store-manager.service\";\n\n\n@Injectable()\nexport class GeolocationService {\n\n positionsHistory: Array<NamedPosition> = new Array<NamedPosition>(0);\n positionChanged: EventEmitter<NamedPosition> = new EventEmitter();\n \n constructor(protected localStore: LocalStoreManager) {\n try {\n let saveLocations = localStore.getDataObject<Array<NamedPosition>>(AppKeys.LAST_GEOLOCATIONS, false);\n if ( ! Utilities.IsNil(saveLocations))\n this.positionsHistory = saveLocations; \n }\n catch {}\n }\n\n getCurrentPosition(): NamedPosition {\n // Retourne la dernière valeur de l'historique\n if (! Utilities.IsNil(this.positionsHistory) && this.positionsHistory.length > 0)\n return this.positionsHistory[0];\n }\n\n setCurrentPosition(formattedName: string, placeId:string , latitude: number, longitude: number) {\n\n // Création d'un objet de type NamedPosition\n let currentPosition : NamedPosition = { \n placeId: placeId,\n formattedName: formattedName,\n latitude:latitude,\n longitude: longitude\n };\n\n // Insertion de la dernière position dans l'historique (on ne garde que les 5 dernières positions)\n this.positionsHistory.unshift(currentPosition);\n if ( this.positionsHistory.length > 5 )\n this.positionsHistory.pop();\n\n // Sauvegarde dans le localStorage\n this.localStore.savePermanentData(this.positionsHistory, AppKeys.LAST_GEOLOCATIONS);\n\n // Déclenchement de l'évènement de changemetn de position courante.\n this.positionChanged.emit(currentPosition);\n }\n\n /**\n * Calcule la distance en mètres entre la position courante et le point dont les coordonnées GPS sont spécifiées en paramètre.\n * @param latitude Latitude du point\n * @param longitude Longitude du point\n * @returns La distance en mètres entre la position courante et le point dont les coordonnées GPS sont spécifiées en paramètre.\n */\n getDistanceToCurrent(latitude : number, longitude: number) : number {\n \n // Distance entre les coordonnées spécifiées et la position courante.\n let position : NamedPosition = this.getCurrentPosition();\n if ( Utilities.IsNil(position) )\n return undefined;\n\n return this.getDistance(position.latitude, position.longitude, latitude, longitude);\n }\n\n /** Calcule la distance en mètres entre 2 points en coordonnées GPS.\n * @param latitude1 Latitude du point 1\n * @param longitude1 Longitude du point 1\n * @param latitude2 Latitude du point 2\n * @param longitude2 Longitude du point 2\n * @returns Une estimation la distance en mètres entre les point GPS 1 et 2 dont les coordonnées sont spécifiées.\n */\n getDistance(latitude1: number, longitude1 : number, latitude2: number, longitude2 : number) {\n \n // Connaissant la position de deux points A et B sur une sphère, calculer la distance entre eux\n // revient à calculer l'abscisse curviligne S (AB) sur le grand cercle passant par A et B.\n // Si l’on considère deux points A et B sur la sphère, de latitudes ϕA et ϕB et de longitudes λA et λB, \n // alors la distance angulaire en radians SA-B entre A et B est donnée par la relation fondamentale de trigonométrie\n // sphérique, utilisant dλ = λB – λA :\n // SA-B = arc cos (sin ϕA sin ϕB + cos ϕA cos ϕB cos dλ)\n // La distance S en mètres, s’obtient en multipliant SA-B par un rayon de la Terre conventionnel (6 378 137 mètres par exemple).\n\n // Conversion en radian\n let a: number = latitude1 * Math.PI / 180;\n let b: number = longitude1 * Math.PI / 180;\n let c: number = latitude2 * Math.PI / 180;\n let d: number = longitude2 * Math.PI / 180;\n\n // Calcul de la distance en m\n let e = Math.sin(a) * Math.sin(c) + Math.cos(a) * Math.cos(c) * Math.cos(d - b);\n let result = 6378137 * Math.acos(e);\n\n return result;\n }\n\n \n\n}","\nimport { map } from 'rxjs/operators';\nimport { ReplaySubject, Subject } from 'rxjs';\n\n// based on https://github.com/ng-book/angular2-rxjs-chat/blob/master/app/ts/services/NotificationsService.ts\nimport { Notification } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\n\ntype INotificationsOperation = (notifications: Notification[]) => Notification[];\n\n@Injectable()\nexport class NotificationsService {\n private notificationsList: Notification[] = [];\n \n // a stream that publishes new notifications only once\n public newNotifications: Subject<Notification> = new Subject<Notification>();\n\n // `notifications` is a stream that emits an array of the most up to date notifications\n public notifications: ReplaySubject<Notification[]> = new ReplaySubject<Notification[]>(1);\n\n // `updates` receives _operations_ to be applied to our `notifications`\n // it's a way we can perform changes on *all* notifications (that are currently\n // stored in `notifications`)\n public updates: Subject<any> = new Subject<any>();\n\n // action streams\n public create: Subject<Notification> = new Subject<Notification>();\n // public markThreadAsRead: Subject<any> = new Subject<any>();\n\n constructor() {\n // recois des operation, et les fais sur la liste interne, puis diffuse le resultat sur notifications\n this.updates.subscribe((ope) => {\n this.notificationsList = ope(this.notificationsList);\n this.notifications.next(this.notificationsList);\n });\n\n this.newNotifications.pipe(\n map(function(notification: Notification): INotificationsOperation {\n return (notifications: Notification[]) => {\n return notifications.concat(notification);\n };\n }))\n .subscribe(this.updates);\n\n }\n\n // an imperative function call to this action stream\n public addNotification(notification: Notification): void {\n this.newNotifications.next(notification);\n }\n\n}\n","import { Notification, UserUpdatedMessage } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\n\nimport { AppKeys } from './app-keys';\nimport { AuthService } from './auth.service';\nimport { BusMessageService, NotificationMqService } from './busmessage.service';\nimport { LocalStoreManager } from './local-store-manager.service';\nimport { NotificationsService } from './notifications.service';\nimport { EnvironmentBase } from '@dflat-core/web/core';\n\nenum RequestState {\n Pending = 0,\n InProgress = 1,\n Success = 2,\n Error = 3,\n Warning = 4,\n}\n/*\n signalR Hub Service.\n Currently chimera class, both registering to a the dflatHub and registering handlers.\n TODO Extract handlers elsewhere.\n*/\n@Injectable()\nexport class HubService {\n\n protected hubUrl = this.env.hubUrl;\n private timer$: any;\n\n protected hubConnection: signalR.HubConnection = null;\n isConnected: boolean = false;\n isReconnect: boolean = false;\n isInit: boolean;\n isConnecting: boolean;\n\n get hubOptions(): signalR.IHttpConnectionOptions {\n let _self = this;\n var options = {\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets,\n accessTokenFactory: () => {\n const token = _self.localStorage.getDataObject<string>(AppKeys.ACCESS_TOKEN);\n return token;\n }\n };\n return options;\n }\n\n constructor(\n protected localStorage: LocalStoreManager,\n protected notificationService: NotificationsService,\n protected busMsg: BusMessageService,\n protected mqMsg: NotificationMqService,\n protected authService: AuthService,\n protected env: EnvironmentBase\n ) {\n this.busMsg.of(UserUpdatedMessage).subscribe(msg =>\n {\n // log out\n if(msg.userKey === null){\n this.disposeConnection();\n }\n else {\n this.startHub();\n }\n });\n }\n\n //TODO REFACTO\n\n init() {\n\n if ( ! this.isInit ) {\n this.startHub();\n this.isInit = true;\n }\n }\n\n disposeConnection() {\n if (this.hubConnection) {\n this.hubConnection.stop();\n }\n }\n\n startHub() {\n\n // Si la connnexion est déjà active ou qu'un utilisateur n'est pas connecté on ne fait rien.\n if(this.isConnected || ! this.authService.isLoggedIn || this.isConnecting)\n return;\n\n\n this.isConnecting = true;\n\n var options = this.hubOptions;;\n this.hubConnection = new signalR.HubConnectionBuilder()\n .withUrl(this.hubUrl, options)\n .configureLogging(signalR.LogLevel.Trace)\n .build();\n this.hubConnection.serverTimeoutInMilliseconds = 30000;\n\n this.configure();\n\n this.hubConnection\n .start()\n .then(() => {\n console.log('*****Connection started!');\n this.isConnected = true;\n this.isConnecting = false;\n clearInterval(this.timer$);\n })\n .catch(err => {\n console.log('Error while establishing connection :(', err);\n this.isConnected = false;\n this.isConnecting = false;\n clearInterval(this.timer$);\n this.scheduleStartingHub();\n })\n }\n configure() {\n // subscribe to operation log from server\n this.hubConnection.on('OperationLog', (uid: string, message: string) => {\n this.publishEvents(new Notification({ id: undefined, content: message, class: undefined, entityType: uid, entityId: undefined }));\n });\n\n // subscribe to broadcasted messagse from server\n this.hubConnection.on('BroadcastMessage', (name: string, message: string) => {\n // console.log(`BroadcastMessage received : ${message}, ${name}`);\n });\n\n //Subscriptions have to be prior the connection start so the server hub knows which 'events' this client is eligible for.\n this.hubConnection.on(\"ReportProgress\", (name: string, message: string, state: RequestState, entityType: string, entityId: number) => {\n // console.log(`ReportProgress: name: ${name} | message: ${message} | state: ${state} | entityType: ${entityType} | entityId: ${entityId} `);\n //let end = state === RequestState.Success || state === RequestState.Error || state === RequestState.Warning ;\n let classNotif = \"info\";\n\n //if (end) {\n\n const notif = new Notification({ id: name, content: message, class: classNotif, entityType: entityType, entityId: entityId });\n this.publishEvents(notif);\n //}\n });\n\n //Registers a handler that will be invoked when the connection is closed.\n this.hubConnection.onclose(e => {\n console.log(`Hub connection closed !`);\n this.isConnected = false;\n this.scheduleStartingHub();\n\n });\n }\n\n\n scheduleStartingHub(){\n\n // chaque 30s\n this.timer$ = setInterval(() => {\n console.log(\"retry start hub\");\n this.startHub();\n }, 30000);\n\n }\n\n publishEvents(notif: Notification) {\n this.mqMsg.publish(notif);\n }\n}\n\n","\nimport { map } from 'rxjs/operators';\nimport { ReplaySubject, Subject } from 'rxjs';\n\n// based on https://github.com/ng-book/angular2-rxjs-chat/blob/master/app/ts/services/MessagesService.ts\nimport { Message } from '@dflat-core/web/core-model';\nimport { Injectable } from '@angular/core';\n\ntype IMessagesOperation = (messages: Message[]) => Message[];\n\n@Injectable()\nexport class MessagesService {\n private messagesList: Message[] = [];\n // a stream that publishes new messages only once\n public newMessages: Subject<Message> = new Subject<Message>();\n\n // `messages` is a stream that emits an array of the most up to date messages\n public messages: ReplaySubject<Message[]> = new ReplaySubject<Message[]>(1);\n\n // `updates` receives _operations_ to be applied to our `messages`\n // it's a way we can perform changes on *all* messages (that are currently\n // stored in `messages`)\n public updates: Subject<any> = new Subject<any>();\n\n // action streams\n public create: Subject<Message> = new Subject<Message>();\n // public markThreadAsRead: Subject<any> = new Subject<any>();\n\n constructor() {\n // recois des operation, et les fais sur la liste interne, puis diffuse le resultat sur messages\n this.updates.subscribe((ope) => {\n this.messagesList = ope(this.messagesList);\n this.messages.next(this.messagesList);\n });\n\n this.newMessages.pipe(\n map(function(message: Message): IMessagesOperation {\n return (messages: Message[]) => {\n return messages.concat(message);\n };\n }))\n .subscribe(this.updates);\n\n }\n\n // an imperative function call to this action stream\n public addMessage(message: Message): void {\n this.newMessages.next(message);\n }\n\n}\n","import { Utilities } from '@dflat-core/web/core';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { ScreenConfiguration } from '../model/model';\n\n\n@Injectable()\nexport class ScreenService {\n screenChanged: EventEmitter<ScreenConfiguration> = new EventEmitter();\n scrollChanged: EventEmitter<Element> = new EventEmitter();\n \n config: ScreenConfiguration;\n \n public constructor() {\n\n }\n\n getScreenConfiguration(): ScreenConfiguration {\n return this.config;\n }\n\n setScreenConfiguration(value: ScreenConfiguration) {\n // Si la valeur passée est vide, on ne fait rien.\n if ( Utilities.IsNil(value))\n return;\n\n // Sinon, on vérifie qu'une des valeurs de configuration a changé\n if (Utilities.IsNil(this.config) \n || this.config.isExtraSmallScreen != value.isExtraSmallScreen\n || this.config.isSmallScreen != value.isSmallScreen\n || this.config.isLargeScreen != value.isLargeScreen\n ) {\n this.config = value;\n\n // Déclenchement de l'évènement de changemetn de position courante.\n this.screenChanged.emit(this.config);\n }\n }\n\n scroll(elt: Element){\n \n // Déclenchement de l'évènement de scrolling\n this.scrollChanged.emit(elt);\n }\n\n\n}","\nimport { ReplaySubject } from 'rxjs';\n\nimport { IUserCredential, User } from '@dflat-core/web/core-model';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { AuthService } from './auth.service';\nimport { Utilities } from '@dflat-core/web/core';\n\n\n@Injectable()\nexport class UserService {\n\n public userChanged: EventEmitter<User> = new EventEmitter<User>();\n private current: ReplaySubject<User> = new ReplaySubject<User>(1);\n private editUser: ReplaySubject<any> = new ReplaySubject<any>( 1 );\n constructor(\n private router: Router,\n private authService: AuthService\n ) { }\n\n public setCurrent(user: User) {\n this.current.next(user);\n this.userChanged.emit(user);\n }\n \n public getCurrent() {\n return this.current;\n }\n\n public openEditUser(){\n this.editUser.next(1);\n }\n\n public getEditUser(){\n return this.editUser;\n }\n\n get AuthenticatedUser(): User {\n let user = this.authService.currentUser;\n let parsed = JSON.parse(user);\n let login : IUserCredential = parsed as IUserCredential;\n if ( Utilities.IsNil(login))\n return undefined;\n return new User(login);\n }\n\n public logout() {\n const user = new User({} as IUserCredential);\n user.IsConnected = false;\n this.setCurrent(user); \n this.authService.logout(this.authService.pseudo);\n \n }\n}\n","// IMPORTANT : DANS LE BUT DE FACILITER LES MERGE ET LA LECTURE DU CODE.\n\n// 1. TOUJOURS CONSERVER LE TRI SUR LES IMPORTS\n// UTILISER L'EXTENSION \"TypeScript Import Sorter\" DANS VSCODE.\n// CONFIGURER L'EXTENSION POUR ACTIVER LA MISE EN FORME AUTOMATIQUE A LA SAUVEGARDE \n\n// 2. UTILISER CTRL-SHIFT O POUR SUPPRIMER AUTOMATIQUEMENT LES IMPORTS INUTILES\n\n// 3. TRIER LES COMPOSANTS OU DEPENDANCES DANS LES DECLARATIONS (IMPORTS, EXPORTS)\n// SELECTION DU TEXTE PUIS CTRL-SHIFT P, \"Sort Lines Ascending\"\n// ON PEUT PARAMETRER DES RACCOURCIS CLAVIER DANS VSCODE\nimport { EnsureModuleLoadedOnceGuard } from '@dflat-core/web/core';\nimport { CoreModelModule } from '@dflat-core/web/core-model';\n// PAR EXEMPLE : CTRL-T UP (TRI CROISSANT) ou CTRL-T DOWN (TRI DECDROISSANT)\nimport { CommonModule } from '@angular/common';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { AppConfiguration } from './services/appConfig.service';\nimport { AuthGuard } from './services/auth-guard.service';\nimport { AuthService } from './services/auth.service';\nimport { BreadcrumbService } from './services/breadcrumb.service';\nimport { BusMessageService, NotificationMqService } from './services/busmessage.service';\nimport { FilterService } from './services/filter.service';\nimport { GeolocationService } from './services/geolocation.service';\nimport { HeadersService } from './services/headers.service';\nimport { HubService } from './services/hub.service';\nimport { LocalStoreManager } from './services/local-store-manager.service';\nimport { MessagesService } from './services/message.service';\nimport { NotificationsService } from './services/notifications.service';\nimport { PermissionService } from './services/permission.service';\nimport { ScreenService } from './services/screen.service';\nimport { UserService } from './services/user.service';\n\n\n@NgModule({ exports: [],\n declarations: [], imports: [CommonModule, CoreModelModule], providers: [\n LocalStoreManager,\n GeolocationService,\n MessagesService,\n NotificationsService,\n PermissionService,\n UserService,\n AuthGuard,\n AuthService,\n HeadersService,\n BusMessageService,\n BreadcrumbService,\n ScreenService,\n AppConfiguration,\n HubService,\n NotificationMqService,\n FilterService,\n provideHttpClient(withInterceptorsFromDi())\n ] })\n// Ensure that CoreServicesModule is only loaded into AppModule\nexport class CoreServicesModule extends EnsureModuleLoadedOnceGuard {\n\n // Looks for the module in the parent injector to see if it's already been loaded (only want it loaded once)\n constructor( @Optional() @SkipSelf() parentModule: CoreServicesModule) {\n super(parentModule);\n }\n}\n\n","\nimport { Observable, empty as observableEmpty, throwError as observableThrowError } from 'rxjs';\n\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\nimport { Injectable, Injector } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { catchError } from 'rxjs/operators';\n\nimport { AuthService } from \"./auth.service\";\nimport { HeadersService } from \"./headers.service\";\n\nimport { ApiError, ApiErrorTypes } from '@dflat-core/web/core-model';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n constructor(\n protected router: Router,\n protected injector: Injector,\n \n ) {\n\n }\n\n intercept(\n req: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n const headersService = this.injector.get(HeadersService);\n const authService = this.injector.get(AuthService);\n switch (req.method) {\n case \"GET\":\n req = req.clone({ headers: headersService.authFormHeaders(), withCredentials: true });\n break;\n case \"POST\":\n // let isFileUpload = req.url.match(/Upload|File/)\n // let headers;\n // if (isFileUpload) {\n // headers = headersService.authFileUploadHeaders();\n // }\n // else {\n // headers = headersService.authJsonHeaders();\n //}\n\n if ( req.headers['lazyUpdate'] == null) {\n req = req.clone({ headers: headersService.authJsonHeaders(), withCredentials: true });\n }\n break;\n default:\n req = req;\n break;\n }\n\n const r = req;\n\n return next.handle(req).pipe(catchError(err => {\n console.log(err);\n if (err instanceof HttpErrorResponse) {\n\n // Ignore signalr failure\n if (r.url.includes(\"/hub/\")) {\n return observableEmpty();\n }\n if (err.status === 401 || err.status === 403) {\n // Ignore login failed\n if (!(r.url.endsWith(\"/api/Account/Connect\"))) {\n authService.ensureLogout();\n this.router.navigate(['/login']);\n return observableEmpty();\n }\n }\n else if (err.status === 400) {\n let apiError: ApiError = {};\n apiError.ApiErrorType = ApiErrorTypes.UserError;\n apiError.Message = err.error;\n\n this.onError(err, apiError);\n\n }\n else {\n\n\n try {\n\n if ( err.error instanceof Blob) {\n err.error.text().then((str=>{\n let apiError: ApiError = JSON.parse(str) as ApiError;\n this.onError(err, apiError);\n }));\n }\n else {\n let apiError: ApiError = err.error as ApiError;\n this.onError(err, apiError);\n }\n\n // if (typeof err.error === \"string\") {\n\n\n // }\n // else {\n\n // let reader = new FileReader();\n // reader.addEventListener(\"loadend\",\n // () => {\n // let result = reader.result as string;\n // result = trimChar(result, \"\\\"\");\n // this.onError(err, result);\n\n // });\n // reader.readAsText(err.error);\n // }\n }\n catch (error) {\n let apiError: ApiError = {};\n apiError.ApiErrorType = ApiErrorTypes.UserError;\n apiError.Message = \"Une erreur a été détectée. Merci de contacter le service technique !\";\n\n this.onError(err, apiError);\n\n }\n }\n }\n return observableThrowError(err);\n }));\n }\n\n\n onError(errResponse : HttpErrorResponse, error: ApiError) {\n console.log(error.Message);\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { UserService } from './user.service';\r\n\r\n@Injectable()\r\nexport class CanActivateGuard {\r\n private connected = false;\r\n\r\n constructor(\r\n private router: Router,\r\n private userService: UserService\r\n ) {\r\n this.userService.getCurrent().subscribe((user) => {\r\n this.connected = user.IsConnected;\r\n });\r\n }\r\n\r\n public canActivate() {\r\n if ( !this.connected ) {\r\n this.router.navigate( [ 'login' ] );\r\n }\r\n return this.connected;\r\n }\r\n}\r\n","export function trimChar(str:string,c:string)\r\n{\r\n // Escape special char when needed\r\n c = c === \"]\"\r\n ? \"\\\\]\"\r\n : c === \"\\\\\"\r\n ? \"\\\\\\\\\"\r\n : c;\r\n return str.replace(new RegExp(`^[${c}]+|[${c}]+$`,\"g\"),\"\");\r\n}","export interface IErrorHandler {\r\n handleError(error: any);\r\n}\r\n\r\nexport class MenuItem {\r\n public id?: number;\r\n public title?: string;\r\n public link?: string;\r\n public icon?: string;\r\n public sublinks?: MenuItem[];\r\n public permissionKey?: string;\r\n public external?: boolean = false;\r\n public target?: string = '';\r\n \r\n public constructor(title?: string,\r\n link?: string,\r\n icon?: string,\r\n sublinks?: MenuItem[],\r\n permissionKey?: string)\r\n {\r\n this.title = title;\r\n this.link = link;\r\n this.icon = icon;\r\n this.sublinks = sublinks;\r\n this.permissionKey = permissionKey;\r\n }\r\n}\r\n\r\nexport interface NamedPosition {\r\n formattedName: string;\r\n placeId: string;\r\n latitude: number;\r\n longitude:number;\r\n\r\n}\r\n\r\nexport interface ScreenConfiguration {\r\n isSmallScreen: boolean;\r\n isExtraSmallScreen: boolean;\r\n isLargeScreen: boolean;\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.LocalStoreManager","i1.PermissionService","i1.HeadersService","i2.BusMessageService","i4","i5.LocalStoreManager","i6.MenuService","i1.AuthService","i2.MenuService","i3","i1","i2.NotificationsService","i3.BusMessageService","i3.NotificationMqService","i4.AuthService","i5","i2.AuthService","observableEmpty","observableThrowError","i2.UserService"],"mappings":"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"}
|