예제 #1
0
        public ActionResult <CovenantUser> EditUser([FromBody] CovenantUserLogin user)
        {
            var matching_user = _context.Users.FirstOrDefault(U => user.UserName == U.UserName);

            if (matching_user == null)
            {
                return(NotFound($"NotFound - Could not find CovenantUser with username: {user.UserName}"));
            }
            CovenantUser currentUser = GetCurrentAPIUser();
            var          admins      = from users in _context.Users
                                       join userroles in _context.UserRoles on users.Id equals userroles.UserId
                                       join roles in _context.Roles on userroles.RoleId equals roles.Id
                                       where roles.Name == "Administrator"
                                       select users.UserName;

            if (currentUser.UserName != matching_user.UserName && !admins.Contains(currentUser.UserName))
            {
                return(BadRequest($"BadRequest - Current user: {currentUser.UserName} is not an Administrator and cannot change password of user: {user.Password}"));
            }
            matching_user.PasswordHash = _userManager.PasswordHasher.HashPassword(matching_user, user.Password);
            Task <IdentityResult> task = _userManager.UpdateAsync(matching_user);

            task.Wait();
            if (!task.Result.Succeeded)
            {
                return(BadRequest($"BadRequest - Could not set new password for CovenantUser with username: {user.UserName}"));
            }
            _context.Users.Update(matching_user);
            _context.SaveChanges();
            matching_user.PasswordHash  = "";
            matching_user.SecurityStamp = "";
            return(matching_user);
        }
예제 #2
0
        public ActionResult <CovenantUserLoginResult> Login([FromBody] CovenantUserLogin login)
        {
            Microsoft.AspNetCore.Identity.SignInResult result = this.GetPasswordSignInResult(login.UserName, login.Password);
            if (!result.Succeeded)
            {
                return(new UnauthorizedResult());
            }
            CovenantUser user = _userManager.Users.FirstOrDefault(U => U.UserName == login.UserName);

            if (user == null)
            {
                return(NotFound($"NotFound - User with username: {login.UserName}"));
            }
            List <string> userRoles = _context.UserRoles.Where(UR => UR.UserId == user.Id).Select(UR => UR.RoleId).ToList();
            List <string> roles     = _context.Roles.Where(R => userRoles.Contains(R.Id)).Select(R => R.Name).ToList();

            string token = Utilities.GenerateJwtToken(
                login.UserName, user.Id, roles.ToArray(),
                _configuration["JwtKey"], _configuration["JwtIssuer"],
                _configuration["JwtAudience"], _configuration["JwtExpireDays"]
                );

            return(new CovenantUserLoginResult {
                success = true, token = token
            });
        }
예제 #3
0
        public async Task <CovenantUser> MakeCreateUser(string newUserName, string newPassword)
        {
            var userData = new CovenantUserLogin(newUserName, newPassword);
            var result   = await Api.ApiUsersPostWithHttpMessagesAsync(userData);

            return(result.Body);
        }
예제 #4
0
        public ActionResult <CovenantUser> CreateUser([FromBody] CovenantUserLogin login)
        {
            CovenantUser user = new CovenantUser {
                UserName = login.UserName
            };

            _userManager.CreateAsync(user, login.Password).Wait();
            CovenantUser savedUser = _context.Users.FirstOrDefault(U => U.UserName == user.UserName);

            return(CreatedAtRoute(nameof(GetUser), new { uid = savedUser.Id }, savedUser));
        }
예제 #5
0
        public async Task <IActionResult> Edit(CovenantUserLogin login)
        {
            try
            {
                CovenantUser user = await _context.GetUserByUsername(login.UserName);

                await _context.EditUser(_userManager, user, login);

                return(RedirectToAction(nameof(Index)));
            }
            catch (Exception e) when(e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException)
            {
                return(View(new CovenantUserLogin {
                    UserName = login.UserName, Password = "******"
                }));
            }
        }
예제 #6
0
 public async Task <ActionResult <CovenantUserLoginResult> > Login([FromBody] CovenantUserLogin login)
 {
     try
     {
         return(await _context.Login(_signInManager, _configuration, login));
     }
     catch (ControllerNotFoundException e)
     {
         return(NotFound(e.Message));
     }
     catch (ControllerBadRequestException e)
     {
         return(BadRequest(e.Message));
     }
     catch (ControllerUnauthorizedException)
     {
         return(new UnauthorizedResult());
     }
 }
 public async Task <ActionResult <CovenantUserLoginResult> > Login([FromBody] CovenantUserLogin login)
 {
     try
     {
         return(await _service.Login(login));
     }
     catch (ControllerNotFoundException e)
     {
         return(NotFound(e.Message));
     }
     catch (ControllerBadRequestException e)
     {
         return(BadRequest(e.Message));
     }
     catch (ControllerUnauthorizedException)
     {
         return(new UnauthorizedResult());
     }
 }
