public async Task <IActionResult> CreateUser(MUserDto createUserDto) { var userModel = _mapper.Map <MUser>(createUserDto); userModel.Subject = Guid.NewGuid().ToString(); await _localUserService.AddUserAsync(userModel); return(Ok()); }
public async Task <IActionResult> CreateFirstUser([FromBody] FirstSetupModel firstSetupModel) { var exists = await _defaultResourcesManager.AtLeastOneAdminUserExistsAsync(); if (exists) { return(BadRequest("Admin User already exists!")); } var adminRole = await _defaultResourcesManager.EnsureAdminRoleExists(); var user = new MUser(); user.UserName = firstSetupModel.Username; user.Roles.Add(adminRole); user.Active = true; await _localUserService.AddUserAsync(user, firstSetupModel.Password); //await _defaultResourcesManager.EnsureAdminClientExists(firstSetupModel.RedirectUri); return(Ok()); }
public async Task <IActionResult> LoginExternal([FromBody] ExternalLoginModel model) { var resultmodel = new LoginResultModel(); resultmodel.ReturnUrl = model.ReturnUrl; // we will issue the external cookie and then redirect the // user back to the external callback, in essence, treating windows // auth the same as any other external authentication mechanism var props = new AuthenticationProperties() { RedirectUri = model.ReturnUrl, Items = { { "returnUrl", model.ReturnUrl }, { "scheme", model.Scheme }, } }; // see if windows auth has already been requested and succeeded AuthenticateResult result = await HttpContext.AuthenticateAsync(model.Scheme); if (result.Principal != null) { var authHandler = _authenticationProvider.GetHandler(model.Scheme); var factory = authHandler.GetUserFactory(result.Principal); var subject = factory.GetSubject(); var mUser = await _localUserService.GetUserBySubjectAsync(subject); if (mUser == null) { mUser = factory.BuildUser(); await _localUserService.AddUserAsync(mUser); } else { factory.UpdateClaims(mUser); await _usersService.UpdateUserAsync(mUser); } await HttpContext.SignInAsync(new IdentityServerUser(mUser.Subject) { DisplayName = mUser.UserName, IdentityProvider = model.Scheme, AuthenticationTime = DateTime.Now }); await HttpContext.SignOutAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme); if (_interaction.IsValidReturnUrl(model.ReturnUrl) || Url.IsLocalUrl(model.ReturnUrl)) { return(Ok(resultmodel.WithStatus(Status.Ok))); } resultmodel.ReturnUrl = "/"; return(Ok(resultmodel.WithStatus(Status.Ok))); } else { // trigger windows auth // since windows auth don't support the redirect uri, // this URL is re-triggered when we call challenge return(Challenge(model.Scheme)); } }