public async Task<IActionResult> ActivateService(SuperUserRegistration registration)
		{
			if (_identityProvider.CurrentIdentity == null)
			{
				return this.RedirectToSignIn();
			}

			if (await _userService.AnyRegisteredUsersAsync())
			{
				return View("AlreadyActivated");
			}

			var result = await _userService.RegisterFirstSuperUserAsync
			(
				registration, 
				new ModelErrorCollection(ModelState)
			);

			if (result == RegisterNewUserResult.AlreadyRegistered)
			{
				return View("AlreadyActivated");
			}
			else if (result == RegisterNewUserResult.Failed)
			{
				ViewBag.UserName = _identityProvider.CurrentIdentity.UserName;

				return View(registration);
			}
			else
			{
				return View("ActivationSuccessful");
			}
		}
Example #2
0
		/// <summary>
		/// Called to register the first super-user.
		/// </summary>
		public async Task<RegisterNewUserResult> RegisterFirstSuperUserAsync(
			SuperUserRegistration registration,
			IModelErrorCollection errors)
		{
			if (await AnyRegisteredUsersAsync())
			{
				return RegisterNewUserResult.AlreadyRegistered;
			}

			if (registration.ActivationToken != _activationToken.Value)
			{
				errors.AddError("ActivationToken", "Incorrect activation token.");
				return RegisterNewUserResult.Failed;
			}

			if (!await _gitHubUserClient.DoesUserExistAsync(registration.GitHubLogin))
			{
				errors.AddError("GitHubLogin", "The GitHub username does not exist.");
				return RegisterNewUserResult.Failed;
			}

			User user = new User()
			{
				UniqueId = _identityProvider.CurrentIdentity.UniqueId,
				UserName = _identityProvider.CurrentIdentity.UserName,
				FirstName = registration.FirstName,
				LastName = registration.LastName,
				EmailAddress = registration.EmailAddress,
				EmailAddressConfirmed = true,
				GitHubLogin = registration.GitHubLogin,
				SuperUser = true
			};
			
			_dbContext.Users.Add(user);
			await _dbContext.SaveChangesAsync();

			return RegisterNewUserResult.Success;
		}