mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
4.4 KiB
Objective-C
106 lines
4.4 KiB
Objective-C
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
|
|
|
#import "OWSDeviceProvisioner.h"
|
|
#import "OWSDeviceProvisioningCodeService.h"
|
|
#import "OWSDeviceProvisioningService.h"
|
|
#import "OWSProvisioningMessage.h"
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
@interface OWSDeviceProvisioner ()
|
|
|
|
@property (nonatomic, readonly) NSData *myPublicKey;
|
|
@property (nonatomic, readonly) NSData *myPrivateKey;
|
|
@property (nonatomic, readonly) NSData *theirPublicKey;
|
|
@property (nonatomic, readonly) NSString *accountIdentifier;
|
|
@property (nonatomic, readonly) NSData *profileKey;
|
|
@property (nonatomic, nullable) NSString *ephemeralDeviceId;
|
|
@property (nonatomic, readonly) OWSDeviceProvisioningCodeService *provisioningCodeService;
|
|
@property (nonatomic, readonly) OWSDeviceProvisioningService *provisioningService;
|
|
|
|
@end
|
|
|
|
@implementation OWSDeviceProvisioner
|
|
|
|
- (instancetype)initWithMyPublicKey:(NSData *)myPublicKey
|
|
myPrivateKey:(NSData *)myPrivateKey
|
|
theirPublicKey:(NSData *)theirPublicKey
|
|
theirEphemeralDeviceId:(NSString *)ephemeralDeviceId
|
|
accountIdentifier:(NSString *)accountIdentifier
|
|
profileKey:(NSData *)profileKey
|
|
provisioningCodeService:(OWSDeviceProvisioningCodeService *)provisioningCodeService
|
|
provisioningService:(OWSDeviceProvisioningService *)provisioningService
|
|
{
|
|
self = [super init];
|
|
if (!self) {
|
|
return self;
|
|
}
|
|
|
|
_myPublicKey = myPublicKey;
|
|
_myPrivateKey = myPrivateKey;
|
|
_theirPublicKey = theirPublicKey;
|
|
_accountIdentifier = accountIdentifier;
|
|
_profileKey = profileKey;
|
|
_ephemeralDeviceId = ephemeralDeviceId;
|
|
_provisioningCodeService = provisioningCodeService;
|
|
_provisioningService = provisioningService;
|
|
|
|
return self;
|
|
}
|
|
|
|
- (instancetype)initWithMyPublicKey:(NSData *)myPublicKey
|
|
myPrivateKey:(NSData *)myPrivateKey
|
|
theirPublicKey:(NSData *)theirPublicKey
|
|
theirEphemeralDeviceId:(NSString *)ephemeralDeviceId
|
|
accountIdentifier:(NSString *)accountIdentifier
|
|
profileKey:(NSData *)profileKey
|
|
{
|
|
return [self initWithMyPublicKey:myPublicKey
|
|
myPrivateKey:myPrivateKey
|
|
theirPublicKey:theirPublicKey
|
|
theirEphemeralDeviceId:ephemeralDeviceId
|
|
accountIdentifier:accountIdentifier
|
|
profileKey:profileKey
|
|
provisioningCodeService:[OWSDeviceProvisioningCodeService new]
|
|
provisioningService:[OWSDeviceProvisioningService new]];
|
|
}
|
|
|
|
- (void)provisionWithSuccess:(void (^)())successCallback failure:(void (^)(NSError *_Nonnull))failureCallback
|
|
{
|
|
[self.provisioningCodeService requestProvisioningCodeWithSuccess:^(NSString *provisioningCode) {
|
|
DDLogInfo(@"Retrieved provisioning code.");
|
|
[self provisionWithCode:provisioningCode success:successCallback failure:failureCallback];
|
|
}
|
|
failure:^(NSError *error) {
|
|
DDLogError(@"Failed to get provisioning code with error: %@", error);
|
|
failureCallback(error);
|
|
}];
|
|
}
|
|
|
|
- (void)provisionWithCode:(NSString *)provisioningCode
|
|
success:(void (^)())successCallback
|
|
failure:(void (^)(NSError *_Nonnull))failureCallback
|
|
{
|
|
OWSProvisioningMessage *message = [[OWSProvisioningMessage alloc] initWithMyPublicKey:self.myPublicKey
|
|
myPrivateKey:self.myPrivateKey
|
|
theirPublicKey:self.theirPublicKey
|
|
accountIdentifier:self.accountIdentifier
|
|
profileKey:self.profileKey
|
|
provisioningCode:provisioningCode];
|
|
|
|
[self.provisioningService provisionWithMessageBody:[message buildEncryptedMessageBody]
|
|
ephemeralDeviceId:self.ephemeralDeviceId
|
|
success:^{
|
|
DDLogInfo(@"ProvisioningService SUCCEEDED");
|
|
successCallback();
|
|
}
|
|
failure:^(NSError *error) {
|
|
DDLogError(@"ProvisioningService FAILED with error:%@", error);
|
|
failureCallback(error);
|
|
}];
|
|
}
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|