bitwarden-estensione-browser/src/app/services/services.module.ts

178 lines
8.8 KiB
TypeScript
Raw Normal View History

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';
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';
import { ModalService as ModalServiceAbstraction } from 'jslib-angular/services/modal.service';
2018-06-05 21:02:53 +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
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';
import { EnvironmentService as EnvironmentServiceAbstraction, Urls } from 'jslib-common/abstractions/environment.service';
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';
import { LogService } from 'jslib-common/abstractions/log.service';
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
Dark Theme (#1017) * Stylesheets * Theme Configuration * Options Area * swal2 style * Icon styling * Fix theme not saving * Update English * Update messages.json * dropdown and login logo * btn-link and totp fix * Organisation Styling * Update webauthn-fallback.ts * Fix contrast issues * Add Paypal Container and Loading svg file * Password Generator contrast fix * Dark Mode Fix buttons and foreground * Fix button hover * Fix Styles after rebase * Add hover on nav dropdown-item * Disable Theme Preview * Options Fix for Default Theme Changes * Updated Colour Scheme * Toast fix * Button and Text Styling * Options Update and Messages Fix * Added Search Icon and Fixed Callout styling * Add theme styling to Stripe * Refactor logic for setting color * Reorder logic to avoid race condition * PayPal Loading and Misc Fix * text-state bug fix * Badge Colour Fix * Remove PayPal Tagline The colour cannot be styled so it's not visible on a dark theme * Adding the Styling from #1131 * Update to New Design * Form and Nav restyle * Modal Opacity and Callout * Nav Colours * Missing Borders * Light theme fix * Improved border for listgroup * Change Org Nav Colour * Save theme to localStorage for persistence * Undo change to Wired image * !Important removal and tweaks * Fix regression with navbar * Light theme by default * Refactor to use getEffectiveTheme * Refactor theme constants to use enum * Set theme in index.html before app loads * Use scss selector to set logo image * Export Sass to TS * Update jslib Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
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 () => {
await (storageService as HtmlStorageService).init();
const urls = process.env.URLS as Urls;
urls.base ??= window.location.origin;
environmentService.setUrls(urls, false);
setTimeout(() => notificationsService.init(), 3000);
2018-06-22 03:32:17 +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);
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);
Dark Theme (#1017) * Stylesheets * Theme Configuration * Options Area * swal2 style * Icon styling * Fix theme not saving * Update English * Update messages.json * dropdown and login logo * btn-link and totp fix * Organisation Styling * Update webauthn-fallback.ts * Fix contrast issues * Add Paypal Container and Loading svg file * Password Generator contrast fix * Dark Mode Fix buttons and foreground * Fix button hover * Fix Styles after rebase * Add hover on nav dropdown-item * Disable Theme Preview * Options Fix for Default Theme Changes * Updated Colour Scheme * Toast fix * Button and Text Styling * Options Update and Messages Fix * Added Search Icon and Fixed Callout styling * Add theme styling to Stripe * Refactor logic for setting color * Reorder logic to avoid race condition * PayPal Loading and Misc Fix * text-state bug fix * Badge Colour Fix * Remove PayPal Tagline The colour cannot be styled so it's not visible on a dark theme * Adding the Styling from #1131 * Update to New Design * Form and Nav restyle * Modal Opacity and Callout * Nav Colours * Missing Borders * Light theme fix * Improved border for listgroup * Change Org Nav Colour * Save theme to localStorage for persistence * Undo change to Wired image * !Important removal and tweaks * Fix regression with navbar * Light theme by default * Refactor to use getEffectiveTheme * Refactor theme constants to use enum * Set theme in index.html before app loads * Use scss selector to set logo image * Export Sass to TS * Update jslib Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
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,
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 },
{ 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 {
}