diff --git a/angular/src/jslib.module.ts b/angular/src/jslib.module.ts index 215e83e4..d1cc93b8 100644 --- a/angular/src/jslib.module.ts +++ b/angular/src/jslib.module.ts @@ -1,4 +1,4 @@ -import { CommonModule } from "@angular/common"; +import { CommonModule, DatePipe } from "@angular/common"; import { NgModule } from "@angular/core"; import { AvatarComponent } from "./components/avatar.component"; @@ -89,6 +89,6 @@ import { UserNamePipe } from "./pipes/user-name.pipe"; VerifyMasterPasswordComponent, ExportScopeCalloutComponent, ], - providers: [UserNamePipe, SearchPipe], + providers: [DatePipe, UserNamePipe, SearchPipe], }) export class JslibModule {} diff --git a/angular/src/services/jslib-services.module.ts b/angular/src/services/jslib-services.module.ts index 068b0ee3..daf6b694 100644 --- a/angular/src/services/jslib-services.module.ts +++ b/angular/src/services/jslib-services.module.ts @@ -97,30 +97,14 @@ import { ValidationService } from "./validation.service"; { provide: AppIdServiceAbstraction, useClass: AppIdService, - deps: [StorageServiceAbstraction], }, { provide: AuditServiceAbstraction, useClass: AuditService, - deps: [CryptoFunctionServiceAbstraction, ApiServiceAbstraction], }, { provide: AuthServiceAbstraction, useClass: AuthService, - deps: [ - CryptoServiceAbstraction, - ApiServiceAbstraction, - TokenServiceAbstraction, - AppIdServiceAbstraction, - PlatformUtilsServiceAbstraction, - MessagingServiceAbstraction, - LogService, - KeyConnectorServiceAbstraction, - EnvironmentServiceAbstraction, - StateServiceAbstraction, - TwoFactorServiceAbstraction, - I18nServiceAbstraction, - ], }, { provide: CipherServiceAbstraction, @@ -158,45 +142,28 @@ import { ValidationService } from "./validation.service"; { provide: FolderServiceAbstraction, useClass: FolderService, - deps: [ - CryptoServiceAbstraction, - ApiServiceAbstraction, - I18nServiceAbstraction, - CipherServiceAbstraction, - StateServiceAbstraction, - ], }, { provide: LogService, useFactory: () => new ConsoleLogService(false) }, { provide: CollectionServiceAbstraction, useClass: CollectionService, - deps: [CryptoServiceAbstraction, I18nServiceAbstraction, StateServiceAbstraction], }, { provide: EnvironmentServiceAbstraction, useClass: EnvironmentService, - deps: [StateServiceAbstraction], }, { provide: TotpServiceAbstraction, useClass: TotpService, - deps: [CryptoFunctionServiceAbstraction, LogService, StateServiceAbstraction], }, - { provide: TokenServiceAbstraction, useClass: TokenService, deps: [StateServiceAbstraction] }, + { provide: TokenServiceAbstraction, useClass: TokenService }, { provide: CryptoServiceAbstraction, useClass: CryptoService, - deps: [ - CryptoFunctionServiceAbstraction, - PlatformUtilsServiceAbstraction, - LogService, - StateServiceAbstraction, - ], }, { provide: PasswordGenerationServiceAbstraction, useClass: PasswordGenerationService, - deps: [CryptoServiceAbstraction, PolicyServiceAbstraction, StateServiceAbstraction], }, { provide: ApiServiceAbstraction, @@ -280,7 +247,6 @@ import { ValidationService } from "./validation.service"; { provide: SettingsServiceAbstraction, useClass: SettingsService, - deps: [StateServiceAbstraction], }, { provide: VaultTimeoutServiceAbstraction, @@ -365,17 +331,10 @@ import { ValidationService } from "./validation.service"; { provide: ExportServiceAbstraction, useClass: ExportService, - deps: [ - FolderServiceAbstraction, - CipherServiceAbstraction, - ApiServiceAbstraction, - CryptoServiceAbstraction, - ], }, { provide: SearchServiceAbstraction, useClass: SearchService, - deps: [CipherServiceAbstraction, LogService, I18nServiceAbstraction], }, { provide: NotificationsServiceAbstraction, @@ -418,64 +377,35 @@ import { ValidationService } from "./validation.service"; { provide: EventServiceAbstraction, useClass: EventService, - deps: [ - ApiServiceAbstraction, - CipherServiceAbstraction, - StateServiceAbstraction, - LogService, - OrganizationServiceAbstraction, - ], }, { provide: PolicyServiceAbstraction, useClass: PolicyService, - deps: [StateServiceAbstraction, OrganizationServiceAbstraction, ApiServiceAbstraction], }, { provide: SendServiceAbstraction, useClass: SendService, - deps: [ - CryptoServiceAbstraction, - ApiServiceAbstraction, - FileUploadServiceAbstraction, - I18nServiceAbstraction, - CryptoFunctionServiceAbstraction, - StateServiceAbstraction, - ], }, { provide: KeyConnectorServiceAbstraction, useClass: KeyConnectorService, - deps: [ - StateServiceAbstraction, - CryptoServiceAbstraction, - ApiServiceAbstraction, - TokenServiceAbstraction, - LogService, - OrganizationServiceAbstraction, - CryptoFunctionServiceAbstraction, - ], }, { provide: UserVerificationServiceAbstraction, useClass: UserVerificationService, - deps: [CryptoServiceAbstraction, I18nServiceAbstraction, ApiServiceAbstraction], }, { provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService }, { provide: OrganizationServiceAbstraction, useClass: OrganizationService, - deps: [StateServiceAbstraction], }, { provide: ProviderServiceAbstraction, useClass: ProviderService, - deps: [StateServiceAbstraction], }, { provide: TwoFactorServiceAbstraction, useClass: TwoFactorService, - deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction], }, ], }) diff --git a/common/package.json b/common/package.json index 14df9a75..c839e452 100644 --- a/common/package.json +++ b/common/package.json @@ -28,6 +28,7 @@ "typescript": "4.3.5" }, "dependencies": { + "@angular/core": "^12.2.13", "@microsoft/signalr": "5.0.10", "@microsoft/signalr-protocol-msgpack": "5.0.10", "big-integer": "1.6.48", diff --git a/common/src/services/appId.service.ts b/common/src/services/appId.service.ts index a6406fdc..0180183d 100644 --- a/common/src/services/appId.service.ts +++ b/common/src/services/appId.service.ts @@ -1,8 +1,10 @@ +import { Injectable } from '@angular/core'; import { AppIdService as AppIdServiceAbstraction } from "../abstractions/appId.service"; import { StorageService } from "../abstractions/storage.service"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { Utils } from "../misc/utils"; +@Injectable() export class AppIdService implements AppIdServiceAbstraction { constructor(private storageService: StorageService) {} diff --git a/common/src/services/audit.service.ts b/common/src/services/audit.service.ts index 4ceebf67..c8e02993 100644 --- a/common/src/services/audit.service.ts +++ b/common/src/services/audit.service.ts @@ -1,3 +1,4 @@ +import { Injectable } from '@angular/core'; import { ApiService } from "../abstractions/api.service"; import { AuditService as AuditServiceAbstraction } from "../abstractions/audit.service"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; @@ -8,6 +9,7 @@ import { ErrorResponse } from "../models/response/errorResponse"; const PwnedPasswordsApi = "https://api.pwnedpasswords.com/range/"; +@Injectable() export class AuditService implements AuditServiceAbstraction { constructor( private cryptoFunctionService: CryptoFunctionService, diff --git a/common/src/services/auth.service.ts b/common/src/services/auth.service.ts index 66f5340a..4bf5c5e9 100644 --- a/common/src/services/auth.service.ts +++ b/common/src/services/auth.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from "@angular/core"; + import { ApiService } from "../abstractions/api.service"; import { AppIdService } from "../abstractions/appId.service"; import { AuthService as AuthServiceAbstraction } from "../abstractions/auth.service"; @@ -29,6 +31,7 @@ import { ErrorResponse } from "../models/response/errorResponse"; const sessionTimeoutLength = 2 * 60 * 1000; // 2 minutes +@Injectable() export class AuthService implements AuthServiceAbstraction { get email(): string { return this.logInStrategy instanceof PasswordLogInStrategy ? this.logInStrategy.email : null; diff --git a/common/src/services/collection.service.ts b/common/src/services/collection.service.ts index 4d3563d7..3bf0dd16 100644 --- a/common/src/services/collection.service.ts +++ b/common/src/services/collection.service.ts @@ -1,3 +1,4 @@ +import { Injectable } from '@angular/core'; import { CollectionService as CollectionServiceAbstraction } from "../abstractions/collection.service"; import { CryptoService } from "../abstractions/crypto.service"; import { I18nService } from "../abstractions/i18n.service"; @@ -11,6 +12,7 @@ import { CollectionView } from "../models/view/collectionView"; const NestingDelimiter = "/"; +@Injectable() export class CollectionService implements CollectionServiceAbstraction { constructor( private cryptoService: CryptoService, diff --git a/common/src/services/crypto.service.ts b/common/src/services/crypto.service.ts index c49d7763..7bca7ce4 100644 --- a/common/src/services/crypto.service.ts +++ b/common/src/services/crypto.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import * as bigInt from "big-integer"; import { CryptoService as CryptoServiceAbstraction } from "../abstractions/crypto.service"; @@ -20,6 +22,7 @@ import { ProfileOrganizationResponse } from "../models/response/profileOrganizat import { ProfileProviderOrganizationResponse } from "../models/response/profileProviderOrganizationResponse"; import { ProfileProviderResponse } from "../models/response/profileProviderResponse"; +@Injectable() export class CryptoService implements CryptoServiceAbstraction { constructor( private cryptoFunctionService: CryptoFunctionService, diff --git a/common/src/services/environment.service.ts b/common/src/services/environment.service.ts index b13afd59..3311852c 100644 --- a/common/src/services/environment.service.ts +++ b/common/src/services/environment.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { Observable, Subject } from "rxjs"; import { @@ -7,6 +9,7 @@ import { import { StateService } from "../abstractions/state.service"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; +@Injectable() export class EnvironmentService implements EnvironmentServiceAbstraction { private readonly urlsSubject = new Subject(); urls: Observable = this.urlsSubject; diff --git a/common/src/services/event.service.ts b/common/src/services/event.service.ts index c0024d49..4da96f84 100644 --- a/common/src/services/event.service.ts +++ b/common/src/services/event.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { EventService as EventServiceAbstraction } from "../abstractions/event.service"; @@ -8,6 +10,7 @@ import { EventType } from "../enums/eventType"; import { EventData } from "../models/data/eventData"; import { EventRequest } from "../models/request/eventRequest"; +@Injectable() export class EventService implements EventServiceAbstraction { private inited = false; diff --git a/common/src/services/export.service.ts b/common/src/services/export.service.ts index 55f9206f..32965328 100644 --- a/common/src/services/export.service.ts +++ b/common/src/services/export.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import * as papa from "papaparse"; import { ApiService } from "../abstractions/api.service"; @@ -27,6 +29,7 @@ import { CollectionView } from "../models/view/collectionView"; import { EventView } from "../models/view/eventView"; import { FolderView } from "../models/view/folderView"; +@Injectable() export class ExportService implements ExportServiceAbstraction { constructor( private folderService: FolderService, diff --git a/common/src/services/folder.service.ts b/common/src/services/folder.service.ts index 666ca6d2..aa8fd93b 100644 --- a/common/src/services/folder.service.ts +++ b/common/src/services/folder.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { CryptoService } from "../abstractions/crypto.service"; @@ -17,6 +19,7 @@ import { FolderView } from "../models/view/folderView"; const NestingDelimiter = "/"; +@Injectable() export class FolderService implements FolderServiceAbstraction { constructor( private cryptoService: CryptoService, diff --git a/common/src/services/import.service.ts b/common/src/services/import.service.ts index 86226d7d..cf680592 100644 --- a/common/src/services/import.service.ts +++ b/common/src/services/import.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { CollectionService } from "../abstractions/collection.service"; @@ -82,6 +84,7 @@ import { KvpRequest } from "../models/request/kvpRequest"; import { ErrorResponse } from "../models/response/errorResponse"; import { CipherView } from "../models/view/cipherView"; +@Injectable() export class ImportService implements ImportServiceAbstraction { featuredImportOptions = featuredImportOptions as readonly ImportOption[]; diff --git a/common/src/services/keyConnector.service.ts b/common/src/services/keyConnector.service.ts index c7e8b991..276f114c 100644 --- a/common/src/services/keyConnector.service.ts +++ b/common/src/services/keyConnector.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { ApiService } from "../abstractions/api.service"; import { CryptoService } from "../abstractions/crypto.service"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; @@ -14,6 +16,7 @@ import { KeyConnectorUserKeyRequest } from "../models/request/keyConnectorUserKe import { KeysRequest } from "../models/request/keysRequest"; import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; +@Injectable() export class KeyConnectorService implements KeyConnectorServiceAbstraction { constructor( private stateService: StateService, diff --git a/common/src/services/organization.service.ts b/common/src/services/organization.service.ts index 0ff32e81..1fe08707 100644 --- a/common/src/services/organization.service.ts +++ b/common/src/services/organization.service.ts @@ -1,8 +1,11 @@ +import { Injectable } from '@angular/core'; + import { OrganizationService as OrganizationServiceAbstraction } from "../abstractions/organization.service"; import { StateService } from "../abstractions/state.service"; import { OrganizationData } from "../models/data/organizationData"; import { Organization } from "../models/domain/organization"; +@Injectable() export class OrganizationService implements OrganizationServiceAbstraction { constructor(private stateService: StateService) {} diff --git a/common/src/services/passwordGeneration.service.ts b/common/src/services/passwordGeneration.service.ts index fa03446f..dd555ca9 100644 --- a/common/src/services/passwordGeneration.service.ts +++ b/common/src/services/passwordGeneration.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import * as zxcvbn from "zxcvbn"; import { CryptoService } from "../abstractions/crypto.service"; @@ -31,6 +33,7 @@ const DefaultOptions = { const MaxPasswordsInHistory = 100; +@Injectable() export class PasswordGenerationService implements PasswordGenerationServiceAbstraction { constructor( private cryptoService: CryptoService, diff --git a/common/src/services/policy.service.ts b/common/src/services/policy.service.ts index 91ab864b..1a6d99b7 100644 --- a/common/src/services/policy.service.ts +++ b/common/src/services/policy.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { ApiService } from "../abstractions/api.service"; import { OrganizationService } from "../abstractions/organization.service"; import { PolicyService as PolicyServiceAbstraction } from "../abstractions/policy.service"; @@ -13,6 +15,7 @@ import { ResetPasswordPolicyOptions } from "../models/domain/resetPasswordPolicy import { ListResponse } from "../models/response/listResponse"; import { PolicyResponse } from "../models/response/policyResponse"; +@Injectable() export class PolicyService implements PolicyServiceAbstraction { policyCache: Policy[]; diff --git a/common/src/services/provider.service.ts b/common/src/services/provider.service.ts index 53f09542..28997035 100644 --- a/common/src/services/provider.service.ts +++ b/common/src/services/provider.service.ts @@ -1,8 +1,10 @@ +import { Injectable } from '@angular/core'; import { ProviderService as ProviderServiceAbstraction } from "../abstractions/provider.service"; import { StateService } from "../abstractions/state.service"; import { ProviderData } from "../models/data/providerData"; import { Provider } from "../models/domain/provider"; +@Injectable() export class ProviderService implements ProviderServiceAbstraction { constructor(private stateService: StateService) {} diff --git a/common/src/services/search.service.ts b/common/src/services/search.service.ts index e1c54ceb..b3a2a83e 100644 --- a/common/src/services/search.service.ts +++ b/common/src/services/search.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import * as lunr from "lunr"; import { CipherService } from "../abstractions/cipher.service"; @@ -10,6 +12,7 @@ import { UriMatchType } from "../enums/uriMatchType"; import { CipherView } from "../models/view/cipherView"; import { SendView } from "../models/view/sendView"; +@Injectable() export class SearchService implements SearchServiceAbstraction { indexedEntityId?: string = null; private indexing = false; diff --git a/common/src/services/send.service.ts b/common/src/services/send.service.ts index 75530db3..58ed3ed2 100644 --- a/common/src/services/send.service.ts +++ b/common/src/services/send.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { ApiService } from "../abstractions/api.service"; import { CryptoService } from "../abstractions/crypto.service"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; @@ -20,6 +22,7 @@ import { ErrorResponse } from "../models/response/errorResponse"; import { SendResponse } from "../models/response/sendResponse"; import { SendView } from "../models/view/sendView"; +@Injectable() export class SendService implements SendServiceAbstraction { constructor( private cryptoService: CryptoService, diff --git a/common/src/services/settings.service.ts b/common/src/services/settings.service.ts index 7f5131b0..c619c8dc 100644 --- a/common/src/services/settings.service.ts +++ b/common/src/services/settings.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { SettingsService as SettingsServiceAbstraction } from "../abstractions/settings.service"; import { StateService } from "../abstractions/state.service"; @@ -6,6 +8,7 @@ const Keys = { equivalentDomains: "equivalentDomains", }; +@Injectable() export class SettingsService implements SettingsServiceAbstraction { constructor(private stateService: StateService) {} diff --git a/common/src/services/token.service.ts b/common/src/services/token.service.ts index a47cca7c..35ffa8b1 100644 --- a/common/src/services/token.service.ts +++ b/common/src/services/token.service.ts @@ -1,8 +1,11 @@ +import { Injectable } from '@angular/core'; + import { StateService } from "../abstractions/state.service"; import { TokenService as TokenServiceAbstraction } from "../abstractions/token.service"; import { Utils } from "../misc/utils"; import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; +@Injectable() export class TokenService implements TokenServiceAbstraction { static decodeToken(token: string): Promise { if (token == null) { diff --git a/common/src/services/totp.service.ts b/common/src/services/totp.service.ts index 730587c7..75aa982f 100644 --- a/common/src/services/totp.service.ts +++ b/common/src/services/totp.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { LogService } from "../abstractions/log.service"; import { StateService } from "../abstractions/state.service"; @@ -7,6 +9,7 @@ import { Utils } from "../misc/utils"; const B32Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; const SteamChars = "23456789BCDFGHJKMNPQRTVWXY"; +@Injectable() export class TotpService implements TotpServiceAbstraction { constructor( private cryptoFunctionService: CryptoFunctionService, diff --git a/common/src/services/twoFactor.service.ts b/common/src/services/twoFactor.service.ts index 7720d9be..f327b416 100644 --- a/common/src/services/twoFactor.service.ts +++ b/common/src/services/twoFactor.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { I18nService } from "../abstractions/i18n.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service"; import { @@ -59,6 +61,7 @@ export const TwoFactorProviders: Partial; private selectedTwoFactorProviderType: TwoFactorProviderType = null; diff --git a/common/src/services/userVerification.service.ts b/common/src/services/userVerification.service.ts index 68f44019..8d4d21e2 100644 --- a/common/src/services/userVerification.service.ts +++ b/common/src/services/userVerification.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import { ApiService } from "../abstractions/api.service"; import { CryptoService } from "../abstractions/crypto.service"; import { I18nService } from "../abstractions/i18n.service"; @@ -7,6 +9,7 @@ import { VerifyOTPRequest } from "../models/request/account/verifyOTPRequest"; import { SecretVerificationRequest } from "../models/request/secretVerificationRequest"; import { Verification } from "../types/verification"; +@Injectable() export class UserVerificationService implements UserVerificationServiceAbstraction { constructor( private cryptoService: CryptoService, diff --git a/common/src/services/webCryptoFunction.service.ts b/common/src/services/webCryptoFunction.service.ts index b863f226..aab05b13 100644 --- a/common/src/services/webCryptoFunction.service.ts +++ b/common/src/services/webCryptoFunction.service.ts @@ -1,3 +1,5 @@ +import { Injectable } from '@angular/core'; + import * as forge from "node-forge"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; @@ -5,6 +7,7 @@ import { Utils } from "../misc/utils"; import { DecryptParameters } from "../models/domain/decryptParameters"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; +@Injectable() export class WebCryptoFunctionService implements CryptoFunctionService { private crypto: Crypto; private subtle: SubtleCrypto;