Use computed properties instead of separate getter methods
This commit is contained in:
parent
f76721d7fe
commit
904d04d71c
5 changed files with 44 additions and 62 deletions
|
|
@ -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)"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 }
|
||||||
|
|
|
||||||
|
|
@ -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)!
|
||||||
|
|
|
||||||
|
|
@ -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())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue