Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func connect() {
- //Handle the connection to the VPN
- }
- NEVPNManager.sharedManager().loadFromPreferencesWithCompletionHandler { error in
- // setup the config:
- let password = vpnAccount!.vpnPassword
- let vpnhost = vpnAccount!.vpnHost
- let p = NEVPNProtocolIKEv2()
- p.username = username
- p.localIdentifier = username
- p.serverAddress = vpnhost
- p.remoteIdentifier = vpnhost
- p.authenticationMethod = .None
- p.passwordReference = passwordRef
- p.useExtendedAuthentication = true
- p.serverCertificateIssuerCommonName = vpnhost
- p.disconnectOnSleep = false
- var rules = [NEOnDemandRule]()
- let rule = NEOnDemandRuleConnect()
- rule.interfaceTypeMatch = .Any
- rules.append(rule)
- NEVPNManager.sharedManager().localizedDescription = "My VPN"
- NEVPNManager.sharedManager().protocolConfiguration = p
- NEVPNManager.sharedManager().onDemandRules = rules
- NEVPNManager.sharedManager().onDemandEnabled = true
- NEVPNManager.sharedManager().enabled = true
- NEVPNManager.sharedManager().saveToPreferencesWithCompletionHandler { error in
- guard error == nil else {
- print("NEVPNManager.saveToPreferencesWithCompletionHandler failed: (error!.localizedDescription)")
- return
- }
- VPNManager.sharedManager.startVPNTunnel()
- }
- }
- loadFromPreferencesWithCompletionHandler{
- ...
- saveToPreferencesWithCompletionHandler{
- startVPNTunnel
- }
- }
- let password = vpnAccount!.vpnPassword
- vpnAccount!.setPersistenRef(username, password: password!)
- let passwordRef = vpnAccount!.persistentRef
- class func persistentRef(_ key: String) -> Data? {
- let query: [AnyHashable: Any] = [
- kSecClass as AnyHashable: kSecClassGenericPassword,
- kSecAttrGeneric as AnyHashable: key,
- kSecAttrAccount as AnyHashable: key,
- kSecAttrAccessible as AnyHashable: kSecAttrAccessibleAlways,
- kSecMatchLimit as AnyHashable: kSecMatchLimitOne,
- kSecAttrService as AnyHashable: Bundle.main.bundleIdentifier!,
- kSecReturnPersistentRef as AnyHashable: kCFBooleanTrue
- ]
- var secItem: AnyObject?
- let result = SecItemCopyMatching(query as CFDictionary, &secItem)
- if result != errSecSuccess {
- return nil
- }
- return secItem as? Data
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement