1
0
mirror of https://github.com/bitwarden/directory-connector synced 2025-12-05 23:53:21 +00:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Thomas Rittson
acc3473731 Use injectable services 2022-03-28 13:07:56 +10:00
Thomas Rittson
c80805ded6 Basic changes to build 2022-03-28 09:21:20 +10:00
7 changed files with 46 additions and 65 deletions

View File

@@ -0,0 +1,5 @@
import { InjectionToken } from "@angular/core";
export const USE_SECURE_STORAGE_FOR_SECRETS = new InjectionToken<boolean>(
"USE_SECURE_STORAGE_FOR_SECRETS"
);

View File

@@ -9,6 +9,12 @@ import { CryptoService as CryptoServiceAbstraction } from "jslib-common/abstract
import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "jslib-common/abstractions/cryptoFunction.service"; import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "jslib-common/abstractions/cryptoFunction.service";
import { EnvironmentService as EnvironmentServiceAbstraction } from "jslib-common/abstractions/environment.service"; import { EnvironmentService as EnvironmentServiceAbstraction } from "jslib-common/abstractions/environment.service";
import { I18nService as I18nServiceAbstraction } from "jslib-common/abstractions/i18n.service"; import { I18nService as I18nServiceAbstraction } from "jslib-common/abstractions/i18n.service";
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 { KeyConnectorService as KeyConnectorServiceAbstraction } from "jslib-common/abstractions/keyConnector.service";
import { LogService as LogServiceAbstraction } from "jslib-common/abstractions/log.service"; import { LogService as LogServiceAbstraction } from "jslib-common/abstractions/log.service";
import { MessagingService as MessagingServiceAbstraction } from "jslib-common/abstractions/messaging.service"; import { MessagingService as MessagingServiceAbstraction } from "jslib-common/abstractions/messaging.service";
@@ -17,6 +23,7 @@ import { StateMigrationService as StateMigrationServiceAbstraction } from "jslib
import { StorageService as StorageServiceAbstraction } from "jslib-common/abstractions/storage.service"; import { StorageService as StorageServiceAbstraction } from "jslib-common/abstractions/storage.service";
import { TokenService as TokenServiceAbstraction } from "jslib-common/abstractions/token.service"; import { TokenService as TokenServiceAbstraction } from "jslib-common/abstractions/token.service";
import { TwoFactorService as TwoFactorServiceAbstraction } from "jslib-common/abstractions/twoFactor.service"; import { TwoFactorService as TwoFactorServiceAbstraction } from "jslib-common/abstractions/twoFactor.service";
import { ClientType } from "jslib-common/enums/clientType";
import { StateFactory } from "jslib-common/factories/stateFactory"; import { StateFactory } from "jslib-common/factories/stateFactory";
import { GlobalState } from "jslib-common/models/domain/globalState"; import { GlobalState } from "jslib-common/models/domain/globalState";
import { ContainerService } from "jslib-common/services/container.service"; import { ContainerService } from "jslib-common/services/container.service";
@@ -39,6 +46,7 @@ import { StateMigrationService } from "../../services/stateMigration.service";
import { SyncService } from "../../services/sync.service"; import { SyncService } from "../../services/sync.service";
import { AuthGuardService } from "./auth-guard.service"; import { AuthGuardService } from "./auth-guard.service";
import { USE_SECURE_STORAGE_FOR_SECRETS } from "./injectionTokens";
import { LaunchGuardService } from "./launch-guard.service"; import { LaunchGuardService } from "./launch-guard.service";
function refreshTokenCallback(injector: Injector) { function refreshTokenCallback(injector: Injector) {
@@ -103,23 +111,18 @@ export function initFactory(
{ {
provide: I18nServiceAbstraction, provide: I18nServiceAbstraction,
useFactory: (window: Window) => new I18nService(window.navigator.language, "./locales"), useFactory: (window: Window) => new I18nService(window.navigator.language, "./locales"),
deps: ["WINDOW"], deps: [WINDOW_TOKEN],
}, },
{ {
provide: MessagingServiceAbstraction, provide: MessagingServiceAbstraction,
useClass: ElectronRendererMessagingService, useClass: ElectronRendererMessagingService,
deps: [BroadcasterServiceAbstraction],
}, },
{ provide: StorageServiceAbstraction, useClass: ElectronRendererStorageService }, { provide: StorageServiceAbstraction, useClass: ElectronRendererStorageService },
{ provide: "SECURE_STORAGE", useClass: ElectronRendererSecureStorageService }, { provide: SECURE_STORAGE, useClass: ElectronRendererSecureStorageService },
{ provide: CLIENT_TYPE, useValue: ClientType.DirectoryConnector },
{ {
provide: PlatformUtilsServiceAbstraction, provide: PlatformUtilsServiceAbstraction,
useFactory: ( useClass: ElectronPlatformUtilsService,
i18nService: I18nServiceAbstraction,
messagingService: MessagingServiceAbstraction,
stateService: StateServiceAbstraction
) => new ElectronPlatformUtilsService(i18nService, messagingService, false, stateService),
deps: [I18nServiceAbstraction, MessagingServiceAbstraction, StateServiceAbstraction],
}, },
{ provide: CryptoFunctionServiceAbstraction, useClass: NodeCryptoFunctionService, deps: [] }, { provide: CryptoFunctionServiceAbstraction, useClass: NodeCryptoFunctionService, deps: [] },
{ {
@@ -154,71 +157,28 @@ export function initFactory(
{ {
provide: AuthServiceAbstraction, provide: AuthServiceAbstraction,
useClass: AuthService, useClass: AuthService,
deps: [
CryptoServiceAbstraction,
ApiServiceAbstraction,
TokenServiceAbstraction,
AppIdServiceAbstraction,
PlatformUtilsServiceAbstraction,
MessagingServiceAbstraction,
LogServiceAbstraction,
KeyConnectorServiceAbstraction,
EnvironmentServiceAbstraction,
StateServiceAbstraction,
TwoFactorServiceAbstraction,
I18nServiceAbstraction,
],
}, },
{ {
provide: SyncService, provide: SyncService,
useClass: SyncService, useClass: SyncService,
deps: [
LogServiceAbstraction,
CryptoFunctionServiceAbstraction,
ApiServiceAbstraction,
MessagingServiceAbstraction,
I18nServiceAbstraction,
EnvironmentServiceAbstraction,
StateServiceAbstraction,
],
}, },
AuthGuardService, AuthGuardService,
LaunchGuardService, LaunchGuardService,
{
provide: STATE_FACTORY,
useFactory: () => new StateFactory(GlobalState, Account),
},
{
provide: USE_SECURE_STORAGE_FOR_SECRETS,
useValue: true,
},
{ {
provide: StateMigrationServiceAbstraction, provide: StateMigrationServiceAbstraction,
useFactory: ( useClass: StateMigrationService,
storageService: StorageServiceAbstraction,
secureStorageService: StorageServiceAbstraction
) =>
new StateMigrationService(
storageService,
secureStorageService,
new StateFactory(GlobalState, Account)
),
deps: [StorageServiceAbstraction, "SECURE_STORAGE"],
}, },
{ {
provide: StateServiceAbstraction, provide: StateServiceAbstraction,
useFactory: ( useClass: StateService,
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,
],
}, },
{ {
provide: TwoFactorServiceAbstraction, provide: TwoFactorServiceAbstraction,

View File

@@ -1,3 +1,5 @@
import { Injectable } from "@angular/core";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { AppIdService } from "jslib-common/abstractions/appId.service"; import { AppIdService } from "jslib-common/abstractions/appId.service";
import { CryptoService } from "jslib-common/abstractions/crypto.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 { StateService } from "../abstractions/state.service";
import { OrganizationLogInStrategy } from "../misc/logInStrategies/organizationLogIn.strategy"; import { OrganizationLogInStrategy } from "../misc/logInStrategies/organizationLogIn.strategy";
@Injectable()
export class AuthService extends AuthServiceBase { export class AuthService extends AuthServiceBase {
constructor( constructor(
cryptoService: CryptoService, cryptoService: CryptoService,

View File

@@ -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 { LogService } from "jslib-common/abstractions/log.service";
import { StateMigrationService } from "jslib-common/abstractions/stateMigration.service"; import { StateMigrationService } from "jslib-common/abstractions/stateMigration.service";
import { StorageService } from "jslib-common/abstractions/storage.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 BaseStateService } from "jslib-common/services/state.service";
import { StateService as StateServiceAbstraction } from "src/abstractions/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 { DirectoryType } from "src/enums/directoryType";
import { IConfiguration } from "src/models/IConfiguration"; import { IConfiguration } from "src/models/IConfiguration";
import { Account } from "src/models/account"; import { Account } from "src/models/account";
@@ -17,6 +21,7 @@ import { OktaConfiguration } from "src/models/oktaConfiguration";
import { OneLoginConfiguration } from "src/models/oneLoginConfiguration"; import { OneLoginConfiguration } from "src/models/oneLoginConfiguration";
import { SyncConfiguration } from "src/models/syncConfiguration"; import { SyncConfiguration } from "src/models/syncConfiguration";
const SecureStorageKeys = { const SecureStorageKeys = {
ldap: "ldapPassword", ldap: "ldapPassword",
gsuite: "gsuitePrivateKey", gsuite: "gsuitePrivateKey",
@@ -38,17 +43,18 @@ const keys = {
const StoredSecurely = "[STORED SECURELY]"; const StoredSecurely = "[STORED SECURELY]";
@Injectable()
export class StateService export class StateService
extends BaseStateService<GlobalState, Account> extends BaseStateService<GlobalState, Account>
implements StateServiceAbstraction implements StateServiceAbstraction
{ {
constructor( constructor(
protected storageService: StorageService, protected storageService: StorageService,
protected secureStorageService: StorageService, @Inject(SECURE_STORAGE) protected secureStorageService: StorageService,
protected logService: LogService, protected logService: LogService,
protected stateMigrationService: StateMigrationService, protected stateMigrationService: StateMigrationService,
private useSecureStorageForSecrets = true, @Inject(USE_SECURE_STORAGE_FOR_SECRETS) private useSecureStorageForSecrets = true,
protected stateFactory: StateFactory<GlobalState, Account> @Inject(STATE_FACTORY) protected stateFactory: StateFactory<GlobalState, Account>
) { ) {
super(storageService, secureStorageService, logService, stateMigrationService, stateFactory); super(storageService, secureStorageService, logService, stateMigrationService, stateFactory);
} }

View File

@@ -1,3 +1,5 @@
import { Injectable } from "@angular/core";
import { StateVersion } from "jslib-common/enums/stateVersion"; import { StateVersion } from "jslib-common/enums/stateVersion";
import { StateMigrationService as BaseStateMigrationService } from "jslib-common/services/stateMigration.service"; import { StateMigrationService as BaseStateMigrationService } from "jslib-common/services/stateMigration.service";
@@ -49,6 +51,7 @@ const ClientKeys: { [key: string]: any } = {
clientSecret: "apikey_clientSecret", clientSecret: "apikey_clientSecret",
}; };
@Injectable()
export class StateMigrationService extends BaseStateMigrationService { export class StateMigrationService extends BaseStateMigrationService {
async migrate(): Promise<void> { async migrate(): Promise<void> {
let currentStateVersion = await this.getCurrentStateVersion(); let currentStateVersion = await this.getCurrentStateVersion();

View File

@@ -1,3 +1,5 @@
import { Injectable } from "@angular/core";
import { ApiService } from "jslib-common/abstractions/api.service"; import { ApiService } from "jslib-common/abstractions/api.service";
import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service";
import { EnvironmentService } from "jslib-common/abstractions/environment.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 { OktaDirectoryService } from "./okta-directory.service";
import { OneLoginDirectoryService } from "./onelogin-directory.service"; import { OneLoginDirectoryService } from "./onelogin-directory.service";
@Injectable()
export class SyncService { export class SyncService {
private dirType: DirectoryType; private dirType: DirectoryType;

View File

@@ -39,6 +39,7 @@ const plugins = [
resourceRegExp: /^encoding$/, resourceRegExp: /^encoding$/,
contextRegExp: /node-fetch/, contextRegExp: /node-fetch/,
}), }),
new webpack.NormalModuleReplacementPlugin(/@angular\/core/, "jslib-node/angular-core.noop"),
]; ];
const config = { const config = {