private async Task <T> RefreshTokenAndRetryGet <T>(T result, string url) where T : new()
        {
            var  accessToken   = _secureStorageService.GetAsync(Constants.AccessToken).Result;
            var  refreshToken  = _secureStorageService.GetAsync(Constants.RefreshToken).Result;
            bool hasBothTokens = string.IsNullOrEmpty(accessToken) == false && string.IsNullOrEmpty(refreshToken) == false;

            if (hasBothTokens)
            {
                var tokens = await RefreshToken(new RefreshTokenModel
                {
                    AccessToken  = accessToken,
                    RefreshToken = refreshToken
                });

                bool hasBothNewTokens = string.IsNullOrEmpty(tokens.AccessToken) == false && string.IsNullOrEmpty(tokens.RefreshToken) == false;
                if (hasBothNewTokens)
                {
                    await _secureStorageService.SetAsync(Constants.AccessToken, tokens.AccessToken);

                    await _secureStorageService.SetAsync(Constants.RefreshToken, tokens.RefreshToken);

                    //try again
                    HttpRequestMessage request = ConstructGetRequest(url);

                    using (HttpResponseMessage httpResponse = await _httpClient.SendAsync(request).ConfigureAwait(false))
                    {
                        result = await DeserializeContentStream(result, httpResponse);
                    }
                }
            }

            return(result);
        }
        public async Task UpdatePushNotificationServiceHandleAsync(string pnsHandle)
        {
            if (string.IsNullOrWhiteSpace(pnsHandle))
            {
                throw new ArgumentException("Push notification service handle cannot be empty");
            }

            var currentHandle = await GetPushNotificationServiceHandleAsync();

            if (pnsHandle != currentHandle)
            {
                if (string.IsNullOrWhiteSpace(currentHandle))
                {
                    AnalyticsService.TraceInformation(this, "PnsHandle saved", "PnsHandle", pnsHandle);
                }
                else
                {
                    AnalyticsService.TraceInformation(this, "PnsHandle updated", new Dictionary <string, object>
                    {
                        { "OldPnsHandle", currentHandle },
                        { "NewPnsHandle", pnsHandle },
                    });
                }

                _currentPnsHandle = pnsHandle;
                await _secureStorageService.SetAsync(PnsHandleKey, pnsHandle);
            }
        }
        private async void OnSetUpPressed(object sender, EventArgs e)
        {
            string serverUrl = ServerEntry.Text;

            string devicePrivateKeyBase64 = await _secureStorageService.GetAsync("devicePrivateKey");

            Curve25519KeyPair deviceKeyPair;

            if (devicePrivateKeyBase64 is null)
            {
                deviceKeyPair = new Curve25519KeyPair();
                await _secureStorageService.SetAsync("devicePrivateKey", Convert.ToBase64String(deviceKeyPair.EdPrivateKey));
            }
            else
            {
                deviceKeyPair = new Curve25519KeyPair(Convert.FromBase64String(devicePrivateKeyBase64), true, true);
            }

            _connection = new ServerConnection(serverUrl, deviceKeyPair);

            string deviceUuid = await _connection.RegisterDeviceAsync();

            string userUuid = await _connection.RegisterUserAsync(EmailEntry.Text, GlobalKeyStore.Instance.IdentityKeyPair, GlobalKeyStore.Instance.SignedPreKeyPairs[0], ":)", "Non-contradictory");

            await _connection.UploadOneTimePreKeysAsync(GlobalKeyStore.Instance.OneTimePreKeyPairs);

            await DisplayAlert("Information: ", $"Device ID: {deviceUuid}\nUser ID: {userUuid}", "Ok");

            EmailEntry.Text = userUuid;
        }
Exemple #4
0
        public async Task UpdateFactAsync(CancellationToken cancellationToken)
        {
            var fact = await _restService.GetFactAsync(cancellationToken);

            await _secureStorageService.SetAsync("fact", fact);

            _backgroundService.UpdateNotificationMessage(fact.Text);
        }
Exemple #5
0
        public async Task <Account> Login(Credential credential)
        {
            var tokens = await _accountApiService.GetToken(credential);

            if (tokens.UserName != null)
            {
                await _secureStorageService.SetAsync(Constants.AccessToken, tokens.AccessToken);

                await _secureStorageService.SetAsync(Constants.RefreshToken, tokens.RefreshToken);

                await _secureStorageService.SetAsync(Constants.IsRegistered, "true");

                await _secureStorageService.SetAsync(Constants.Email, credential.UserName);
            }
            else
            {
                ClearSavedTokens();
            }
            await GetAccount();

            return(Account);
        }