remove some unwraps

This commit is contained in:
Mingshen Sun 2019-06-09 22:18:54 -07:00
parent 15518733b0
commit 82232be92c
No known key found for this signature in database
GPG key ID: 1F86BA2052FED3B4
5 changed files with 31 additions and 27 deletions

View file

@ -35,8 +35,8 @@ class AdvancedSettingsTableViewController: UITableViewController {
} }
private func setGitSignatureText() { private func setGitSignatureText() {
let gitSignatureName = passwordStore.gitSignatureForNow.name! let gitSignatureName = passwordStore.gitSignatureForNow?.name ?? ""
let gitSignatureEmail = passwordStore.gitSignatureForNow.email! let gitSignatureEmail = passwordStore.gitSignatureForNow?.email ?? ""
self.gitSignatureTableViewCell.detailTextLabel?.font = UIFont.systemFont(ofSize: 14) self.gitSignatureTableViewCell.detailTextLabel?.font = UIFont.systemFont(ofSize: 14)
self.gitSignatureTableViewCell.detailTextLabel?.text = "\(gitSignatureName) <\(gitSignatureEmail)>" self.gitSignatureTableViewCell.detailTextLabel?.text = "\(gitSignatureName) <\(gitSignatureEmail)>"
if SharedDefaults[.gitSignatureName] == nil && SharedDefaults[.gitSignatureEmail] == nil { if SharedDefaults[.gitSignatureName] == nil && SharedDefaults[.gitSignatureEmail] == nil {

View file

@ -21,8 +21,8 @@ class GitConfigSettingTableViewController: UITableViewController {
tableView.rowHeight = UITableView.automaticDimension tableView.rowHeight = UITableView.automaticDimension
let signature = passwordStore.gitSignatureForNow let signature = passwordStore.gitSignatureForNow
nameTextField.placeholder = signature.name nameTextField.placeholder = signature?.name ?? ""
emailTextField.placeholder = signature.email emailTextField.placeholder = signature?.email ?? ""
nameTextField.text = SharedDefaults[.gitSignatureName] nameTextField.text = SharedDefaults[.gitSignatureName]
emailTextField.text = SharedDefaults[.gitSignatureEmail] emailTextField.text = SharedDefaults[.gitSignatureEmail]
} }

View file

@ -13,9 +13,12 @@ public enum AppError: Error {
case KeyImport case KeyImport
case PasswordDuplicated case PasswordDuplicated
case GitReset case GitReset
case GitCommit
case PasswordEntity
case PgpPublicKeyNotExist case PgpPublicKeyNotExist
case WrongPasswordFilename case WrongPasswordFilename
case Decryption case Decryption
case Encryption
case Unknown case Unknown
} }

View file

@ -33,11 +33,11 @@ extension PasswordEntity {
return passwordCategoryArray return passwordCategoryArray
} }
public func getURL() -> URL? { public func getURL() throws -> URL {
if let p = getPath().stringByAddingPercentEncodingForRFC3986() { if let p = getPath().stringByAddingPercentEncodingForRFC3986(), let u = URL(string: p) {
return URL(string: p) return u
} }
return nil throw AppError.Unknown
} }
// XXX: define some getters to get core data, we need to consider // XXX: define some getters to get core data, we need to consider

View file

@ -30,11 +30,7 @@ public class PasswordStore {
public var pgpKeyID: String? public var pgpKeyID: String?
public var publicKey: GopenpgpwrapperKey? { public var publicKey: GopenpgpwrapperKey? {
didSet { didSet {
if publicKey != nil { pgpKeyID = publicKey?.getID()
pgpKeyID = publicKey!.getID()
} else {
pgpKeyID = nil
}
} }
} }
public var privateKey: GopenpgpwrapperKey? public var privateKey: GopenpgpwrapperKey?
@ -42,14 +38,14 @@ public class PasswordStore {
case PUBLIC, PRIVATE case PUBLIC, PRIVATE
} }
public var gitSignatureForNow: GTSignature { public var gitSignatureForNow: GTSignature? {
get { get {
let gitSignatureName = SharedDefaults[.gitSignatureName] ?? Globals.gitSignatureDefaultName let gitSignatureName = SharedDefaults[.gitSignatureName] ?? Globals.gitSignatureDefaultName
let gitSignatureEmail = SharedDefaults[.gitSignatureEmail] ?? Globals.gitSignatureDefaultEmail let gitSignatureEmail = SharedDefaults[.gitSignatureEmail] ?? Globals.gitSignatureDefaultEmail
return GTSignature(name: gitSignatureName, email: gitSignatureEmail, time: Date())! return GTSignature(name: gitSignatureName, email: gitSignatureEmail, time: Date())
} }
} }
public var pgpKeyPassphrase: String? { public var pgpKeyPassphrase: String? {
set { set {
Utils.addPasswordToKeychain(name: "pgpKeyPassphrase", password: newValue) Utils.addPasswordToKeychain(name: "pgpKeyPassphrase", password: newValue)
@ -557,7 +553,9 @@ public class PasswordStore {
let commitEnum = try GTEnumerator(repository: storeRepository) let commitEnum = try GTEnumerator(repository: storeRepository)
try commitEnum.pushSHA(headReference.targetOID!.sha) try commitEnum.pushSHA(headReference.targetOID!.sha)
let parent = commitEnum.nextObject() as! GTCommit let parent = commitEnum.nextObject() as! GTCommit
let signature = gitSignatureForNow guard let signature = gitSignatureForNow else {
throw AppError.GitCommit
}
let commit = try storeRepository.createCommit(with: newTree, message: message, author: signature, committer: signature, parents: [parent], updatingReferenceNamed: headReference.name) let commit = try storeRepository.createCommit(with: newTree, message: message, author: signature, committer: signature, parents: [parent], updatingReferenceNamed: headReference.name)
return commit return commit
} }
@ -652,7 +650,7 @@ public class PasswordStore {
} }
public func delete(passwordEntity: PasswordEntity) throws { public func delete(passwordEntity: PasswordEntity) throws {
let deletedFileURL = passwordEntity.getURL()! let deletedFileURL = try passwordEntity.getURL()
try gitRm(path: deletedFileURL.path) try gitRm(path: deletedFileURL.path)
try deletePasswordEntities(passwordEntity: passwordEntity) try deletePasswordEntities(passwordEntity: passwordEntity)
try deleteDirectoryTree(at: deletedFileURL) try deleteDirectoryTree(at: deletedFileURL)
@ -662,18 +660,19 @@ public class PasswordStore {
public func edit(passwordEntity: PasswordEntity, password: Password) throws -> PasswordEntity? { public func edit(passwordEntity: PasswordEntity, password: Password) throws -> PasswordEntity? {
var newPasswordEntity: PasswordEntity? = passwordEntity var newPasswordEntity: PasswordEntity? = passwordEntity
let url = try passwordEntity.getURL()
if password.changed&PasswordChange.content.rawValue != 0 { if password.changed&PasswordChange.content.rawValue != 0 {
let saveURL = storeURL.appendingPathComponent(passwordEntity.getURL()!.path) let saveURL = storeURL.appendingPathComponent(url.path)
try self.encrypt(password: password).write(to: saveURL) try self.encrypt(password: password).write(to: saveURL)
try gitAdd(path: passwordEntity.getURL()!.path) try gitAdd(path: saveURL.path)
let _ = try gitCommit(message: "EditPassword.".localize(passwordEntity.getURL()!.deletingPathExtension().path.removingPercentEncoding!)) let _ = try gitCommit(message: "EditPassword.".localize(url.deletingPathExtension().path.removingPercentEncoding!))
newPasswordEntity = passwordEntity newPasswordEntity = passwordEntity
newPasswordEntity?.synced = false newPasswordEntity?.synced = false
} }
if password.changed&PasswordChange.path.rawValue != 0 { if password.changed&PasswordChange.path.rawValue != 0 {
let deletedFileURL = passwordEntity.getURL()! let deletedFileURL = url
// add // add
try createDirectoryTree(at: password.url) try createDirectoryTree(at: password.url)
newPasswordEntity = try addPasswordEntities(password: password) newPasswordEntity = try addPasswordEntities(password: password)
@ -823,11 +822,11 @@ public class PasswordStore {
if passphrase == nil { if passphrase == nil {
passphrase = requestPGPKeyPassphrase() passphrase = requestPGPKeyPassphrase()
} }
let decryptedData = privateKey?.decrypt(encryptedData, passphrase: passphrase) guard let decryptedData = privateKey?.decrypt(encryptedData, passphrase: passphrase) else {
let plainText = String(data: decryptedData!, encoding: .utf8) ?? ""
guard let url = passwordEntity.getURL() else {
throw AppError.Decryption throw AppError.Decryption
} }
let plainText = String(data: decryptedData, encoding: .utf8) ?? ""
let url = try passwordEntity.getURL()
return Password(name: passwordEntity.getName(), url: url, plainText: plainText) return Password(name: passwordEntity.getName(), url: url, plainText: plainText)
} }
@ -836,9 +835,11 @@ public class PasswordStore {
throw AppError.PgpPublicKeyNotExist throw AppError.PgpPublicKeyNotExist
} }
let plainData = password.plainData let plainData = password.plainData
let encryptedData = publicKey?.encrypt(plainData, armor: SharedDefaults[.encryptInArmored]) guard let encryptedData = publicKey?.encrypt(plainData, armor: SharedDefaults[.encryptInArmored]) else {
throw AppError.Encryption
}
return encryptedData! return encryptedData
} }
public func removePGPKeys() { public func removePGPKeys() {