Filling the OTP Setup view works

QR Image parsing and update works as well.
Save to entry and other updates still missing
This commit is contained in:
Michael Starke
2021-10-20 15:26:09 +02:00
parent 83f8158b21
commit a34c0eed4e
4 changed files with 30 additions and 28 deletions

View File

@@ -1,4 +1,4 @@
github "sparkle-project/Sparkle" ~> 1.22 github "sparkle-project/Sparkle" ~> 1.22
github "MacPass/TransformerKit" "a8b5bb73cc327ec6798569b865c32fec5eb2289f" github "MacPass/TransformerKit" "a8b5bb73cc327ec6798569b865c32fec5eb2289f"
github "MacPass/KeePassKit" "8ce0fda4ca10c41f022da3d9e3539e1686aa4460" github "MacPass/KeePassKit" "61bcb5718ea6f09725595f7e1f1b31ded0bb704e"
github "mstarke/HNHUi" ~> 4.0 github "mstarke/HNHUi" ~> 4.0

View File

@@ -1,4 +1,4 @@
github "MacPass/KeePassKit" "8ce0fda4ca10c41f022da3d9e3539e1686aa4460" github "MacPass/KeePassKit" "61bcb5718ea6f09725595f7e1f1b31ded0bb704e"
github "MacPass/KissXML" "933f04fe5ad95c2be07ec0c2f801e140007f20fa" github "MacPass/KissXML" "933f04fe5ad95c2be07ec0c2f801e140007f20fa"
github "MacPass/TransformerKit" "a8b5bb73cc327ec6798569b865c32fec5eb2289f" github "MacPass/TransformerKit" "a8b5bb73cc327ec6798569b865c32fec5eb2289f"
github "mstarke/HNHUi" "4.0.4" github "mstarke/HNHUi" "4.0.4"

View File

@@ -97,7 +97,7 @@
<rect key="frame" x="20" y="26" width="233" height="396"/> <rect key="frame" x="20" y="26" width="233" height="396"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="F3N-QI-Di5"> <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="F3N-QI-Di5">
<rect key="frame" x="1" y="1" width="231" height="394"/> <rect key="frame" x="1" y="1" width="231" height="394"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" autosaveColumns="NO" rowHeight="36" rowSizeStyle="automatic" viewBased="YES" id="137"> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" autosaveColumns="NO" rowHeight="36" rowSizeStyle="automatic" viewBased="YES" id="137">
<rect key="frame" x="0.0" y="0.0" width="231" height="394"/> <rect key="frame" x="0.0" y="0.0" width="231" height="394"/>
@@ -792,7 +792,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView identifier="SelectedCell" translatesAutoresizingMaskIntoConstraints="NO" id="196" customClass="MPCustomFieldTableCellView"> <tableCellView identifier="SelectedCell" translatesAutoresizingMaskIntoConstraints="NO" id="196" customClass="MPCustomFieldTableCellView">
<rect key="frame" x="0.0" y="0.0" width="227" height="53"/> <rect key="frame" x="1" y="1" width="227" height="53"/>
<subviews> <subviews>
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="199" customClass="HNHUISecureTextField"> <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="199" customClass="HNHUISecureTextField">
<rect key="frame" x="3" y="10" width="114" height="21"/> <rect key="frame" x="3" y="10" width="114" height="21"/>

View File

@@ -151,12 +151,10 @@ typedef NS_ENUM(NSUInteger, MPOTPType) {
MPOTPUpdateSourceTimeSlice, MPOTPUpdateSourceTimeSlice,
MPOTPUpdateSourceType, MPOTPUpdateSourceType,
MPOTPUpdateSourceEntry MPOTPUpdateSourceEntry
*/ */
if(!self.generator) { if(source != MPOTPUpdateSourceEntry) {
self.generator = [[KPKTimeOTPGenerator alloc] initWithAttributes:((KPKEntry *)self.representedObject).attributes]; NSAssert(self.generator, @"OTP Generator needs to be set when change source is not entry");
} }
switch(source) { switch(source) {
case MPOTPUpdateSourceQRImage: { case MPOTPUpdateSourceQRImage: {
NSString *qrCodeString = self.qrCodeImageView.image.QRCodeString; NSString *qrCodeString = self.qrCodeImageView.image.QRCodeString;
@@ -169,47 +167,51 @@ typedef NS_ENUM(NSUInteger, MPOTPType) {
self.generator = [[KPKTimeOTPGenerator alloc] initWithURL:self.urlTextField.stringValue]; self.generator = [[KPKTimeOTPGenerator alloc] initWithURL:self.urlTextField.stringValue];
break; break;
case MPOTPUpdateSourceEntry:
if(self.representedEntry.hasTimeOTP) {
self.generator = [[KPKTimeOTPGenerator alloc] initWithAttributes:self.representedEntry.attributes];
}
else {
self.generator = [[KPKTimeOTPGenerator alloc] init];
}
break;
case MPOTPUpdateSourceSecret: case MPOTPUpdateSourceSecret:
self.generator.key = [NSData dataWithBase32EncodedString:self.secretTextField.stringValue]; self.generator.key = [NSData dataWithBase32EncodedString:self.secretTextField.stringValue];
break; break;
case MPOTPUpdateSourceAlgorithm: case MPOTPUpdateSourceAlgorithm:
//self.generator.hashAlgorithm = self.generator.hashAlgorithm = (KPKOTPHashAlgorithm)self.algorithmPopUpButton.selectedTag;
break; break;
case MPOTPUpdateSourceTimeSlice: case MPOTPUpdateSourceTimeSlice:
//self.generator.timeSlice = self.generator.timeSlice = self.timeStepTextField.integerValue;
break;
case MPOTPUpdateSourceEntry:
break; break;
default: default:
return; 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 */ if(!self.generator) {
KPKEntry *entry = self.representedObject; // display issues!
NSString *url = [entry attributeWithKey:kKPKAttributeKeyOTPOAuthURL].value; return;
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];
}
} }
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 */ /* secret */
NSString *secret = [self.generator.key base32EncodedStringWithOptions:0]; NSString *secret = [self.generator.key base32EncodedStringWithOptions:0];
self.secretTextField.stringValue = secret ? secret : @""; self.secretTextField.stringValue = secret ? secret : @"";
[self.algorithmPopUpButton selectItemWithTag:self.generator.hashAlgorithm]; [self.algorithmPopUpButton selectItemWithTag:self.generator.hashAlgorithm];
[self.digitCountPopUpButton selectItemWithTag:self.generator.numberOfDigits]; [self.digitCountPopUpButton selectItemWithTag:self.generator.numberOfDigits];
self.timeSlice = self.generator.timeSlice; self.timeSlice = self.generator.timeSlice;
} }
@end @end