passforios/passKit/Helpers/Utils.swift

127 lines
4.1 KiB
Swift
Raw Normal View History

2017-02-08 19:27:57 +08:00
//
// Utils.swift
// pass
//
// Created by Mingshen Sun on 8/2/2017.
// Copyright © 2017 Bob Sun. All rights reserved.
//
import Foundation
import SwiftyUserDefaults
import KeychainAccess
2017-02-08 19:27:57 +08:00
public class Utils {
public static func removeFileIfExists(atPath path: String) {
2017-02-08 19:27:57 +08:00
let fm = FileManager.default
do {
if fm.fileExists(atPath: path) {
try fm.removeItem(atPath: path)
}
} catch {
print(error)
}
}
public static func removeFileIfExists(at url: URL) {
2017-02-08 19:27:57 +08:00
removeFileIfExists(atPath: url.path)
}
public static func getLastSyncedTimeString() -> String {
guard let lastSyncedTime = SharedDefaults[.lastSyncedTime] else {
return "Oops! Sync again?"
}
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
return formatter.string(from: lastSyncedTime)
}
2017-02-11 22:00:04 +08:00
public static func generatePassword(length: Int) -> String{
switch SharedDefaults[.passwordGeneratorFlavor] {
case "Random":
return randomString(length: length)
case "Apple":
return Keychain.generatePassword()
default:
return randomString(length: length)
}
}
public static func randomString(length: Int) -> String {
2017-02-11 22:00:04 +08:00
2017-04-07 17:46:11 -07:00
let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*_+-="
2017-02-11 22:00:04 +08:00
let len = UInt32(letters.length)
var randomString = ""
for _ in 0 ..< length {
let rand = arc4random_uniform(len)
var nextChar = letters.character(at: Int(rand))
randomString += NSString(characters: &nextChar, length: 1) as String
}
return randomString
}
2017-02-16 00:54:42 +08:00
public static func getPasswordFromKeychain(name: String) -> String? {
let keychain = Keychain(service: Globals.bundleIdentifier, accessGroup: Globals.groupIdentifier)
do {
return try keychain.getString(name)
} catch {
print(error)
}
return nil
}
public static func addPasswordToKeychain(name: String, password: String?) {
let keychain = Keychain(service: Globals.bundleIdentifier, accessGroup: Globals.groupIdentifier)
keychain[name] = password
}
public static func removeKeychain(name: String) {
let keychain = Keychain(service: Globals.bundleIdentifier, accessGroup: Globals.groupIdentifier)
do {
try keychain.remove(name)
} catch {
print(error)
}
}
public static func removeAllKeychain() {
let keychain = Keychain(service: Globals.bundleIdentifier, accessGroup: Globals.groupIdentifier)
do {
try keychain.removeAll()
} catch {
print(error)
}
}
public static func copyToPasteboard(textToCopy: String?) {
2017-02-23 17:56:12 +08:00
guard textToCopy != nil else {
return
}
UIPasteboard.general.string = textToCopy
}
public static func attributedPassword(plainPassword: String) -> NSAttributedString{
2017-02-26 00:58:18 +08:00
let attributedPassword = NSMutableAttributedString.init(string: plainPassword)
// draw all digits in the password into red
// draw all punctuation characters in the password into blue
for (index, element) in plainPassword.unicodeScalars.enumerated() {
2017-07-07 11:32:03 +08:00
var charColor = UIColor.darkText
2017-02-26 00:58:18 +08:00
if NSCharacterSet.decimalDigits.contains(element) {
charColor = Globals.digitColor
} else if !NSCharacterSet.letters.contains(element) {
2017-10-07 23:05:26 -07:00
charColor = Globals.symbolColor
} else {
charColor = Globals.letterColor
2017-02-26 00:58:18 +08:00
}
attributedPassword.addAttribute(NSAttributedStringKey.foregroundColor, value: charColor, range: NSRange(location: index, length: 1))
2017-02-26 00:58:18 +08:00
}
return attributedPassword
}
public static func initDefaultKeys() {
if SharedDefaults[.passwordGeneratorFlavor] == "" {
SharedDefaults[.passwordGeneratorFlavor] = "Random"
}
}
2017-02-08 19:27:57 +08:00
}