From 8c3a5f6bd8b17ae1d089fb6782e629ff3e9a1ec7 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Fri, 4 Oct 2019 11:43:28 +1000 Subject: [PATCH] Partially disable settings for slave devices --- Signal/src/Loki/Onboarding/SeedVC.swift | 4 ++- Signal/src/Loki/Settings/QRCodeModal.swift | 7 +++- .../AppSettings/AppSettingsViewController.m | 32 +++++++++++++------ SignalServiceKit/src/Loki/API/LokiAPI.swift | 4 ++- .../Messaging/SSKProtoEnvelope+Loki.swift | 2 +- 5 files changed, 35 insertions(+), 14 deletions(-) diff --git a/Signal/src/Loki/Onboarding/SeedVC.swift b/Signal/src/Loki/Onboarding/SeedVC.swift index 7b27fd214..ebdd1c634 100644 --- a/Signal/src/Loki/Onboarding/SeedVC.swift +++ b/Signal/src/Loki/Onboarding/SeedVC.swift @@ -362,7 +362,9 @@ final class SeedVC : OnboardingBaseViewController, DeviceLinkingModalDelegate { func handleDeviceLinkAuthorized(_ deviceLink: DeviceLink) { linkingRequestMessageSendingTimer?.invalidate() - UserDefaults.standard.set(true, forKey: "didUpdateForMainnet") + let userDefaults = UserDefaults.standard + userDefaults.set(true, forKey: "didUpdateForMainnet") + userDefaults.set(deviceLink.master.hexEncodedPublicKey, forKey: "masterDeviceHexEncodedPublicKey") onboardingController.verificationDidComplete(fromView: self) Analytics.shared.track("Device Linked Successfully") } diff --git a/Signal/src/Loki/Settings/QRCodeModal.swift b/Signal/src/Loki/Settings/QRCodeModal.swift index 9b8095d4d..67a9e6618 100644 --- a/Signal/src/Loki/Settings/QRCodeModal.swift +++ b/Signal/src/Loki/Settings/QRCodeModal.swift @@ -13,7 +13,12 @@ final class QRCodeModal : Modal { label.textColor = UIColor.ows_white // Image view let imageView = UIImageView() - let hexEncodedPublicKey = OWSIdentityManager.shared().identityKeyPair()!.hexEncodedPublicKey + let hexEncodedPublicKey: String + if let masterDeviceHexEncodedPublicKey = UserDefaults.standard.string(forKey: "masterDeviceHexEncodedPublicKey") { + hexEncodedPublicKey = masterDeviceHexEncodedPublicKey + } else { + hexEncodedPublicKey = OWSIdentityManager.shared().identityKeyPair()!.hexEncodedPublicKey + } let data = hexEncodedPublicKey.data(using: .utf8) let filter = CIFilter(name: "CIQRCodeGenerator")! filter.setValue(data, forKey: "inputMessage") diff --git a/Signal/src/ViewControllers/AppSettings/AppSettingsViewController.m b/Signal/src/ViewControllers/AppSettings/AppSettingsViewController.m index d1c515728..158433f3d 100644 --- a/Signal/src/ViewControllers/AppSettings/AppSettingsViewController.m +++ b/Signal/src/ViewControllers/AppSettings/AppSettingsViewController.m @@ -112,6 +112,8 @@ - (void)updateTableContents { + NSString *masterDeviceHexEncodedPublicKey = [NSUserDefaults.standardUserDefaults stringForKey:@"masterDeviceHexEncodedPublicKey"]; + BOOL isMasterDevice = (masterDeviceHexEncodedPublicKey == nil); OWSTableContents *contents = [OWSTableContents new]; __weak AppSettingsViewController *weakSelf = self; @@ -123,14 +125,16 @@ #endif OWSTableSection *section = [OWSTableSection new]; - [section addItem:[OWSTableItem itemWithCustomCellBlock:^{ - return [weakSelf profileHeaderCell]; + if (isMasterDevice) { + [section addItem:[OWSTableItem itemWithCustomCellBlock:^{ + return [weakSelf profileHeaderCell]; + } + customRowHeight:100.f + actionBlock:^{ + [weakSelf showProfile]; + }]]; } - customRowHeight:100.f - actionBlock:^{ - [weakSelf showProfile]; - }]]; - + if (OWSSignalService.sharedInstance.isCensorshipCircumventionActive) { [section addItem:[OWSTableItem disclosureItemWithText: @@ -244,8 +248,10 @@ [section addItem:[OWSTableItem itemWithTitle:NSLocalizedString(@"Share Public Key", @"") actionBlock:^{ [weakSelf sharePublicKey]; }]]; [section addItem:[OWSTableItem itemWithTitle:NSLocalizedString(@"Show QR Code", @"") actionBlock:^{ [weakSelf showQRCode]; }]]; - [section addItem:[OWSTableItem itemWithTitle:NSLocalizedString(@"Link Device", @"") actionBlock:^{ [weakSelf linkDevice]; }]]; - [section addItem:[OWSTableItem itemWithTitle:NSLocalizedString(@"Show Seed", @"") actionBlock:^{ [weakSelf showSeed]; }]]; + if (isMasterDevice) { + [section addItem:[OWSTableItem itemWithTitle:NSLocalizedString(@"Link Device", @"") actionBlock:^{ [weakSelf linkDevice]; }]]; + [section addItem:[OWSTableItem itemWithTitle:NSLocalizedString(@"Show Seed", @"") actionBlock:^{ [weakSelf showSeed]; }]]; + } [section addItem:[OWSTableItem itemWithTitle:NSLocalizedString(@"Clear All Data", @"") actionBlock:^{ [weakSelf clearAllData]; }]]; if (TSAccountManager.sharedInstance.isDeregistered) { @@ -504,7 +510,13 @@ - (void)sharePublicKey { - NSString *hexEncodedPublicKey = OWSIdentityManager.sharedManager.identityKeyPair.hexEncodedPublicKey; + NSString *hexEncodedPublicKey; + NSString *masterDeviceHexEncodedPublicKey = [NSUserDefaults.standardUserDefaults stringForKey:@"masterDeviceHexEncodedPublicKey"]; + if (masterDeviceHexEncodedPublicKey != nil) { + hexEncodedPublicKey = masterDeviceHexEncodedPublicKey; + } else { + hexEncodedPublicKey = OWSIdentityManager.sharedManager.identityKeyPair.hexEncodedPublicKey; + } UIActivityViewController *shareVC = [[UIActivityViewController alloc] initWithActivityItems:@[ hexEncodedPublicKey ] applicationActivities:nil]; [self presentViewController:shareVC animated:YES completion:nil]; [LKAnalytics.shared track:@"Public Key Shared"]; diff --git a/SignalServiceKit/src/Loki/API/LokiAPI.swift b/SignalServiceKit/src/Loki/API/LokiAPI.swift index aab06232a..86044689a 100644 --- a/SignalServiceKit/src/Loki/API/LokiAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiAPI.swift @@ -39,7 +39,9 @@ public final class LokiAPI : NSObject { @objc(kind) public let objc_kind: String - public var kind: Kind { return Kind(rawValue: objc_kind)! } + public var kind: Kind { + return Kind(rawValue: objc_kind)! + } public enum Kind : String { case master, slave } diff --git a/SignalServiceKit/src/Loki/Messaging/SSKProtoEnvelope+Loki.swift b/SignalServiceKit/src/Loki/Messaging/SSKProtoEnvelope+Loki.swift index 97e8a9f44..22e450b82 100644 --- a/SignalServiceKit/src/Loki/Messaging/SSKProtoEnvelope+Loki.swift +++ b/SignalServiceKit/src/Loki/Messaging/SSKProtoEnvelope+Loki.swift @@ -4,7 +4,7 @@ @objc public var isGroupChatMessage: Bool { do { let contentProto = try SSKProtoContent.parseData(self.content!) - return contentProto.dataMessage!.group != nil + return contentProto.dataMessage?.group != nil } catch { return false }