Tweak Password class

This commit is contained in:
Danny Moesch 2018-12-01 13:27:30 +01:00 committed by Bob Sun
parent 3cd8df310c
commit d4d8d7267a
3 changed files with 12 additions and 14 deletions

View file

@ -172,7 +172,7 @@ class ExtensionViewController: UIViewController, UITableViewDataSource, UITableV
let extensionItem = NSExtensionItem() let extensionItem = NSExtensionItem()
var returnDictionary = [OnePasswordExtensionKey.usernameKey: username, var returnDictionary = [OnePasswordExtensionKey.usernameKey: username,
OnePasswordExtensionKey.passwordKey: password] OnePasswordExtensionKey.passwordKey: password]
if let totpPassword = decryptedPassword?.getOtp() { if let totpPassword = decryptedPassword?.currentOtp {
returnDictionary[OnePasswordExtensionKey.totpKey] = totpPassword returnDictionary[OnePasswordExtensionKey.totpKey] = totpPassword
} }
extensionItem.attachments = [NSItemProvider(item: returnDictionary as NSSecureCoding, typeIdentifier: String(kUTTypePropertyList))] extensionItem.attachments = [NSItemProvider(item: returnDictionary as NSSecureCoding, typeIdentifier: String(kUTTypePropertyList))]

View file

@ -6,7 +6,6 @@
// Copyright © 2017 Bob Sun. All rights reserved. // Copyright © 2017 Bob Sun. All rights reserved.
// //
import SwiftyUserDefaults
import OneTimePassword import OneTimePassword
import Base32 import Base32
@ -56,6 +55,10 @@ public class Password {
return getAdditionValue(withKey: Constants.URL_KEYWORD) return getAdditionValue(withKey: Constants.URL_KEYWORD)
} }
public var currentOtp: String? {
return otpToken?.currentPassword
}
public init(name: String, url: URL, plainText: String) { public init(name: String, url: URL, plainText: String) {
self.name = name self.name = name
self.url = url self.url = url
@ -83,7 +86,7 @@ public class Password {
} }
private func initEverything() { private func initEverything() {
parser = Parser(plainText: self.plainText) parser = Parser(plainText: plainText)
additions = parser.additionFields additions = parser.additionFields
// Check whether the first line looks like an otp entry. // Check whether the first line looks like an otp entry.
@ -95,9 +98,9 @@ public class Password {
private func checkPasswordForOtpToken() { private func checkPasswordForOtpToken() {
let (key, value) = Parser.getKeyValuePair(from: password) let (key, value) = Parser.getKeyValuePair(from: password)
if Constants.OTP_KEYWORDS.contains(key ?? "") { if let key = key, Constants.OTP_KEYWORDS.contains(key) {
firstLineIsOTPField = true firstLineIsOTPField = true
additions.append(key! => value) additions.append(key => value)
} else { } else {
firstLineIsOTPField = false firstLineIsOTPField = false
} }
@ -114,7 +117,7 @@ public class Password {
} }
private func getAdditionValue(withKey key: String, caseSensitive: Bool = false) -> String? { private func getAdditionValue(withKey key: String, caseSensitive: Bool = false) -> String? {
let toLowercase = { (string: String) -> String in return caseSensitive ? string : string.lowercased() } let toLowercase = { (string: String) -> String in caseSensitive ? string : string.lowercased() }
return additions.first(where: { toLowercase($0.title) == toLowercase(key) })?.content return additions.first(where: { toLowercase($0.title) == toLowercase(key) })?.content
} }
@ -240,11 +243,6 @@ public class Password {
return (description, otp) return (description, otp)
} }
// return the password strings
public func getOtp() -> String? {
return self.otpToken?.currentPassword
}
// return the password strings // return the password strings
// it is guaranteed that it is a HOTP password when we call this // it is guaranteed that it is a HOTP password when we call this
public func getNextHotp() -> String? { public func getNextHotp() -> String? {

View file

@ -167,7 +167,7 @@ class PasswordTest: XCTestCase {
XCTAssertEqual(password.additionsPlainText, additions) XCTAssertEqual(password.additionsPlainText, additions)
XCTAssertEqual(password.otpType, OtpType.totp) XCTAssertEqual(password.otpType, OtpType.totp)
XCTAssertNotNil(password.getOtp()) XCTAssertNotNil(password.currentOtp)
} }
func testFirstLineIsOtpToken() { func testFirstLineIsOtpToken() {
@ -182,7 +182,7 @@ class PasswordTest: XCTestCase {
XCTAssertNil(password.login) XCTAssertNil(password.login)
XCTAssertEqual(password.otpType, OtpType.totp) XCTAssertEqual(password.otpType, OtpType.totp)
XCTAssertNotNil(password.getOtp()) XCTAssertNotNil(password.currentOtp)
} }
func testWrongOtpToken() { func testWrongOtpToken() {
@ -194,7 +194,7 @@ class PasswordTest: XCTestCase {
XCTAssertTrue(password.additionsPlainText.isEmpty) XCTAssertTrue(password.additionsPlainText.isEmpty)
XCTAssertEqual(password.otpType, OtpType.none) XCTAssertEqual(password.otpType, OtpType.none)
XCTAssertNil(password.getOtp()) XCTAssertNil(password.currentOtp)
} }
func testEmptyMultilineValues() { func testEmptyMultilineValues() {