Exemplo n.º 1
0
        public async Task <OwnerSettings> CheckOwnerSettingsAsync(ClaimsPrincipal user, string ownerId)
        {
            var isOrg = await CheckGitHubOwner(user.Identity, ownerId);

            try
            {
                var ownerSettings = await _ownerSettingsStore.GetOwnerSettingsAsync(ownerId);

                return(ownerSettings);
            }
            catch (OwnerSettingsNotFoundException)
            {
                var newOwnerSettings = new OwnerSettings
                {
                    OwnerId = ownerId,
                    IsOrg   = isOrg
                };


                await _ownerSettingsStore.CreateOrUpdateOwnerSettingsAsync(newOwnerSettings);

                return(newOwnerSettings);
            }
            catch (Exception e)
            {
                Log.Error($"Error checking owner settings for '{ownerId}", e);
                throw;
            }
        }
Exemplo n.º 2
0
        public async Task <IActionResult> Settings(string ownerId, OwnerSettingsViewModel settingsViewModel)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    settingsViewModel.LastModified   = DateTime.UtcNow;
                    settingsViewModel.LastModifiedBy = User.Identity.Name;
                    if (!ownerId.Equals(User.Identity.Name))
                    {
                        settingsViewModel.OwnerIsOrg = true;
                    }
                    var ownerSettings = settingsViewModel.AsOwnerSettings();
                    await _ownerSettingsStore.CreateOrUpdateOwnerSettingsAsync(ownerSettings);

                    ViewBag.StatusMessage  = GetSettingsStatusMessage(ManageMessageId.ChangeSettingSuccess);
                    TempData["ModelState"] = null;
                }
                catch (Exception e)
                {
                    ViewBag.StatusMessage = GetSettingsStatusMessage(ManageMessageId.Error);
                    Log.Error(e, "Error updating owner settings for '{0}'", ownerId);
                    throw;
                }
            }
            else
            {
                // pass errors to the ViewComponent
                ViewBag.StatusMessage  = GetSettingsStatusMessage(ManageMessageId.ValidationError);
                TempData["ModelState"] = ModelState;
                TempData["ViewModel"]  = settingsViewModel;
            }

            this.DashboardViewModel.Area = "settings";
            DashboardViewModel.Title     = string.Format("{0} Settings", DashboardViewModel.SelectedOwnerId);
            return(View("Settings", this.DashboardViewModel));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> SignUp(SignUpViewModel signUpViewModel)
        {
            if (ModelState.IsValid && signUpViewModel.AgreeTerms)
            {
                try
                {
                    // new datadock identity inc claim
                    var datadockIdentity = new ClaimsIdentity();
                    datadockIdentity.AddClaim(new Claim(DataDockClaimTypes.DataDockUserId, User.Identity.Name));
                    User.AddIdentity(datadockIdentity);

                    // create user in datadock
                    var newUser = await _userStore.CreateUserAsync(User.Identity.Name, User.Claims);

                    if (newUser == null)
                    {
                        Log.Error("Creation of new user account returned null");
                        return(RedirectToAction("Error", "Home"));
                    }

                    // create userSettings
                    var userSettings = new UserSettings
                    {
                        UserId         = User.Identity.Name,
                        LastModified   = DateTime.UtcNow,
                        LastModifiedBy = "DataDock"
                    };
                    await _userStore.CreateOrUpdateUserSettingsAsync(userSettings);

                    // create ownerSettings for the github user owner
                    var userOwner = new OwnerSettings
                    {
                        OwnerId                  = User.Identity.Name,
                        IsOrg                    = false,
                        DisplayGitHubAvatar      = true,
                        DisplayGitHubDescription = true,
                        LastModified             = DateTime.UtcNow,
                        LastModifiedBy           = "DataDock"
                    };
                    await _ownerSettingsStore.CreateOrUpdateOwnerSettingsAsync(userOwner);

                    // logout and back in to persist new claims
                    await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

                    return(Challenge(new AuthenticationProperties()
                    {
                        RedirectUri = "account/welcome"
                    }));
                }
                catch (UserAccountExistsException)
                {
                    Log.Warning("User account {0} already exists. Identities: {1}. Claims Total: {2}", User.Identity.Name, User.Identities.Count(), User.Claims.Count());
                    var datadockUser = await _userStore.GetUserAccountAsync(User.Identity.Name);

                    if (datadockUser.Claims.FirstOrDefault(c => c.Type.Equals(DataDockClaimTypes.DataDockUserId)) ==
                        null)
                    {
                        // new datadock identity inc claim
                        var datadockIdentity = new ClaimsIdentity();
                        datadockIdentity.AddClaim(new Claim(DataDockClaimTypes.DataDockUserId, User.Identity.Name));
                        User.AddIdentity(datadockIdentity);
                        await _userStore.UpdateUserAsync(User.Identity.Name, User.Claims);

                        // logout and back in to persist new claims
                        await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

                        return(Challenge(new AuthenticationProperties()
                        {
                            RedirectUri = "account/settings"
                        }));
                    }

                    return(RedirectToAction("Settings"));
                }
                catch (Exception ex)
                {
                    Log.Error("Error creating user account", ex);
                    Console.WriteLine(ex);
                    throw;
                }
            }

            ViewBag.Success = "failed";
            return(View(signUpViewModel));
        }