From a34c0eed4ed40609cb86576cd2403a005e4e8fdb Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Wed, 20 Oct 2021 15:26:09 +0200 Subject: [PATCH] Filling the OTP Setup view works QR Image parsing and update works as well. Save to entry and other updates still missing --- Cartfile | 2 +- Cartfile.resolved | 2 +- MacPass/Base.lproj/EntryInspectorView.xib | 4 +- MacPass/MPTOTPSetupViewController.m | 50 ++++++++++++----------- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/Cartfile b/Cartfile index afb54188..23afaa22 100644 --- a/Cartfile +++ b/Cartfile @@ -1,4 +1,4 @@ github "sparkle-project/Sparkle" ~> 1.22 github "MacPass/TransformerKit" "a8b5bb73cc327ec6798569b865c32fec5eb2289f" -github "MacPass/KeePassKit" "8ce0fda4ca10c41f022da3d9e3539e1686aa4460" +github "MacPass/KeePassKit" "61bcb5718ea6f09725595f7e1f1b31ded0bb704e" github "mstarke/HNHUi" ~> 4.0 diff --git a/Cartfile.resolved b/Cartfile.resolved index 8e79e517..342aaff0 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,4 +1,4 @@ -github "MacPass/KeePassKit" "8ce0fda4ca10c41f022da3d9e3539e1686aa4460" +github "MacPass/KeePassKit" "61bcb5718ea6f09725595f7e1f1b31ded0bb704e" github "MacPass/KissXML" "933f04fe5ad95c2be07ec0c2f801e140007f20fa" github "MacPass/TransformerKit" "a8b5bb73cc327ec6798569b865c32fec5eb2289f" github "mstarke/HNHUi" "4.0.4" diff --git a/MacPass/Base.lproj/EntryInspectorView.xib b/MacPass/Base.lproj/EntryInspectorView.xib index 769ce386..4e7f3f68 100644 --- a/MacPass/Base.lproj/EntryInspectorView.xib +++ b/MacPass/Base.lproj/EntryInspectorView.xib @@ -97,7 +97,7 @@ - + @@ -792,7 +792,7 @@ - + diff --git a/MacPass/MPTOTPSetupViewController.m b/MacPass/MPTOTPSetupViewController.m index 9cc9a5f7..02b1b9e3 100644 --- a/MacPass/MPTOTPSetupViewController.m +++ b/MacPass/MPTOTPSetupViewController.m @@ -151,12 +151,10 @@ typedef NS_ENUM(NSUInteger, MPOTPType) { MPOTPUpdateSourceTimeSlice, MPOTPUpdateSourceType, MPOTPUpdateSourceEntry - */ - if(!self.generator) { - self.generator = [[KPKTimeOTPGenerator alloc] initWithAttributes:((KPKEntry *)self.representedObject).attributes]; + if(source != MPOTPUpdateSourceEntry) { + NSAssert(self.generator, @"OTP Generator needs to be set when change source is not entry"); } - switch(source) { case MPOTPUpdateSourceQRImage: { NSString *qrCodeString = self.qrCodeImageView.image.QRCodeString; @@ -169,47 +167,51 @@ typedef NS_ENUM(NSUInteger, MPOTPType) { self.generator = [[KPKTimeOTPGenerator alloc] initWithURL:self.urlTextField.stringValue]; break; + case MPOTPUpdateSourceEntry: + if(self.representedEntry.hasTimeOTP) { + self.generator = [[KPKTimeOTPGenerator alloc] initWithAttributes:self.representedEntry.attributes]; + } + else { + self.generator = [[KPKTimeOTPGenerator alloc] init]; + } + break; case MPOTPUpdateSourceSecret: self.generator.key = [NSData dataWithBase32EncodedString:self.secretTextField.stringValue]; break; case MPOTPUpdateSourceAlgorithm: - //self.generator.hashAlgorithm = + self.generator.hashAlgorithm = (KPKOTPHashAlgorithm)self.algorithmPopUpButton.selectedTag; break; case MPOTPUpdateSourceTimeSlice: - //self.generator.timeSlice = - break; - case MPOTPUpdateSourceEntry: + self.generator.timeSlice = self.timeStepTextField.integerValue; break; default: return; } - /* FIXME: update correct values based on changes */ + /* + The KPKTimeOTPGenerator is the sole data source. We do not need to query anything else + */ - /* URL and QR code */ - KPKEntry *entry = self.representedObject; - NSString *url = [entry attributeWithKey:kKPKAttributeKeyOTPOAuthURL].value; - - self.urlTextField.stringValue = @""; - - if(url) { - NSURL *authURL = [NSURL URLWithString:url]; - if(authURL.isTimeOTPURL) { - self.urlTextField.stringValue = authURL.absoluteString; - self.qrCodeImageView.image = [NSImage QRCodeImageWithString:authURL.absoluteString]; - } + if(!self.generator) { + // display issues! + return; } - else { - // generate the URL + + NSURL *authURL = [NSURL URLWithTimeOTPKey:self.generator.data algorithm:self.generator.hashAlgorithm issuer:self.representedEntry.title period:self.generator.timeSlice digits:self.generator.numberOfDigits]; + if(!authURL || !authURL.isTimeOTPURL) { + // display issues + return; } + self.urlTextField.stringValue = authURL.absoluteString; + self.qrCodeImageView.image = [NSImage QRCodeImageWithString:authURL.absoluteString]; + /* secret */ NSString *secret = [self.generator.key base32EncodedStringWithOptions:0]; self.secretTextField.stringValue = secret ? secret : @""; [self.algorithmPopUpButton selectItemWithTag:self.generator.hashAlgorithm]; [self.digitCountPopUpButton selectItemWithTag:self.generator.numberOfDigits]; self.timeSlice = self.generator.timeSlice; - } @end