private void LoadCredentials(AppSettings settings) { // USERNAME string username = NSUserDefaults.StandardUserDefaults.StringForKey(nameof(AppSettings.Username)); if (string.IsNullOrEmpty(username)) { settings.DeleteSession(); settings.SetWireGuardCredentials(null, null, true, null); return; // unknown user - do not load the rest } // SESSION string session = NSUserDefaults.StandardUserDefaults.StringForKey(nameof(AppSettings.SessionToken)); string vpnUser = NSUserDefaults.StandardUserDefaults.StringForKey(nameof(AppSettings.VpnUser)); string vpnPass = KeyChain.GetSecuredValueFromKeychain(username, nameof(AppSettings.VpnSafePass)); settings.SetSession(username, session, vpnUser, vpnPass, isPassEncrypded: true); // WIREGUARD string publicKey = NSUserDefaults.StandardUserDefaults.StringForKey(nameof(AppSettings.WireGuardClientPublicKey)); string internalIp = NSUserDefaults.StandardUserDefaults.StringForKey(nameof(AppSettings.WireGuardClientInternalIp)); string privateKey = KeyChain.GetSecuredValueFromKeychain(settings.Username, nameof(AppSettings.WireGuardClientPrivateKeySafe)); string keysTimestampString = KeyChain.GetSecuredValueFromKeychain(settings.Username, nameof(AppSettings.WireGuardKeysTimestamp)); if (string.IsNullOrEmpty(keysTimestampString) || !DateTime.TryParse(keysTimestampString, out DateTime keysTimestamp)) { keysTimestamp = DateTime.Now; } settings.SetWireGuardCredentials(privateKey, publicKey, true, internalIp, keysTimestamp); }
public bool GetOldStyleCredentials( out string AccountID, out string Session, out string OvpnUser, out string OvpnPass, out string WgPublicKey, out string WgPrivateKey, out string WgLocalIP, out Int64 WgKeyGenerated) { AccountID = ""; Session = ""; OvpnUser = ""; OvpnPass = ""; WgPublicKey = ""; WgPrivateKey = ""; WgLocalIP = ""; WgKeyGenerated = 0; // READ OLD-STYLE CREDENTIALS (compatibility with older client versions) // USERNAME AccountID = NSUserDefaults.StandardUserDefaults.StringForKey("Username"); if (string.IsNullOrEmpty(AccountID)) { return(false); // unknown user - do not load the rest } // SESSION Session = NSUserDefaults.StandardUserDefaults.StringForKey("SessionToken"); OvpnUser = NSUserDefaults.StandardUserDefaults.StringForKey("VpnUser"); OvpnPass = CryptoUtil.DecryptString(KeyChain.GetSecuredValueFromKeychain(AccountID, "VpnSafePass")); // WIREGUARD WgPublicKey = NSUserDefaults.StandardUserDefaults.StringForKey("WireGuardClientPublicKey"); WgLocalIP = NSUserDefaults.StandardUserDefaults.StringForKey("WireGuardClientInternalIp"); WgPrivateKey = CryptoUtil.DecryptString(KeyChain.GetSecuredValueFromKeychain(AccountID, "WireGuardClientPrivateKeySafe")); string keysTimestampString = KeyChain.GetSecuredValueFromKeychain(AccountID, "WireGuardKeysTimestamp"); if (string.IsNullOrEmpty(keysTimestampString) || !DateTime.TryParse(keysTimestampString, out DateTime keysTimestamp)) { keysTimestamp = default; } WgKeyGenerated = IVPN_Helpers.DataConverters.DateTimeConverter.ToUnixTime(keysTimestamp); // REMOVE ALL OLD-STYLE CREDENTIALS bool isHasUsername = !string.IsNullOrEmpty(AccountID); // Remove user password if (isHasUsername) { KeyChain.RemoveCredentialFromKeychain(AccountID); } // Remove wireguard info NSUserDefaults.StandardUserDefaults.RemoveObject("WireGuardClientPublicKey"); NSUserDefaults.StandardUserDefaults.RemoveObject("WireGuardClientInternalIp"); if (isHasUsername) { KeyChain.RemoveSecuredValueFromKeychain(AccountID, "WireGuardClientPrivateKeySafe"); KeyChain.RemoveSecuredValueFromKeychain(AccountID, "WireGuardKeysTimestamp"); } // Remove session info NSUserDefaults.StandardUserDefaults.RemoveObject("SessionToken"); NSUserDefaults.StandardUserDefaults.RemoveObject("VpnUser"); if (isHasUsername) { KeyChain.RemoveSecuredValueFromKeychain(AccountID, "VpnSafePass"); } NSUserDefaults.StandardUserDefaults.RemoveObject("Username"); if (string.IsNullOrEmpty(Session)) { return(false); } return(true); }