예제 #8
0
        public async Task <ActionResult <CovenantUser> > CreateUser([FromBody] CovenantUserLogin login)
        {
            try
            {
                CovenantUser user = await _context.CreateUser(_userManager, login, _eventhub);

                return(CreatedAtRoute(nameof(GetUser), new { id = user.Id }, user));
            }
            catch (ControllerNotFoundException e)
            {
                return(NotFound(e.Message));
            }
            catch (ControllerBadRequestException e)
            {
                return(BadRequest(e.Message));
            }
            catch (ControllerUnauthorizedException)
            {
                return(new UnauthorizedResult());
            }
        }
예제 #9
0
        public async Task <ActionResult <CovenantUser> > EditUser([FromBody] CovenantUserLogin user)
        {
            try
            {
                CovenantUser editedUser = await _context.EditUser(_userManager, HttpContext.User, user);

                editedUser.PasswordHash = "";
                return(editedUser);
            }
            catch (ControllerNotFoundException e)
            {
                return(NotFound(e.Message));
            }
            catch (ControllerBadRequestException e)
            {
                return(BadRequest(e.Message));
            }
            catch (ControllerUnauthorizedException)
            {
                return(new UnauthorizedResult());
            }
        }
예제 #10
0
        public async Task <ActionResult <CovenantUserLoginResult> > Login([FromBody] CovenantUserLogin login)
        {
            var result = await _signInManager.PasswordSignInAsync(login.UserName, login.Password, false, false);

            if (!result.Succeeded)
            {
                return(new UnauthorizedResult());
            }
            CovenantUser  user      = _userManager.Users.FirstOrDefault(U => U.UserName == login.UserName);
            List <string> userRoles = _context.UserRoles.Where(UR => UR.UserId == user.Id).Select(UR => UR.RoleId).ToList();
            List <string> roles     = _context.Roles.Where(R => userRoles.Contains(R.Id)).Select(R => R.Name).ToList();

            string token = Utilities.GenerateJwtToken(
                login.UserName, user.Id, roles.ToArray(),
                _configuration["JwtKey"], _configuration["JwtIssuer"],
                _configuration["JwtAudience"], _configuration["JwtExpireDays"]
                );

            return(new CovenantUserLoginResult {
                success = true, token = token
            });
        }
예제 #11
0
        public ActionResult <CovenantUser> CreateUser([FromBody] CovenantUserLogin login)
        {
            CovenantUser user = new CovenantUser {
                UserName = login.UserName
            };
            IdentityResult result = this.CreateCovenantUser(user, login.Password);

            if (!result.Succeeded)
            {
                List <IdentityError> errors = result.Errors.ToList();
                string ErrorMessage         = $"BadRequest - Could not create CovenantUser: {login.UserName}";
                foreach (IdentityError error in result.Errors)
                {
                    ErrorMessage += Environment.NewLine + error.Description;
                }
                return(BadRequest(ErrorMessage));
            }

            CovenantUser savedUser = _context.Users.FirstOrDefault(U => U.UserName == user.UserName);

            if (savedUser == null)
            {
                return(NotFound($"NotFound - Could not find CovenantUser with username: {login.UserName}"));
            }
            string savedRoles = String.Join(",", _context.UserRoles.Where(UR => UR.UserId == savedUser.Id).ToList());

            DateTime eventTime = DateTime.UtcNow;

            _context.Events.Add(new Event
            {
                Time          = eventTime,
                MessageHeader = "[" + eventTime + " UTC] User: "******" with roles: " + savedRoles + " has been created!",
                Level         = Event.EventLevel.Highlight,
                Context       = "Users"
            });

            return(CreatedAtRoute(nameof(GetUser), new { id = savedUser.Id }, savedUser));
        }
예제 #12
0
        public async Task <IActionResult> Login(CovenantUserLogin login, string returnUrl = "")
        {
            try
            {
                var result = await _signInManager.PasswordSignInAsync(login.UserName, login.Password, true, lockoutOnFailure : false);

                if (!result.Succeeded == true)
                {
                    ModelState.AddModelError(string.Empty, "Incorrect username or password");
                    return(View());
                }
                if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
                {
                    return(LocalRedirect(returnUrl));
                }
                return(RedirectToAction("Index", "Home"));
            }
            catch (Exception e) when(e is ControllerNotFoundException || e is ControllerBadRequestException || e is ControllerUnauthorizedException)
            {
                ModelState.AddModelError(string.Empty, e.Message);
                return(View());
            }
        }
예제 #13
0
 public Task <CovenantUser> EditUser(CovenantUser currentUser, CovenantUserLogin user)
 {
     return(_connection.InvokeAsync <CovenantUser>("EditUser", currentUser, user));
 }
예제 #14
0
 public Task <CovenantUser> CreateUser(CovenantUserLogin login)
 {
     return(_connection.InvokeAsync <CovenantUser>("CreateUser", login));
 }
예제 #15
0
 public Task <CovenantUserLoginResult> Login(CovenantUserLogin login)
 {
     return(_connection.InvokeAsync <CovenantUserLoginResult>("Login", login));
 }