Advertisement
Guest User

Untitled

a guest
Sep 4th, 2017
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. func connect() {
  2. //Handle the connection to the VPN
  3. }
  4.  
  5. NEVPNManager.sharedManager().loadFromPreferencesWithCompletionHandler { error in
  6. // setup the config:
  7. let password = vpnAccount!.vpnPassword
  8. let vpnhost = vpnAccount!.vpnHost
  9. let p = NEVPNProtocolIKEv2()
  10. p.username = username
  11. p.localIdentifier = username
  12. p.serverAddress = vpnhost
  13. p.remoteIdentifier = vpnhost
  14. p.authenticationMethod = .None
  15. p.passwordReference = passwordRef
  16. p.useExtendedAuthentication = true
  17. p.serverCertificateIssuerCommonName = vpnhost
  18. p.disconnectOnSleep = false
  19.  
  20.  
  21. var rules = [NEOnDemandRule]()
  22. let rule = NEOnDemandRuleConnect()
  23. rule.interfaceTypeMatch = .Any
  24. rules.append(rule)
  25.  
  26. NEVPNManager.sharedManager().localizedDescription = "My VPN"
  27. NEVPNManager.sharedManager().protocolConfiguration = p
  28. NEVPNManager.sharedManager().onDemandRules = rules
  29. NEVPNManager.sharedManager().onDemandEnabled = true
  30. NEVPNManager.sharedManager().enabled = true
  31. NEVPNManager.sharedManager().saveToPreferencesWithCompletionHandler { error in
  32. guard error == nil else {
  33. print("NEVPNManager.saveToPreferencesWithCompletionHandler failed: (error!.localizedDescription)")
  34. return
  35. }
  36. VPNManager.sharedManager.startVPNTunnel()
  37. }
  38. }
  39.  
  40. loadFromPreferencesWithCompletionHandler{
  41. ...
  42. saveToPreferencesWithCompletionHandler{
  43. startVPNTunnel
  44. }
  45. }
  46.  
  47. let password = vpnAccount!.vpnPassword
  48. vpnAccount!.setPersistenRef(username, password: password!)
  49. let passwordRef = vpnAccount!.persistentRef
  50.  
  51. class func persistentRef(_ key: String) -> Data? {
  52. let query: [AnyHashable: Any] = [
  53. kSecClass as AnyHashable: kSecClassGenericPassword,
  54. kSecAttrGeneric as AnyHashable: key,
  55. kSecAttrAccount as AnyHashable: key,
  56. kSecAttrAccessible as AnyHashable: kSecAttrAccessibleAlways,
  57. kSecMatchLimit as AnyHashable: kSecMatchLimitOne,
  58. kSecAttrService as AnyHashable: Bundle.main.bundleIdentifier!,
  59. kSecReturnPersistentRef as AnyHashable: kCFBooleanTrue
  60. ]
  61.  
  62. var secItem: AnyObject?
  63. let result = SecItemCopyMatching(query as CFDictionary, &secItem)
  64. if result != errSecSuccess {
  65. return nil
  66. }
  67.  
  68. return secItem as? Data
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement