Skip to content

Commit 8415669

Browse files
committed
Provision device from QRCode.
NEEDS DESIGN - will likely have an intermediate "device manager" screen. * extracted QRCode Scanner into re-usable ViewController // FREEBIE
1 parent 6545161 commit 8415669

16 files changed

+377
-126
lines changed

Podfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ source 'https://github.com/CocoaPods/Specs.git'
33

44
target 'Signal' do
55
pod 'SocketRocket', :git => 'https://github.com/facebook/SocketRocket.git'
6-
pod 'SignalServiceKit', :git => 'https://github.com/WhisperSystems/SignalServiceKit.git'
6+
#pod 'SignalServiceKit', :git => 'https://github.com/WhisperSystems/SignalServiceKit.git'
7+
pod 'SignalServiceKit', path: '../SignalServiceKit'
78
pod 'OpenSSL', '~> 1.0.208'
89
pod 'PastelogKit', '~> 1.3'
910
pod 'FFCircularProgressView', '~> 0.5'

Podfile.lock

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,19 +119,16 @@ DEPENDENCIES:
119119
- OpenSSL (~> 1.0.208)
120120
- PastelogKit (~> 1.3)
121121
- SCWaveformView (~> 1.0)
122-
- SignalServiceKit (from `https://github.com/WhisperSystems/SignalServiceKit.git`)
122+
- SignalServiceKit (from `../SignalServiceKit`)
123123
- SocketRocket (from `https://github.com/facebook/SocketRocket.git`)
124124

125125
EXTERNAL SOURCES:
126126
SignalServiceKit:
127-
:git: https://github.com/WhisperSystems/SignalServiceKit.git
127+
:path: "../SignalServiceKit"
128128
SocketRocket:
129129
:git: https://github.com/facebook/SocketRocket.git
130130

131131
CHECKOUT OPTIONS:
132-
SignalServiceKit:
133-
:commit: 1d0b645fc98545ba09d2828c1908689d3052ca4c
134-
:git: https://github.com/WhisperSystems/SignalServiceKit.git
135132
SocketRocket:
136133
:commit: 8096fef47d582bff8ae3758c9ae7af1d55ea53d6
137134
:git: https://github.com/facebook/SocketRocket.git
@@ -161,6 +158,6 @@ SPEC CHECKSUMS:
161158
UnionFind: c33be5adb12983981d6e827ea94fc7f9e370f52d
162159
YapDatabase: 713d4018cfacbd6e77dd430710ca84730e450980
163160

164-
PODFILE CHECKSUM: 060ff4edf8b7a110984cb2c1ffef3f6e19a6b8b6
161+
PODFILE CHECKSUM: fa9416a71a75bf01fde5554c0505c69f88921ab7
165162

166163
COCOAPODS: 1.0.1

Signal.xcodeproj/project.pbxproj

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
45843D1F1D2236B30013E85A /* OWSContactsSearcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 45843D1E1D2236B30013E85A /* OWSContactsSearcher.m */; };
1919
45843D201D2236B30013E85A /* OWSContactsSearcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 45843D1E1D2236B30013E85A /* OWSContactsSearcher.m */; };
2020
45843D221D223BA10013E85A /* OWSContactsSearcherTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45843D211D223BA10013E85A /* OWSContactsSearcherTest.m */; };
21+
458E38311D6682450094BD24 /* OWSQRCodeScanningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 458E38301D6682450094BD24 /* OWSQRCodeScanningViewController.m */; };
22+
458E38341D66873D0094BD24 /* OWSLinkDeviceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 458E38331D66873D0094BD24 /* OWSLinkDeviceViewController.m */; };
23+
458E38371D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 458E38361D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.m */; };
24+
458E383A1D6699FA0094BD24 /* OWSDeviceProvisioningURLParserTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 458E38391D6699FA0094BD24 /* OWSDeviceProvisioningURLParserTest.m */; };
2125
459C3F0D1C9B3A1B003ACF51 /* TSMessageAdapterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 459C3F0C1C9B3A1B003ACF51 /* TSMessageAdapterTest.m */; };
2226
45C681B71D305A580050903A /* OWSCall.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C681B61D305A580050903A /* OWSCall.m */; };
2327
45C681B81D305A580050903A /* OWSCall.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C681B61D305A580050903A /* OWSCall.m */; };
@@ -519,6 +523,13 @@
519523
45843D1D1D2236B30013E85A /* OWSContactsSearcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSContactsSearcher.h; sourceTree = "<group>"; };
520524
45843D1E1D2236B30013E85A /* OWSContactsSearcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSContactsSearcher.m; sourceTree = "<group>"; };
521525
45843D211D223BA10013E85A /* OWSContactsSearcherTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSContactsSearcherTest.m; sourceTree = "<group>"; };
526+
458E382F1D6682450094BD24 /* OWSQRCodeScanningViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSQRCodeScanningViewController.h; sourceTree = "<group>"; };
527+
458E38301D6682450094BD24 /* OWSQRCodeScanningViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSQRCodeScanningViewController.m; sourceTree = "<group>"; };
528+
458E38321D66873D0094BD24 /* OWSLinkDeviceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSLinkDeviceViewController.h; sourceTree = "<group>"; };
529+
458E38331D66873D0094BD24 /* OWSLinkDeviceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSLinkDeviceViewController.m; sourceTree = "<group>"; };
530+
458E38351D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSDeviceProvisioningURLParser.h; sourceTree = "<group>"; };
531+
458E38361D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSDeviceProvisioningURLParser.m; sourceTree = "<group>"; };
532+
458E38391D6699FA0094BD24 /* OWSDeviceProvisioningURLParserTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSDeviceProvisioningURLParserTest.m; path = Models/OWSDeviceProvisioningURLParserTest.m; sourceTree = "<group>"; };
522533
459C3F0C1C9B3A1B003ACF51 /* TSMessageAdapterTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TSMessageAdapterTest.m; path = "view controllers/Signals/TSMessageAdapters/TSMessageAdapterTest.m"; sourceTree = "<group>"; };
523534
45C681B51D305A580050903A /* OWSCall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSCall.h; sourceTree = "<group>"; };
524535
45C681B61D305A580050903A /* OWSCall.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSCall.m; sourceTree = "<group>"; };
@@ -1113,13 +1124,6 @@
11131124
/* End PBXFrameworksBuildPhase section */
11141125

