From 22caae116c33b7ecc545170b58a29414c685df3c Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Tue, 13 Jun 2023 10:03:32 +1000 Subject: [PATCH] Restrict angular imports (#5597) * Refactor restricted imports eslint rule, add angular deps * Move FormValidationErrorsService into libs/angular * Remove angular decorators from configService * Remove angular decorator from anonymousHubService --- .eslintrc.json | 27 +++++++++---------- .../browser/src/auth/popup/login.component.ts | 2 +- .../src/auth/popup/register.component.ts | 2 +- .../desktop/src/auth/login/login.component.ts | 2 +- apps/desktop/src/auth/register.component.ts | 2 +- .../web/src/app/auth/login/login.component.ts | 2 +- .../register-form/register-form.component.ts | 2 +- .../src/auth/components/login.component.ts | 9 ++++--- .../src/components/register.component.ts | 8 +++--- .../form-validation-errors.service.ts | 0 .../form-validation-errors.service.ts | 0 .../src/services/jslib-services.module.ts | 4 +-- .../validators/inputsFieldMatch.validator.ts | 2 +- .../services/config/config.service.ts | 14 +++------- .../src/services/anonymousHub.service.ts | 2 -- 15 files changed, 34 insertions(+), 44 deletions(-) rename libs/{common => angular}/src/platform/abstractions/form-validation-errors.service.ts (100%) rename libs/{common => angular}/src/platform/services/form-validation-errors.service.ts (100%) diff --git a/.eslintrc.json b/.eslintrc.json index 5b431ff274..45a9d063a9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -90,22 +90,21 @@ "error", { "zones": [ - // Do not allow angular/node code to be imported into common { + // avoid specific frameworks or large dependencies in common "target": "./libs/common/**/*", - "from": "./libs/angular/**/*" - }, - { - "target": "./libs/common/**/*", - "from": "./libs/node/**/*" - }, - { - "target": "./libs/common/**/*", - "from": "./libs/importer/**/*" - }, - { - "target": "./libs/common/**/*", - "from": "./libs/exporter/**/*" + "from": [ + // Angular + "./libs/angular/**/*", + "./node_modules/@angular*/**/*", + + // Node + "./libs/node/**/*", + + // Import/export + "./libs/importer/**/*", + "./libs/exporter/**/*" + ] } ] } diff --git a/apps/browser/src/auth/popup/login.component.ts b/apps/browser/src/auth/popup/login.component.ts index 496de2c54b..776b792fa1 100644 --- a/apps/browser/src/auth/popup/login.component.ts +++ b/apps/browser/src/auth/popup/login.component.ts @@ -3,13 +3,13 @@ import { FormBuilder } from "@angular/forms"; import { ActivatedRoute, Router } from "@angular/router"; import { LoginComponent as BaseLoginComponent } from "@bitwarden/angular/auth/components/login.component"; +import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; import { DevicesApiServiceAbstraction } from "@bitwarden/common/abstractions/devices/devices-api.service.abstraction"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { LoginService } from "@bitwarden/common/auth/abstractions/login.service"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { FormValidationErrorsService } from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; diff --git a/apps/browser/src/auth/popup/register.component.ts b/apps/browser/src/auth/popup/register.component.ts index b061e1faf6..ad7a9e1cc6 100644 --- a/apps/browser/src/auth/popup/register.component.ts +++ b/apps/browser/src/auth/popup/register.component.ts @@ -3,13 +3,13 @@ import { UntypedFormBuilder } from "@angular/forms"; import { Router } from "@angular/router"; import { RegisterComponent as BaseRegisterComponent } from "@bitwarden/angular/components/register.component"; +import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { FormValidationErrorsService } from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; diff --git a/apps/desktop/src/auth/login/login.component.ts b/apps/desktop/src/auth/login/login.component.ts index 77894b77f6..de5ee51a7a 100644 --- a/apps/desktop/src/auth/login/login.component.ts +++ b/apps/desktop/src/auth/login/login.component.ts @@ -5,6 +5,7 @@ import { Subject, takeUntil } from "rxjs"; import { EnvironmentSelectorComponent } from "@bitwarden/angular/auth/components/environment-selector.component"; import { LoginComponent as BaseLoginComponent } from "@bitwarden/angular/auth/components/login.component"; +import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { DevicesApiServiceAbstraction } from "@bitwarden/common/abstractions/devices/devices-api.service.abstraction"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; @@ -13,7 +14,6 @@ import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.ser import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { FormValidationErrorsService } from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; diff --git a/apps/desktop/src/auth/register.component.ts b/apps/desktop/src/auth/register.component.ts index 6cf46de7c7..f4324f1237 100644 --- a/apps/desktop/src/auth/register.component.ts +++ b/apps/desktop/src/auth/register.component.ts @@ -3,6 +3,7 @@ import { UntypedFormBuilder } from "@angular/forms"; import { Router } from "@angular/router"; import { RegisterComponent as BaseRegisterComponent } from "@bitwarden/angular/components/register.component"; +import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; @@ -10,7 +11,6 @@ import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { FormValidationErrorsService } from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; diff --git a/apps/web/src/app/auth/login/login.component.ts b/apps/web/src/app/auth/login/login.component.ts index 430e3cfb7d..52ee5a89bd 100644 --- a/apps/web/src/app/auth/login/login.component.ts +++ b/apps/web/src/app/auth/login/login.component.ts @@ -5,6 +5,7 @@ import { Subject, takeUntil } from "rxjs"; import { first } from "rxjs/operators"; import { LoginComponent as BaseLoginComponent } from "@bitwarden/angular/auth/components/login.component"; +import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; import { DevicesApiServiceAbstraction } from "@bitwarden/common/abstractions/devices/devices-api.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; @@ -18,7 +19,6 @@ import { ListResponse } from "@bitwarden/common/models/response/list.response"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { FormValidationErrorsService } from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; diff --git a/apps/web/src/app/auth/register-form/register-form.component.ts b/apps/web/src/app/auth/register-form/register-form.component.ts index 14071aba7c..887f556248 100644 --- a/apps/web/src/app/auth/register-form/register-form.component.ts +++ b/apps/web/src/app/auth/register-form/register-form.component.ts @@ -3,6 +3,7 @@ import { UntypedFormBuilder } from "@angular/forms"; import { Router } from "@angular/router"; import { RegisterComponent as BaseRegisterComponent } from "@bitwarden/angular/components/register.component"; +import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; @@ -12,7 +13,6 @@ import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { ReferenceEventRequest } from "@bitwarden/common/models/request/reference-event.request"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { FormValidationErrorsService } from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; diff --git a/libs/angular/src/auth/components/login.component.ts b/libs/angular/src/auth/components/login.component.ts index cdb8f30369..f5a7a27af4 100644 --- a/libs/angular/src/auth/components/login.component.ts +++ b/libs/angular/src/auth/components/login.component.ts @@ -12,10 +12,6 @@ import { PasswordLogInCredentials } from "@bitwarden/common/auth/models/domain/l import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { - AllValidationErrors, - FormValidationErrorsService, -} from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -23,6 +19,11 @@ import { StateService } from "@bitwarden/common/platform/abstractions/state.serv import { Utils } from "@bitwarden/common/platform/misc/utils"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password"; +import { + AllValidationErrors, + FormValidationErrorsService, +} from "../../platform/abstractions/form-validation-errors.service"; + import { CaptchaProtectedComponent } from "./captcha-protected.component"; @Directive() diff --git a/libs/angular/src/components/register.component.ts b/libs/angular/src/components/register.component.ts index ac28dc6803..510da6160a 100644 --- a/libs/angular/src/components/register.component.ts +++ b/libs/angular/src/components/register.component.ts @@ -13,10 +13,6 @@ import { ReferenceEventRequest } from "@bitwarden/common/models/request/referenc import { RegisterRequest } from "@bitwarden/common/models/request/register.request"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { - AllValidationErrors, - FormValidationErrorsService, -} from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -25,6 +21,10 @@ import { Utils } from "@bitwarden/common/platform/misc/utils"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password"; import { CaptchaProtectedComponent } from "../auth/components/captcha-protected.component"; +import { + AllValidationErrors, + FormValidationErrorsService, +} from "../platform/abstractions/form-validation-errors.service"; import { DialogServiceAbstraction, SimpleDialogType } from "../services/dialog"; import { PasswordColorText } from "../shared/components/password-strength/password-strength.component"; import { InputsFieldMatch } from "../validators/inputsFieldMatch.validator"; diff --git a/libs/common/src/platform/abstractions/form-validation-errors.service.ts b/libs/angular/src/platform/abstractions/form-validation-errors.service.ts similarity index 100% rename from libs/common/src/platform/abstractions/form-validation-errors.service.ts rename to libs/angular/src/platform/abstractions/form-validation-errors.service.ts diff --git a/libs/common/src/platform/services/form-validation-errors.service.ts b/libs/angular/src/platform/services/form-validation-errors.service.ts similarity index 100% rename from libs/common/src/platform/services/form-validation-errors.service.ts rename to libs/angular/src/platform/services/form-validation-errors.service.ts diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 9862ca90e8..51e3cdc3fc 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -68,7 +68,6 @@ import { CryptoService as CryptoServiceAbstraction } from "@bitwarden/common/pla import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { EnvironmentService as EnvironmentServiceAbstraction } from "@bitwarden/common/platform/abstractions/environment.service"; import { FileUploadService as FileUploadServiceAbstraction } from "@bitwarden/common/platform/abstractions/file-upload/file-upload.service"; -import { FormValidationErrorsService as FormValidationErrorsServiceAbstraction } from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService as MessagingServiceAbstraction } from "@bitwarden/common/platform/abstractions/messaging.service"; @@ -90,7 +89,6 @@ import { EncryptServiceImplementation } from "@bitwarden/common/platform/service import { MultithreadEncryptServiceImplementation } from "@bitwarden/common/platform/services/cryptography/multithread-encrypt.service.implementation"; import { EnvironmentService } from "@bitwarden/common/platform/services/environment.service"; import { FileUploadService } from "@bitwarden/common/platform/services/file-upload/file-upload.service"; -import { FormValidationErrorsService } from "@bitwarden/common/platform/services/form-validation-errors.service"; import { StateMigrationService } from "@bitwarden/common/platform/services/state-migration.service"; import { StateService } from "@bitwarden/common/platform/services/state.service"; import { ValidationService } from "@bitwarden/common/platform/services/validation.service"; @@ -148,7 +146,9 @@ import { import { AuthGuard } from "../auth/guards/auth.guard"; import { LockGuard } from "../auth/guards/lock.guard"; import { UnauthGuard } from "../auth/guards/unauth.guard"; +import { FormValidationErrorsService as FormValidationErrorsServiceAbstraction } from "../platform/abstractions/form-validation-errors.service"; import { BroadcasterService } from "../platform/services/broadcaster.service"; +import { FormValidationErrorsService } from "../platform/services/form-validation-errors.service"; import { PasswordRepromptService } from "../vault/services/password-reprompt.service"; import { diff --git a/libs/angular/src/validators/inputsFieldMatch.validator.ts b/libs/angular/src/validators/inputsFieldMatch.validator.ts index 7c7c876d0d..f360b5e5ee 100644 --- a/libs/angular/src/validators/inputsFieldMatch.validator.ts +++ b/libs/angular/src/validators/inputsFieldMatch.validator.ts @@ -1,6 +1,6 @@ import { AbstractControl, UntypedFormGroup, ValidatorFn } from "@angular/forms"; -import { FormGroupControls } from "@bitwarden/common/platform/abstractions/form-validation-errors.service"; +import { FormGroupControls } from "../platform/abstractions/form-validation-errors.service"; export class InputsFieldMatch { //check to ensure two fields do not have the same value diff --git a/libs/common/src/platform/services/config/config.service.ts b/libs/common/src/platform/services/config/config.service.ts index 5149c4e4b7..d1258c47a2 100644 --- a/libs/common/src/platform/services/config/config.service.ts +++ b/libs/common/src/platform/services/config/config.service.ts @@ -1,5 +1,4 @@ -import { Injectable, OnDestroy } from "@angular/core"; -import { BehaviorSubject, Subject, concatMap, from, takeUntil, timer } from "rxjs"; +import { BehaviorSubject, concatMap, from, timer } from "rxjs"; import { AuthService } from "../../../auth/abstractions/auth.service"; import { AuthenticationStatus } from "../../../auth/enums/authentication-status"; @@ -11,11 +10,9 @@ import { EnvironmentService } from "../../abstractions/environment.service"; import { StateService } from "../../abstractions/state.service"; import { ServerConfigData } from "../../models/data/server-config.data"; -@Injectable() -export class ConfigService implements ConfigServiceAbstraction, OnDestroy { +export class ConfigService implements ConfigServiceAbstraction { protected _serverConfig = new BehaviorSubject(null); serverConfig$ = this._serverConfig.asObservable(); - private destroy$ = new Subject(); constructor( private stateService: StateService, @@ -30,16 +27,11 @@ export class ConfigService implements ConfigServiceAbstraction, OnDestroy { this._serverConfig.next(serverConfig); }); - this.environmentService.urls.pipe(takeUntil(this.destroy$)).subscribe(() => { + this.environmentService.urls.subscribe(() => { this.fetchServerConfig(); }); } - ngOnDestroy(): void { - this.destroy$.next(); - this.destroy$.complete(); - } - async fetchServerConfig(): Promise { try { const response = await this.configApiService.get(); diff --git a/libs/common/src/services/anonymousHub.service.ts b/libs/common/src/services/anonymousHub.service.ts index 32ea272ced..31b394ae58 100644 --- a/libs/common/src/services/anonymousHub.service.ts +++ b/libs/common/src/services/anonymousHub.service.ts @@ -1,4 +1,3 @@ -import { Injectable } from "@angular/core"; import { HttpTransportType, HubConnection, @@ -17,7 +16,6 @@ import { NotificationResponse, } from "./../models/response/notification.response"; -@Injectable() export class AnonymousHubService implements AnonymousHubServiceAbstraction { private anonHubConnection: HubConnection; private url: string;