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?.tableView.reloadData()
self?.editUIBarButtonItem.isEnabled = true
if let urlString = self?.password?.getURLString() {
if let urlString = self?.password?.urlString {
if self?.passwordEntity?.image == nil {
self?.updatePasswordImage(urlString: urlString)
}
@ -252,10 +252,10 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni
// main section
section = TableSection(type: .main)
let password = self.password!
if let username = password.getUsername() {
if let username = password.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: "password", content: password.password))
@ -401,7 +401,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni
}
func openLink() {
var urlString = self.password?.getURLString() ?? ""
var urlString = self.password?.urlString ?? ""
if !urlString.lowercased().starts(with: "https://") && !urlString.lowercased().starts(with: "http://") {
urlString = "http://\(urlString)"
}

View file

@ -164,7 +164,7 @@ class ExtensionViewController: UIViewController, UITableViewDataSource, UITableV
var decryptedPassword: Password?
do {
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 ?? ""
DispatchQueue.main.async {// prepare a dictionary to return
switch self.extensionAction {

View file

@ -62,6 +62,10 @@ public class Password {
public var password = ""
public var changed: Int = 0
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 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
// key might be nil, if there is no ":" in the line
private static func getKeyValuePair(from line: String) -> (key: String?, value: String) {
@ -222,14 +214,6 @@ public class Password {
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? {
let searchKey = caseSensitive ? key : key.lowercased()
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 {
throw AppError.PGPPublicKeyNotExistError
}
let plainData = password.getPlainData()
let plainData = password.plainData
let encryptedData = try ObjectivePGP.encrypt(plainData, addSignature: false, using: keyring.keys, passphraseForKey: nil)
if SharedDefaults[.encryptInArmored] {
return Armor.armored(encryptedData, as: .message).data(using: .utf8)!

View file

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