refactor: application dependency management (#2363)
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user