11151126
/* Begin PBXGroup section */
1116-
457F3AB01D1470CF00C51351 /* view controllers */ = {
1117-
isa = PBXGroup;
1118-
children = (
1119-
);
1120-
name = "view controllers";
1121-
sourceTree = "<group>";
1122-
};
11231127
457F3AC01D14A0F700C51351 /* Models */ = {
11241128
isa = PBXGroup;
11251129
children = (
@@ -1134,10 +1138,20 @@
11341138
45C681B61D305A580050903A /* OWSCall.m */,
11351139
453D28B81D332DB100D523F0 /* OWSMessagesBubblesSizeCalculator.h */,
11361140
453D28B91D332DB100D523F0 /* OWSMessagesBubblesSizeCalculator.m */,
1141+
458E38351D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.h */,
1142+
458E38361D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.m */,
11371143
);
11381144
path = Models;
11391145
sourceTree = "<group>";
11401146
};
1147+
458E38381D6699110094BD24 /* Models */ = {
1148+
isa = PBXGroup;
1149+
children = (
1150+
458E38391D6699FA0094BD24 /* OWSDeviceProvisioningURLParserTest.m */,
1151+
);
1152+
name = Models;
1153+
sourceTree = "<group>";
1154+
};
11411155
459C3F0E1C9B3A20003ACF51 /* TSMessageAdapters */ = {
11421156
isa = PBXGroup;
11431157
children = (
@@ -1678,6 +1692,8 @@
16781692
B6BADBE61B88D1AC0086A80D /* LockInteractionController.m */,
16791693
76EB050B18170B33006006FC /* InCallViewController.h */,
16801694
76EB050C18170B33006006FC /* InCallViewController.m */,
1695+
458E382F1D6682450094BD24 /* OWSQRCodeScanningViewController.h */,
1696+
458E38301D6682450094BD24 /* OWSQRCodeScanningViewController.m */,
16811697
);
16821698
name = "View Controllers";
16831699
path = "view controllers";
@@ -1803,7 +1819,7 @@
18031819
B660F66C1C29867F00687D6E /* test */ = {
18041820
isa = PBXGroup;
18051821
children = (
1806-
457F3AB01D1470CF00C51351 /* view controllers */,
1822+
458E38381D6699110094BD24 /* Models */,
18071823
459C3F0E1C9B3A20003ACF51 /* TSMessageAdapters */,
18081824
B660F66D1C29867F00687D6E /* audio */,
18091825
B660F6731C29867F00687D6E /* call */,
@@ -2220,6 +2236,8 @@
22202236
B66B9F7C1AEAF40500E2E609 /* NotificationSettingsOptionsViewController.m */,
22212237
FCD274E91A5AFDDB00202277 /* AboutTableViewController.h */,
22222238
FCD274EA1A5AFDDB00202277 /* AboutTableViewController.m */,
2239+
458E38321D66873D0094BD24 /* OWSLinkDeviceViewController.h */,
2240+
458E38331D66873D0094BD24 /* OWSLinkDeviceViewController.m */,
22232241
);
22242242
name = Settings;
22252243
sourceTree = "<group>";
@@ -2614,6 +2632,7 @@
26142632
76EB060218170B33006006FC /* InitiatorSessionDescriptor.m in Sources */,
26152633
76EB05FC18170B33006006FC /* CallConnectUtil_Server.m in Sources */,
26162634
B6DA6B071B8A2F9A00CA6F98 /* AppStoreRating.m in Sources */,
2635+
458E38311D6682450094BD24 /* OWSQRCodeScanningViewController.m in Sources */,
26172636
76EB062418170B33006006FC /* PriorityQueue.m in Sources */,
26182637
B6BADBE71B88D1AC0086A80D /* LockInteractionController.m in Sources */,
26192638
76EB061A18170B33006006FC /* DiscardingLog.m in Sources */,
@@ -2698,12 +2717,14 @@
26982717
E197B61118BBEC1A00F073E5 /* AudioProcessor.m in Sources */,
26992718
FCAC964019FEF99A0046DFC5 /* InboxTableViewCell.m in Sources */,
27002719
76EB05EA18170B33006006FC /* CallProgress.m in Sources */,
2720+
458E38371D668EBF0094BD24 /* OWSDeviceProvisioningURLParser.m in Sources */,
27012721
FCFA64B41A24F3880007FB87 /* UIColor+OWS.m in Sources */,
27022722
76EB05C218170B33006006FC /* DhPacketSharedSecretHashes.m in Sources */,
27032723
B6C93C4E199567AD00EDF894 /* DebugLogger.m in Sources */,
27042724
76EB063218170B33006006FC /* Crc32.m in Sources */,
27052725
E197B62418BBF5BB00F073E5 /* SoundPlayer.m in Sources */,
27062726
E197B61018BBEC1A00F073E5 /* EncodedAudioPacket.m in Sources */,
2727+
458E38341D66873D0094BD24 /* OWSLinkDeviceViewController.m in Sources */,
27072728
76EB063618170B33006006FC /* DataUtil.m in Sources */,
27082729
E197B60C18BBEC1A00F073E5 /* AudioPacker.m in Sources */,
27092730
E197B61218BBEC1A00F073E5 /* AudioStretcher.m in Sources */,
@@ -2840,6 +2861,7 @@
28402861
B660F72C1C29988E00687D6E /* HttpRequestUtil.m in Sources */,
28412862
B660F72D1C29988E00687D6E /* HttpResponse.m in Sources */,
28422863
B660F72E1C29988E00687D6E /* HttpManager.m in Sources */,
2864+
458E383A1D6699FA0094BD24 /* OWSDeviceProvisioningURLParserTest.m in Sources */,
28432865
B660F72F1C29988E00687D6E /* HttpSocket.m in Sources */,
28442866
B660F7301C29988E00687D6E /* IpAddress.m in Sources */,
28452867
B660F7311C29988E00687D6E /* IpEndPoint.m in Sources */,
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright © 2016 Open Whisper Systems. All rights reserved.
2+
3+
NS_ASSUME_NONNULL_BEGIN
4+
5+
@interface OWSDeviceProvisioningURLParser : NSObject
6+
7+
@property (readonly, getter=isValid) BOOL valid;
8+
@property (nonatomic, readonly) NSString *ephemeralDeviceId;
9+
@property (nonatomic, readonly) NSData *publicKey;
10+
11+
- (instancetype)initWithProvisioningURL:(NSString *)provisioningURL;
12+
13+
@end
14+
15+
NS_ASSUME_NONNULL_END
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Copyright © 2016 Open Whisper Systems. All rights reserved.
2+
3+
#import "OWSDeviceProvisioningURLParser.h"
4+
#import "NSData+Base64.h"
5+
#import <AxolotlKit/NSData+keyVersionByte.h>
6+
7+
NS_ASSUME_NONNULL_BEGIN
8+
9+
NSString *const OWSQueryItemNameEphemeralDeviceIdKey = @"uuid";
10+
NSString *const OWSQueryItemNameEncodedPublicKeyKey = @"pub_key";
11+
12+
@implementation OWSDeviceProvisioningURLParser
13+
14+
- (instancetype)initWithProvisioningURL:(NSString *)provisioningURL
15+
{
16+
self = [super init];
17+
if (!self) {
18+
return self;
19+
}
20+
21+
NSURLComponents *components = [NSURLComponents componentsWithString:provisioningURL];
22+
for (NSURLQueryItem *queryItem in [components queryItems]) {
23+
if ([queryItem.name isEqualToString:OWSQueryItemNameEphemeralDeviceIdKey]) {
24+
_ephemeralDeviceId = queryItem.value;
25+
} else if ([queryItem.name isEqualToString:OWSQueryItemNameEncodedPublicKeyKey]) {
26+
NSString *encodedPublicKey = queryItem.value;
27+
_publicKey = [[NSData dataFromBase64String:encodedPublicKey] removeKeyType];
28+
} else {
29+
DDLogWarn(@"Unkown query item in provisioning string: %@", queryItem.name);
30+
}
31+
}
32+
33+
_valid = _ephemeralDeviceId && _publicKey;
34+
return self;
35+
}
36+
37+
@end
38+
39+
NS_ASSUME_NONNULL_END

0 commit comments

Comments
 (0)