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; }
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; }