public async Task <IActionResult> GetUserByLoginAsync([FromRoute] string userLogin, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (userLogin == null) { var error = ServiceErrorResponses.BodyIsMissing(userLogin); return(BadRequest(error)); } User modelUser = null; try { modelUser = await repository.GetAsync(userLogin, cancellationToken).ConfigureAwait(false); } catch (UserNotFoundException) { var error = ServiceErrorResponses.UserNotFound(userLogin); return(NotFound(error)); } var clientUser = UserConverter.Convert(modelUser); return(Ok(clientUser)); }
public async Task <IActionResult> GenerateToken([FromBody] Client.Models.Users.UserRegistrationInfo userInfo, [FromServices] IJwtSigningEncodingKey signingEncodingKey, CancellationToken cancellationToken) { if (userInfo == null) { var error = ServiceErrorResponses.BodyIsMissing("UserInfo"); return(BadRequest(error)); } if (userInfo.Login == null || userInfo.Password == null) { var error = ServiceErrorResponses.NotEnoughUserData(); return(BadRequest(error)); } User user; try { user = await users.GetAsync(userInfo.Login, cancellationToken); } catch (UserNotFoundException) { var error = ServiceErrorResponses.UserNotFound(userInfo.Login); return(BadRequest(error)); } if (user.PasswordHash != Auth.AuthHash.GetHashPassword(userInfo.Password)) { var error = ServiceErrorResponses.IncorrectPassword(); return(BadRequest(error)); } var clientUser = UserConverter.Convert(user); var claims = new Claim[] { new Claim(ClaimTypes.Name, clientUser.Login), new Claim(ClaimTypes.NameIdentifier, clientUser.Id), }; var token = new JwtSecurityToken( //issuer: "ToDoTasksApp", //audience: "ToDoTasksClient", claims: claims, expires: DateTime.Now.AddMinutes(AuthOptions.LIFETIME), signingCredentials: new SigningCredentials(signingEncodingKey.GetKey(), signingEncodingKey.SigningAlgorithm) ); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(token); return(Ok(new AuthTokenAnswer { Login = userInfo.Login, AccessToken = encodedJwt })); }
public async Task <IActionResult> RemoveTaskAsync([FromRoute] string taskId, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (!Guid.TryParse(taskId, out var modelToDoTaskId)) { var error = ServiceErrorResponses.ToDoTaskNotFound(taskId); return(this.NotFound(error)); } var userLoginRequest = this.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Name); User user = null; try { user = await users.GetAsync(userLoginRequest.Value, cancellationToken); } catch { var error = ServiceErrorResponses.UserNotFound(userLoginRequest.Value); return(BadRequest(error)); } ToDoTask modelTask = null; try { modelTask = await this.tasks.GetAsync(modelToDoTaskId, cancellationToken); } catch (ToDoTaskNotFoundException) { var error = ServiceErrorResponses.ToDoTaskNotFound(taskId); return(NotFound(error)); } if (user.Id != modelTask.UserId) { var error = ServiceErrorResponses.AccessDenied(); return(StatusCode(StatusCodes.Status403Forbidden, error)); } try { await tasks.RemoveAsync(modelToDoTaskId, cancellationToken); } catch (ToDoTaskNotFoundException) { var error = ServiceErrorResponses.ToDoTaskNotFound(taskId); return(NotFound(error)); } return(NoContent()); }
public async Task <IActionResult> GenerateToken([FromBody] Client.Models.Users.UserRegistrationInfo userInfo, [FromServices] IJwtSigningEncodingKey signingEncodingKey, CancellationToken cancellationToken) { if (userInfo == null) { var error = ServiceErrorResponses.BodyIsMissing("UserInfo"); return(BadRequest(error)); } if (userInfo.Login == null || userInfo.Password == null) { var error = ServiceErrorResponses.NotEnoughUserData(); return(BadRequest(error)); } User user; try { user = await users.GetAsync(userInfo.Login, cancellationToken); } catch (UserNotFoundException) { var error = ServiceErrorResponses.UserNotFound(); return(BadRequest(error)); } var clientUser = UserConverter.Convert(user); var claims = new Claim[] { new Claim(ClaimTypes.Name, clientUser.Login), new Claim(ClaimTypes.NameIdentifier, clientUser.Id), }; var encodedJwt = new JwtSecurityTokenHandler().WriteToken(JWT.GetJWT(claims, signingEncodingKey)); return(Ok(new AuthTokenAnswer { AccessToken = encodedJwt })); }
public ActionResult <string> Post([FromBody] UserRegistrationInfo authRequest, [FromServices] IJwtSigningEncodingKey signingEncodingKey, CancellationToken cancellationToken) { if (authRequest == null) { var error = ServiceErrorResponses.BodyIsMissing(nameof(authRequest)); return(BadRequest(error)); } var user = _userRepository.GetAsync(authRequest.Login, cancellationToken); if (user.Result == null) { var error = ServiceErrorResponses.UserNotFound(authRequest.Login); return(BadRequest(error)); } if (user.Result.PasswordHash != Authenticator.HashPassword(authRequest.Password)) { var error = ServiceErrorResponses.IncorrectPassword(); return(BadRequest(error)); } var claims = new Claim[] { new Claim(ClaimTypes.NameIdentifier, authRequest.Login), }; var token = new JwtSecurityToken( issuer: "TodoListApp", audience: "Client", claims: claims, expires: DateTime.Now.AddMinutes(10), signingCredentials: new SigningCredentials( signingEncodingKey.GetKey(), signingEncodingKey.SigningAlgorithm) ); string jwtToken = new JwtSecurityTokenHandler().WriteToken(token); return(jwtToken); }
public async Task <IActionResult> CreateTaskAsync([FromBody] Client.Models.ToDoTasks.ToDoTaskBuildInfo buildInfo, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (buildInfo == null) { var error = ServiceErrorResponses.BodyIsMissing("ToDoTasksBuildInfo"); return(this.BadRequest(error)); } var userLoginRequest = this.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Name); User user = null; try { user = await users.GetAsync(userLoginRequest.Value, cancellationToken); } catch { var error = ServiceErrorResponses.UserNotFound(userLoginRequest.Value); return(BadRequest(error)); } //добавить try-catch в случае если аргументы null var modelCreationInfo = ToDoTaskBuildInfoConverter.Convert(user.Id.ToString(), buildInfo); var modelTaskInfo = await this.tasks.CreateAsync(modelCreationInfo, cancellationToken); var clientTaskInfo = ToDoTaskInfoConverter.Convert(modelTaskInfo); var routeParams = new Dictionary <string, object> { { "taskId", clientTaskInfo.Id } }; return(this.CreatedAtRoute("GetTaskRoute", routeParams, clientTaskInfo)); }
public async Task <IActionResult> PatchTaskAsync([FromRoute] string taskId, [FromBody] Client.Models.ToDoTasks.ToDoTaskPatchInfo patchInfo, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (!Guid.TryParse(taskId, out var modelToDoTaskId)) { var error = ServiceErrorResponses.ToDoTaskNotFound(taskId); return(this.NotFound(error)); } var userLoginRequest = this.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Name); User user = null; try { user = await users.GetAsync(userLoginRequest.Value, cancellationToken); } catch { var error = ServiceErrorResponses.UserNotFound(userLoginRequest.Value); return(BadRequest(error)); } ToDoTask modelTask = null; try { modelTask = await this.tasks.GetAsync(modelToDoTaskId, cancellationToken); } catch (ToDoTaskNotFoundException) { var error = ServiceErrorResponses.ToDoTaskNotFound(taskId); return(NotFound(error)); } if (user.Id != modelTask.UserId) { var error = ServiceErrorResponses.AccessDenied(); return(StatusCode(StatusCodes.Status403Forbidden, error)); } var modelPatchInfo = ToDoTaskPatchConverter.Convert(modelToDoTaskId, patchInfo); ToDoTask patchTask = null; try { patchTask = await tasks.PatchAsync(modelPatchInfo, cancellationToken); } catch (ToDoTaskNotFoundException) { var error = ServiceErrorResponses.ToDoTaskNotFound(taskId); return(NotFound(error)); } var clientTask = ToDoTaskConverter.Convert(patchTask); return(Ok(clientTask)); }