Exemple #1
0
        public async Task <IActionResult> CreateUser(MUserDto createUserDto)
        {
            var userModel = _mapper.Map <MUser>(createUserDto);

            userModel.Subject = Guid.NewGuid().ToString();

            await _localUserService.AddUserAsync(userModel);

            return(Ok());
        }
Exemple #2
0
        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());
        }
Exemple #3
0
        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));
            }
        }