From acc3473731b3d70905611178e5258a269af83a97 Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Mon, 28 Mar 2022 13:07:56 +1000 Subject: [PATCH] Use injectable services --- src/app/services/injectionTokens.ts | 5 ++ src/app/services/services.module.ts | 86 ++++++-------------------- src/services/auth.service.ts | 3 + src/services/state.service.ts | 12 +++- src/services/stateMigration.service.ts | 3 + src/services/sync.service.ts | 3 + 6 files changed, 42 insertions(+), 70 deletions(-) create mode 100644 src/app/services/injectionTokens.ts diff --git a/src/app/services/injectionTokens.ts b/src/app/services/injectionTokens.ts new file mode 100644 index 00000000..7ee5f405 --- /dev/null +++ b/src/app/services/injectionTokens.ts @@ -0,0 +1,5 @@ +import { InjectionToken } from "@angular/core"; + +export const USE_SECURE_STORAGE_FOR_SECRETS = new InjectionToken( + "USE_SECURE_STORAGE_FOR_SECRETS" +); diff --git a/src/app/services/services.module.ts b/src/app/services/services.module.ts index db2d4169..2de26b60 100644 --- a/src/app/services/services.module.ts +++ b/src/app/services/services.module.ts @@ -9,7 +9,12 @@ import { CryptoService as CryptoServiceAbstraction } from "jslib-common/abstract import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "jslib-common/abstractions/cryptoFunction.service"; import { EnvironmentService as EnvironmentServiceAbstraction } from "jslib-common/abstractions/environment.service"; import { I18nService as I18nServiceAbstraction } from "jslib-common/abstractions/i18n.service"; -import { SECURE_STORAGE, WINDOW_TOKEN } from "jslib-common/abstractions/injectionTokens"; +import { + CLIENT_TYPE, + SECURE_STORAGE, + STATE_FACTORY, + WINDOW_TOKEN, +} from "jslib-common/abstractions/injectionTokens"; import { KeyConnectorService as KeyConnectorServiceAbstraction } from "jslib-common/abstractions/keyConnector.service"; import { LogService as LogServiceAbstraction } from "jslib-common/abstractions/log.service"; import { MessagingService as MessagingServiceAbstraction } from "jslib-common/abstractions/messaging.service"; @@ -41,6 +46,7 @@ import { StateMigrationService } from "../../services/stateMigration.service"; import { SyncService } from "../../services/sync.service"; import { AuthGuardService } from "./auth-guard.service"; +import { USE_SECURE_STORAGE_FOR_SECRETS } from "./injectionTokens"; import { LaunchGuardService } from "./launch-guard.service"; function refreshTokenCallback(injector: Injector) { @@ -110,24 +116,13 @@ export function initFactory( { provide: MessagingServiceAbstraction, useClass: ElectronRendererMessagingService, - deps: [BroadcasterServiceAbstraction], }, { provide: StorageServiceAbstraction, useClass: ElectronRendererStorageService }, { provide: SECURE_STORAGE, useClass: ElectronRendererSecureStorageService }, + { provide: CLIENT_TYPE, useValue: ClientType.DirectoryConnector }, { provide: PlatformUtilsServiceAbstraction, - useFactory: ( - i18nService: I18nServiceAbstraction, - messagingService: MessagingServiceAbstraction, - stateService: StateServiceAbstraction - ) => - new ElectronPlatformUtilsService( - i18nService, - messagingService, - ClientType.DirectoryConnector, - stateService - ), - deps: [I18nServiceAbstraction, MessagingServiceAbstraction, StateServiceAbstraction], + useClass: ElectronPlatformUtilsService, }, { provide: CryptoFunctionServiceAbstraction, useClass: NodeCryptoFunctionService, deps: [] }, { @@ -162,71 +157,28 @@ export function initFactory( { provide: AuthServiceAbstraction, useClass: AuthService, - deps: [ - CryptoServiceAbstraction, - ApiServiceAbstraction, - TokenServiceAbstraction, - AppIdServiceAbstraction, - PlatformUtilsServiceAbstraction, - MessagingServiceAbstraction, - LogServiceAbstraction, - KeyConnectorServiceAbstraction, - EnvironmentServiceAbstraction, - StateServiceAbstraction, - TwoFactorServiceAbstraction, - I18nServiceAbstraction, - ], }, { provide: SyncService, useClass: SyncService, - deps: [ - LogServiceAbstraction, - CryptoFunctionServiceAbstraction, - ApiServiceAbstraction, - MessagingServiceAbstraction, - I18nServiceAbstraction, - EnvironmentServiceAbstraction, - StateServiceAbstraction, - ], }, AuthGuardService, LaunchGuardService, + { + provide: STATE_FACTORY, + useFactory: () => new StateFactory(GlobalState, Account), + }, + { + provide: USE_SECURE_STORAGE_FOR_SECRETS, + useValue: true, + }, { provide: StateMigrationServiceAbstraction, - useFactory: ( - storageService: StorageServiceAbstraction, - secureStorageService: StorageServiceAbstraction - ) => - new StateMigrationService( - storageService, - secureStorageService, - new StateFactory(GlobalState, Account) - ), - deps: [StorageServiceAbstraction, SECURE_STORAGE], + useClass: StateMigrationService, }, { provide: StateServiceAbstraction, - useFactory: ( - storageService: StorageServiceAbstraction, - secureStorageService: StorageServiceAbstraction, - logService: LogServiceAbstraction, - stateMigrationService: StateMigrationServiceAbstraction - ) => - new StateService( - storageService, - secureStorageService, - logService, - stateMigrationService, - true, - new StateFactory(GlobalState, Account) - ), - deps: [ - StorageServiceAbstraction, - SECURE_STORAGE, - LogServiceAbstraction, - StateMigrationServiceAbstraction, - ], + useClass: StateService, }, { provide: TwoFactorServiceAbstraction, diff --git a/src/services/auth.service.ts b/src/services/auth.service.ts index 54f81b52..f25ca00a 100644 --- a/src/services/auth.service.ts +++ b/src/services/auth.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from "@angular/core"; + import { ApiService } from "jslib-common/abstractions/api.service"; import { AppIdService } from "jslib-common/abstractions/appId.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service"; @@ -16,6 +18,7 @@ import { AuthService as AuthServiceBase } from "jslib-common/services/auth.servi import { StateService } from "../abstractions/state.service"; import { OrganizationLogInStrategy } from "../misc/logInStrategies/organizationLogIn.strategy"; +@Injectable() export class AuthService extends AuthServiceBase { constructor( cryptoService: CryptoService, diff --git a/src/services/state.service.ts b/src/services/state.service.ts index 35452508..f84ff2fd 100644 --- a/src/services/state.service.ts +++ b/src/services/state.service.ts @@ -1,3 +1,6 @@ +import { Inject, Injectable } from "@angular/core"; + +import { SECURE_STORAGE, STATE_FACTORY } from "jslib-common/abstractions/injectionTokens"; import { LogService } from "jslib-common/abstractions/log.service"; import { StateMigrationService } from "jslib-common/abstractions/stateMigration.service"; import { StorageService } from "jslib-common/abstractions/storage.service"; @@ -7,6 +10,7 @@ import { StorageOptions } from "jslib-common/models/domain/storageOptions"; import { StateService as BaseStateService } from "jslib-common/services/state.service"; import { StateService as StateServiceAbstraction } from "src/abstractions/state.service"; +import { USE_SECURE_STORAGE_FOR_SECRETS } from "src/app/services/injectionTokens"; import { DirectoryType } from "src/enums/directoryType"; import { IConfiguration } from "src/models/IConfiguration"; import { Account } from "src/models/account"; @@ -17,6 +21,7 @@ import { OktaConfiguration } from "src/models/oktaConfiguration"; import { OneLoginConfiguration } from "src/models/oneLoginConfiguration"; import { SyncConfiguration } from "src/models/syncConfiguration"; + const SecureStorageKeys = { ldap: "ldapPassword", gsuite: "gsuitePrivateKey", @@ -38,17 +43,18 @@ const keys = { const StoredSecurely = "[STORED SECURELY]"; +@Injectable() export class StateService extends BaseStateService implements StateServiceAbstraction { constructor( protected storageService: StorageService, - protected secureStorageService: StorageService, + @Inject(SECURE_STORAGE) protected secureStorageService: StorageService, protected logService: LogService, protected stateMigrationService: StateMigrationService, - private useSecureStorageForSecrets = true, - protected stateFactory: StateFactory + @Inject(USE_SECURE_STORAGE_FOR_SECRETS) private useSecureStorageForSecrets = true, + @Inject(STATE_FACTORY) protected stateFactory: StateFactory ) { super(storageService, secureStorageService, logService, stateMigrationService, stateFactory); } diff --git a/src/services/stateMigration.service.ts b/src/services/stateMigration.service.ts index 57ace6e6..3808c94f 100644 --- a/src/services/stateMigration.service.ts +++ b/src/services/stateMigration.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from "@angular/core"; + import { StateVersion } from "jslib-common/enums/stateVersion"; import { StateMigrationService as BaseStateMigrationService } from "jslib-common/services/stateMigration.service"; @@ -49,6 +51,7 @@ const ClientKeys: { [key: string]: any } = { clientSecret: "apikey_clientSecret", }; +@Injectable() export class StateMigrationService extends BaseStateMigrationService { async migrate(): Promise { let currentStateVersion = await this.getCurrentStateVersion(); diff --git a/src/services/sync.service.ts b/src/services/sync.service.ts index e9128cde..b3685d8f 100644 --- a/src/services/sync.service.ts +++ b/src/services/sync.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from "@angular/core"; + import { ApiService } from "jslib-common/abstractions/api.service"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; import { EnvironmentService } from "jslib-common/abstractions/environment.service"; @@ -20,6 +22,7 @@ import { LdapDirectoryService } from "./ldap-directory.service"; import { OktaDirectoryService } from "./okta-directory.service"; import { OneLoginDirectoryService } from "./onelogin-directory.service"; +@Injectable() export class SyncService { private dirType: DirectoryType;