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

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

277 lines
12 KiB
TypeScript
Raw Normal View History

2018-04-04 04:14:54 +02:00
import { APP_INITIALIZER, LOCALE_ID, NgModule } from "@angular/core";
2021-12-21 15:43:35 +01:00
import { DebounceNavigationService } from "./debounceNavigationService";
2018-04-10 23:14:10 +02:00
import { LaunchGuardService } from "./launch-guard.service";
import { LockGuardService } from "./lock-guard.service";
import { PasswordRepromptService } from "./password-reprompt.service";
import { UnauthGuardService } from "./unauth-guard.service";
2021-12-21 15:43:35 +01:00
2021-12-06 12:21:07 +01:00
import { JslibServicesModule } from "jslib-angular/services/jslib-services.module";
import { LockGuardService as BaseLockGuardService } from "jslib-angular/services/lock-guard.service";
import { UnauthGuardService as BaseUnauthGuardService } from "jslib-angular/services/unauth-guard.service";
2021-12-21 15:43:35 +01:00
2018-04-04 14:27:31 +02:00
import { BrowserApi } from "../../browser/browserApi";
2021-12-21 15:43:35 +01:00
import { ApiService } from "jslib-common/abstractions/api.service";
import { AppIdService } from "jslib-common/abstractions/appId.service";
import { AuditService } from "jslib-common/abstractions/audit.service";
import { AuthService as AuthServiceAbstraction } from "jslib-common/abstractions/auth.service";
import { CipherService } from "jslib-common/abstractions/cipher.service";
import { CollectionService } from "jslib-common/abstractions/collection.service";
import { CryptoService } from "jslib-common/abstractions/crypto.service";
import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service";
import { EnvironmentService } from "jslib-common/abstractions/environment.service";
import { EventService } from "jslib-common/abstractions/event.service";
import { ExportService } from "jslib-common/abstractions/export.service";
import { FileUploadService } from "jslib-common/abstractions/fileUpload.service";
import { FolderService } from "jslib-common/abstractions/folder.service";
import { I18nService } from "jslib-common/abstractions/i18n.service";
import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service";
import { LogService as LogServiceAbstraction } from "jslib-common/abstractions/log.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { NotificationsService } from "jslib-common/abstractions/notifications.service";
import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service";
import { PasswordRepromptService as PasswordRepromptServiceAbstraction } from "jslib-common/abstractions/passwordReprompt.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { PolicyService } from "jslib-common/abstractions/policy.service";
import { SearchService as SearchServiceAbstraction } from "jslib-common/abstractions/search.service";
import { SendService } from "jslib-common/abstractions/send.service";
import { SettingsService } from "jslib-common/abstractions/settings.service";
import { StateService as StateServiceAbstraction } from "jslib-common/abstractions/state.service";
import { StorageService } from "jslib-common/abstractions/storage.service";
import { SyncService } from "jslib-common/abstractions/sync.service";
import { TokenService } from "jslib-common/abstractions/token.service";
import { TotpService } from "jslib-common/abstractions/totp.service";
import { UserService } from "jslib-common/abstractions/user.service";
import { UserVerificationService } from "jslib-common/abstractions/userVerification.service";
import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service";
2021-12-21 15:43:35 +01:00
2018-04-04 14:27:31 +02:00
import { AutofillService } from "../../services/abstractions/autofill.service";
import BrowserMessagingService from "../../services/browserMessaging.service";
2021-12-21 15:43:35 +01:00
import { AuthService } from "jslib-common/services/auth.service";
import { ConsoleLogService } from "jslib-common/services/consoleLog.service";
import { ConstantsService } from "jslib-common/services/constants.service";
import { SearchService } from "jslib-common/services/search.service";
import { StateService } from "jslib-common/services/state.service";
2021-12-21 15:43:35 +01:00
import { PopupSearchService } from "./popup-search.service";
import { PopupUtilsService } from "./popup-utils.service";
2021-12-21 15:43:35 +01:00
import { ThemeType } from "jslib-common/enums/themeType";
2018-04-04 14:27:31 +02:00
function getBgService<T>(service: string) {
return (): T => {
const page = BrowserApi.getBackgroundPage();
return page ? (page.bitwardenMain[service] as T) : null;
};
}
const isPrivateMode = BrowserApi.getBackgroundPage() == null;
2021-12-06 12:21:07 +01:00
export function initFactory(
platformUtilsService: PlatformUtilsService,
i18nService: I18nService,
storageService: StorageService,
popupUtilsService: PopupUtilsService,
stateService: StateServiceAbstraction,
logService: LogServiceAbstraction
): Function {
2018-04-04 04:14:54 +02:00
return async () => {
2018-04-10 04:25:03 +02:00
if (!popupUtilsService.inPopup(window)) {
window.document.body.classList.add("body-full");
} else if (window.screen.availHeight < 600) {
window.document.body.classList.add("body-xs");
} else if (window.screen.availHeight <= 800) {
window.document.body.classList.add("body-sm");
2018-04-06 21:52:53 +02:00
}
2021-12-21 15:43:35 +01:00
if (!isPrivateMode) {
await stateService.save(
ConstantsService.disableFaviconKey,
2018-04-14 04:08:24 +02:00
await storageService.get<boolean>(ConstantsService.disableFaviconKey)
2021-12-21 15:43:35 +01:00
);
2018-04-06 21:52:53 +02:00
await stateService.save(
ConstantsService.disableBadgeCounterKey,
await storageService.get<boolean>(ConstantsService.disableBadgeCounterKey)
);
2021-12-21 15:43:35 +01:00
const htmlEl = window.document.documentElement;
const theme = await platformUtilsService.getEffectiveTheme();
htmlEl.classList.add("theme_" + theme);
platformUtilsService.onDefaultSystemThemeChange(async (sysTheme) => {
const bwTheme = await storageService.get<ThemeType>(ConstantsService.themeKey);
if (bwTheme == null || bwTheme === ThemeType.System) {
htmlEl.classList.remove("theme_" + ThemeType.Light, "theme_" + ThemeType.Dark);
htmlEl.classList.add("theme_" + sysTheme);
2018-04-13 20:36:25 +02:00
}
2021-12-21 15:43:35 +01:00
});
htmlEl.classList.add("locale_" + i18nService.translationLocale);
2021-12-21 15:43:35 +01:00
// Workaround for slow performance on external monitors on Chrome + MacOS
// See: https://bugs.chromium.org/p/chromium/issues/detail?id=971701#c64
2021-12-21 15:43:35 +01:00
if (
platformUtilsService.isChrome() &&
navigator.platform.indexOf("Mac") > -1 &&
popupUtilsService.inPopup(window) &&
(window.screenLeft < 0 ||
window.screenTop < 0 ||
window.screenLeft > window.screen.width ||
window.screenTop > window.screen.height)
2021-12-21 15:43:35 +01:00
) {
htmlEl.classList.add("force_redraw");
logService.info("Force redraw is on");
2021-12-21 15:43:35 +01:00
}
}
2018-04-04 04:14:54 +02:00
};
}
@NgModule({
2021-12-06 12:21:07 +01:00
imports: [JslibServicesModule],
2018-04-04 04:14:54 +02:00
declarations: [],
providers: [
2021-12-06 12:21:07 +01:00
{
provide: LOCALE_ID,
useFactory: () =>
isPrivateMode ? null : getBgService<I18nService>("i18nService")().translationLocale,
deps: [],
},
{
provide: APP_INITIALIZER,
useFactory: initFactory,
deps: [
PlatformUtilsService,
I18nService,
StorageService,
PopupUtilsService,
2021-12-06 12:21:07 +01:00
StateServiceAbstraction,
LogServiceAbstraction,
2021-12-21 15:43:35 +01:00
],
2021-12-06 12:21:07 +01:00
multi: true,
2021-12-21 15:43:35 +01:00
},
LaunchGuardService,
2021-12-06 12:21:07 +01:00
{ provide: BaseLockGuardService, useClass: LockGuardService },
{ provide: BaseUnauthGuardService, useClass: UnauthGuardService },
DebounceNavigationService,
PopupUtilsService,
2021-12-06 12:21:07 +01:00
{ provide: MessagingService, useClass: BrowserMessagingService },
{
provide: AuthServiceAbstraction,
useFactory: getBgService<AuthService>("authService"),
deps: [],
},
2021-12-06 12:21:07 +01:00
{ provide: StateServiceAbstraction, useClass: StateService },
{
provide: SearchServiceAbstraction,
useFactory: (
cipherService: CipherService,
logService: ConsoleLogService,
i18nService: I18nService
) => {
return isPrivateMode
? null
: new PopupSearchService(
getBgService<SearchService>("searchService")(),
cipherService,
logService,
i18nService
);
},
deps: [CipherService, LogServiceAbstraction, I18nService],
},
2018-04-04 14:27:31 +02:00
{ provide: AuditService, useFactory: getBgService<AuditService>("auditService"), deps: [] },
{
provide: FileUploadService,
useFactory: getBgService<FileUploadService>("fileUploadService"),
deps: [],
},
2018-04-04 14:27:31 +02:00
{ provide: CipherService, useFactory: getBgService<CipherService>("cipherService"), deps: [] },
{
provide: CryptoFunctionService,
useFactory: getBgService<CryptoFunctionService>("cryptoFunctionService"),
deps: [],
},
2018-04-04 14:27:31 +02:00
{ provide: FolderService, useFactory: getBgService<FolderService>("folderService"), deps: [] },
{
provide: CollectionService,
useFactory: getBgService<CollectionService>("collectionService"),
deps: [],
},
{
provide: LogServiceAbstraction,
useFactory: getBgService<ConsoleLogService>("logService"),
2018-04-04 14:27:31 +02:00
deps: [],
},
{
provide: EnvironmentService,
useFactory: getBgService<EnvironmentService>("environmentService"),
2021-12-21 15:43:35 +01:00
deps: [],
},
2018-04-04 14:27:31 +02:00
{ provide: TotpService, useFactory: getBgService<TotpService>("totpService"), deps: [] },
{ provide: TokenService, useFactory: getBgService<TokenService>("tokenService"), deps: [] },
2018-04-11 20:52:49 +02:00
{ provide: I18nService, useFactory: getBgService<I18nService>("i18nService"), deps: [] },
2018-04-04 14:27:31 +02:00
{ provide: CryptoService, useFactory: getBgService<CryptoService>("cryptoService"), deps: [] },
{ provide: EventService, useFactory: getBgService<EventService>("eventService"), deps: [] },
{ provide: PolicyService, useFactory: getBgService<PolicyService>("policyService"), deps: [] },
2018-04-04 14:27:31 +02:00
{
provide: PlatformUtilsService,
useFactory: getBgService<PlatformUtilsService>("platformUtilsService"),
2018-04-11 05:49:46 +02:00
deps: [],
2018-04-04 14:27:31 +02:00
},
{
provide: PasswordGenerationService,
useFactory: getBgService<PasswordGenerationService>("passwordGenerationService"),
2018-04-11 05:49:46 +02:00
deps: [],
2018-04-04 14:27:31 +02:00
},
{ provide: ApiService, useFactory: getBgService<ApiService>("apiService"), deps: [] },
{ provide: SyncService, useFactory: getBgService<SyncService>("syncService"), deps: [] },
{ provide: UserService, useFactory: getBgService<UserService>("userService"), deps: [] },
{
provide: SettingsService,
useFactory: getBgService<SettingsService>("settingsService"),
deps: [],
},
{
provide: StorageService,
useFactory: getBgService<StorageService>("storageService"),
2021-12-21 15:43:35 +01:00
deps: [],
},
2018-04-04 14:27:31 +02:00
{ provide: AppIdService, useFactory: getBgService<AppIdService>("appIdService"), deps: [] },
{
provide: AutofillService,
useFactory: getBgService<AutofillService>("autofillService"),
deps: [],
},
2018-08-13 17:53:16 +02:00
{ provide: ExportService, useFactory: getBgService<ExportService>("exportService"), deps: [] },
{ provide: SendService, useFactory: getBgService<SendService>("sendService"), deps: [] },
{
provide: KeyConnectorService,
useFactory: getBgService<KeyConnectorService>("keyConnectorService"),
deps: [],
},
{
provide: UserVerificationService,
useFactory: getBgService<UserVerificationService>("userVerificationService"),
deps: [],
},
{
provide: VaultTimeoutService,
useFactory: getBgService<VaultTimeoutService>("vaultTimeoutService"),
deps: [],
},
2018-08-20 23:40:39 +02:00
{
provide: NotificationsService,
useFactory: getBgService<NotificationsService>("notificationsService"),
deps: [],
},
2021-12-06 12:21:07 +01:00
{
provide: LogServiceAbstraction,
useFactory: getBgService<ConsoleLogService>("logService"),
deps: [],
},
{ provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService },
2018-04-04 04:14:54 +02:00
],
})
export class ServicesModule {}