Use computed properties instead of separate getter methods

This commit is contained in:
Danny Moesch 2018-06-23 20:42:56 +02:00 committed by Bob Sun
parent f76721d7fe
commit 904d04d71c
5 changed files with 44 additions and 62 deletions

View file

@ -172,7 +172,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni
self?.setTableData() self?.setTableData()
self?.tableView.reloadData() self?.tableView.reloadData()
self?.editUIBarButtonItem.isEnabled = true self?.editUIBarButtonItem.isEnabled = true
if let urlString = self?.password?.getURLString() { if let urlString = self?.password?.urlString {
if self?.passwordEntity?.image == nil { if self?.passwordEntity?.image == nil {
self?.updatePasswordImage(urlString: urlString) self?.updatePasswordImage(urlString: urlString)
} }
@ -252,10 +252,10 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni
// main section // main section
section = TableSection(type: .main) section = TableSection(type: .main)
let password = self.password! let password = self.password!
if let username = password.getUsername() { if let username = password.username {
section.item.append(TableCell(title: "username", content: username)) section.item.append(TableCell(title: "username", content: username))
} }
if let login = password.getLogin() { if let login = password.login {
section.item.append(TableCell(title: "login", content: login)) section.item.append(TableCell(title: "login", content: login))
} }
section.item.append(TableCell(title: "password", content: password.password)) section.item.append(TableCell(title: "password", content: password.password))
@ -401,7 +401,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni
} }
func openLink() { func openLink() {
var urlString = self.password?.getURLString() ?? "" var urlString = self.password?.urlString ?? ""
if !urlString.lowercased().starts(with: "https://") && !urlString.lowercased().starts(with: "http://") { if !urlString.lowercased().starts(with: "https://") && !urlString.lowercased().starts(with: "http://") {
urlString = "http://\(urlString)" urlString = "http://\(urlString)"
} }

View file

@ -164,7 +164,7 @@ class ExtensionViewController: UIViewController, UITableViewDataSource, UITableV
var decryptedPassword: Password? var decryptedPassword: Password?
do { do {
decryptedPassword = try self.passwordStore.decrypt(passwordEntity: passwordEntity, requestPGPKeyPassphrase: self.requestPGPKeyPassphrase) decryptedPassword = try self.passwordStore.decrypt(passwordEntity: passwordEntity, requestPGPKeyPassphrase: self.requestPGPKeyPassphrase)
let username = decryptedPassword?.getUsername() ?? decryptedPassword?.getLogin() ?? "" let username = decryptedPassword?.username ?? decryptedPassword?.login ?? ""
let password = decryptedPassword?.password ?? "" let password = decryptedPassword?.password ?? ""
DispatchQueue.main.async {// prepare a dictionary to return DispatchQueue.main.async {// prepare a dictionary to return
switch self.extensionAction { switch self.extensionAction {

View file

@ -62,6 +62,10 @@ public class Password {
public var password = "" public var password = ""
public var changed: Int = 0 public var changed: Int = 0
public var plainText = "" public var plainText = ""
public var plainData: Data { return plainText.data(using: .utf8)! }
public var username: String? { return getAdditionValue(withKey: Password.USERNAME_KEYWORD, caseSensitive: false) }
public var login: String? { return getAdditionValue(withKey: Password.LOGIN_KEYWORD, caseSensitive: false) }
public var urlString: String? { return getAdditionValue(withKey: Password.URL_KEYWORD, caseSensitive: false) }
private var additions = [AdditionField]() private var additions = [AdditionField]()
private var firstLineIsOTPField = false private var firstLineIsOTPField = false
@ -180,18 +184,6 @@ public class Password {
} }
} }
public func getUsername() -> String? {
return getAdditionValue(withKey: Password.USERNAME_KEYWORD, caseSensitive: false)
}
public func getLogin() -> String? {
return getAdditionValue(withKey: Password.LOGIN_KEYWORD, caseSensitive: false)
}
public func getURLString() -> String? {
return getAdditionValue(withKey: Password.URL_KEYWORD, caseSensitive: false)
}
// return a key-value pair from the line // return a key-value pair from the line
// key might be nil, if there is no ":" in the line // key might be nil, if there is no ":" in the line
private static func getKeyValuePair(from line: String) -> (key: String?, value: String) { private static func getKeyValuePair(from line: String) -> (key: String?, value: String) {
@ -222,14 +214,6 @@ public class Password {
return plainTextSplit.count == 1 ? "" : plainTextSplit[1] return plainTextSplit.count == 1 ? "" : plainTextSplit[1]
} }
private func getPlainText() -> String {
return self.plainText
}
public func getPlainData() -> Data {
return getPlainText().data(using: .utf8)!
}
private func getAdditionValue(withKey key: String, caseSensitive: Bool = true) -> String? { private func getAdditionValue(withKey key: String, caseSensitive: Bool = true) -> String? {
let searchKey = caseSensitive ? key : key.lowercased() let searchKey = caseSensitive ? key : key.lowercased()
let matchingField = additions.first { (caseSensitive ? $0.title : $0.title.lowercased()) == searchKey } let matchingField = additions.first { (caseSensitive ? $0.title : $0.title.lowercased()) == searchKey }

View file

@ -850,7 +850,7 @@ public class PasswordStore {
guard keyring.keys.count > 0 else { guard keyring.keys.count > 0 else {
throw AppError.PGPPublicKeyNotExistError throw AppError.PGPPublicKeyNotExistError
} }
let plainData = password.getPlainData() let plainData = password.plainData
let encryptedData = try ObjectivePGP.encrypt(plainData, addSignature: false, using: keyring.keys, passphraseForKey: nil) let encryptedData = try ObjectivePGP.encrypt(plainData, addSignature: false, using: keyring.keys, passphraseForKey: nil)
if SharedDefaults[.encryptInArmored] { if SharedDefaults[.encryptInArmored] {
return Armor.armored(encryptedData, as: .message).data(using: .utf8)! return Armor.armored(encryptedData, as: .message).data(using: .utf8)!

View file

@ -41,14 +41,14 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, PasswordTest.EMPTY_STRING) XCTAssertEqual(password.password, PasswordTest.EMPTY_STRING)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), PasswordTest.EMPTY_STRING) XCTAssertEqual(password.getAdditionsPlainText(), PasswordTest.EMPTY_STRING)
XCTAssertTrue(password.getFilteredAdditions().isEmpty) XCTAssertTrue(password.getFilteredAdditions().isEmpty)
XCTAssertNil(password.getUsername()) XCTAssertNil(password.username)
XCTAssertNil(password.getURLString()) XCTAssertNil(password.urlString)
XCTAssertNil(password.getLogin()) XCTAssertNil(password.login)
} }
func testOneEmptyLine() { func testOneEmptyLine() {
@ -58,14 +58,14 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, PasswordTest.EMPTY_STRING) XCTAssertEqual(password.password, PasswordTest.EMPTY_STRING)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), PasswordTest.EMPTY_STRING) XCTAssertEqual(password.getAdditionsPlainText(), PasswordTest.EMPTY_STRING)
XCTAssertTrue(password.getFilteredAdditions().isEmpty) XCTAssertTrue(password.getFilteredAdditions().isEmpty)
XCTAssertNil(password.getUsername()) XCTAssertNil(password.username)
XCTAssertNil(password.getURLString()) XCTAssertNil(password.urlString)
XCTAssertNil(password.getLogin()) XCTAssertNil(password.login)
} }
func testSimplePasswordFile() { func testSimplePasswordFile() {
@ -84,7 +84,7 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, passwordString) XCTAssertEqual(password.password, passwordString)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(urlField, loginField, usernameField, noteField)) XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(urlField, loginField, usernameField, noteField))
XCTAssertTrue(does(password: password, contain: urlField)) XCTAssertTrue(does(password: password, contain: urlField))
@ -92,9 +92,9 @@ class PasswordTest: XCTestCase {
XCTAssertFalse(does(password: password, contain: usernameField)) XCTAssertFalse(does(password: password, contain: usernameField))
XCTAssertTrue(does(password: password, contain: noteField)) XCTAssertTrue(does(password: password, contain: noteField))
XCTAssertEqual(password.getURLString(), urlField.content) XCTAssertEqual(password.urlString, urlField.content)
XCTAssertEqual(password.getLogin(), loginField.content) XCTAssertEqual(password.login, loginField.content)
XCTAssertEqual(password.getUsername(), usernameField.content) XCTAssertEqual(password.username, usernameField.content)
} }
func testTwoPasswords() { func testTwoPasswords() {
@ -109,15 +109,15 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, firstPasswordString) XCTAssertEqual(password.password, firstPasswordString)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(secondPasswordString, urlField.asString)) XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(secondPasswordString, urlField.asString))
XCTAssertTrue(does(password: password, contain: urlField)) XCTAssertTrue(does(password: password, contain: urlField))
XCTAssertTrue(does(password: password, contain: AdditionField(title: "unknown 1", content: secondPasswordString))) XCTAssertTrue(does(password: password, contain: AdditionField(title: "unknown 1", content: secondPasswordString)))
XCTAssertNil(password.getUsername()) XCTAssertNil(password.username)
XCTAssertEqual(password.getURLString(), urlField.content) XCTAssertEqual(password.urlString, urlField.content)
XCTAssertNil(password.getLogin()) XCTAssertNil(password.login)
} }
func testNoPassword() { func testNoPassword() {
@ -130,14 +130,14 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, urlField.asString) XCTAssertEqual(password.password, urlField.asString)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(noteField)) XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(noteField))
XCTAssertTrue(does(password: password, contain: noteField)) XCTAssertTrue(does(password: password, contain: noteField))
XCTAssertNil(password.getUsername()) XCTAssertNil(password.username)
XCTAssertNil(password.getURLString()) XCTAssertNil(password.urlString)
XCTAssertNil(password.getLogin()) XCTAssertNil(password.login)
} }
func testDuplicateKeys() { func testDuplicateKeys() {
@ -152,15 +152,15 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, passwordString) XCTAssertEqual(password.password, passwordString)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(urlField1, urlField2)) XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(urlField1, urlField2))
XCTAssertTrue(does(password: password, contain: urlField1)) XCTAssertTrue(does(password: password, contain: urlField1))
XCTAssertTrue(does(password: password, contain: urlField2)) XCTAssertTrue(does(password: password, contain: urlField2))
XCTAssertNil(password.getUsername()) XCTAssertNil(password.username)
XCTAssertEqual(password.getURLString(), urlField1.content) XCTAssertEqual(password.urlString, urlField1.content)
XCTAssertNil(password.getLogin()) XCTAssertNil(password.login)
} }
func testUnknownKeys() { func testUnknownKeys() {
@ -183,7 +183,7 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, passwordString) XCTAssertEqual(password.password, passwordString)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(value1, noteField.asString, value2, value3, urlField.asString, value4)) XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(value1, noteField.asString, value2, value3, urlField.asString, value4))
XCTAssertTrue(does(password: password, contain: AdditionField(title: "unknown 1", content: value1))) XCTAssertTrue(does(password: password, contain: AdditionField(title: "unknown 1", content: value1)))
@ -193,9 +193,9 @@ class PasswordTest: XCTestCase {
XCTAssertTrue(does(password: password, contain: urlField)) XCTAssertTrue(does(password: password, contain: urlField))
XCTAssertTrue(does(password: password, contain: AdditionField(title: "unknown 4", content: value4))) XCTAssertTrue(does(password: password, contain: AdditionField(title: "unknown 4", content: value4)))
XCTAssertNil(password.getUsername()) XCTAssertNil(password.username)
XCTAssertEqual(password.getURLString(), urlField.content) XCTAssertEqual(password.urlString, urlField.content)
XCTAssertNil(password.getLogin()) XCTAssertNil(password.login)
} }
func testPasswordFileWithOtpToken() { func testPasswordFileWithOtpToken() {
@ -210,7 +210,7 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, passwordString) XCTAssertEqual(password.password, passwordString)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(noteField.asString, otpToken)) XCTAssertEqual(password.getAdditionsPlainText(), asPlainText(noteField.asString, otpToken))
@ -226,13 +226,13 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, otpToken) XCTAssertEqual(password.password, otpToken)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), PasswordTest.EMPTY_STRING) XCTAssertEqual(password.getAdditionsPlainText(), PasswordTest.EMPTY_STRING)
XCTAssertNil(password.getUsername()) XCTAssertNil(password.username)
XCTAssertNil(password.getURLString()) XCTAssertNil(password.urlString)
XCTAssertNil(password.getLogin()) XCTAssertNil(password.login)
XCTAssertEqual(password.otpType, OtpType.totp) XCTAssertEqual(password.otpType, OtpType.totp)
XCTAssertNotNil(password.getOtp()) XCTAssertNotNil(password.getOtp())
@ -246,9 +246,7 @@ class PasswordTest: XCTestCase {
let password = getPasswordObjectWith(content: fileContent) let password = getPasswordObjectWith(content: fileContent)
XCTAssertEqual(password.password, otpToken) XCTAssertEqual(password.password, otpToken)
XCTAssertEqual(password.getPlainData(), fileContent.data(using: .utf8)) XCTAssertEqual(password.plainData, fileContent.data(using: .utf8))
XCTAssertEqual(password.getAdditionsPlainText(), PasswordTest.EMPTY_STRING)
XCTAssertEqual(password.otpType, OtpType.none) XCTAssertEqual(password.otpType, OtpType.none)
XCTAssertNil(password.getOtp()) XCTAssertNil(password.getOtp())