Only report attestation failure if we *received* the attestion.

per Jeff
pull/1/head
Michael Kirk 7 years ago
parent c4550ebc90
commit 5edf2e426e

@ -4,6 +4,11 @@
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
extern NSErrorDomain const ContactDiscoveryServiceErrorDomain;
typedef NS_ERROR_ENUM(ContactDiscoveryServiceErrorDomain, ContactDiscoveryServiceError){
ContactDiscoveryServiceErrorAttestationFailed = 100,
};
@class ECKeyPair; @class ECKeyPair;
@class OWSAES256Key; @class OWSAES256Key;

@ -8,6 +8,7 @@
#import "Cryptography.h" #import "Cryptography.h"
#import "NSData+OWS.h" #import "NSData+OWS.h"
#import "NSDate+OWS.h" #import "NSDate+OWS.h"
#import "NSError+MessageSending.h"
#import "OWSError.h" #import "OWSError.h"
#import "OWSRequestFactory.h" #import "OWSRequestFactory.h"
#import "TSNetworkManager.h" #import "TSNetworkManager.h"
@ -16,6 +17,8 @@
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
NSErrorDomain const ContactDiscoveryServiceErrorDomain = @"SignalServiceKit.ContactDiscoveryService";
@interface RemoteAttestationAuth () @interface RemoteAttestationAuth ()
@property (nonatomic) NSString *username; @property (nonatomic) NSString *username;
@ -357,7 +360,10 @@ NS_ASSUME_NONNULL_BEGIN
auth:auth]; auth:auth];
if (!attestation) { if (!attestation) {
NSError *error = OWSErrorMakeUnableToProcessServerResponseError(); NSError *error = [NSError errorWithDomain:ContactDiscoveryServiceErrorDomain
code:ContactDiscoveryServiceErrorAttestationFailed
userInfo:nil];
error.isRetryable = NO;
failureHandler(error); failureHandler(error);
return; return;
} }
@ -366,8 +372,6 @@ NS_ASSUME_NONNULL_BEGIN
}); });
} }
failure:^(NSURLSessionDataTask *task, NSError *error) { failure:^(NSURLSessionDataTask *task, NSError *error) {
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
OWSLogVerbose(@"remote attestation failure: %lu", (unsigned long)response.statusCode);
failureHandler(error); failureHandler(error);
}]; }];
} }

@ -139,7 +139,6 @@ class LegacyContactDiscoveryBatchOperation: OWSOperation {
enum ContactDiscoveryError: Error { enum ContactDiscoveryError: Error {
case parseError(description: String) case parseError(description: String)
case assertionError(description: String) case assertionError(description: String)
case attestationError(underlyingError: Error)
case clientError(underlyingError: Error) case clientError(underlyingError: Error)
case serverError(underlyingError: Error) case serverError(underlyingError: Error)
} }
@ -234,13 +233,7 @@ class CDSBatchOperation: OWSOperation {
contactDiscoveryService.performRemoteAttestation(success: { (remoteAttestation: RemoteAttestation) in contactDiscoveryService.performRemoteAttestation(success: { (remoteAttestation: RemoteAttestation) in
self.makeContactDiscoveryRequest(remoteAttestation: remoteAttestation) self.makeContactDiscoveryRequest(remoteAttestation: remoteAttestation)
}, },
failure: self.attestationFailure) failure: self.reportError)
}
private func attestationFailure(error: Error) {
let attestationError: NSError = ContactDiscoveryError.attestationError(underlyingError: error) as NSError
attestationError.isRetryable = false
self.reportError(attestationError)
} }
private func makeContactDiscoveryRequest(remoteAttestation: RemoteAttestation) { private func makeContactDiscoveryRequest(remoteAttestation: RemoteAttestation) {
@ -462,7 +455,7 @@ class CDSFeedbackOperation: OWSOperation {
case ContactDiscoveryError.serverError, ContactDiscoveryError.clientError: case ContactDiscoveryError.serverError, ContactDiscoveryError.clientError:
// Server already has this information, no need submit feedback // Server already has this information, no need submit feedback
self.reportSuccess() self.reportSuccess()
case ContactDiscoveryError.attestationError: case ContactDiscoveryServiceError.attestationFailed:
self.makeRequest(result: .attestationError) self.makeRequest(result: .attestationError)
default: default:
self.makeRequest(result: .unexpectedError) self.makeRequest(result: .unexpectedError)

Loading…
Cancel
Save