You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
diplomatic-quarter/ios/Runner/Helper/Extensions.swift

133 lines
3.7 KiB
Swift

4 years ago
//
// Extensions.swift
// Runner
//
// Created by ZiKambrani on 04/04/1442 AH.
//
import UIKit
extension String{
func toUrl() -> URL?{
return URL(string: self)
}
func removeSpace() -> String?{
return self.replacingOccurrences(of: " ", with: "")
}
4 years ago
}
extension Bundle {
func certificate(named name: String) -> SecCertificate {
let cerURL = self.url(forResource: name, withExtension: "cer")!
let cerData = try! Data(contentsOf: cerURL)
let cer = SecCertificateCreateWithData(nil, cerData as CFData)!
return cer
}
func identity(named name: String, password: String) -> SecIdentity {
let p12URL = self.url(forResource: name, withExtension: "p12")!
let p12Data = try! Data(contentsOf: p12URL)
var importedCF: CFArray? = nil
let options = [kSecImportExportPassphrase as String: password]
let err = SecPKCS12Import(p12Data as CFData, options as CFDictionary, &importedCF)
precondition(err == errSecSuccess)
let imported = importedCF! as NSArray as! [[String:AnyObject]]
precondition(imported.count == 1)
return (imported[0][kSecImportItemIdentity as String]!) as! SecIdentity
}
}
extension SecCertificate{
func trust() -> Bool?{
var optionalTrust: SecTrust?
let policy = SecPolicyCreateBasicX509()
let status = SecTrustCreateWithCertificates([self] as AnyObject,
policy,
&optionalTrust)
guard status == errSecSuccess else { return false}
let trust = optionalTrust!
let stat = optionalTrust?.evaluateAllowing(rootCertificates: [self])
return stat
}
func secTrustObject() -> SecTrust?{
var optionalTrust: SecTrust?
let policy = SecPolicyCreateBasicX509()
let status = SecTrustCreateWithCertificates([self] as AnyObject,
policy,
&optionalTrust)
return optionalTrust
}
}
extension SecTrust {
func evaluate() -> Bool {
var trustResult: SecTrustResultType = .invalid
let err = SecTrustEvaluate(self, &trustResult)
guard err == errSecSuccess else { return false }
return [.proceed, .unspecified].contains(trustResult)
}
func evaluateAllowing(rootCertificates: [SecCertificate]) -> Bool {
// Apply our custom root to the trust object.
var err = SecTrustSetAnchorCertificates(self, rootCertificates as CFArray)
guard err == errSecSuccess else { return false }
// Re-enable the system's built-in root certificates.
err = SecTrustSetAnchorCertificatesOnly(self, false)
guard err == errSecSuccess else { return false }
// Run a trust evaluation and only allow the connection if it succeeds.
return self.evaluate()
}
}
extension UIView{
func show(){
self.alpha = 0.0
self.isHidden = false
UIView.animate(withDuration: 0.25, animations: {
self.alpha = 1
}) { (complete) in
}
}
func hide(){
UIView.animate(withDuration: 0.25, animations: {
self.alpha = 0.0
}) { (complete) in
self.isHidden = true
}
}
}
extension UIViewController{
func showAlert(withTitle: String, message: String){
let alert = UIAlertController(title: withTitle, message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .destructive, handler: nil))
present(alert, animated: true) {
}
}
}