{"version":3,"mappings":"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","names":["s","M","T","AppSettings","constructor","handler","log","cookies","this","httpClient","HttpClient","getConfig","key","config","l","i","_a","maintenanceMode","_b","bypassOktaLogin","baseApiUrl","baseCoreApiUrl","myProductsUrl","cloudMediaUrl","showSuccessGetToast","showSuccessNonGetToast","showValidationErrorToast","d","_c","showPermissionErrorToast","f","_d","name","cookieName","path","cookiePath","domain","cookieDomain","issuer","originSsoIssuer","authority","originSsoAuthority","authorizationEndpoint","originSsoAuthorizationEndpoint","tokenEndpoint","originSsoTokenEndpoint","endSessionEndpoint","x","_e","originSsoEndSessionEndpoint","clientId","oktaClientId","oktaAuthority","resetPasswordUrl","oktaResetPasswordUrl","hostname","window","location","indexOf","substring","selectedLanguage","init","debug","getItem","Promise","resolve","get","observe","subscribe","response","body","error","throwError","setLanguage","newLanguage","info","localStorage","setItem","delete","languageCookieName","set","expires","languageCookieDomain","i0","factory","CustomerLoginType","CustomerType","customerType","Partner","Varcustomer","Rescustomer","Endcustomer","ProfileService","appSettings","baseUri","endpoint","getProfile","AuthenticationService","router","profileService","cookieService","oktaOidcService","translate","Subject","ngOnDestroy","destroyed","next","complete","localStorageToken","JSON","parse","token","auth_type","profile","myProfile","u","allowResCustomers","username","userId","customerName","customerTypeId","customerLoginTypeId","P","hasChannelRights","toString","storeRedirectUrl","url","redirectUrl","redirect","navigateByUrl","logout","deleteAuthCookiesAndToken","changeLanguage","language","reload","login","password","uri","params","encodeURIComponent","loginCallback","loginBySession","session","pipe","catchError","map","of","processToken","removeItem","stringify","processProfile","cookieTokenName","cookieTokenValue","cookieLanguageValue","post","takeUntil","status","warn","error_description","switchMap","use","selectedLanguageLocale","cookiesData","cookieConfig","CustomerService","searchCustomers","page","pageSize","sortBy","sortDirection","customerSearch","HttpParams","append","search","exportCustomers","query","responseType","addCustomer","command","getVatTypes","headers","noResponseToastHeaders","getMediaTypes","customerId","getAdminInfo","updateAdminInfo","customerAdminModel","put","getInvoiceInfo","updateInvoiceInfo","customerInvoiceModel","getVarCustomerCanLogin","resetPasswordUnsecure","getContacts","createContact","contactModel","updateContact","id","deleteContact","contactId","unlockContact","getAllUnreadAnnouncements","announcementIsRead","announcementId","LogLevel","LoggingService","Debug","environment","level","Warn","msg","optionalParams","writeToLog","Info","Error","fatal","Fatal","All","shouldLog","value","Date","toLocaleString","length","formatParams","ret","usedLevel","forcedLevel","Off","join","some","p","item","MessageType","BruudToastrService","translationService","toastr","showSuccess","message","title","showToast","showTranslatedSuccess","messageTextFragmentCode","titleTextFragmentCode","showTranslatedToast","showError","text","showTranslatedError","showWarning","showTranslatedWarning","showInfo","showTranslatedInfo","translateTextFragments","messageKey","titleKey","messageTranslationObservable","getTranslation","titleTranslationObservable","zip","type","timeOut","Object","disableTimeOut","toLowerCase","success","warning","settings","loginChangedSubject","asObservable","userManager","UserManager","events","addAccessTokenExpired","_","addUserLoaded","user","expired","signinRedirect","isLoggedIn","getUser","then","userCurrent","completeLogin","signinRedirectCallback","signoutRedirect","completeLogout","signoutRedirectCallback","getAccessToken","access_token","TranslationService","http","defaultRequestOptions","HttpHeaders","translationError","translationsService","handle","OktaOidcService","OidcService","super","client_id","oktaConfig","scope","response_type","redirect_uri","myCloudUrl","post_logout_redirect_uri","loadUserInfo","OktaService","authService","messageService","onOktaLoginCompleted","Login","ssoToken","Authorization","err","HttpErrorResponse","href","loggedIn","OriginSsoGuard","originSsoService","canActivate","route","state","isAuthenticated","OriginOidcService","originSsoConfig","originClientId","client_secret","originClientSecret","metadata","authorization_endpoint","token_endpoint","end_session_endpoint","OriginSsoService","originOidcService","isOriginSsoAuthenticated","onOriginLoginCompleted","targetUri","azItems","emptyGuid","DISABLE_DEFAULT_TOASTER_INTERCEPTOR","HttpContextToken","ctx_r4","oxw","ctx_r7","PasswordInputComponent","EventEmitter","selectors","GridModule","imports","CommonModule","FormsModule","TranslateModule","FontAwesomeModule","TelenetIconModule","GridToolsModule","SearchAutocompleteModule","NgSelectModule","ErrorHandlingService","loggingService","locationStrategy","logError","fileName","stackTrace","console","EMPTY","LogValidationErrorInterceptor","errorHandlingService","intercept","req","tap","event","Z","ValidationErrorsModule","provide","HTTP_INTERCEPTORS","useClass","multi","defaultLanguage","missingTranslationHandler","MissingTranslationHandler","TranslationHandler","deps","useDefaultLang","SharedModule","forRoot","ngModule","providers","ReactiveFormsModule","RouterModule","TelenetIconLibrary","Map","registerIcons","icons","forEach","icon","registry","data","getIcon","iconName","has","TelenetIconComponent","element","telenetIconsRegistry","document","svgIcon","nativeElement","removeChild","svgData","svgElementFromString","appendChild","svgContent","div","createElement","className","innerHTML","querySelector","createElementNS","DOCUMENT","callBackFunc","caught","errorBody","errors","property","hasErrors","isValidationErrors","production","timeStamp","NavigationComponent","AppComponent","loader","oktaService","ngOnInit","filter","e","NavigationEnd","navEnd","isOriginPage","urlAfterRedirects","startsWith","TokenInterceptor","request","changedRequest","headerSettings","keys","k","getAll","Language","newHeader","clone","requests","push","Observable","observer","subscription","HttpResponse","removeRequest","unsubscribe","splice","MY_CLOUD_HTTP_CONFIG","InjectionToken","ReponseToastInterceptor","httpConfig","HttpEventType","customSuccessToast","showHttpSuccess","method","toUpperCase","showHttpError","showGenericError","showBadRequestError","showPermissionError","errorbody","LoginModalComponent","modalRef","customerService","errorDescription","undefined","close","resetPassword","ctx","AuthGuard","modalService","canActivateChild","Number","expires_at","now","navigate","openLoginModal","open","ariaLabelledBy","backdrop","keyboard","modalDialogClass","scrollable","dismiss","result","CoreModule","CookieService","HttpClientModule","NgbModule","MaintenanceGuard","isInMaintenanceMode","includes","routes","redirectTo","pathMatch","component","ModalLoginComponent","authenticationService","MaintenanceComponent","children","loadChildren","module","OktaModule","queryParams","CloudErpSsoGuard","CloudErpSsoComponent","OriginSsoModule","ProfileResolverService","AccountModule","DataCenter","DocumentsModule","DomainModule","LinuxModule","M365Module","ProductsModule","PromotionModule","SharedHostingModule","SubscriptionsModule","ContactingModule","NotFoundComponent","AppRoutingModule","useHash","relativeLinkResolution","AppSettingsModule","APP_INITIALIZER","useFactory","InitializerFactory","MyCloudHttpConfigFactory","telenetIconTick","telenetIconPack","triggerChildAnimation","trigger","transition","animate","animateChild","verticalCollapseAnimation","style","height","CustomToastComponent","Toast","options","isErrorMessage","isWarningMessage","isInfoMessage","t","transform","opacity","AppModule","faIconLibrary","telenetIconLibrary","addIconPacks","fas","far","fab","bootstrap","BrowserModule","BrowserAnimationsModule","LoadingBarHttpClientModule","ToastrModule","extendedTimeOut","toastComponent","positionClass","iconClasses","closeButton","autoDismiss","enableHtml","preventDuplicates","countDuplicates","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","catch"],"sources":["webpack:///$_lazy_route_resources|lazy|groupOptions:%20%7B%7D|namespace%20object","webpack:///src/app/app.settings.ts","webpack:///src/app/core/models/customer-login-type.enum.ts","webpack:///src/app/core/models/customer-type.enum.ts","webpack:///src/app/core/services/profile.service.ts","webpack:///src/app/core/services/authentication.service.ts","webpack:///src/app/core/services/customer.service.ts","webpack:///src/app/core/services/logging.service.ts","webpack:///src/app/core/models/message-type.enum.ts","webpack:///src/app/core/services/message.service.ts","webpack:///src/app/core/services/oidc.service.ts","webpack:///src/app/core/services/translation.service.ts","webpack:///src/app/core/translations/translation.handler.ts","webpack:///src/app/modules/okta-login/services/okta-oidc.service.ts","webpack:///src/app/modules/okta-login/services/okta.service.ts","webpack:///src/app/modules/origin-sso/guards/origin-sso.guard.ts","webpack:///src/app/modules/origin-sso/services/origin-oidc.service.ts","webpack:///src/app/modules/origin-sso/services/origin-sso.service.ts","webpack:///src/app/shared/constants.ts","webpack:///src/app/shared/password-input/password-input.component.html","webpack:///src/app/shared/password-input/password-input.component.ts","webpack:///src/app/shared/grid/grid.module.ts","webpack:///src/app/shared/grid-tools/grid-tools.module.ts","webpack:///src/app/shared/search-autocomplete/search-autocomplete.module.ts","webpack:///src/app/shared/validation/services/error-handling.service.ts","webpack:///src/app/shared/validation/helpers/log-validation-error.interceptor.ts","webpack:///src/app/shared/validation/validation-errors.module.ts","webpack:///src/app/shared/shared.module.ts","webpack:///src/app/shared/telenet-icons/telenet-icon-library.service.ts","webpack:///src/app/shared/telenet-icons/telenet-icon.component.ts","webpack:///src/app/shared/telenet-icons/telenet-icon.module.ts","webpack:///src/app/shared/validation/helpers/catch-validation-errors.ts","webpack:///src/environments/environment.prod.ts","webpack:///src/app/core/components/navigation/navigation.component.html","webpack:///src/app/core/components/navigation/navigation.component.ts","webpack:///src/app/app.component.html","webpack:///src/app/app.component.ts","webpack:///src/app/core/interceptors/token.interceptor.ts","webpack:///src/app/core/models/config/mc-http-config.interface.ts","webpack:///src/app/core/interceptors/response-toast.interceptor.ts","webpack:///src/app/core/components/login-modal/login.modal.html","webpack:///src/app/core/components/login-modal/login.modal.ts","webpack:///src/app/core/guards/auth.guard.ts","webpack:///src/app/core/core.module.ts","webpack:///src/app/core/guards/maintenance.guard.ts","webpack:///src/app/app-routing.module.ts","webpack:///src/app/core/components/modal-login/modal-login.component.ts","webpack:///src/app/core/components/maintenance/maintenance.component.ts","webpack:///src/app/core/components/maintenance/maintenance.component.html","webpack:///src/app/core/guards/cloud-erp-sso.guard.ts","webpack:///src/app/core/components/cloud-erp-sso.component.ts","webpack:///src/app/core/services/profile-resolver.service.ts","webpack:///src/app/core/components/not-found/not-found.component.ts","webpack:///src/app/core/components/not-found/not-found.component.html","webpack:///src/app/app-settings.module.ts","webpack:///src/app/shared/telenet-icons/telenet-icons.ts","webpack:///src/app/core/components/custom-toast/animations/trigger-child.animation.ts","webpack:///src/app/core/components/custom-toast/animations/vertical-collapse.animation.ts","webpack:///src/app/core/components/custom-toast/custom-toast.component.html","webpack:///src/app/core/components/custom-toast/custom-toast.component.ts","webpack:///src/app/app.module.ts","webpack:///src/main.ts"],"sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 98255;\nmodule.exports = webpackEmptyAsyncContext;","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpBackend, HttpResponse } from '@angular/common/http';\r\nimport { throwError } from 'rxjs';\r\nimport { LoggingService } from '@app/services/logging.service';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { LanguageOption } from '@app/models/language-option.type';\r\nimport { MyCloudCookieConfig } from '@app/models/config/mc-cookie-config.interface';\r\nimport { MyCloudOriginSsoConfig } from '@app/models/config/mc-origin-sso-config.interface';\r\nimport { MyCloudConfig } from '@app/models/config/mc-config.interface';\r\nimport { MyCloudHttpConfig } from '@app/models/config/mc-http-config.interface';\r\nimport { MyCloudOktaConfig } from '@app/models/config/mc-okta-config.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppSettings {\r\n private httpClient: HttpClient;\r\n private config!: MyCloudConfig;\r\n\r\n public hostname: string = \"localhost\";\r\n public selectedLanguage = \"E\";\r\n\r\n constructor(handler: HttpBackend, private log: LoggingService, private cookies: CookieService) {\r\n this.httpClient = new HttpClient(handler);\r\n }\r\n\r\n /**\r\n * Use to get the data found in the second file (config file)\r\n */\r\n public getConfig(key: keyof MyCloudConfig): MyCloudConfig[keyof MyCloudConfig] {\r\n return this.config[key];\r\n }\r\n\r\n /**\r\n * Use to get api base url\r\n */\r\n public get isInMaintenanceMode(): boolean {\r\n return this.config?.maintenanceMode ?? false;\r\n }\r\n\r\n /**\r\n * Use to bypass Okta Login\r\n */\r\n public get bypassOktaLogin(): boolean {\r\n return this.config?.bypassOktaLogin ?? false;\r\n }\r\n\r\n /**\r\n * Use to get api base url\r\n */\r\n public get baseApiUrl(): string {\r\n return this.config?.baseApiUrl;\r\n }\r\n\r\n /**\r\n * Use to get api base url\r\n */\r\n public get baseCoreApiUrl(): string {\r\n return this.config?.baseCoreApiUrl;\r\n }\r\n\r\n /**\r\n * Use to get core api base url\r\n */\r\n public get myProductsUrl(): string {\r\n return this.config?.myProductsUrl;\r\n }\r\n\r\n /**\r\n * Use to get core api base url\r\n */\r\n public get cloudMediaUrl(): string {\r\n return this.config?.cloudMediaUrl;\r\n }\r\n\r\n /**\r\n * Use to get http config\r\n */\r\n public get httpConfig(): MyCloudHttpConfig {\r\n return {\r\n showSuccessGetToast: this.config?.showSuccessGetToast,\r\n showSuccessNonGetToast: this.config?.showSuccessNonGetToast,\r\n showValidationErrorToast: this.config?.showValidationErrorToast,\r\n showPermissionErrorToast: this.config?.showPermissionErrorToast\r\n } as MyCloudHttpConfig;\r\n }\r\n\r\n /**\r\n * Use to get cookies config\r\n */\r\n public get cookieConfig(): MyCloudCookieConfig {\r\n return {\r\n name: this.config?.cookieName,\r\n path: this.config?.cookiePath,\r\n domain: this.config?.cookieDomain\r\n } as MyCloudCookieConfig;\r\n }\r\n\r\n /**\r\n * Use to get origin-sso config\r\n */\r\n public get originSsoConfig(): MyCloudOriginSsoConfig {\r\n return {\r\n issuer: this.config?.originSsoIssuer,\r\n authority: this.config?.originSsoAuthority,\r\n authorizationEndpoint: this.config?.originSsoAuthorizationEndpoint,\r\n tokenEndpoint: this.config?.originSsoTokenEndpoint,\r\n endSessionEndpoint: this.config?.originSsoEndSessionEndpoint\r\n } as MyCloudOriginSsoConfig;\r\n }\r\n\r\n /**\r\n * Use to get okta config\r\n */\r\n public get oktaConfig(): MyCloudOktaConfig {\r\n return {\r\n clientId: this.config?.oktaClientId,\r\n authority: this.config?.oktaAuthority,\r\n resetPasswordUrl: this.config?.oktaResetPasswordUrl\r\n } as MyCloudOktaConfig;\r\n }\r\n\r\n public originClientId: string = 'mycloudng';\r\n public get originClientSecret(): string {\r\n switch (this.hostname) {\r\n case \"localhost\":\r\n case \"mycloud.dev.cloud.telenet.be\":\r\n case \"mycloud.uat.cloud.telenet.be\":\r\n return \"test\";\r\n default:\r\n return \"qCQJyHpr5NwW9WSxmBFaGjTI94vqwAJNAG2Dasnv7JxUUZHrfS\";\r\n }\r\n }\r\n\r\n public readonly languageCookieName = \"HOSTBASKET_LANGUAGE\";\r\n\r\n public get languageCookieDomain(): string {\r\n return window.location.hostname.indexOf(\".\") !== -1\r\n ? window.location.hostname.substring(window.location.hostname.indexOf('.'))\r\n : null;\r\n }\r\n\r\n public get selectedLanguageLocale(): string {\r\n switch (this.selectedLanguage) {\r\n case 'N':\r\n return 'nl';\r\n case 'F':\r\n return 'fr';\r\n case 'E':\r\n default:\r\n return 'en';\r\n }\r\n }\r\n\r\n public get myCloudUrl(): string {\r\n switch (this.hostname) {\r\n case \"localhost\":\r\n case \"mycloud.dev.cloud.telenet.be\":\r\n return \"http://localhost:4200/\";\r\n case \"mycloud.uat.cloud.telenet.be\":\r\n default:\r\n return `https://${this.hostname}/`;\r\n }\r\n }\r\n\r\n /**\r\n * This method loads \"appsettings.json\" to get all env's variables\r\n */\r\n public init(): Promise {\r\n this.hostname = window.location.hostname;\r\n this.log.debug(`Init appsettings for ${this.hostname}`);\r\n\r\n this.selectedLanguage = localStorage.getItem('myCloud.selectedLanguage') ?? 'E';\r\n\r\n return new Promise((resolve) => {\r\n this.httpClient.get('assets/config/appsettings.json', { observe: 'response' }).subscribe((response: HttpResponse) => {\r\n if (response && response.body) {\r\n this.config = response.body;\r\n resolve(true);\r\n } else {\r\n this.log.error('appsettings.json file is not valid');\r\n resolve(true);\r\n }\r\n }, (error: any) => {\r\n this.log.error(error);\r\n return throwError(error || 'Server error');\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * This method sets the language of the application and handles the language cookies\r\n */\r\n public setLanguage(newLanguage: LanguageOption): void {\r\n this.log.info(\"Language set to \" + newLanguage);\r\n\r\n //set language\r\n this.selectedLanguage = newLanguage;\r\n localStorage.setItem('myCloud.selectedLanguage', this.selectedLanguage);\r\n\r\n //delete and reset cookie\r\n this.cookies.delete(this.languageCookieName);\r\n this.cookies.set(this.languageCookieName, newLanguage, { expires: 666, path: this.config?.cookiePath, domain: this.languageCookieDomain });\r\n }\r\n}\r\n","export enum CustomerLoginType {\r\n Customer = 'Customer',\r\n Alias = 'Alias',\r\n SingleSignOnSession = 'SingleSignOnSession',\r\n Anonymous = 'Anonymous'\r\n}\r\n","export enum CustomerType {\r\n Endcustomer = 'Endcustomer',\r\n Partner = 'Partner',\r\n Varcustomer = 'Varcustomer',\r\n Rescustomer = 'Rescustomer'\r\n}\r\n\r\nexport namespace CustomerType {\r\n export function ToNumber(customerType: CustomerType): number {\r\n switch (customerType) {\r\n case CustomerType.Partner:\r\n return 2;\r\n case CustomerType.Varcustomer:\r\n return 3;\r\n case CustomerType.Rescustomer:\r\n return 4;\r\n case CustomerType.Endcustomer:\r\n default:\r\n return 1;\r\n }\r\n }\r\n\r\n export function FromNumber(customerType: number): CustomerType {\r\n switch (customerType) {\r\n case 2:\r\n return CustomerType.Partner;\r\n case 3:\r\n return CustomerType.Varcustomer;\r\n case 4:\r\n return CustomerType.Rescustomer;\r\n case 1:\r\n default:\r\n return CustomerType.Endcustomer;\r\n }\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\nimport { AppSettings } from \"app/app.settings\";\r\nimport { Profile } from \"@app/models/profile.interface\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ProfileService {\r\n private readonly baseUri: string;\r\n private readonly endpoint: string;\r\n\r\n constructor(private httpClient: HttpClient, private appSettings: AppSettings) {\r\n this.baseUri = `${this.appSettings.baseCoreApiUrl}`;\r\n this.endpoint = `profile`;\r\n }\r\n\r\n public getProfile(): Observable {\r\n return this.httpClient.get(`${this.baseUri}/${this.endpoint}`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { LoggingService } from '@app/services/logging.service';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { catchError, map, switchMap, takeUntil } from 'rxjs/operators';\r\nimport { Observable, of, Subject, throwError } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\nimport { CustomerType } from '@app/models/customer-type.enum';\r\nimport { Profile } from '@app/models/profile.interface';\r\nimport { CustomerLoginType } from '@app/models/customer-login-type.enum';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { AppSettings } from 'app/app.settings';\r\nimport { LanguageOption } from '@app/models/language-option.type';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { ProfileService } from './profile.service';\r\nimport { OktaOidcService } from '@modules/okta-login/services/okta-oidc.service';\r\nimport { Token } from '@app/models/token.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService {\r\n private destroyed: Subject = new Subject();\r\n private redirectUrl: string;\r\n private myProfile: Profile;\r\n\r\n constructor(private log: LoggingService, private httpClient: HttpClient, private router: Router, private profileService: ProfileService,\r\n private cookieService: CookieService, private oktaOidcService: OktaOidcService, private translate: TranslateService, private appSettings: AppSettings) { }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n public get token(): Token {\r\n const localStorageToken = localStorage.getItem('token');\r\n if (!localStorageToken) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(localStorageToken);\r\n }\r\n\r\n public get isAuthenticated(): boolean {\r\n if (!this.token) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public get isOriginSsoAuthenticated(): boolean {\r\n if (!this.token) {\r\n return false;\r\n }\r\n\r\n return this.token.auth_type == \"origin\";\r\n }\r\n\r\n public get profile(): Profile {\r\n return this.myProfile;\r\n }\r\n\r\n public get allowResCustomers(): boolean {\r\n return this.myProfile?.allowResCustomers;\r\n }\r\n\r\n public get username(): string {\r\n return this.myProfile?.username;\r\n }\r\n\r\n public get userId(): number {\r\n return +this.myProfile?.userId;\r\n }\r\n\r\n public get customerName(): string {\r\n return this.myProfile?.customerName;\r\n }\r\n\r\n public get customerType(): CustomerType {\r\n return CustomerType.FromNumber(+this.myProfile?.customerTypeId);\r\n }\r\n\r\n public get customerLoginType(): CustomerLoginType {\r\n switch (+this.myProfile?.customerLoginTypeId) {\r\n case 1:\r\n return CustomerLoginType.Customer;\r\n case 2:\r\n return CustomerLoginType.Alias;\r\n case 3:\r\n return CustomerLoginType.SingleSignOnSession;\r\n case 4:\r\n default:\r\n return CustomerLoginType.Anonymous;\r\n }\r\n }\r\n\r\n public get hasChannelRights(): boolean {\r\n return JSON.parse((this.myProfile?.hasChannelRights ?? false).toString());\r\n }\r\n\r\n public get showCustomerColumn(): boolean {\r\n return this.customerType === CustomerType.Partner || this.hasChannelRights;\r\n }\r\n\r\n public storeRedirectUrl(url: string): void {\r\n this.redirectUrl = url;\r\n }\r\n\r\n public redirect(): void {\r\n if (this.redirectUrl) {\r\n this.log.debug(\"Redirecting back\", this.redirectUrl);\r\n\r\n const url = this.redirectUrl;\r\n this.redirectUrl = null;\r\n\r\n this.router.navigateByUrl(url);\r\n }\r\n }\r\n\r\n public logout(): void {\r\n this.deleteAuthCookiesAndToken(); //delete all auth cookies\r\n //QUICK FIX THAT NEED REWORK, don't use the change language here of you get stuck in an endless loop of reload at the maintenance page\r\n this.setLanguage();\r\n //and also don't relead here for the same reason\r\n }\r\n\r\n public changeLanguage(language: LanguageOption): void {\r\n this.setLanguage(language);\r\n\r\n //reload app (this has to be reworked with language endpoint)\r\n window.location.reload();\r\n }\r\n\r\n public login(username: string, password: string): Observable {\r\n this.log.info(\"Logging in with username and password\");\r\n\r\n const uri = `${this.appSettings.baseApiUrl}token`;\r\n const params = `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}&grant_type=password`;\r\n\r\n return this.loginCallback(uri, params, username);\r\n }\r\n\r\n public loginBySession(username: string, session: string): Observable {\r\n this.log.info(\"Logging in with username and session\");\r\n\r\n const uri = `${this.appSettings.baseApiUrl}token`;\r\n const params = `username=${encodeURIComponent(username)}&session=${encodeURIComponent(session)}&password=&grant_type=password`;\r\n\r\n return this.loginCallback(uri, params, username);\r\n }\r\n\r\n public getProfile(token: Token): Observable {\r\n if (!token) {\r\n const unauthenticatedProfile: Profile = {} as Profile;\r\n return of(unauthenticatedProfile);\r\n }\r\n\r\n return this.profileService.getProfile().pipe(\r\n catchError((error) => throwError(error)),\r\n map(profile => this.myProfile = profile)\r\n );\r\n }\r\n\r\n public processToken(token: Token): Observable {\r\n // Replace authentication token\r\n localStorage.removeItem('token');\r\n localStorage.setItem(\"token\", JSON.stringify(token));\r\n\r\n return this.getProfile(token);\r\n }\r\n\r\n public processProfile(profile: Profile): void {\r\n // SSO to B&B and DDC token lifetime extension when logged in, this will be reworked\r\n this.cookieService.delete(profile.cookieTokenName);\r\n this.cookieService.set(profile.cookieTokenName, profile.cookieTokenValue, { expires: 14, domain: profile.cookieDomain, path: '/' });\r\n\r\n // Set customer language\r\n this.setLanguage(this.profile.cookieLanguageValue);\r\n }\r\n\r\n // This should be removed when the old authentication system is obsolete\r\n private loginCallback(uri: string, params: string, username: string): Observable {\r\n return this.httpClient.post(uri, params).pipe(\r\n takeUntil(this.destroyed),\r\n catchError((error: HttpErrorResponse) => {\r\n if (error.status == 400) {\r\n this.log.warn(\"Login failed\", username);\r\n }\r\n return throwError(error.status == 400 ? error.error.error_description : error);\r\n }),\r\n switchMap((token: Token) => this.processToken(token)),\r\n switchMap((profile: Profile) => {\r\n this.processProfile(profile);\r\n return of(profile);\r\n })\r\n );\r\n }\r\n\r\n private setLanguage(language: LanguageOption = 'E'): void {\r\n this.appSettings.setLanguage(language);\r\n this.translate.use(this.appSettings.selectedLanguageLocale);\r\n }\r\n\r\n private deleteAuthCookiesAndToken(): void {\r\n const cookiesData = this.appSettings.cookieConfig;\r\n\r\n if (this.myProfile?.cookieTokenName) {\r\n this.cookieService.delete(this.myProfile.cookieTokenName, cookiesData.path, cookiesData.domain);\r\n }\r\n this.cookieService.delete(cookiesData.name, cookiesData.path, cookiesData.domain);\r\n\r\n localStorage.removeItem(\"token\");\r\n\r\n this.log.info(\"Logout cookies and token removed\");\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient, HttpParams } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\nimport { CustomerAdminModel } from \"../../modules/account/models/customer-admin.model\";\r\nimport { CustomerInvoiceModel } from \"../../modules/account/models/customer-invoice.model\";\r\nimport { MediaTypeModel } from \"../../modules/account/models/media-type.model\";\r\nimport { VatTypeModel } from \"../../modules/account/models/vat-type.model\";\r\nimport { CustomerContactModel } from \"../../modules/account/models/customer-contact.model\";\r\nimport { CustomerSearch } from \"../../modules/account/models/customer.search\";\r\nimport { PagedResultSet } from \"@shared/grid-tools\";\r\nimport { ExportCustomersQuery } from \"../../modules/account/models/customer-export.command\";\r\nimport { CustomerGridModel } from \"../../modules/account/models/customer-grid.model\";\r\nimport { AddCustomerCommand } from \"../../modules/account/models/add-customer.command\";\r\nimport { AppSettings } from \"app/app.settings\";\r\nimport { noResponseToastHeaders } from \"@shared/constants\";\r\nimport { CustomerAnnouncementModel } from \"@modules/account/models/customer-announcement.model\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CustomerService {\r\n private readonly baseUri: string;\r\n private readonly endpoint: string;\r\n\r\n constructor(private httpClient: HttpClient, private appSettings: AppSettings) {\r\n this.baseUri = `${this.appSettings.baseCoreApiUrl}`;\r\n this.endpoint = `customer`;\r\n }\r\n\r\n public searchCustomers(page: number, pageSize: number, sortBy: string, sortDirection: any, customerSearch: CustomerSearch): Observable> {\r\n let params = new HttpParams()\r\n .append('Page', page.toString())\r\n .append('PageSize', pageSize.toString())\r\n .append('SortBy', sortBy);\r\n\r\n if (sortDirection) {\r\n params = params.append('SortDirection', sortDirection);\r\n }\r\n\r\n if (customerSearch?.search) {\r\n params = params.append('Filters.Search', customerSearch.search);\r\n }\r\n\r\n return this.httpClient.get>(`${this.baseUri}/${this.endpoint}`, { params });\r\n }\r\n\r\n public exportCustomers(query: ExportCustomersQuery): Observable {\r\n const httpOptions = {\r\n responseType: 'blob' as 'json'\r\n };\r\n\r\n return this.httpClient.post(`${this.baseUri}/${this.endpoint}/export-csv`, query, httpOptions);\r\n }\r\n\r\n public addCustomer(command: AddCustomerCommand): Observable {\r\n return this.httpClient.post(`${this.baseUri}/${this.endpoint}/add`, command);\r\n }\r\n\r\n public getVatTypes(): Observable> {\r\n return this.httpClient.get>(`${this.baseUri}/${this.endpoint}/vat-types`, { headers: noResponseToastHeaders });\r\n }\r\n\r\n public getMediaTypes(customerId: number): Observable> {\r\n return this.httpClient.get>(`${this.baseUri}/${this.endpoint}/media-types?customerId=${customerId}`, { headers: noResponseToastHeaders });\r\n }\r\n\r\n public getAdminInfo(customerId: number): Observable {\r\n return this.httpClient.get(`${this.baseUri}/${this.endpoint}/admin?customerId=${customerId}`);\r\n }\r\n\r\n public updateAdminInfo(customerAdminModel: CustomerAdminModel): Observable {\r\n return this.httpClient.put(`${this.baseUri}/${this.endpoint}/admin`, customerAdminModel);\r\n }\r\n\r\n public getInvoiceInfo(customerId: number): Observable {\r\n return this.httpClient.get(`${this.baseUri}/${this.endpoint}/invoice?customerId=${customerId}`);\r\n }\r\n\r\n public updateInvoiceInfo(customerInvoiceModel: CustomerInvoiceModel): Observable {\r\n return this.httpClient.put(`${this.baseUri}/${this.endpoint}/invoice`, customerInvoiceModel);\r\n }\r\n\r\n public getVarCustomerCanLogin(customerId: number): Observable {\r\n return this.httpClient.get(`${this.baseUri}/${this.endpoint}/var-customer-can-login?customerId=${customerId}`);\r\n }\r\n\r\n public resetPasswordUnsecure(username: string): Observable {\r\n return this.httpClient.put(`${this.appSettings.baseApiUrl}/Account/ResetCustomerPasswordUnsecure`, { username });\r\n }\r\n\r\n public getContacts(): Observable> {\r\n return this.httpClient.get>(`${this.baseUri}/${this.endpoint}/contacts`);\r\n }\r\n\r\n public createContact(contactModel: CustomerContactModel): Observable {\r\n return this.httpClient.post(`${this.baseUri}/${this.endpoint}/contact`, contactModel);\r\n }\r\n\r\n public updateContact(contactModel: CustomerContactModel): Observable {\r\n return this.httpClient.put(`${this.baseUri}/${this.endpoint}/contact/${contactModel.id}`, contactModel);\r\n }\r\n\r\n public deleteContact(contactId: number): Observable {\r\n return this.httpClient.delete(`${this.baseUri}/${this.endpoint}/contact/${contactId}`);\r\n }\r\n\r\n public unlockContact(contactId: number): Observable {\r\n return this.httpClient.put(`${this.baseUri}/${this.endpoint}/contact/${contactId}/unlock`, { contactId });\r\n }\r\n\r\n public getAllUnreadAnnouncements(): Observable> {\r\n return this.httpClient.get>(`${this.baseUri}/${this.endpoint}/announcement/unread/all`);\r\n }\r\n\r\n public announcementIsRead(announcementId: number): Observable {\r\n return this.httpClient.put(`${this.baseUri}/${this.endpoint}/announcement/${announcementId}/read`, {}, { headers: noResponseToastHeaders });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { environment } from '@env';\r\n\r\nexport enum LogLevel {\r\n All = 0,\r\n Debug = 1,\r\n Info = 2,\r\n Warn = 3,\r\n Error = 4,\r\n Fatal = 5,\r\n Off = 6\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoggingService {\r\n\r\n level: LogLevel = LogLevel.Debug;\r\n\r\n constructor() {\r\n // Production -> log only warnings and above\r\n if (environment.production)\r\n this.level = LogLevel.Warn;\r\n }\r\n\r\n debug(msg: string, ...optionalParams: any[]) {\r\n this.writeToLog(msg, LogLevel.Debug, optionalParams);\r\n }\r\n\r\n info(msg: string, ...optionalParams: any[]) {\r\n this.writeToLog(msg, LogLevel.Info, optionalParams);\r\n }\r\n\r\n warn(msg: string, ...optionalParams: any[]) {\r\n this.writeToLog(msg, LogLevel.Warn, optionalParams);\r\n }\r\n\r\n error(msg: string, ...optionalParams: any[]) {\r\n this.writeToLog(msg, LogLevel.Error, optionalParams);\r\n }\r\n\r\n fatal(msg: string, ...optionalParams: any[]) {\r\n this.writeToLog(msg, LogLevel.Fatal, optionalParams);\r\n }\r\n\r\n log(msg: string, ...optionalParams: any[]) {\r\n this.writeToLog(msg, LogLevel.All, optionalParams);\r\n }\r\n\r\n private writeToLog(msg: string,\r\n level: LogLevel,\r\n params: any[]) {\r\n if (this.shouldLog(level)) {\r\n let value: string = \"\";\r\n\r\n // Build log string\r\n value = new Date().toLocaleString(\"nl-be\") + \" - \";\r\n value += \"(\" + LogLevel[level] + \")\";\r\n value += \" - \" + msg;\r\n if (params.length) {\r\n value += \" - Info: \"\r\n + this.formatParams(params);\r\n }\r\n }\r\n }\r\n\r\n private shouldLog(level: LogLevel): boolean {\r\n let ret: boolean = false;\r\n\r\n var usedLevel = this.level;\r\n // Check if there is a manuel level set by the developper\r\n var forcedLevel = localStorage.getItem(\"forceLogLevel\") as unknown as LogLevel;\r\n if (forcedLevel)\r\n usedLevel = forcedLevel;\r\n\r\n if ((level >= usedLevel &&\r\n level !== LogLevel.Off) ||\r\n usedLevel === LogLevel.All) {\r\n ret = true;\r\n }\r\n return ret;\r\n }\r\n\r\n private formatParams(params: any[]): string {\r\n let ret: string = params.join(\",\");\r\n // Is there at least one object in the array?\r\n if (params.some(p => typeof p == \"object\")) {\r\n ret = \"\";\r\n // Build comma-delimited string\r\n for (let item of params) {\r\n ret += JSON.stringify(item) + \",\";\r\n }\r\n }\r\n return ret;\r\n }\r\n}\r\n","export enum MessageType {\r\n Success,\r\n Warning,\r\n Error,\r\n Info\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { MessageType } from \"@app/models/message-type.enum\";\r\nimport { TranslationService } from \"@app/services/translation.service\";\r\nimport { IndividualConfig, ToastrService } from \"ngx-toastr\";\r\nimport { Observable, of, zip } from \"rxjs\";\r\nimport { map } from \"rxjs/operators\";\r\n\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class BruudToastrService {\r\n\r\n private config: Partial = {}; //use this later for appsettings.json injection\r\n\r\n constructor(private translationService: TranslationService, private toastr: ToastrService) { }\r\n\r\n\r\n public showSuccess(message: string, title?: string): void {\r\n this.showToast(message, title, MessageType.Success, 5000);\r\n }\r\n\r\n public showTranslatedSuccess(messageTextFragmentCode: string, titleTextFragmentCode?: string): void {\r\n this.showTranslatedToast(messageTextFragmentCode, titleTextFragmentCode, MessageType.Success, 5000);\r\n }\r\n\r\n\r\n public showError(text: string, title?: string): void {\r\n this.showToast(text, title, MessageType.Error, 0);\r\n }\r\n\r\n public showTranslatedError(messageTextFragmentCode: string, titleTextFragmentCode?: string): void {\r\n this.showTranslatedToast(messageTextFragmentCode, titleTextFragmentCode, MessageType.Error, 0);\r\n }\r\n\r\n\r\n public showWarning(message: string, title?: string): void {\r\n this.showToast(message, title, MessageType.Warning, 0);\r\n }\r\n\r\n public showTranslatedWarning(messageTextFragmentCode: string, titleTextFragmentCode?: string): void {\r\n this.showTranslatedToast(messageTextFragmentCode, titleTextFragmentCode, MessageType.Warning, 0);\r\n }\r\n\r\n\r\n public showInfo(text: string, title?: string): void {\r\n this.showToast(text, title, MessageType.Info, 0);\r\n }\r\n\r\n public showTranslatedInfo(messageTextFragmentCode: string, titleTextFragmentCode?: string): void {\r\n this.showTranslatedToast(messageTextFragmentCode, titleTextFragmentCode, MessageType.Info, 0);\r\n }\r\n\r\n\r\n private translateTextFragments(messageKey: string, titleKey?: string): Observable<[message: string, title: string]> {\r\n let messageTranslationObservable = messageKey ? this.translationService.getTranslation(messageKey) : of(\"\");\r\n let titleTranslationObservable = titleKey ? this.translationService.getTranslation(titleKey) : of(\"\");\r\n\r\n return zip(messageTranslationObservable, titleTranslationObservable).pipe(\r\n map(([message, title]) => ([message, title]))\r\n );\r\n }\r\n\r\n private showTranslatedToast(messageTextFragmentCode: string, titleTextFragmentCode?: string, type: MessageType = MessageType.Info, timeOut: number = 0): void {\r\n this.translateTextFragments(messageTextFragmentCode, titleTextFragmentCode).subscribe(([message, title]) => {\r\n this.showToast(message, title, type, timeOut);\r\n });\r\n }\r\n\r\n private showToast(message: string, title?: string, type: MessageType = MessageType.Info, timeOut: number = 0): void {\r\n const config = {\r\n timeOut: timeOut,\r\n disableTimeOut: timeOut === 0,\r\n type: MessageType[type].toString().toLowerCase(),\r\n ...this.config\r\n } as Partial;\r\n\r\n switch (type) {\r\n case MessageType.Success:\r\n this.toastr.success(message, title, config);\r\n break;\r\n case MessageType.Warning:\r\n this.toastr.warning(message, title, config);\r\n break;\r\n case MessageType.Error:\r\n this.toastr.error(message, title, config);\r\n break;\r\n case MessageType.Info:\r\n default:\r\n this.toastr.info(message, title, config);\r\n break;\r\n }\r\n }\r\n}\r\n","import { UserManager, User, SignoutResponse, UserManagerSettings } from 'oidc-client';\r\nimport { Subject } from 'rxjs';\r\nimport { OidcContext } from '@shared/models/oidc-context';\r\n\r\nexport class OidcService {\r\n private userManager: UserManager;\r\n private user: User;\r\n private loginChangedSubject = new Subject();\r\n\r\n public loginChanged = this.loginChangedSubject.asObservable();\r\n public authContext: OidcContext;\r\n\r\n constructor(private settings: UserManagerSettings) {\r\n\r\n this.userManager = new UserManager(this.settings);\r\n this.userManager.events.addAccessTokenExpired(_ => {\r\n this.loginChangedSubject.next(false);\r\n });\r\n\r\n this.userManager.events.addUserLoaded(user => {\r\n if (this.user !== user) {\r\n this.user = user;\r\n this.loginChangedSubject.next(!!user && !user.expired);\r\n }\r\n });\r\n }\r\n\r\n public login(): Promise {\r\n return this.userManager.signinRedirect();\r\n }\r\n\r\n public isLoggedIn(): Promise {\r\n return this.userManager.getUser().then(user => {\r\n const userCurrent = !!user && !user.expired;\r\n if (this.user !== user) {\r\n this.loginChangedSubject.next(userCurrent);\r\n }\r\n this.user = user;\r\n\r\n return userCurrent;\r\n });\r\n }\r\n\r\n public completeLogin(): Promise {\r\n return this.userManager.signinRedirectCallback().then(user => {\r\n this.user = user;\r\n this.loginChangedSubject.next(!!user && !user.expired);\r\n return user;\r\n });\r\n }\r\n\r\n public logout(): Promise {\r\n return this.userManager.signoutRedirect();\r\n }\r\n\r\n public completeLogout(): Promise {\r\n this.user = null;\r\n this.loginChangedSubject.next(false);\r\n\r\n return this.userManager.signoutRedirectCallback();\r\n }\r\n\r\n public getAccessToken(): Promise {\r\n return this.userManager.getUser().then(user => !!user && !user.expired ? user.access_token : null);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { of } from \"rxjs\";\r\nimport { catchError } from \"rxjs/operators\";\r\nimport { Observable } from \"rxjs\";\r\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { AppSettings } from \"app/app.settings\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class TranslationService {\r\n private readonly endpoint: string = `text-fragment`;\r\n\r\n public readonly translationError = \"***ERROR***\";\r\n\r\n constructor(private http: HttpClient, private appSettings: AppSettings) { }\r\n\r\n public getTranslation(key: string): Observable {\r\n if (!key) {\r\n return of(\"\");\r\n }\r\n\r\n const uri = `${this.appSettings.baseCoreApiUrl}/${this.endpoint}?code=${key}&language=${this.appSettings.selectedLanguage}`;\r\n const defaultRequestHeaders = new HttpHeaders()\r\n .set('Content-Type', 'text/plain; charset=utf-8')\r\n .append('X-MY-CLOUD-No-Response-Toast', 'true');\r\n\r\n const defaultRequestOptions: Object = {\r\n headers: defaultRequestHeaders,\r\n responseType: 'text'\r\n };\r\n\r\n return this.http.get(uri, defaultRequestOptions).pipe(catchError(_ => of(this.translationError)));\r\n }\r\n}\r\n","import { TranslationService } from '@app/services/translation.service';\r\nimport { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport class TranslationHandler implements MissingTranslationHandler {\r\n constructor(private translationsService: TranslationService) { }\r\n\r\n public handle(params: MissingTranslationHandlerParams): Observable {\r\n return this.translationsService.getTranslation(params.key);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppSettings } from 'app/app.settings';\r\nimport { OidcService } from '@app/services/oidc.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OktaOidcService extends OidcService {\r\n constructor(appSettings: AppSettings) {\r\n super({\r\n client_id: appSettings.oktaConfig.clientId,\r\n authority: appSettings.oktaConfig.authority, \r\n scope: \"openid profile email\",\r\n response_type: \"code\", \r\n redirect_uri: `${appSettings.myCloudUrl}ng/okta/signin-redirect`,\r\n post_logout_redirect_uri: `${appSettings.myCloudUrl}ng/okta/signout-redirect`,\r\n loadUserInfo: false\r\n });\r\n };\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Token } from '@app/models/token.interface';\r\nimport { AuthenticationService } from '@app/services/authentication.service';\r\nimport { LoggingService } from '@app/services/logging.service';\r\nimport { BruudToastrService } from '@app/services/message.service';\r\nimport { AppSettings } from 'app/app.settings';\r\nimport { Subject, throwError } from 'rxjs';\r\nimport { takeUntil, catchError, switchMap, map } from 'rxjs/operators';\r\nimport { OktaOidcService } from './okta-oidc.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OktaService implements OnDestroy {\r\n private destroyed: Subject = new Subject();\r\n\r\n constructor(private oktaOidcService: OktaOidcService, private authService: AuthenticationService, private log: LoggingService, private messageService: BruudToastrService,\r\n private router: Router, private httpClient: HttpClient, private appSettings: AppSettings) { }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n public onOktaLoginCompleted(): void {\r\n this.Login()\r\n }\r\n\r\n private Login(): void {\r\n this.log.info(\"Logging in with Okta\");\r\n\r\n this.oktaOidcService.getAccessToken().then(ssoToken => {\r\n const headers = new HttpHeaders({\r\n 'Authorization': `bearer ${ssoToken}`,\r\n 'Content-Type': 'application/json'\r\n });\r\n \r\n this.httpClient.get(`${this.appSettings.baseCoreApiUrl}/okta/token`, { headers: headers }).pipe(\r\n takeUntil(this.destroyed),\r\n catchError(err => {\r\n if (err instanceof HttpErrorResponse) {\r\n if (err.status == 401) {\r\n this.messageService.showTranslatedError('BCKOFF_OKTA_ALREADYLOGGEDIN', 'Error');\r\n }\r\n if (err.status == 404) {\r\n this.messageService.showTranslatedError('BCKOFF_OKTA_USERNOTFOUND', 'Error');\r\n }\r\n return throwError(err);\r\n }\r\n }),\r\n switchMap(token => this.authService.processToken(token)),\r\n map(profile => this.authService.processProfile(profile)),\r\n ).subscribe(_ => {\r\n this.log.info(\"Okta login complete\");\r\n location.href = '';\r\n });\r\n });\r\n }\r\n\r\n public logout(): void {\r\n this.oktaOidcService.isLoggedIn().then(loggedIn => {\r\n if (loggedIn) {\r\n this.oktaOidcService.logout();\r\n }\r\n else{\r\n this.authService.logout();\r\n location.href = '';\r\n }\r\n });\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from \"@angular/router\";\r\nimport { OriginSsoService } from \"../services/origin-sso.service\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class OriginSsoGuard implements CanActivate {\r\n\r\n constructor(private originSsoService: OriginSsoService) { }\r\n\r\n public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\r\n return this.originSsoService.isAuthenticated;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppSettings } from 'app/app.settings';\r\nimport { OidcService } from '@app/services/oidc.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OriginOidcService extends OidcService {\r\n constructor(appSettings: AppSettings) {\r\n super({\r\n authority: appSettings.originSsoConfig.authority,\r\n client_id: appSettings.originClientId,\r\n client_secret: appSettings.originClientSecret,\r\n scope: \"openid\",\r\n response_type: \"code\",\r\n redirect_uri: `${appSettings.myCloudUrl}ng/origin/signin-redirect`,\r\n post_logout_redirect_uri: `${appSettings.myCloudUrl}ng/origin/signout-redirect`,\r\n metadata: {\r\n issuer: appSettings.originSsoConfig.issuer,\r\n authorization_endpoint: appSettings.originSsoConfig.authorizationEndpoint,\r\n token_endpoint: appSettings.originSsoConfig.tokenEndpoint,\r\n end_session_endpoint: appSettings.originSsoConfig.endSessionEndpoint\r\n },\r\n loadUserInfo: false\r\n });\r\n };\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Token } from '@app/models/token.interface';\r\nimport { AuthenticationService } from '@app/services/authentication.service';\r\nimport { LoggingService } from '@app/services/logging.service';\r\nimport { BruudToastrService } from '@app/services/message.service';\r\nimport { AppSettings } from 'app/app.settings';\r\nimport { Subject, throwError } from 'rxjs';\r\nimport { takeUntil, catchError, switchMap, map } from 'rxjs/operators';\r\nimport { OriginOidcService } from './origin-oidc.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OriginSsoService implements OnDestroy {\r\n private destroyed: Subject = new Subject();\r\n\r\n private readonly targetUri: string = \"/ng/origin/page\";\r\n\r\n constructor(private originOidcService: OriginOidcService, private authService: AuthenticationService, private log: LoggingService, private messageService: BruudToastrService,\r\n private router: Router, private httpClient: HttpClient, private appSettings: AppSettings) { }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n public get isAuthenticated(): boolean {\r\n return this.authService.isOriginSsoAuthenticated;\r\n }\r\n\r\n public onOriginLoginCompleted(): void {\r\n this.login()\r\n }\r\n\r\n private login(): void {\r\n this.log.info(\"Logging in with origin SSO\");\r\n\r\n this.originOidcService.getAccessToken().then(ssoToken => {\r\n const headers = new HttpHeaders({\r\n 'Authorization': `bearer ${ssoToken}`,\r\n 'Content-Type': 'application/json'\r\n });\r\n\r\n this.httpClient.get(`${this.appSettings.baseCoreApiUrl}/originsso/token`, { headers: headers }).pipe(\r\n takeUntil(this.destroyed),\r\n catchError(err => {\r\n if (err instanceof HttpErrorResponse) {\r\n if (err.status == 401) {\r\n this.messageService.showTranslatedError('BCKOFF_ORIGINSSO_ALREADYLOGGEDIN', 'Error');\r\n }\r\n if (err.status == 404) {\r\n this.messageService.showTranslatedError('BCKOFF_ORIGINSSO_USERNOTFOUND', 'Error');\r\n }\r\n return throwError(err);\r\n }\r\n }),\r\n switchMap(token => this.authService.processToken(token)),\r\n map(profile => this.authService.processProfile(profile)),\r\n ).subscribe(_ => {\r\n this.log.info(\"origin SSO login complete\");\r\n location.href = `${this.targetUri}/${localStorage.getItem(\"pageType\")}`;\r\n });\r\n });\r\n }\r\n\r\n public logout(): void {\r\n this.originOidcService.isLoggedIn().then(loggedIn => {\r\n if (loggedIn) {\r\n this.originOidcService.logout();\r\n }\r\n else{\r\n this.authService.logout();\r\n }\r\n });\r\n }\r\n}\r\n","import { HttpContextToken, HttpHeaders } from \"@angular/common/http\";\r\n\r\nexport const azItems = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];\r\nexport const emptyGuid = \"00000000-0000-0000-0000-000000000000\";\r\nexport const DISABLE_DEFAULT_TOASTER_INTERCEPTOR = new HttpContextToken(() => false);\r\n\r\nexport const noResponseToastHeaders = new HttpHeaders().append('X-MY-CLOUD-No-Response-Toast', 'true');\r\n","
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n","\r\n\r\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"my-cloud-password-input\",\r\n templateUrl: \"./password-input.component.html\",\r\n styleUrls: ['./password-input.component.scss']\r\n})\r\nexport class PasswordInputComponent {\r\n public isVisible: boolean = false;\r\n public id: string = 'password';\r\n\r\n @Input() public value: string;\r\n @Input() public autocomplete: string = \"password\";\r\n\r\n @Output() public valueChange: EventEmitter = new EventEmitter();\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { InlineColumnTemplateDirective } from './directives/inline-column-template.directive';\r\nimport { InlineRowTemplateDirective } from './directives/inline-row-template.directive';\r\nimport { PageSizeComponent } from './page-size/page-size.component';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { GridComponent } from './grid.component';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { TelenetIconModule } from \"../telenet-icons/telenet-icon.module\";\r\n\r\n@NgModule({\r\n declarations: [\r\n GridComponent,\r\n InlineColumnTemplateDirective,\r\n InlineRowTemplateDirective,\r\n PageSizeComponent\r\n ],\r\n exports: [\r\n GridComponent,\r\n InlineColumnTemplateDirective,\r\n InlineRowTemplateDirective\r\n ],\r\n providers: [],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n TranslateModule,\r\n FontAwesomeModule,\r\n TelenetIconModule\r\n ]\r\n})\r\nexport class GridModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { GridUrlSyncDirective } from './directives/grid-url-sync.directive';\r\nimport { SearchboxComponent } from './search-box/searchbox.component';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@NgModule({\r\n declarations: [\r\n GridUrlSyncDirective,\r\n SearchboxComponent\r\n ],\r\n imports: [\r\n FormsModule\r\n ],\r\n exports: [\r\n GridUrlSyncDirective,\r\n SearchboxComponent\r\n ]\r\n})\r\nexport class GridToolsModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { HighlightSearchDirective } from './helpers/highlight-search.directive';\r\nimport { AutcompleteLabelTemplateDirective, AutcompleteOptionTemplateDirective, AutocompleteFooterTemplateDirective, AutocompleteHeaderTemplateDirective } from './helpers/autocomplete-templates.directive';\r\nimport { InternalLabelPipe } from './helpers/internal-label.pipe';\r\nimport { SearchAutocompleteComponent } from './component/search-autocomplete.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n SearchAutocompleteComponent,\r\n HighlightSearchDirective,\r\n AutcompleteOptionTemplateDirective,\r\n AutcompleteLabelTemplateDirective,\r\n AutocompleteHeaderTemplateDirective,\r\n AutocompleteFooterTemplateDirective,\r\n InternalLabelPipe\r\n ],\r\n exports: [\r\n SearchAutocompleteComponent,\r\n HighlightSearchDirective,\r\n AutcompleteOptionTemplateDirective,\r\n AutcompleteLabelTemplateDirective,\r\n AutocompleteHeaderTemplateDirective,\r\n AutocompleteFooterTemplateDirective,\r\n InternalLabelPipe\r\n ],\r\n imports: [\r\n FormsModule,\r\n CommonModule,\r\n NgSelectModule\r\n ]\r\n})\r\nexport class SearchAutocompleteModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { LoggingService } from '../../../core/services/logging.service';\r\nimport { LocationStrategy } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { ErrorCommand } from '@shared/validation/models/error-command.interface';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { EMPTY } from 'rxjs';\r\nimport { AppSettings } from 'app/app.settings';\r\nimport { noResponseToastHeaders } from '@shared/constants';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorHandlingService {\r\n constructor(private http: HttpClient, private loggingService: LoggingService, private locationStrategy: LocationStrategy, private appSettings: AppSettings) { }\r\n\r\n public logError(error: any): void {\r\n const message = error.message ? error.message : error.toString();\r\n\r\n // Log to frontend\r\n this.loggingService.error(message);\r\n\r\n // Log to backend\r\n const command = {\r\n message,\r\n fileName: this.locationStrategy.path(),\r\n stackTrace: error.toString()\r\n } as ErrorCommand;\r\n\r\n this.http.put(`${this.appSettings.baseCoreApiUrl}/error/catch`, command, { headers: noResponseToastHeaders }).pipe(\r\n catchError(err => {\r\n console.error('Handling error locally and rethrowing it...', err);\r\n return EMPTY;\r\n })\r\n ).subscribe();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\nimport { ErrorHandlingService } from '@shared/validation/services/error-handling.service';\r\n\r\n@Injectable()\r\nexport class LogValidationErrorInterceptor implements HttpInterceptor {\r\n\r\n constructor(private errorHandlingService: ErrorHandlingService) { }\r\n\r\n public intercept(req: HttpRequest, next: HttpHandler): Observable> {\r\n return next.handle(req).pipe(\r\n tap(event => { }, error => {\r\n\r\n if (req.url.indexOf('error/catch') > -1) {\r\n console.error('Error calling errorHandlingService.');\r\n return;\r\n }\r\n\r\n if (error instanceof HttpErrorResponse && (error?.status === 400 || error?.status === 403 || error?.status === 500)) {\r\n return;\r\n }\r\n\r\n //only log unknow error instance or code\r\n this.errorHandlingService.logError(error);\r\n })\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ValidationErrorsComponent } from './components/validation-errors.component';\r\nimport { ValidationErrorBodyPipe } from './pipes/validation-error-body.pipe';\r\nimport { TranslationService } from '@app/services/translation.service';\r\nimport { TranslationHandler } from '@app/translations/translation.handler';\r\nimport { TranslateModule, MissingTranslationHandler } from '@ngx-translate/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { LogValidationErrorInterceptor } from './helpers/log-validation-error.interceptor';\r\nimport { TelenetIconModule } from '@shared/telenet-icons';\r\n\r\n@NgModule({\r\n declarations: [\r\n ValidationErrorsComponent,\r\n ValidationErrorBodyPipe\r\n ],\r\n exports: [\r\n ValidationErrorsComponent,\r\n ValidationErrorBodyPipe\r\n ],\r\n imports: [\r\n CommonModule,\r\n TranslateModule.forRoot({\r\n defaultLanguage: 'E',\r\n missingTranslationHandler: {\r\n provide: MissingTranslationHandler,\r\n useClass: TranslationHandler,\r\n deps: [TranslationService],\r\n },\r\n useDefaultLang: false,\r\n }),\r\n TelenetIconModule\r\n ],\r\n providers: [\r\n TranslationService,\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: LogValidationErrorInterceptor,\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ValidationErrorsModule { }\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MissingTranslationHandler, TranslateModule } from '@ngx-translate/core';\r\nimport { SafePipe } from \"@app/pipes/safe.pipe\";\r\nimport { PluralPipe } from \"@app/pipes/plural.pipe\";\r\nimport { ZeroToEmptyPipe } from './pipes/zero-to-empty.pipe';\r\nimport { TranslationService } from '@app/services/translation.service';\r\nimport { TranslationHandler } from '@app/translations/translation.handler';\r\nimport { ConfirmModalComponent } from './confirm-modal/confirm.modal';\r\nimport { GridModule } from './grid';\r\nimport { GridToolsModule } from './grid-tools/grid-tools.module';\r\nimport { SearchAutocompleteModule } from './search-autocomplete/search-autocomplete.module';\r\nimport { DateFormatPipe } from './pipes/date-format.pipe';\r\nimport { EnumTranslationPipe } from './pipes/enum-translation.pipe';\r\nimport { FormControlValidClassPipe } from './pipes/form-control-valid-class.pipe';\r\nimport { ValidationErrorsModule } from './validation/validation-errors.module';\r\nimport { PasswordInputComponent } from './password-input/password-input.component';\r\nimport { TelenetIconModule } from './telenet-icons';\r\nimport { CustomMessageComponent } from './messages/custom-message.component';\r\nimport { TelenetCheckboxComponent } from './checkbox/telenet-checkbox.component';\r\nimport { TelenetRadioButtonComponent } from './radio-button/telenet-radio-button.component';\r\nimport { OkBtnDirective } from './directives/ok-btn.directive';\r\nimport { TelenetStepperComponent } from './stepper/telenet-stepper.component';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n RouterModule,\r\n TranslateModule.forRoot({\r\n defaultLanguage: 'E',\r\n missingTranslationHandler: {\r\n provide: MissingTranslationHandler,\r\n useClass: TranslationHandler,\r\n deps: [TranslationService],\r\n },\r\n useDefaultLang: false,\r\n }),\r\n GridModule,\r\n GridToolsModule,\r\n SearchAutocompleteModule,\r\n ValidationErrorsModule,\r\n TelenetIconModule\r\n ],\r\n declarations: [\r\n SafePipe,\r\n PluralPipe,\r\n ZeroToEmptyPipe,\r\n ConfirmModalComponent,\r\n DateFormatPipe,\r\n EnumTranslationPipe,\r\n FormControlValidClassPipe,\r\n PasswordInputComponent,\r\n CustomMessageComponent,\r\n TelenetCheckboxComponent,\r\n TelenetRadioButtonComponent,\r\n TelenetStepperComponent,\r\n OkBtnDirective\r\n ],\r\n exports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n RouterModule,\r\n TranslateModule,\r\n GridModule,\r\n GridToolsModule,\r\n SearchAutocompleteModule,\r\n ValidationErrorsModule,\r\n SafePipe,\r\n PluralPipe,\r\n ZeroToEmptyPipe,\r\n ConfirmModalComponent,\r\n DateFormatPipe,\r\n FormControlValidClassPipe,\r\n EnumTranslationPipe,\r\n PasswordInputComponent,\r\n CustomMessageComponent,\r\n TelenetCheckboxComponent,\r\n TelenetRadioButtonComponent,\r\n OkBtnDirective,\r\n TelenetStepperComponent\r\n ],\r\n providers: []\r\n})\r\nexport class SharedModule {\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: SharedModule,\r\n providers: []\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { TelenetIcon } from './telenet-icons';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TelenetIconLibrary {\r\n private registry = new Map();\r\n\r\n public registerIcons(icons: TelenetIcon[]): void {\r\n icons.forEach((icon: TelenetIcon) => this.registry.set(icon.name, icon.data));\r\n }\r\n\r\n public getIcon(iconName: string): string | undefined {\r\n if (!this.registry.has(iconName)) {\r\n console.warn(`We could not find the Icon with the name ${iconName}, did you add it to the Icon library?`);\r\n }\r\n\r\n return this.registry.get(iconName);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, Optional } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { TelenetIconLibrary } from './telenet-icon-library.service';\r\n\r\n@Component({\r\n selector: 'telenet-icon',\r\n template: ``,\r\n styles: [\r\n ':host {display: inline-block;}',\r\n ':host::ng-deep svg{width: 100%; height: 100%;}'\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TelenetIconComponent {\r\n private svgIcon: SVGElement;\r\n\r\n @Input()\r\n set name(iconName: string) {\r\n if (this.svgIcon) {\r\n this.element.nativeElement.removeChild(this.svgIcon);\r\n }\r\n\r\n const svgData = this.telenetIconsRegistry.getIcon(iconName);\r\n\r\n this.svgIcon = this.svgElementFromString(svgData);\r\n this.element.nativeElement.appendChild(this.svgIcon);\r\n }\r\n\r\n constructor(private element: ElementRef, private telenetIconsRegistry: TelenetIconLibrary, @Optional() @Inject(DOCUMENT) private document: any) { }\r\n\r\n private svgElementFromString(svgContent: string): SVGElement {\r\n const div = this.document.createElement('DIV');\r\n\r\n div.className = 'telenet-icon';\r\n div.innerHTML = svgContent;\r\n\r\n return div.querySelector('svg') || this.document.createElementNS('http://www.w3.org/2000/svg', 'path');\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TelenetIconComponent } from './telenet-icon.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [TelenetIconComponent],\r\n exports: [TelenetIconComponent]\r\n})\r\nexport class TelenetIconModule { }\r\n","import { OperatorFunction, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { ValidationErrors } from '../models/validation-errros.interface';\r\n\r\nexport function catchValidationErrors(callBackFunc: (errors: ValidationErrors) => void): OperatorFunction {\r\n return catchError((err, caught) => {\r\n if (err instanceof HttpErrorResponse) {\r\n const errorBody = {\r\n errors: err.error.map(x => { return { property: x, error: x } }), //TODO: remove this mapping to add grouping\r\n hasErrors: true,\r\n status: err.status\r\n } as ValidationErrors;\r\n\r\n if (isValidationErrors(errorBody)) {\r\n callBackFunc(errorBody);\r\n }\r\n }\r\n\r\n return throwError(err);\r\n });\r\n}\r\n\r\nexport function isValidationErrors(errorBody: any): errorBody is ValidationErrors {\r\n return errorBody && (errorBody as ValidationErrors).hasErrors;\r\n}\r\n","export const environment = {\r\n production: true,\r\n timeStamp: 'Mon Sep 20 2021 15:26:05 GMT+0200 (Midden-Europese zomertijd)'\r\n};\r\n","","import { Component } from '@angular/core';\r\nimport { AuthenticationService } from '@app/services/authentication.service';\r\nimport { CustomerType } from '@app/models/customer-type.enum';\r\nimport { Router } from '@angular/router';\r\n\r\n\r\n@Component({\r\n selector: 'my-cloud-navigation',\r\n templateUrl: './navigation.component.html',\r\n styleUrls: ['./navigation.component.scss']\r\n})\r\nexport class NavigationComponent {\r\n\r\n constructor(private router: Router, public authService: AuthenticationService) { }\r\n\r\n public get customerIsPartner(): boolean {\r\n return this.authService.customerType == CustomerType.Partner;\r\n }\r\n\r\n public get activeRoute(): string {\r\n return this.router.url;\r\n }\r\n}\r\n","\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
{{'USERNAME' | translate}}
\r\n
{{authService.username}}
\r\n
\r\n
\r\n
{{'BCKOFF_INVOICINGDETAILS_CUSTOMERNR' | translate}}
\r\n
{{authService.userId}}
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n \r\n\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { AuthenticationService } from '@app/services/authentication.service';\r\nimport { Subject } from 'rxjs';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\nimport { LoadingBarService } from '@ngx-loading-bar/core';\r\nimport { AppSettings } from './app.settings';\r\nimport { LanguageOption } from '@app/models/language-option.type';\r\nimport { OktaService } from '@modules/okta-login/services/okta.service';\r\n\r\n@Component({\r\n selector: 'my-cloud-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss'],\r\n})\r\nexport class AppComponent implements OnInit, OnDestroy {\r\n private destroyed: Subject = new Subject();\r\n\r\n public isOriginPage: boolean = false;\r\n public isLoading: boolean = false;\r\n\r\n constructor(private router: Router, public appSettings: AppSettings,\r\n public loader: LoadingBarService, public authService: AuthenticationService, public oktaService: OktaService) { }\r\n\r\n public ngOnInit(): void {\r\n this.router.events.pipe(\r\n filter(e => e instanceof NavigationEnd)\r\n ).subscribe((navEnd: NavigationEnd) => {\r\n this.isOriginPage = navEnd.urlAfterRedirects.startsWith(\"/ng/origin/\");\r\n });\r\n\r\n // this.loader.value$.subscribe(percentage => {\r\n // this.isLoading = percentage > 0 && percentage < 100;\r\n // });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n public get selectedLanguage(): string {\r\n switch (this.appSettings.selectedLanguage) {\r\n case 'N':\r\n return 'NL';\r\n case 'F':\r\n return 'FR';\r\n case 'E':\r\n default:\r\n return 'EN';\r\n }\r\n }\r\n\r\n public changeLanguage(language: LanguageOption): void {\r\n this.authService.changeLanguage(language);\r\n }\r\n\r\n public logout(): void {\r\n this.oktaService.logout();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpHeaders, HttpResponse } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthenticationService } from '@app/services/authentication.service';\r\nimport { LoggingService } from '@app/services/logging.service';\r\nimport { AppSettings } from 'app/app.settings';\r\nimport { Token } from '@app/models/token.interface';\r\n\r\n\r\n/**\r\n * Token interceptor -> add authentication token if available\r\n **/\r\n@Injectable()\r\nexport class TokenInterceptor implements HttpInterceptor {\r\n private requests: HttpRequest[] = [];\r\n\r\n constructor(private authService: AuthenticationService, private log: LoggingService, private appSettings: AppSettings) { }\r\n\r\n public intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n let changedRequest = request;\r\n\r\n const headerSettings: { [name: string]: string | string[] } = {};\r\n for (const key of request.headers.keys().filter(k => k != \"noloader\")) {\r\n headerSettings[key] = request.headers.getAll(key);\r\n }\r\n\r\n headerSettings['Language'] = this.appSettings.selectedLanguage;\r\n\r\n let token: Token = this.authService.token;\r\n if (token && token.access_token) {\r\n this.log.debug(\"Adding token to HTTP request\");\r\n headerSettings['Authorization'] = 'bearer ' + token.access_token;\r\n headerSettings['Content-Type'] = 'application/json';\r\n }\r\n\r\n const newHeader = new HttpHeaders(headerSettings);\r\n\r\n changedRequest = request.clone({\r\n headers: newHeader\r\n });\r\n\r\n this.requests.push(changedRequest);\r\n\r\n return new Observable(observer => {\r\n const subscription = next.handle(changedRequest).subscribe(event => {\r\n if (event instanceof HttpResponse) {\r\n this.removeRequest(changedRequest);\r\n observer.next(event);\r\n }\r\n }, err => {\r\n this.removeRequest(changedRequest);\r\n observer.error(err);\r\n }, () => {\r\n this.removeRequest(changedRequest);\r\n observer.complete();\r\n });\r\n\r\n // remove request from queue when cancelled\r\n return () => {\r\n this.removeRequest(changedRequest);\r\n subscription.unsubscribe();\r\n };\r\n });\r\n }\r\n\r\n public removeRequest(req: HttpRequest): void {\r\n const i = this.requests.indexOf(req);\r\n if (i >= 0) {\r\n this.requests.splice(i, 1);\r\n }\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const MY_CLOUD_HTTP_CONFIG = new InjectionToken('MY_CLOUD_HTTP_CONFIG');\r\n\r\nexport interface MyCloudHttpConfig {\r\n showSuccessGetToast: boolean;\r\n showSuccessNonGetToast: boolean;\r\n showValidationErrorToast: boolean;\r\n showPermissionErrorToast: boolean;\r\n}\r\n","import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse, HttpEventType } from '@angular/common/http';\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\nimport { BruudToastrService } from '@app/services/message.service';\r\nimport { isValidationErrors } from '@shared/validation/helpers/catch-validation-errors';\r\nimport { MY_CLOUD_HTTP_CONFIG, MyCloudHttpConfig } from '@app/models/config/mc-http-config.interface';\r\nimport { Location } from '@angular/common';\r\n\r\n\r\n@Injectable()\r\nexport class ReponseToastInterceptor implements HttpInterceptor {\r\n private showSuccessGetToast = false;\r\n private showSuccessNonGetToast = false;\r\n private showValidationErrorToast = false;\r\n private showPermissionErrorToast = false;\r\n\r\n constructor(private location: Location, private messageService: BruudToastrService, @Optional() @Inject(MY_CLOUD_HTTP_CONFIG) httpConfig: MyCloudHttpConfig) {\r\n if (httpConfig) {\r\n this.showSuccessGetToast = httpConfig.showSuccessGetToast;\r\n this.showSuccessNonGetToast = httpConfig.showSuccessNonGetToast;\r\n this.showValidationErrorToast = httpConfig.showValidationErrorToast;\r\n this.showPermissionErrorToast = httpConfig.showPermissionErrorToast;\r\n }\r\n }\r\n\r\n public intercept(req: HttpRequest, next: HttpHandler): Observable> {\r\n if (req.headers.has('X-MY-CLOUD-No-Response-Toast')) { //skip response toast interceptor if header exists\r\n return next.handle(req);\r\n }\r\n\r\n return next.handle(req).pipe(\r\n tap(event => {\r\n if (event.type === HttpEventType.ResponseHeader || event.type === HttpEventType.Response) {\r\n const customSuccessToast = req.headers.get('X-MY-CLOUD-Custom-Success-Toast');\r\n this.showHttpSuccess(req.method.toUpperCase(), customSuccessToast);\r\n }\r\n }, error => {\r\n error instanceof HttpErrorResponse\r\n ? this.showHttpError(req.method.toUpperCase(), error)\r\n : this.showGenericError('');\r\n })\r\n );\r\n }\r\n\r\n private showHttpSuccess(method: string, customSuccessToast: string) {\r\n if (customSuccessToast) {\r\n return this.messageService.showTranslatedSuccess(customSuccessToast); //musts autodismiss after 3sec\r\n }\r\n\r\n if (method === 'GET' && !this.showSuccessGetToast) {\r\n return;\r\n }\r\n if (method !== 'GET' && !this.showSuccessNonGetToast) {\r\n return;\r\n }\r\n\r\n this.messageService.showTranslatedSuccess(\"BCKOFF_ACTION_EXEC_OK\");//musts autodismiss after 3sec\r\n }\r\n\r\n private showHttpError(method: string, error: HttpErrorResponse): void {\r\n switch (error.status) {\r\n case 400:\r\n this.showBadRequestError(method, error.error);\r\n break;\r\n case 401:\r\n case 403:\r\n this.showPermissionError();\r\n break;\r\n case 404:\r\n case 500:\r\n default:\r\n this.showGenericError();\r\n }\r\n }\r\n\r\n /**\r\n * show normal Validation errors (no toasters)\r\n * @param {string} method method type of the request\r\n * @param {any} errorbody body to check if has validation errors\r\n * @returns {void}\r\n */\r\n private showBadRequestError(method: string, errorbody: any): void {\r\n if (!this.showValidationErrorToast) {\r\n return;\r\n }\r\n\r\n if ((method === 'POST' || method === 'PUT' || method === 'DELETE') && isValidationErrors(errorbody)) {\r\n this.messageService.showTranslatedError(\"GENERAL_ERROR_MESSAGE\");\r\n } else {\r\n this.showGenericError(method);\r\n }\r\n }\r\n\r\n /**\r\n * generic not authorized message --> redirect to last page in history\r\n * @returns {void}\r\n */\r\n private showPermissionError(): void {\r\n if (!this.showPermissionErrorToast) {\r\n return;\r\n }\r\n\r\n this.messageService.showTranslatedError(\"NO_ACCESS\");\r\n // this.location.back();\r\n }\r\n\r\n /**\r\n * generic 'contact support' --> redirect to last page in history\r\n * @param {string} method method type of the request\r\n * @returns {void}\r\n */\r\n private showGenericError(method?: string): void {\r\n switch (method) {\r\n case 'GET':\r\n this.messageService.showTranslatedError(\"GENERAL_ERROR_MESSAGE\");\r\n break;\r\n case 'PUT':\r\n case 'POST':\r\n case 'DELETE':\r\n this.messageService.showTranslatedError(\"GENERAL_ERROR_MESSAGE\");\r\n break;\r\n default:\r\n this.messageService.showTranslatedError(\"GENERAL_ERROR_MESSAGE\");\r\n }\r\n\r\n // this.location.back();\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n {{'BCKOFF_LOGON_FORGOT_PASSWORD' | translate}} \r\n \r\n \r\n
\r\n
\r\n
","import { Component, OnDestroy } from '@angular/core';\r\nimport { AuthenticationService } from '@app/services/authentication.service';\r\nimport { BruudToastrService } from '@app/services/message.service';\r\nimport { CustomerService } from '@app/services/customer.service';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { Subject, throwError } from 'rxjs';\r\nimport { catchError, takeUntil } from 'rxjs/operators';\r\nimport { OktaOidcService } from '@modules/okta-login/services/okta-oidc.service';\r\n\r\n@Component({\r\n selector: 'my-cloud-login-modal',\r\n templateUrl: './login.modal.html',\r\n styleUrls: ['./login.modal.scss']\r\n})\r\nexport class LoginModalComponent implements OnDestroy {\r\n private destroyed: Subject = new Subject();\r\n\r\n public username: string;\r\n public password: string;\r\n\r\n public errorDescription?: string;\r\n\r\n constructor(public modalRef: NgbActiveModal, public authService: AuthenticationService,\r\n private oktaOidcService: OktaOidcService, private messageService: BruudToastrService, private customerService: CustomerService) { }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n public login(): void {\r\n this.errorDescription = undefined;\r\n\r\n this.authService.login(this.username, this.password).pipe(\r\n takeUntil(this.destroyed),\r\n catchError(error_description => {\r\n if (error_description) {\r\n this.errorDescription = error_description;\r\n }\r\n\r\n return throwError(error_description);\r\n })\r\n ).subscribe(_ => {\r\n this.modalRef.close();\r\n });\r\n }\r\n\r\n public resetPassword(): void {\r\n this.customerService.resetPasswordUnsecure(this.username).pipe(\r\n takeUntil(this.destroyed)\r\n ).subscribe(_ => {\r\n this.messageService.showTranslatedSuccess(\"BCKOFF_LOGON_PASSWORDWASRESET\", null);\r\n });\r\n }\r\n}\r\n","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild, Router } from '@angular/router';\r\nimport { LoginModalComponent } from \"@app/components/login-modal/login.modal\";\r\nimport { Token } from \"@app/models/token.interface\";\r\nimport { AuthenticationService } from '@app/services/authentication.service';\r\nimport { LoggingService } from '@app/services/logging.service';\r\nimport { OktaOidcService } from \"@modules/okta-login/services/okta-oidc.service\";\r\nimport { OriginOidcService } from \"@modules/origin-sso/services/origin-oidc.service\";\r\nimport { NgbModal } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { AppSettings } from \"app/app.settings\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class AuthGuard implements CanActivateChild, OnDestroy {\r\n private destroyed: Subject = new Subject();\r\n\r\n constructor(public log: LoggingService, private appSettings: AppSettings,\r\n private authService: AuthenticationService, private oktaOidcService: OktaOidcService, private originOidcService: OriginOidcService,\r\n private modalService: NgbModal, private router: Router) { }\r\n\r\n public canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\r\n // All login methods\r\n if (!this.authService.isAuthenticated) {\r\n this.log.info(\"User not authenticated, redirecting to login\");\r\n\r\n if (this.appSettings.bypassOktaLogin){\r\n this.router.navigate(['/modal-login']);\r\n return false;\r\n }\r\n\r\n this.oktaOidcService.login();\r\n return false;\r\n }\r\n\r\n // Session\r\n if (Number(this.authService.token.expires_at)*1000 < Date.now()) {\r\n this.log.info(\"Token expired, logout and redirecting to login\");\r\n\r\n this.authService.logout();\r\n location.href = '';\r\n \r\n return false;\r\n }\r\n\r\n // Origin login is only allowed to access domain pages\r\n if (this.authService.isOriginSsoAuthenticated && !state.url.startsWith(\"/ng/domain\")) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n private openLoginModal(): void {\r\n const modalRef = this.modalService.open(LoginModalComponent, {\r\n ariaLabelledBy: \"modal-basic-title\",\r\n backdrop: 'static',\r\n keyboard: false,\r\n modalDialogClass: 'login-modal',\r\n scrollable: true\r\n });\r\n\r\n this.destroyed.subscribe(_ => modalRef.dismiss());\r\n\r\n modalRef.result.then(_ => this.authService.redirect(), _ => void 0);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { CookieService } from 'ngx-cookie-service'\r\nimport { TokenInterceptor } from '@app/interceptors/token.interceptor';\r\nimport { LoggingService } from './services/logging.service';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { TranslationService } from './services/translation.service';\r\nimport { LoginModalComponent } from './components/login-modal/login.modal';\r\nimport { NavigationComponent } from './components/navigation/navigation.component';\r\nimport { MissingTranslationHandler, TranslateModule } from '@ngx-translate/core';\r\nimport { TranslationHandler } from './translations/translation.handler';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MaintenanceComponent } from './components/maintenance/maintenance.component';\r\nimport { NotFoundComponent } from './components/not-found/not-found.component';\r\nimport { SharedModule } from '@shared/shared.module';\r\nimport { ReponseToastInterceptor } from './interceptors/response-toast.interceptor';\r\nimport { AuthGuard } from './guards/auth.guard';\r\nimport { CloudErpSsoComponent } from './components/cloud-erp-sso.component';\r\nimport { TelenetIconModule } from '@shared/telenet-icons';\r\nimport { CustomToastComponent } from './components/custom-toast/custom-toast.component';\r\nimport { ModalLoginComponent } from './components/modal-login/modal-login.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n LoginModalComponent,\r\n NavigationComponent,\r\n MaintenanceComponent,\r\n ModalLoginComponent,\r\n NotFoundComponent,\r\n CloudErpSsoComponent,\r\n CustomToastComponent\r\n ],\r\n exports: [\r\n LoginModalComponent,\r\n NavigationComponent\r\n ],\r\n entryComponents: [\r\n LoginModalComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n RouterModule,\r\n TranslateModule.forRoot({\r\n defaultLanguage: 'E',\r\n missingTranslationHandler: {\r\n provide: MissingTranslationHandler,\r\n useClass: TranslationHandler,\r\n deps: [TranslationService],\r\n },\r\n useDefaultLang: false,\r\n }),\r\n HttpClientModule,\r\n NgbModule,\r\n SharedModule,\r\n TelenetIconModule\r\n ],\r\n providers: [\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: TokenInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: ReponseToastInterceptor,\r\n multi: true\r\n },\r\n CookieService,\r\n AuthGuard\r\n ]\r\n})\r\nexport class CoreModule {\r\n constructor(private log: LoggingService) {\r\n this.log.info(\"Loading core module\");\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\r\nimport { AppSettings } from \"app/app.settings\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class MaintenanceGuard implements CanActivate {\r\n\r\n constructor(private appSettings: AppSettings, private router: Router) { }\r\n\r\n public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\r\n if (this.appSettings.isInMaintenanceMode && !state.url.includes('/ng/maintenance')) {\r\n this.router.navigate(['/ng/maintenance']);\r\n return false;\r\n }\r\n\r\n if (!this.appSettings.isInMaintenanceMode && state.url.includes('/ng/maintenance')) {\r\n this.router.navigateByUrl('/ng/account/overview');\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { AuthGuard } from '@app/guards/auth.guard';\r\nimport { MaintenanceGuard } from './core/guards/maintenance.guard';\r\nimport { MaintenanceComponent } from '@app/components/maintenance/maintenance.component';\r\nimport { NotFoundComponent } from '@app/components/not-found/not-found.component';\r\nimport { CloudErpSsoComponent } from '@app/components/cloud-erp-sso.component';\r\nimport { CloudErpSsoGuard } from '@app/guards/cloud-erp-sso.guard';\r\nimport { ProfileResolverService } from '@app/services/profile-resolver.service';\r\nimport { ModalLoginComponent } from '@app/components/modal-login/modal-login.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n redirectTo: '/ng/account/overview',\r\n pathMatch: 'full'\r\n },\r\n {\r\n path: 'modal-login',\r\n component: ModalLoginComponent,\r\n },\r\n {\r\n path: 'ng/maintenance',\r\n canActivate: [MaintenanceGuard],\r\n component: MaintenanceComponent\r\n },\r\n {\r\n path: 'ng',\r\n canActivate: [MaintenanceGuard],\r\n children:\r\n [\r\n {\r\n path: 'okta',\r\n loadChildren: () => import('./modules/okta-login/okta.module').then(module => module.OktaModule)\r\n },\r\n {\r\n path: 'sso',\r\n canActivate: [CloudErpSsoGuard],\r\n component: CloudErpSsoComponent,\r\n },\r\n {\r\n path: 'origin',\r\n loadChildren: () => import('./modules/origin-sso/origin-sso.module').then(module => module.OriginSsoModule)\r\n },\r\n {\r\n path: '',\r\n canActivateChild: [AuthGuard],\r\n resolve: { data: ProfileResolverService },\r\n children: [\r\n {\r\n path: 'account',\r\n loadChildren: () => import('./modules/account/account.module').then(module => module.AccountModule)\r\n },\r\n {\r\n path: 'data-center',\r\n loadChildren: () => import('./modules/data-center/data-center.module').then(module => module.DataCenter)\r\n },\r\n {\r\n path: 'documents',\r\n loadChildren: () => import('./modules/documents/documents.module').then(module => module.DocumentsModule)\r\n },\r\n {\r\n path: 'domain',\r\n loadChildren: () => import('./modules/domain/domain.module').then(module => module.DomainModule)\r\n },\r\n {\r\n path: 'linux',\r\n loadChildren: () => import('./modules/linux/linux.module').then(module => module.LinuxModule)\r\n },\r\n {\r\n path: 'm365',\r\n loadChildren: () => import('./modules/m365/m365.module').then(module => module.M365Module)\r\n },\r\n {\r\n path: 'products',\r\n loadChildren: () => import('./modules/products/products.module').then(module => module.ProductsModule)\r\n },\r\n {\r\n path: 'promotions',\r\n loadChildren: () => import('./modules/promotions/promotion.module').then(module => module.PromotionModule)\r\n },\r\n {\r\n path: 'shared-hosting',\r\n loadChildren: () => import('./modules/shared-hosting/shared-hosting.module').then(module => module.SharedHostingModule)\r\n },\r\n {\r\n path: 'subscriptions',\r\n loadChildren: () => import('./modules/subscriptions/subscription.module').then(module => module.SubscriptionsModule)\r\n },\r\n {\r\n path: 'tickets',\r\n loadChildren: () => import('./modules/contacting/contacting.module').then(module => module.ContactingModule)\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n path: '**',\r\n component: NotFoundComponent\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes, { useHash: false, relativeLinkResolution: 'legacy' })],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule { }\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { LoginModalComponent } from '@app/components/login-modal/login.modal';\r\nimport { AuthenticationService } from '@app/services/authentication.service';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'modal-login',\r\n template: `
`\r\n})\r\nexport class ModalLoginComponent implements OnInit {\r\n\r\n constructor(private router: Router, private authService: AuthenticationService, private modalService: NgbModal) { }\r\n\r\n public ngOnInit(): void {\r\n //TODO change this in this.authService.isAuthenticated when okta environment is present\r\n this.openLoginModal();\r\n }\r\n\r\n private openLoginModal(): void {\r\n const modalRef = this.modalService.open(LoginModalComponent, {\r\n ariaLabelledBy: \"modal-basic-title\",\r\n backdrop: 'static',\r\n keyboard: false,\r\n modalDialogClass: 'login-modal',\r\n scrollable: true\r\n });\r\n\r\n modalRef.result.then(_ => {\r\n modalRef.dismiss();\r\n location.href = '';\r\n }\r\n );\r\n }\r\n}\r\n","import { Component, OnInit } from \"@angular/core\";\r\nimport { AuthenticationService } from \"@app/services/authentication.service\";\r\n\r\n@Component({\r\n selector: \"my-cloud-maintenance\",\r\n templateUrl: \"./maintenance.component.html\",\r\n styleUrls: [\"./maintenance.component.scss\"],\r\n})\r\nexport class MaintenanceComponent implements OnInit {\r\n constructor(private authenticationService: AuthenticationService) { }\r\n\r\n public ngOnInit(): void {\r\n this.authenticationService.logout();\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

\r\n Om onze cloudoplossingen te optimaliseren, worden enkele belangrijke updates\r\n op onze systemen voorzien.\r\n

\r\n

\r\n Tijdens dit onderhoud blijven uw cloudoplossingen volledig operationeel (DNS\r\n settings, webhosting, Microsoft 365...).\r\n

\r\n

\r\n Uw mycloud zal dus tijdelijk niet beschikbaar.\r\n

\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

\r\n Afin d'optimiser nos solutions cloud, quelques mises à jour importantes sont prévues sur nos systèmes.\r\n

\r\n

\r\n Pendant cette maintenance, vos solutions cloud restent pleinement\r\n opérationnelles (paramètres DNS, hébergement web, Microsoft 365...).\r\n

\r\n

\r\n Votre mycloud ne sera donc temporairement pas disponible.\r\n

\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

\r\n In order to optimize our cloud solutions, some important updates are\r\n provided on systems.\r\n

\r\n

\r\n During this maintenance, your cloud solutions remain fully operational (DNS\r\n settings, web hosting, Microsoft 365...).\r\n

\r\n

\r\n Your mycloud will therefore be temporarily unavailable.\r\n

\r\n
\r\n
\r\n
\r\n
\r\n","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\r\nimport { AuthenticationService } from \"@app/services/authentication.service\";\r\nimport { Subject, throwError } from \"rxjs\";\r\nimport { takeUntil, catchError } from \"rxjs/operators\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class CloudErpSsoGuard implements CanActivate, OnDestroy {\r\n private destroyed: Subject = new Subject();\r\n\r\n constructor(private authService: AuthenticationService, private router: Router) { }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroyed.next();\r\n this.destroyed.complete();\r\n }\r\n\r\n public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\r\n const username = route.queryParams[\"username\"];\r\n const session = route.queryParams[\"session\"];\r\n\r\n if (!username || !session) {\r\n return false;\r\n }\r\n\r\n this.authService.loginBySession(username, session).pipe(\r\n takeUntil(this.destroyed),\r\n catchError(error => throwError(error))\r\n ).subscribe(_ => this.router.navigate(['/ng/account/overview']));\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'my-cloud-erp-sso',\r\n template: '
'\r\n})\r\nexport class CloudErpSsoComponent { }\r\n","import { Injectable } from '@angular/core';\r\nimport { Resolve } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthenticationService } from './authentication.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ProfileResolverService implements Resolve {\r\n\r\n constructor(private authService: AuthenticationService) { }\r\n\r\n resolve(): Observable {\r\n if (this.authService.isAuthenticated && !this.authService.userId)\r\n {\r\n return this.authService.getProfile(this.authService.token);\r\n }\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { LoggingService } from '@app/services/logging.service';\r\n\r\n@Component({\r\n selector: 'my-cloud-not-found',\r\n templateUrl: './not-found.component.html',\r\n styleUrls: ['./not-found.component.scss']\r\n})\r\nexport class NotFoundComponent {\r\n constructor(log: LoggingService) {\r\n log.debug(\"Rendering empty angular component\");\r\n }\r\n}\r\n","\r\nNo route found","import { NgModule, APP_INITIALIZER, ModuleWithProviders } from '@angular/core';\r\nimport { AppSettings } from './app.settings';\r\nimport { MY_CLOUD_HTTP_CONFIG, MyCloudHttpConfig } from '@app/models/config/mc-http-config.interface';\r\n\r\nexport function InitializerFactory(appSettings: AppSettings) {\r\n return () => appSettings.init();\r\n}\r\n\r\nexport function MyCloudHttpConfigFactory(appSettings: AppSettings): MyCloudHttpConfig {\r\n return {\r\n showSuccessGetToast: appSettings.httpConfig.showSuccessGetToast,\r\n showSuccessNonGetToast: appSettings.httpConfig.showSuccessNonGetToast,\r\n showValidationErrorToast: appSettings.httpConfig.showValidationErrorToast,\r\n showPermissionErrorToast: appSettings.httpConfig.showPermissionErrorToast\r\n };\r\n}\r\n\r\n@NgModule({\r\n providers: []\r\n})\r\nexport class AppSettingsModule {\r\n public static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: AppSettingsModule,\r\n providers: [\r\n AppSettings,\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: InitializerFactory,\r\n deps: [AppSettings],\r\n multi: true\r\n },\r\n {\r\n provide: MY_CLOUD_HTTP_CONFIG,\r\n useFactory: MyCloudHttpConfigFactory,\r\n deps: [AppSettings],\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","export interface TelenetIcon {\r\n name: telenetIcons;\r\n data: any;\r\n}\r\n\r\nexport declare type telenetIcons =\r\n 'achievement' |\r\n 'advisor' |\r\n 'advisor-chat' |\r\n 'achievement' |\r\n 'alert' |\r\n 'basket' |\r\n 'calendar' |\r\n 'chevron-down' |\r\n 'chevron-left' |\r\n 'chevron-right' |\r\n 'chevron-up' |\r\n 'close' |\r\n 'configure' |\r\n 'cookie' |\r\n 'copy' |\r\n 'delete' |\r\n 'download' |\r\n 'edit' |\r\n 'email' |\r\n 'error' |\r\n 'external-url' |\r\n 'family' |\r\n 'faq' |\r\n 'file' |\r\n 'help' |\r\n 'home' |\r\n 'information' |\r\n 'key-features' |\r\n 'key' |\r\n 'lock' |\r\n 'logout' |\r\n 'minus' |\r\n 'notification' |\r\n 'plus' |\r\n 'redo' |\r\n 'save' |\r\n 'search' |\r\n 'send' |\r\n 'settings' |\r\n 'shop-and-improve' |\r\n 'shown' |\r\n 'success-filled' |\r\n 'success' |\r\n 'support-and-assistance' |\r\n 'tick' |\r\n 'time' |\r\n 'upload' |\r\n 'unlock' |\r\n 'user';\r\n\r\n\r\nexport const telenetIconUser: TelenetIcon = {\r\n name: 'user',\r\n data: ` `\r\n};\r\n\r\nexport const telenetIconKeyFeatures: TelenetIcon = {\r\n name: 'key-features',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconPlus: TelenetIcon = {\r\n name: 'plus',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconEdit: TelenetIcon = {\r\n name: 'edit',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconDelete: TelenetIcon = {\r\n name: 'delete',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconHelp: TelenetIcon = {\r\n name: 'help',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconDownload: TelenetIcon = {\r\n name: 'download',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconRedo: TelenetIcon = {\r\n name: 'redo',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconClose: TelenetIcon = {\r\n name: 'close',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconInformation: TelenetIcon = {\r\n name: 'information',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconError: TelenetIcon = {\r\n name: 'error',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconAlert: TelenetIcon = {\r\n name: 'alert',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconFaq: TelenetIcon = {\r\n name: 'faq',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconShopAndImprove: TelenetIcon = {\r\n name: 'shop-and-improve',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconAdvisor: TelenetIcon = {\r\n name: 'advisor',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconSuccess: TelenetIcon = {\r\n name: 'success',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconTick: TelenetIcon = {\r\n name: 'tick',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconChevronDown: TelenetIcon = {\r\n name: 'chevron-down',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconTime: TelenetIcon = {\r\n name: 'time',\r\n data: ` `\r\n}\r\nexport const telenetIconBasket: TelenetIcon = {\r\n name: 'basket',\r\n data: ``\r\n}\r\n\r\nexport const telenetIconUnlock: TelenetIcon = {\r\n name: 'unlock',\r\n data: ` `\r\n // data: ` `\r\n}\r\n\r\nexport const telenetIconConfigure: TelenetIcon = {\r\n name: 'configure',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconCopy: TelenetIcon = {\r\n name: 'copy',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconSettings: TelenetIcon = {\r\n name: 'settings',\r\n data: ` `\r\n}\r\n\r\nexport const telenetIconFile: TelenetIcon = {\r\n name: 'file',\r\n data: ` `\r\n}\r\n\r\n\r\nexport const telenetIconPack: Array = [\r\n telenetIconUser,\r\n telenetIconKeyFeatures,\r\n telenetIconPlus,\r\n telenetIconEdit,\r\n telenetIconDelete,\r\n telenetIconHelp,\r\n telenetIconDownload,\r\n telenetIconRedo,\r\n telenetIconClose,\r\n telenetIconInformation,\r\n telenetIconError,\r\n telenetIconAlert,\r\n telenetIconFaq,\r\n telenetIconShopAndImprove,\r\n telenetIconAdvisor,\r\n telenetIconSuccess,\r\n telenetIconTick,\r\n telenetIconTime,\r\n telenetIconUnlock,\r\n telenetIconChevronDown,\r\n telenetIconTick,\r\n telenetIconBasket,\r\n telenetIconConfigure,\r\n telenetIconCopy,\r\n telenetIconSettings,\r\n telenetIconFile\r\n];\r\n","import { animate, animateChild, query, transition, trigger } from '@angular/animations';\r\n\r\nexport const triggerChildAnimation = trigger('triggerChildAnimation', [\r\n transition(':enter, :leave', [animate('0s'), query('*', [animateChild()])]),\r\n]);\r\n\r\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\n\r\nexport const verticalCollapseAnimation = trigger('verticalCollapse', [\r\n state('*', style({\r\n height: '*',\r\n })),\r\n state('void', style({\r\n height: '0',\r\n })),\r\n transition('* => void', animate('.3s .3s ease')),\r\n]);\r\n","
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
{{title}}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
","import { trigger, state, style, transition, animate, keyframes } from \"@angular/animations\";\r\nimport { Component } from \"@angular/core\";\r\nimport { Toast } from \"ngx-toastr\";\r\nimport { triggerChildAnimation } from \"./animations/trigger-child.animation\";\r\nimport { verticalCollapseAnimation } from \"./animations/vertical-collapse.animation\";\r\n\r\n@Component({\r\n selector: 'my-cloud-custom-toast',\r\n templateUrl: './custom-toast.component.html',\r\n styleUrls: ['./custom-toast.component.scss'],\r\n animations: [\r\n trigger('slideIn', [\r\n state('*', style({\r\n transform: 'translateY(0) scale(1) rotateY(0)',\r\n opacity: 1,\r\n filter: 'blur(0) saturate(100%)'\r\n })),\r\n state('void', style({\r\n transform: 'translateY(20px) scale(1.1) rotateY(5deg)',\r\n opacity: 0,\r\n filter: 'blur(2px) saturate(50%)'\r\n })),\r\n transition('void => *', animate('.3s ease-in-out')),\r\n ]),\r\n trigger('slideOut', [\r\n state('*', style({\r\n transform: 'translateX(0) scale(1)',\r\n opacity: 1,\r\n })),\r\n state('void', style({\r\n transform: 'translateX(100%) scale(.7)',\r\n opacity: 0,\r\n })),\r\n transition('* => void', animate('.2s ease')),\r\n ]),\r\n verticalCollapseAnimation,\r\n triggerChildAnimation\r\n ],\r\n preserveWhitespaces: false\r\n})\r\nexport class CustomToastComponent extends Toast {\r\n\r\n public get type(): 'success' | 'error' | 'warning' | 'info' {\r\n return (this.options as any).type;\r\n }\r\n\r\n public get isSuccessMessage(): boolean {\r\n return this.type === 'success';\r\n }\r\n\r\n public get isErrorMessage(): boolean {\r\n return this.type === 'error';\r\n }\r\n\r\n public get isWarningMessage(): boolean {\r\n return this.type === 'warning';\r\n }\r\n\r\n public get isInfoMessage(): boolean {\r\n return this.type === 'info';\r\n }\r\n}\r\n","import { BrowserModule } from \"@angular/platform-browser\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { AppComponent } from \"./app.component\";\r\nimport { CoreModule } from \"@app/core.module\";\r\nimport { SharedModule } from \"@shared/shared.module\";\r\nimport { AppRoutingModule } from \"./app-routing.module\";\r\nimport { NgbModule } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { ToastrModule } from \"ngx-toastr\";\r\nimport { MaintenanceGuard } from \"./core/guards/maintenance.guard\";\r\nimport { OriginSsoGuard } from \"@modules/origin-sso/guards/origin-sso.guard\";\r\nimport { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client';\r\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\r\nimport { AppSettingsModule } from \"./app-settings.module\";\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { FaIconLibrary } from '@fortawesome/angular-fontawesome';\r\nimport { far } from '@fortawesome/free-regular-svg-icons';\r\nimport { fas } from '@fortawesome/free-solid-svg-icons';\r\nimport { fab } from '@fortawesome/free-brands-svg-icons';\r\nimport { TelenetIconModule } from \"@shared/telenet-icons/telenet-icon.module\";\r\nimport { TelenetIconLibrary } from \"@shared/telenet-icons\";\r\nimport { telenetIconPack } from \"@shared/telenet-icons/telenet-icons\";\r\nimport { CustomToastComponent } from \"@app/components/custom-toast/custom-toast.component\";\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent\r\n ],\r\n imports: [\r\n AppSettingsModule.forRoot(),\r\n CoreModule,\r\n SharedModule,\r\n AppRoutingModule,\r\n BrowserModule,\r\n BrowserAnimationsModule,\r\n NgbModule,\r\n LoadingBarHttpClientModule,\r\n ToastrModule.forRoot({\r\n timeOut: 10000,\r\n extendedTimeOut: 15000,\r\n toastComponent: CustomToastComponent,\r\n positionClass: \"toast-top-full-width\",\r\n iconClasses: { success: '', error: '', warning: '', info: '' },\r\n closeButton: true,\r\n autoDismiss: true,\r\n enableHtml: true,\r\n preventDuplicates: true,\r\n countDuplicates: true\r\n }),\r\n FontAwesomeModule,\r\n TelenetIconModule\r\n ],\r\n providers: [\r\n MaintenanceGuard,\r\n OriginSsoGuard\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule {\r\n constructor(faIconLibrary: FaIconLibrary, telenetIconLibrary: TelenetIconLibrary) {\r\n faIconLibrary.addIconPacks(fas, far, fab);\r\n telenetIconLibrary.registerIcons(telenetIconPack);\r\n }\r\n}\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n\r\n // disable console.log\r\n window.console.log = () => {};\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n"]}