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