Beispiel #1
0
        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);
        }