2018-06-05 21:02:53 +02:00
|
|
|
import {
|
|
|
|
APP_INITIALIZER,
|
2021-12-03 03:32:58 +01:00
|
|
|
Injector,
|
2018-06-05 21:02:53 +02:00
|
|
|
NgModule,
|
|
|
|
} from '@angular/core';
|
|
|
|
import { ToasterModule } from 'angular2-toaster';
|
|
|
|
|
2018-06-10 04:40:53 +02:00
|
|
|
import { BroadcasterMessagingService } from '../../services/broadcasterMessaging.service';
|
|
|
|
import { HtmlStorageService } from '../../services/htmlStorage.service';
|
|
|
|
import { I18nService } from '../../services/i18n.service';
|
|
|
|
import { MemoryStorageService } from '../../services/memoryStorage.service';
|
|
|
|
import { WebPlatformUtilsService } from '../../services/webPlatformUtils.service';
|
2018-06-05 21:02:53 +02:00
|
|
|
|
2018-07-07 05:08:10 +02:00
|
|
|
import { EventService } from './event.service';
|
2021-12-03 03:32:58 +01:00
|
|
|
import { ModalService } from './modal.service';
|
2018-07-05 21:27:23 +02:00
|
|
|
import { OrganizationGuardService } from './organization-guard.service';
|
|
|
|
import { OrganizationTypeGuardService } from './organization-type-guard.service';
|
2021-08-25 16:10:17 +02:00
|
|
|
import { PolicyListService } from './policy-list.service';
|
2018-06-10 04:40:53 +02:00
|
|
|
import { RouterService } from './router.service';
|
2018-06-10 04:02:45 +02:00
|
|
|
|
2021-12-03 03:32:58 +01:00
|
|
|
import { JslibServicesModule } from 'jslib-angular/services/jslib-services.module';
|
2021-08-27 14:50:58 +02:00
|
|
|
import { ModalService as ModalServiceAbstraction } from 'jslib-angular/services/modal.service';
|
2018-06-05 21:02:53 +02:00
|
|
|
|
2021-06-07 20:13:58 +02:00
|
|
|
import { AuthService } from 'jslib-common/services/auth.service';
|
|
|
|
import { ConstantsService } from 'jslib-common/services/constants.service';
|
|
|
|
import { ContainerService } from 'jslib-common/services/container.service';
|
|
|
|
import { CryptoService } from 'jslib-common/services/crypto.service';
|
|
|
|
import { EventService as EventLoggingService } from 'jslib-common/services/event.service';
|
|
|
|
import { ImportService } from 'jslib-common/services/import.service';
|
|
|
|
import { VaultTimeoutService } from 'jslib-common/services/vaultTimeout.service';
|
2018-06-05 21:02:53 +02:00
|
|
|
|
2021-06-07 20:13:58 +02:00
|
|
|
import { ApiService as ApiServiceAbstraction } from 'jslib-common/abstractions/api.service';
|
|
|
|
import { AuthService as AuthServiceAbstraction } from 'jslib-common/abstractions/auth.service';
|
|
|
|
import { CipherService as CipherServiceAbstraction } from 'jslib-common/abstractions/cipher.service';
|
|
|
|
import { CollectionService as CollectionServiceAbstraction } from 'jslib-common/abstractions/collection.service';
|
|
|
|
import { CryptoService as CryptoServiceAbstraction } from 'jslib-common/abstractions/crypto.service';
|
|
|
|
import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from 'jslib-common/abstractions/cryptoFunction.service';
|
2021-08-25 20:15:31 +02:00
|
|
|
import { EnvironmentService as EnvironmentServiceAbstraction, Urls } from 'jslib-common/abstractions/environment.service';
|
2021-06-07 20:13:58 +02:00
|
|
|
import { EventService as EventLoggingServiceAbstraction } from 'jslib-common/abstractions/event.service';
|
|
|
|
import { FolderService as FolderServiceAbstraction } from 'jslib-common/abstractions/folder.service';
|
|
|
|
import { I18nService as I18nServiceAbstraction } from 'jslib-common/abstractions/i18n.service';
|
|
|
|
import { ImportService as ImportServiceAbstraction } from 'jslib-common/abstractions/import.service';
|
2021-07-23 21:30:04 +02:00
|
|
|
import { LogService } from 'jslib-common/abstractions/log.service';
|
2021-06-07 20:13:58 +02:00
|
|
|
import { MessagingService as MessagingServiceAbstraction } from 'jslib-common/abstractions/messaging.service';
|
|
|
|
import { NotificationsService as NotificationsServiceAbstraction } from 'jslib-common/abstractions/notifications.service';
|
|
|
|
import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from 'jslib-common/abstractions/platformUtils.service';
|
|
|
|
import { StateService as StateServiceAbstraction } from 'jslib-common/abstractions/state.service';
|
|
|
|
import { StorageService as StorageServiceAbstraction } from 'jslib-common/abstractions/storage.service';
|
|
|
|
import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from 'jslib-common/abstractions/vaultTimeout.service';
|
2018-06-05 21:02:53 +02:00
|
|
|
|
2021-09-30 00:06:20 +02:00
|
|
|
import { ThemeType } from 'jslib-common/enums/themeType';
|
|
|
|
|
2021-12-03 03:32:58 +01:00
|
|
|
export function initFactory(window: Window, storageService: StorageServiceAbstraction,
|
|
|
|
environmentService: EnvironmentServiceAbstraction, notificationsService: NotificationsServiceAbstraction,
|
|
|
|
vaultTimeoutService: VaultTimeoutService, i18nService: I18nService, eventLoggingService: EventLoggingService,
|
|
|
|
authService: AuthService, stateService: StateServiceAbstraction,
|
|
|
|
platformUtilsService: PlatformUtilsServiceAbstraction, cryptoService: CryptoServiceAbstraction): Function {
|
2018-06-05 21:02:53 +02:00
|
|
|
return async () => {
|
2018-07-27 21:08:59 +02:00
|
|
|
await (storageService as HtmlStorageService).init();
|
2021-04-09 09:57:25 +02:00
|
|
|
|
2021-08-25 20:15:31 +02:00
|
|
|
const urls = process.env.URLS as Urls;
|
|
|
|
urls.base ??= window.location.origin;
|
|
|
|
environmentService.setUrls(urls, false);
|
2021-04-09 09:57:25 +02:00
|
|
|
|
2021-07-23 20:47:43 +02:00
|
|
|
setTimeout(() => notificationsService.init(), 3000);
|
2018-06-22 03:32:17 +02:00
|
|
|
|
2020-03-30 16:59:47 +02:00
|
|
|
vaultTimeoutService.init(true);
|
2018-06-05 21:02:53 +02:00
|
|
|
const locale = await storageService.get<string>(ConstantsService.localeKey);
|
|
|
|
await i18nService.init(locale);
|
2019-07-12 04:03:12 +02:00
|
|
|
eventLoggingService.init(true);
|
2018-10-04 17:58:19 +02:00
|
|
|
authService.init();
|
2018-06-05 21:02:53 +02:00
|
|
|
const htmlEl = window.document.documentElement;
|
|
|
|
htmlEl.classList.add('locale_' + i18nService.translationLocale);
|
2021-09-30 00:06:20 +02:00
|
|
|
|
|
|
|
// Initial theme is set in index.html which must be updated if there are any changes to theming logic
|
|
|
|
platformUtilsService.onDefaultSystemThemeChange(async sysTheme => {
|
|
|
|
const bwTheme = await storageService.get<ThemeType>(ConstantsService.themeKey);
|
|
|
|
if (bwTheme === ThemeType.System) {
|
|
|
|
htmlEl.classList.remove('theme_' + ThemeType.Light, 'theme_' + ThemeType.Dark);
|
|
|
|
htmlEl.classList.add('theme_' + sysTheme);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2018-06-05 21:02:53 +02:00
|
|
|
stateService.save(ConstantsService.disableFaviconKey,
|
|
|
|
await storageService.get<boolean>(ConstantsService.disableFaviconKey));
|
2018-07-31 06:02:09 +02:00
|
|
|
stateService.save('enableGravatars', await storageService.get<boolean>('enableGravatars'));
|
2021-12-03 03:32:58 +01:00
|
|
|
|
|
|
|
const containerService = new ContainerService(cryptoService);
|
|
|
|
containerService.attachToWindow(window);
|
2018-06-05 21:02:53 +02:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
@NgModule({
|
|
|
|
imports: [
|
|
|
|
ToasterModule,
|
2021-12-03 03:32:58 +01:00
|
|
|
JslibServicesModule,
|
2018-06-05 21:02:53 +02:00
|
|
|
],
|
|
|
|
declarations: [],
|
|
|
|
providers: [
|
2021-12-03 03:32:58 +01:00
|
|
|
{
|
|
|
|
provide: APP_INITIALIZER,
|
|
|
|
useFactory: initFactory,
|
|
|
|
deps: [
|
|
|
|
'WINDOW',
|
|
|
|
StorageServiceAbstraction,
|
|
|
|
EnvironmentServiceAbstraction,
|
|
|
|
NotificationsServiceAbstraction,
|
|
|
|
VaultTimeoutServiceAbstraction,
|
|
|
|
I18nServiceAbstraction,
|
|
|
|
EventLoggingServiceAbstraction,
|
|
|
|
AuthServiceAbstraction,
|
|
|
|
StateServiceAbstraction,
|
|
|
|
PlatformUtilsServiceAbstraction,
|
|
|
|
CryptoServiceAbstraction,
|
|
|
|
],
|
|
|
|
multi: true,
|
|
|
|
},
|
2018-07-05 21:27:23 +02:00
|
|
|
OrganizationGuardService,
|
|
|
|
OrganizationTypeGuardService,
|
2018-06-10 04:40:53 +02:00
|
|
|
RouterService,
|
2018-07-07 05:08:10 +02:00
|
|
|
EventService,
|
2021-08-25 16:10:17 +02:00
|
|
|
PolicyListService,
|
2021-12-03 03:32:58 +01:00
|
|
|
{
|
|
|
|
provide: I18nServiceAbstraction,
|
|
|
|
useFactory: (window: Window) => new I18nService(window.navigator.language, 'locales'),
|
|
|
|
deps: [ 'WINDOW' ],
|
|
|
|
},
|
|
|
|
{ provide: StorageServiceAbstraction, useClass: HtmlStorageService },
|
|
|
|
{ provide: 'SECURE_STORAGE', useClass: MemoryStorageService },
|
|
|
|
{
|
|
|
|
provide: PlatformUtilsServiceAbstraction,
|
|
|
|
useFactory: (i18nService: I18nServiceAbstraction, messagingService: MessagingServiceAbstraction,
|
|
|
|
logService: LogService, injector: Injector) => new WebPlatformUtilsService(i18nService,
|
|
|
|
messagingService, logService, () => injector.get(StorageServiceAbstraction)),
|
|
|
|
deps: [
|
|
|
|
I18nServiceAbstraction,
|
|
|
|
MessagingServiceAbstraction,
|
|
|
|
LogService,
|
|
|
|
Injector, // TODO: Get rid of circular dependency!
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{ provide: MessagingServiceAbstraction, useClass: BroadcasterMessagingService },
|
2021-08-27 14:50:58 +02:00
|
|
|
{ provide: ModalServiceAbstraction, useClass: ModalService },
|
2018-06-05 21:02:53 +02:00
|
|
|
{
|
2021-12-03 03:32:58 +01:00
|
|
|
provide: ImportServiceAbstraction,
|
|
|
|
useClass: ImportService,
|
|
|
|
deps: [
|
|
|
|
CipherServiceAbstraction,
|
|
|
|
FolderServiceAbstraction,
|
|
|
|
ApiServiceAbstraction,
|
|
|
|
I18nServiceAbstraction,
|
|
|
|
CollectionServiceAbstraction,
|
|
|
|
PlatformUtilsServiceAbstraction,
|
|
|
|
CryptoServiceAbstraction,
|
|
|
|
],
|
2018-06-05 21:02:53 +02:00
|
|
|
},
|
2018-07-24 03:47:08 +02:00
|
|
|
{
|
2021-12-03 03:32:58 +01:00
|
|
|
provide: CryptoServiceAbstraction,
|
|
|
|
useFactory: (storageService: StorageServiceAbstraction, secureStorageService: StorageServiceAbstraction,
|
|
|
|
cryptoFunctionService: CryptoFunctionServiceAbstraction,
|
|
|
|
platformUtilsService: PlatformUtilsServiceAbstraction, logService: LogService) => {
|
|
|
|
const storageImplementation = platformUtilsService.isDev() ? storageService : secureStorageService;
|
|
|
|
return new CryptoService(storageService, storageImplementation, cryptoFunctionService,
|
|
|
|
platformUtilsService, logService);
|
|
|
|
},
|
|
|
|
deps: [
|
|
|
|
StorageServiceAbstraction,
|
|
|
|
'SECURE_STORAGE',
|
|
|
|
CryptoFunctionServiceAbstraction,
|
|
|
|
PlatformUtilsServiceAbstraction,
|
|
|
|
LogService,
|
|
|
|
],
|
2018-07-24 03:47:08 +02:00
|
|
|
},
|
2018-06-05 21:02:53 +02:00
|
|
|
],
|
|
|
|
})
|
|
|
|
export class ServicesModule {
|
|
|
|
}
|