Пример #1
0
        public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args)
        {
            // long-running startup tasks go here
            var activated = false;

            var kind = args as ProtocolActivatedEventArgs;

            if (kind != null)
            {
                activated = true;

                var results = kind.Uri.Query;

                var code             = string.Empty;
                var state            = string.Empty;
                var expires          = string.Empty;
                var error            = string.Empty;
                var errorDescription = string.Empty;
                foreach (var arg in results.Split('&'))
                {
                    string[] parts = arg.Replace("?", string.Empty).Split('=');
                    if (parts[0] == "code")
                    {
                        code = parts[1];
                    }
                    if (parts[0] == "state")
                    {
                        state = parts[1];
                    }
                    if (parts[0] == "expires")
                    {
                        expires = parts[1];
                    }
                    if (parts[0] == "error")
                    {
                        error = parts[1];
                    }
                    if (parts[0] == "errorDescription")
                    {
                        errorDescription = parts[1];
                    }
                }

                var parameter = new LoginPageNavigationModel()
                {
                    Code             = code,
                    State            = state,
                    Expires          = expires,
                    Error            = error,
                    ErrorDescription = errorDescription
                };

                SettingsService.IsFullScreen        = false;
                SettingsService.ShowHamburgerButton = true;
                NavigationService.Navigate(typeof(Views.LoginPage), parameter);
            }

            if (!activated)
            {
                if (SettingsService.AuthenticatedUser != null)
                {
                    SettingsService.IsFullScreen        = false;
                    SettingsService.ShowHamburgerButton = true;
                    NavigationService.Navigate(typeof(Views.MyRecentSessionsPage));
                }
                else
                {
                    SettingsService.IsFullScreen        = true;
                    SettingsService.ShowHamburgerButton = false;
                    NavigationService.Navigate(typeof(Views.LoginSignupPage));
                }
            }
            await Task.CompletedTask;
        }
Пример #2
0
        public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary <string, object> suspensionState)
        {
            if (suspensionState.ContainsKey(nameof(NavigationParameter)))
            {
                var navParameter = suspensionState[nameof(NavigationParameter)] as LoginPageNavigationModel;
                NavigationParameter = navParameter;
            }
            if (parameter != null)
            {
                var zero = parameter as string;
                if (zero == null)
                {
                    var navParameter = parameter as LoginPageNavigationModel;
                    NavigationParameter = navParameter;
                }
            }

            if (NavigationParameter != null && (!string.IsNullOrEmpty(NavigationParameter.Error) || !string.IsNullOrEmpty(NavigationParameter.ErrorDescription)))
            {
                // this means that login created an error
            }
            if (NavigationParameter != null && !string.IsNullOrEmpty(NavigationParameter.Code))
            {
                _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "XXX");
                var request = new HttpRequestMessage(HttpMethod.Post, "https://api.quizlet.com/oauth/token");

                var formData = new List <KeyValuePair <string, string> >();
                formData.Add(new KeyValuePair <string, string>("grant_type", "authorization_code"));
                formData.Add(new KeyValuePair <string, string>("code", NavigationParameter.Code));

                request.Content = new FormUrlEncodedContent(formData);

                var response = await _client.SendAsync(request);

                var content = await response.Content.ReadAsStringAsync();

                if (response.IsSuccessStatusCode)
                {
                    var json         = JsonConvert.DeserializeObject <Authentication.Success>(content);
                    var userSettings = new UserSettings()
                    {
                        UserId     = json.user_id,
                        Token      = json.access_token,
                        Scope      = json.scope,
                        TokenType  = json.token_type,
                        Expiration = json.expires_in,
                        Created    = DateTime.UtcNow
                    };

                    _SettingsService.UserSettings = userSettings;
                    LogInOutText = "Log out";
                    await FetchAndSaveUser(userSettings.UserId);
                }
                else
                {
                    //todo: there was an error
                }
            }

            // load the page with data...
            if (_SettingsService.UserSettings != null)
            {
                UserId       = _SettingsService.UserSettings.UserId;
                LogInOutText = "Log out";
                try
                {
                    var user = await _quizletAPI.GetUser(UserId);

                    if (user.Profile_Image != null)
                    {
                        ProfilePictureSrc = new Uri(user.Profile_Image);
                    }

                    if (user.AccountType != null)
                    {
                        AccountType = user.AccountType;
                    }

                    if (user.Statistics != null)
                    {
                        TermsCreated = user.Statistics.PublicTermsEntered.ToString();
                    }

                    if (user.Statistics != null)
                    {
                        SetsCreated = user.Statistics.PublicSetsCreated.ToString();
                    }

                    // update the shell to reflect the new authenticated user
                    Views.Shell.Instance.UpdateUserImage();
                }
                catch (Exception e)
                {
                    var dialog = new MessageDialog($"Error: {e.Message}");
                    await dialog.ShowAsync();

                    return;
                }
            }

            if (_SettingsService.AuthenticatedUser != null)
            {
                LogInOutText = "Log out";
            }

            await Task.CompletedTask;
        }