no message

This commit is contained in:
Peter
2018-08-14 12:56:40 +03:00
parent da464a3286
commit 01ed96e839
89 changed files with 2020 additions and 1334 deletions

View File

@@ -15,18 +15,18 @@ public enum RequestSecureIdFormError {
case versionOutdated
}
private func parseSecureValueType(_ type: Api.SecureValueType, selfie: Bool) -> SecureIdRequestedFormField {
private func parseSecureValueType(_ type: Api.SecureValueType, selfie: Bool, translation: Bool) -> SecureIdRequestedFormField {
switch type {
case .secureValueTypePersonalDetails:
return .personalDetails
case .secureValueTypePassport:
return .passport(selfie: selfie)
return .passport(selfie: selfie, translation: translation)
case .secureValueTypeInternalPassport:
return .internalPassport(selfie: selfie)
return .internalPassport(selfie: selfie, translation: translation)
case .secureValueTypeDriverLicense:
return .driversLicense(selfie: selfie)
return .driversLicense(selfie: selfie, translation: translation)
case .secureValueTypeIdentityCard:
return .idCard(selfie: selfie)
return .idCard(selfie: selfie, translation: translation)
case .secureValueTypeAddress:
return .address
case .secureValueTypeUtilityBill:
@@ -59,9 +59,11 @@ struct ParsedSecureValue {
func parseSecureValue(context: SecureIdAccessContext, value: Api.SecureValue, errors: [Api.SecureValueError]) -> ParsedSecureValue? {
switch value {
case let .secureValue(_, type, data, frontSide, reverseSide, selfie, files, plainData, hash):
case let .secureValue(_, type, data, frontSide, reverseSide, selfie, translation, files, plainData, hash):
let parsedFileReferences = files.flatMap { $0.compactMap(SecureIdFileReference.init) } ?? []
let parsedFiles = parsedFileReferences.map(SecureIdVerificationDocumentReference.remote)
let parsedTranslationReferences = translation.flatMap { $0.compactMap(SecureIdFileReference.init) } ?? []
let parsedTranslations = parsedTranslationReferences.map(SecureIdVerificationDocumentReference.remote)
let parsedFrontSide = frontSide.flatMap(SecureIdFileReference.init).flatMap(SecureIdVerificationDocumentReference.remote)
let parsedBackSide = reverseSide.flatMap(SecureIdFileReference.init).flatMap(SecureIdVerificationDocumentReference.remote)
let parsedSelfie = selfie.flatMap(SecureIdFileReference.init).flatMap(SecureIdVerificationDocumentReference.remote)
@@ -69,6 +71,7 @@ func parseSecureValue(context: SecureIdAccessContext, value: Api.SecureValue, er
let decryptedData: Data?
let encryptedMetadata: SecureIdEncryptedValueMetadata?
var parsedFileMetadata: [SecureIdEncryptedValueFileMetadata] = []
var parsedTranslationMetadata: [SecureIdEncryptedValueFileMetadata] = []
var parsedSelfieMetadata: SecureIdEncryptedValueFileMetadata?
var parsedFrontSideMetadata: SecureIdEncryptedValueFileMetadata?
var parsedBackSideMetadata: SecureIdEncryptedValueFileMetadata?
@@ -96,6 +99,12 @@ func parseSecureValue(context: SecureIdAccessContext, value: Api.SecureValue, er
}
parsedFileMetadata.append(SecureIdEncryptedValueFileMetadata(hash: file.fileHash, secret: fileSecret))
}
for file in parsedTranslationReferences {
guard let fileSecret = decryptedSecureIdFileSecret(context: context, fileHash: file.fileHash, encryptedSecret: file.encryptedSecret) else {
return nil
}
parsedTranslationMetadata.append(SecureIdEncryptedValueFileMetadata(hash: file.fileHash, secret: fileSecret))
}
if let parsedSelfie = selfie.flatMap(SecureIdFileReference.init) {
guard let fileSecret = decryptedSecureIdFileSecret(context: context, fileHash: parsedSelfie.fileHash, encryptedSecret: parsedSelfie.encryptedSecret) else {
return nil
@@ -133,7 +142,7 @@ func parseSecureValue(context: SecureIdAccessContext, value: Api.SecureValue, er
guard let dict = (try? JSONSerialization.jsonObject(with: decryptedData ?? Data(), options: [])) as? [String: Any] else {
return nil
}
guard let passport = SecureIdPassportValue(dict: dict, fileReferences: parsedFiles, selfieDocument: parsedSelfie, frontSideDocument: parsedFrontSide) else {
guard let passport = SecureIdPassportValue(dict: dict, fileReferences: parsedFiles, translations: parsedTranslations, selfieDocument: parsedSelfie, frontSideDocument: parsedFrontSide) else {
return nil
}
value = .passport(passport)
@@ -141,7 +150,7 @@ func parseSecureValue(context: SecureIdAccessContext, value: Api.SecureValue, er
guard let dict = (try? JSONSerialization.jsonObject(with: decryptedData ?? Data(), options: [])) as? [String: Any] else {
return nil
}
guard let internalPassport = SecureIdInternalPassportValue(dict: dict, fileReferences: parsedFiles, selfieDocument: parsedSelfie, frontSideDocument: parsedFrontSide) else {
guard let internalPassport = SecureIdInternalPassportValue(dict: dict, fileReferences: parsedFiles, translations: parsedTranslations, selfieDocument: parsedSelfie, frontSideDocument: parsedFrontSide) else {
return nil
}
value = .internalPassport(internalPassport)
@@ -149,7 +158,7 @@ func parseSecureValue(context: SecureIdAccessContext, value: Api.SecureValue, er
guard let dict = (try? JSONSerialization.jsonObject(with: decryptedData ?? Data(), options: [])) as? [String: Any] else {
return nil
}
guard let driversLicense = SecureIdDriversLicenseValue(dict: dict, fileReferences: parsedFiles, selfieDocument: parsedSelfie, frontSideDocument: parsedFrontSide, backSideDocument: parsedBackSide) else {
guard let driversLicense = SecureIdDriversLicenseValue(dict: dict, fileReferences: parsedFiles, translations: parsedTranslations, selfieDocument: parsedSelfie, frontSideDocument: parsedFrontSide, backSideDocument: parsedBackSide) else {
return nil
}
value = .driversLicense(driversLicense)
@@ -157,7 +166,7 @@ func parseSecureValue(context: SecureIdAccessContext, value: Api.SecureValue, er
guard let dict = (try? JSONSerialization.jsonObject(with: decryptedData ?? Data(), options: [])) as? [String: Any] else {
return nil
}
guard let idCard = SecureIdIDCardValue(dict: dict, fileReferences: parsedFiles, selfieDocument: parsedSelfie, frontSideDocument: parsedFrontSide, backSideDocument: parsedBackSide) else {
guard let idCard = SecureIdIDCardValue(dict: dict, fileReferences: parsedFiles, translations: parsedTranslations, selfieDocument: parsedSelfie, frontSideDocument: parsedFrontSide, backSideDocument: parsedBackSide) else {
return nil
}
value = .idCard(idCard)
@@ -216,7 +225,7 @@ func parseSecureValue(context: SecureIdAccessContext, value: Api.SecureValue, er
}
}
return ParsedSecureValue(valueWithContext: SecureIdValueWithContext(value: value, errors: parseSecureIdValueContentErrors(dataHash: contentsId, fileHashes: Set(parsedFileMetadata.map { $0.hash }), selfieHash: parsedSelfieMetadata?.hash, frontSideHash: parsedFrontSideMetadata?.hash, backSideHash: parsedBackSideMetadata?.hash, errors: errors), files: parsedFileMetadata, selfie: parsedSelfieMetadata, frontSide: parsedFrontSideMetadata, backSide: parsedBackSideMetadata, encryptedMetadata: encryptedMetadata, opaqueHash: hash.makeData()))
return ParsedSecureValue(valueWithContext: SecureIdValueWithContext(value: value, errors: parseSecureIdValueContentErrors(dataHash: contentsId, fileHashes: Set(parsedFileMetadata.map { $0.hash }), selfieHash: parsedSelfieMetadata?.hash, frontSideHash: parsedFrontSideMetadata?.hash, backSideHash: parsedBackSideMetadata?.hash, errors: errors), files: parsedFileMetadata, translations: parsedTranslationMetadata, selfie: parsedSelfieMetadata, frontSide: parsedFrontSideMetadata, backSide: parsedBackSideMetadata, encryptedMetadata: encryptedMetadata, opaqueHash: hash.makeData()))
}
}
@@ -260,8 +269,22 @@ public func requestSecureIdForm(postbox: Postbox, network: Network, peerId: Peer
return updated
})
return EncryptedSecureIdForm(peerId: peerId, requestedFields: requiredTypes.map {
return parseSecureValueType($0, selfie: (flags & 1 << 1) != 0)
return EncryptedSecureIdForm(peerId: peerId, requestedFields: requiredTypes.map { requiredType in
//flags:# native_names:flags.0?true selfie_required:flags.1?true translation_required:flags.2?true type:SecureValueType = SecureRequiredType;
switch requiredType {
case let .secureRequiredType(flags, type):
return parseSecureValueType(type, selfie: (flags & 1 << 1) != 0, translation: (flags & 1 << 2) != 0)
case let .secureRequiredTypeOneOf(types):
let parsedInnerTypes = types.compactMap { innerType -> SecureIdRequestedFormField? in
switch innerType {
case let .secureRequiredType(flags, type):
return parseSecureValueType(type, selfie: (flags & 1 << 1) != 0, translation: (flags & 1 << 2) != 0)
case .secureRequiredTypeOneOf:
return nil
}
}
return .oneOf(parsedInnerTypes)
}
}, termsUrl: termsUrl, encryptedValues: values, errors: errors)
}
} |> mapError { _ in return RequestSecureIdFormError.generic }