refactor: application dependency management (#2363)

This commit is contained in:
Mo
2023-07-23 15:54:31 -05:00
committed by GitHub
parent e698b1c990
commit a77535456c
299 changed files with 7415 additions and 4890 deletions

View File

@@ -1,15 +1,12 @@
import { ItemManagerInterface } from './../../Item/ItemManagerInterface'
import { doesPayloadRequireSigning } from '@standardnotes/encryption/src/Domain/Operator/004/V004AlgorithmHelpers'
import { DecryptedItemInterface, PayloadSource } from '@standardnotes/models'
import { ValidateItemSignerResult } from './ValidateItemSignerResult'
import { FindTrustedContactUseCase } from './FindTrustedContact'
import { DecryptedItemInterface, PayloadSource, PublicKeyTrustStatus } from '@standardnotes/models'
import { ItemSignatureValidationResult } from './Types/ItemSignatureValidationResult'
import { FindContact } from './FindContact'
export class ValidateItemSignerUseCase {
private findContactUseCase = new FindTrustedContactUseCase(this.items)
export class ValidateItemSigner {
constructor(private findContact: FindContact) {}
constructor(private items: ItemManagerInterface) {}
execute(item: DecryptedItemInterface): ValidateItemSignerResult {
execute(item: DecryptedItemInterface): ItemSignatureValidationResult {
const uuidOfLastEditor = item.last_edited_by_uuid
if (uuidOfLastEditor) {
return this.validateSignatureWithLastEditedByUuid(item, uuidOfLastEditor)
@@ -29,15 +26,15 @@ export class ValidateItemSignerUseCase {
private validateSignatureWithLastEditedByUuid(
item: DecryptedItemInterface,
uuidOfLastEditor: string,
): ValidateItemSignerResult {
): ItemSignatureValidationResult {
const requiresSignature = doesPayloadRequireSigning(item)
const trustedContact = this.findContactUseCase.execute({ userUuid: uuidOfLastEditor })
if (!trustedContact) {
const trustedContact = this.findContact.execute({ userUuid: uuidOfLastEditor })
if (trustedContact.isFailed()) {
if (requiresSignature) {
return 'no'
return ItemSignatureValidationResult.NotTrusted
} else {
return 'not-applicable'
return ItemSignatureValidationResult.NotApplicable
}
}
@@ -46,38 +43,41 @@ export class ValidateItemSignerUseCase {
this.isItemLocallyCreatedAndDoesNotRequireSignature(item) ||
this.isItemResutOfRemoteSaveAndDoesNotRequireSignature(item)
) {
return 'not-applicable'
return ItemSignatureValidationResult.NotApplicable
}
if (requiresSignature) {
return 'no'
return ItemSignatureValidationResult.NotTrusted
}
return 'not-applicable'
return ItemSignatureValidationResult.NotApplicable
}
const signatureData = item.signatureData
if (!signatureData.result) {
if (signatureData.required) {
return 'no'
return ItemSignatureValidationResult.NotTrusted
}
return 'not-applicable'
return ItemSignatureValidationResult.NotApplicable
}
const signatureResult = signatureData.result
if (!signatureResult.passes) {
return 'no'
return ItemSignatureValidationResult.NotTrusted
}
const signerPublicKey = signatureResult.publicKey
if (trustedContact.isSigningKeyTrusted(signerPublicKey)) {
return 'yes'
const trustStatus = trustedContact.getValue().getTrustStatusForSigningPublicKey(signerPublicKey)
if (trustStatus === PublicKeyTrustStatus.Trusted) {
return ItemSignatureValidationResult.Trusted
} else if (trustStatus === PublicKeyTrustStatus.Previous) {
return ItemSignatureValidationResult.SignedWithNonCurrentKey
}
return 'no'
return ItemSignatureValidationResult.NotTrusted
}
private validateSignatureWithNoLastEditedByUuid(item: DecryptedItemInterface): ValidateItemSignerResult {
private validateSignatureWithNoLastEditedByUuid(item: DecryptedItemInterface): ItemSignatureValidationResult {
const requiresSignature = doesPayloadRequireSigning(item)
if (!item.signatureData) {
@@ -85,38 +85,45 @@ export class ValidateItemSignerUseCase {
this.isItemLocallyCreatedAndDoesNotRequireSignature(item) ||
this.isItemResutOfRemoteSaveAndDoesNotRequireSignature(item)
) {
return 'not-applicable'
return ItemSignatureValidationResult.NotApplicable
}
if (requiresSignature) {
return 'no'
return ItemSignatureValidationResult.NotTrusted
}
return 'not-applicable'
return ItemSignatureValidationResult.NotApplicable
}
const signatureData = item.signatureData
if (!signatureData.result) {
if (signatureData.required) {
return 'no'
return ItemSignatureValidationResult.NotTrusted
}
return 'not-applicable'
return ItemSignatureValidationResult.NotApplicable
}
const signatureResult = signatureData.result
if (!signatureResult.passes) {
return 'no'
return ItemSignatureValidationResult.NotTrusted
}
const signerPublicKey = signatureResult.publicKey
const trustedContact = this.findContactUseCase.execute({ signingPublicKey: signerPublicKey })
const trustedContact = this.findContact.execute({ signingPublicKey: signerPublicKey })
if (trustedContact) {
return 'yes'
if (trustedContact.isFailed()) {
return ItemSignatureValidationResult.NotTrusted
}
return 'no'
const trustStatus = trustedContact.getValue().getTrustStatusForSigningPublicKey(signerPublicKey)
if (trustStatus === PublicKeyTrustStatus.Trusted) {
return ItemSignatureValidationResult.Trusted
} else if (trustStatus === PublicKeyTrustStatus.Previous) {
return ItemSignatureValidationResult.SignedWithNonCurrentKey
}
return ItemSignatureValidationResult.NotTrusted
}
}