From 69b58e686d79ab04cd3c01aab7a29e5087eadc2f Mon Sep 17 00:00:00 2001 From: Yishi Lin Date: Wed, 28 Jun 2017 00:18:06 +0800 Subject: [PATCH] Polish the Password class - About "additions", remove "additionKeys" --- .../PasswordDetailTableViewController.swift | 13 ++-- passKit/Models/Password.swift | 60 ++++++++++--------- 2 files changed, 35 insertions(+), 38 deletions(-) diff --git a/pass/Controllers/PasswordDetailTableViewController.swift b/pass/Controllers/PasswordDetailTableViewController.swift index 1bbe900..a910b14 100644 --- a/pass/Controllers/PasswordDetailTableViewController.swift +++ b/pass/Controllers/PasswordDetailTableViewController.swift @@ -278,17 +278,12 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni } // show additional information - let filteredAdditionKeys = password.additionKeys.filter { - $0.lowercased() != "username" && - $0.lowercased() != "password" && - (!$0.hasPrefix("unknown") || !SharedDefaults[.isHideUnknownOn]) && - (!Password.otpKeywords.contains($0) || !SharedDefaults[.isHideOTPOn]) } - + let filteredAdditionKeys = password.getFilteredAdditions() if filteredAdditionKeys.count > 0 { section = TableSection(type: .addition, header: "additions") - for additionKey in filteredAdditionKeys { - section.item.append(TableCell(title: additionKey, content: password.additions[additionKey]!)) - } + filteredAdditionKeys.forEach({ (key: String, value: String) in + section.item.append(TableCell(title: key, content: value)) + }) tableData.append(section) } diff --git a/passKit/Models/Password.swift b/passKit/Models/Password.swift index 78d4826..440bfe5 100644 --- a/passKit/Models/Password.swift +++ b/passKit/Models/Password.swift @@ -36,11 +36,10 @@ public class Password { } } public var password = "" - public var additions = [String: String]() - public var additionKeys = [String]() public var changed: Int = 0 public var plainText = "" + private var additions = [String: String]() private var firstLineIsOTPField = false private var otpToken: Token? @@ -82,16 +81,29 @@ public class Password { self.name = name self.url = url self.plainText = plainText - self.additions.removeAll() - self.additionKeys.removeAll() + additions.removeAll() - // get password and additional fields + // split the plain text let plainTextSplit = plainText.characters.split(maxSplits: 1, omittingEmptySubsequences: false) { $0 == "\n" || $0 == "\r\n" }.map(String.init) - self.password = plainTextSplit.first ?? "" + + // get password + password = plainTextSplit.first ?? "" + + // get additonal fields if plainTextSplit.count == 2 { - (self.additions, self.additionKeys) = Password.getAdditionFields(from: plainTextSplit[1]) + var unknownIndex = 0 + plainTextSplit[1].enumerateLines() { line, _ in + if !line.isEmpty { + var (key, value) = Password.getKeyValuePair(from: line) + if key == nil { + unknownIndex += 1 + key = "unknown \(unknownIndex)" + } + self.additions[key!] = value + } + } } // check whether the first line of the plainText looks like an otp entry @@ -99,7 +111,6 @@ public class Password { if Password.otpKeywords.contains(key ?? "") { firstLineIsOTPField = true self.additions[key!] = value - self.additionKeys.insert(key!, at: 0) } else { firstLineIsOTPField = false } @@ -108,6 +119,18 @@ public class Password { self.updateOtpToken() } + public func getFilteredAdditions() -> [String: String] { + var filteredAdditions = [String: String]() + additions.forEach { (key: String, value: String) in + if key.lowercased() != "username" && key.lowercased() != "password" && + (!key.hasPrefix("unknown") || !SharedDefaults[.isHideUnknownOn]) && + (!Password.otpKeywords.contains(key) || !SharedDefaults[.isHideOTPOn]) { + filteredAdditions[key] = value + } + } + return filteredAdditions + } + public func getUsername() -> String? { return getAdditionValue(withKey: "Username") ?? getAdditionValue(withKey: "username") } @@ -138,27 +161,6 @@ public class Password { return (key, value) } - private static func getAdditionFields(from additionFieldsPlainText: String) -> ([String: String], [String]){ - var additions = [String: String]() - var additionKeys = [String]() - var unknownIndex = 0 - - additionFieldsPlainText.enumerateLines() { line, _ in - if line == "" { - return - } - var (key, value) = getKeyValuePair(from: line) - if key == nil { - unknownIndex += 1 - key = "unknown \(unknownIndex)" - } - additions[key!] = value - additionKeys.append(key!) - } - - return (additions, additionKeys) - } - public func getAdditionsPlainText() -> String { // lines starting from the second let plainTextSplit = plainText.characters.split(maxSplits: 1, omittingEmptySubsequences: false) {