public static async Task <HNUserResult> SignUp(HNNewUserContainer newUser) { HttpClient http = new HttpClient(); string request = _host + "users"; var c = JsonConvert.SerializeObject(newUser, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore }); HttpContent content = new StringContent(c, Encoding.UTF8, "application/json"); var res = await http.PostAsync(request, content); var json = await res.Content.ReadAsStringAsync(); var response = JsonConvert.DeserializeObject <HNUserResult>(json); return(response); }
private async Task RegisterUserAsync() { #region Validation await CheckUniqueEmailAsync(); await CheckUniqueUsernameAsync(); if (string.IsNullOrWhiteSpace(New_Username) || New_Username.Length < 6) { await new MessageDialog("Your username must be at least 6 characters", "Please enter a valid username").ShowAsync(); } else if (string.IsNullOrWhiteSpace(New_Password) || New_Password.Length < 8) { await new MessageDialog("Your password must be at least 8 characters", "Please enter a valid password").ShowAsync(); } else if (New_Password != New_ConfirmPassword) { await new MessageDialog("Your passwords must match").ShowAsync(); } else if (string.IsNullOrWhiteSpace(New_Email) || !IsValidEmail(New_Email)) { await new MessageDialog("Please enter a valid email address").ShowAsync(); } else if (!EmailUnique) { await new MessageDialog("This email address is already taken").ShowAsync(); } else if (!UsernameUnique) { await new MessageDialog("This username is already taken").ShowAsync(); } #endregion else { #region Build User #region Format Languages/Countries foreach (var item in New_NativeLanguages) { item.language_name = null; } foreach (var item in New_StudyLanguages) { item.language_name = null; } #endregion var newUser = new HNNewUserContainer { user = new HNNewUser { name = New_Username, email = New_Email, password = New_Password, password_confirmation = New_ConfirmPassword, profile_attributes = new HNProfileAttributes { interface_id = 1 }, terms_of_use = "1", platform = "android", mail_setting_attributes = new HNMailSettingAttributes { info = false }, native_languages_attributes = New_NativeLanguages, study_languages_attributes = New_StudyLanguages, #region Notifications Attributes notifications_attributes = new ObservableCollection <HNNotificationsAttribute> { new HNNotificationsAttribute { platform = "android", token = "fRxU1CeWSL0:APA91bFcj4kOiCfgHNIj2UZHeVK3AUK5c1PasVuJQeSei9Mckx1eiC-BV78uaABOWtVXSWHDMFn4sjba8OKmQxdo_c1MibypzeHrhoaEv0e-J54z_5tCRFZw2kiHtrD8RcS61cQa0bqv" } } #endregion } }; #endregion try { var createdUser = await DataService.SignUp(newUser); LoggerService.LogEvent("User_registered"); ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; if (createdUser.token != null) { localSettings.Values["API_Token"] = createdUser.token; localSettings.Values["User_ID"] = createdUser.profile.user_attributes.id; } App.ViewModelLocator.Shell.CheckLoggedIn(); App.ViewModelLocator.Main.CurrentUser = App.ViewModelLocator.Shell.CurrentUser; App.ViewModelLocator.Main.InitPageAsync(); _navigationService.NavigateTo(typeof(MainPage)); } catch (Exception ex) { Debug.WriteLine(ex.Message); if (ex is HttpRequestException) { await new MessageDialog("We're having trouble connecting to the HiNative servers").ShowAsync(); } await new MessageDialog("Sign up failed, try a different username and/or email").ShowAsync(); LoggerService.LogEvent("Registration_failed"); } } }