From 5883f3e34098fbaff8cdfa836f6c7f75417816fc Mon Sep 17 00:00:00 2001 From: Artemy <109195690+stalcker2288969@users.noreply.github.com> Date: Tue, 1 Jul 2025 13:25:55 +0700 Subject: [PATCH] hot fix --- .../Controllers/AuthControllerTests.cs | 8 +++--- .../Controllers/FriendsControllerTests.cs | 1 - .../Authentication/JwtServiceTests.cs | 2 +- .../Controllers/AdminStuff/UsersController.cs | 18 ++++++++++++- Govor.API/Controllers/AuthController.cs | 12 +++++---- Govor.API/Controllers/FriendsController.cs | 2 +- Govor.API/Govor.API.csproj | 3 +-- Govor.API/Program.cs | 7 +++-- .../Authentication/IInvitesService.cs | 4 +-- Govor.Application/Services/InvitesService.cs | 27 ++++++++++++------- Govor.Application/Services/JwtService.cs | 2 +- .../Responses/Admins/UserResponse.cs | 14 ++++++++++ 12 files changed, 70 insertions(+), 30 deletions(-) create mode 100644 Govor.Contracts/Responses/Admins/UserResponse.cs diff --git a/Govor.API.Tests/IntegrationTests/Controllers/AuthControllerTests.cs b/Govor.API.Tests/IntegrationTests/Controllers/AuthControllerTests.cs index 010dd68..1866a5f 100644 --- a/Govor.API.Tests/IntegrationTests/Controllers/AuthControllerTests.cs +++ b/Govor.API.Tests/IntegrationTests/Controllers/AuthControllerTests.cs @@ -48,7 +48,7 @@ public class AuthControllerTests var invitation = _fixture.Create(); var token = _fixture.Create(); - _invitesServiceMock.Setup(s => s.Validate(request.InviteLink)).Returns(invitation); + _invitesServiceMock.Setup(s => s.ValidateAsync(request.InviteLink)).ReturnsAsync(invitation); _accountServiceMock.Setup(s => s.RegistrationAsync(request.Name, request.Password, invitation)).ReturnsAsync(token); // Act @@ -80,7 +80,7 @@ public class AuthControllerTests { // Arrange var request = _fixture.Create(); - _invitesServiceMock.Setup(s => s.Validate(request.InviteLink)).Throws(new InviteLinkInvalidException(request.InviteLink)); + _invitesServiceMock.Setup(s => s.ValidateAsync(request.InviteLink)).ThrowsAsync(new InviteLinkInvalidException(request.InviteLink)); // Act var result = await _controller.Register(request); @@ -97,7 +97,7 @@ public class AuthControllerTests // Arrange var request = _fixture.Create(); var invitation = _fixture.Create(); - _invitesServiceMock.Setup(s => s.Validate(request.InviteLink)).Returns(invitation); + _invitesServiceMock.Setup(s => s.ValidateAsync(request.InviteLink)).ReturnsAsync(invitation); _accountServiceMock.Setup(s => s.RegistrationAsync(request.Name, request.Password, invitation)) .ThrowsAsync(new UserAlreadyExistException(request.Name)); @@ -116,7 +116,7 @@ public class AuthControllerTests // Arrange var request = _fixture.Create(); var invitation = _fixture.Create(); - _invitesServiceMock.Setup(s => s.Validate(request.InviteLink)).Returns(invitation); + _invitesServiceMock.Setup(s => s.ValidateAsync(request.InviteLink)).ReturnsAsync(invitation); _accountServiceMock.Setup(s => s.RegistrationAsync(request.Name, request.Password, invitation)) .ThrowsAsync(new System.Exception("Generic error")); diff --git a/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs b/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs index 9b51bf0..34d0791 100644 --- a/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs +++ b/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs @@ -233,7 +233,6 @@ public class FriendsControllerTests } // Tests for AcceptFriend action - [Test] public async Task AcceptFriend_ValidRequest_ReturnsOkResult() { diff --git a/Govor.API.Tests/UnitTests/Services/Authentication/JwtServiceTests.cs b/Govor.API.Tests/UnitTests/Services/Authentication/JwtServiceTests.cs index e33d71e..2eab678 100644 --- a/Govor.API.Tests/UnitTests/Services/Authentication/JwtServiceTests.cs +++ b/Govor.API.Tests/UnitTests/Services/Authentication/JwtServiceTests.cs @@ -45,7 +45,7 @@ public class JwtServiceTests // Arrange var user = _fixture.Create(); var expectedRole = "User"; - _invitesServiceMock.Setup(s => s.GetRole(user)).Returns(Task.FromResult(expectedRole)); + _invitesServiceMock.Setup(s => s.GetRoleAsync(user)).Returns(Task.FromResult(expectedRole)); // Act var tokenString = _jwtService.GenerateJwtToken(user); diff --git a/Govor.API/Controllers/AdminStuff/UsersController.cs b/Govor.API/Controllers/AdminStuff/UsersController.cs index 4a4ae04..fb2e97d 100644 --- a/Govor.API/Controllers/AdminStuff/UsersController.cs +++ b/Govor.API/Controllers/AdminStuff/UsersController.cs @@ -1,4 +1,6 @@ using Govor.API.Services.AdminsStuff.Interfaces; +using Govor.Contracts.Responses.Admins; +using Govor.Core.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -25,7 +27,7 @@ public class UsersController : Controller _logger.LogInformation("Getting all users by administrator"); var read = await _users.GetAllUsersAsync(); - return Ok(read); + return Ok(BuildUserDtos(read)); } [HttpGet("{id:guid}")] @@ -33,4 +35,18 @@ public class UsersController : Controller { return Ok(id); } + + private List BuildUserDtos(IEnumerable users) => users.Select(user => new UserResponse + { + Id = user.Id, + Username = user.Username, + Description = user.Description, + WasOnline = user.WasOnline, + IconId = user.IconId, + PasswordHash = user.PasswordHash, + InviteId = user.InviteId, + CreatedOn = user.CreatedOn, + IsAdmin = user.Invite?.IsAdmin ?? false, + }).ToList(); + } \ No newline at end of file diff --git a/Govor.API/Controllers/AuthController.cs b/Govor.API/Controllers/AuthController.cs index 34badb2..20d8287 100644 --- a/Govor.API/Controllers/AuthController.cs +++ b/Govor.API/Controllers/AuthController.cs @@ -3,11 +3,13 @@ using Govor.Application.Exceptions.AuthService; using Govor.Application.Exceptions.InvitesService; using Govor.Application.Interfaces.Authentication; using Govor.Contracts.Requests; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Govor.API.Controllers; [ApiController] +[AllowAnonymous] [Route("api/[controller]")] public class AuthController : Controller { @@ -23,7 +25,7 @@ public class AuthController : Controller } [HttpPost("register")]// api/auth/register - [RequireHttps] + //[RequireHttps] public async Task Register([FromBody] RegistrationRequest registrationRequest) { try @@ -33,11 +35,11 @@ public class AuthController : Controller return BadRequest(ModelState); } - var invite = _invitesService.Validate(registrationRequest.InviteLink); + var invite = await _invitesService.ValidateAsync(registrationRequest.InviteLink); var token = await _accountService.RegistrationAsync(registrationRequest.Name, registrationRequest.Password, invite); - _logger.LogInformation($"Register request for {registrationRequest.Name}"); + _logger.LogInformation($"Register request for {registrationRequest.Name} processed successfully"); return Ok(new { token }); } catch (UserAlreadyExistException ex) @@ -63,7 +65,7 @@ public class AuthController : Controller } [HttpPost("login")]// api/auth/login - [RequireHttps] + //[RequireHttps] public async Task Login([FromBody] LoginRequest userRequest) { try @@ -74,7 +76,7 @@ public class AuthController : Controller } var token = await _accountService.LoginAsync(userRequest.Name, userRequest.Password); - _logger.LogInformation($"Login request for {userRequest.Name}"); + _logger.LogInformation($"Login request for {userRequest.Name} processed successfully"); return Ok(new { token }); } catch (UserNotRegisteredException ex) diff --git a/Govor.API/Controllers/FriendsController.cs b/Govor.API/Controllers/FriendsController.cs index 32c48f5..c7092fc 100644 --- a/Govor.API/Controllers/FriendsController.cs +++ b/Govor.API/Controllers/FriendsController.cs @@ -26,7 +26,7 @@ public class FriendsController : Controller _currentUserService = currentUserService; } - [HttpGet("search")] + [HttpGet("search")] // api/friends/search?query= public async Task Search(string query) { if (string.IsNullOrWhiteSpace(query)) diff --git a/Govor.API/Govor.API.csproj b/Govor.API/Govor.API.csproj index 320becf..fe270b5 100644 --- a/Govor.API/Govor.API.csproj +++ b/Govor.API/Govor.API.csproj @@ -2,12 +2,11 @@ net9.0 - enable + disable enable - diff --git a/Govor.API/Program.cs b/Govor.API/Program.cs index bf1019a..ec3cea6 100644 --- a/Govor.API/Program.cs +++ b/Govor.API/Program.cs @@ -17,7 +17,7 @@ builder.Services.AddCors(options => { options.AddPolicy("AllowFrontend", policy => { - policy.WithOrigins("http://localhost:3000", "https://localhost:3000") + policy.WithOrigins("http://localhost:5000", "https://localhost:5000") .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); @@ -106,7 +106,10 @@ if (app.Environment.IsDevelopment()) app.UseSwaggerUI(); } -app.UseHttpsRedirection(); + +app.UseCors(); + +//app.UseHttpsRedirection(); app.UseRouting(); diff --git a/Govor.Application/Interfaces/Authentication/IInvitesService.cs b/Govor.Application/Interfaces/Authentication/IInvitesService.cs index 5643ea3..ba5a9c9 100644 --- a/Govor.Application/Interfaces/Authentication/IInvitesService.cs +++ b/Govor.Application/Interfaces/Authentication/IInvitesService.cs @@ -4,6 +4,6 @@ namespace Govor.API.Services.Authentication.Interfaces; public interface IInvitesService { - public Task GetRole(User user); - public Invitation Validate(string inviteCode); + public Task GetRoleAsync(User user); + public Task ValidateAsync(string inviteCode); } \ No newline at end of file diff --git a/Govor.Application/Services/InvitesService.cs b/Govor.Application/Services/InvitesService.cs index 4942535..07b4f49 100644 --- a/Govor.Application/Services/InvitesService.cs +++ b/Govor.Application/Services/InvitesService.cs @@ -15,7 +15,7 @@ public class InvitesService : IInvitesService _invitesRepository = invitesRepository; } - public async Task GetRole(User user) + public async Task GetRoleAsync(User user) { try { @@ -28,21 +28,28 @@ public class InvitesService : IInvitesService } } - public Invitation Validate(string inviteCode) + public async Task ValidateAsync(string inviteCode) { - var invite = _invitesRepository.FindByCodeAsync(inviteCode).Result; - - if (invite.EndDate < DateTime.Now || - invite.MaxParticipants <= invite.Users.Count) + try + { + var invite = await _invitesRepository.FindByCodeAsync(inviteCode); + + if (invite.EndDate < DateTime.Now || invite.MaxParticipants <= invite.Users.Count) + { + invite.IsActive = false; + await _invitesRepository.UpdateAsync(invite); + throw new InviteLinkInvalidException(inviteCode); + } + + return invite; + } + catch (NotFoundByKeyException) { - invite.IsActive = false; - _invitesRepository.UpdateAsync(invite); throw new InviteLinkInvalidException(inviteCode); } - - return invite; } + public string GenerateInvitationLink(Invitation invitation) { throw new NotImplementedException(); diff --git a/Govor.Application/Services/JwtService.cs b/Govor.Application/Services/JwtService.cs index f4787ee..3c83155 100644 --- a/Govor.Application/Services/JwtService.cs +++ b/Govor.Application/Services/JwtService.cs @@ -24,7 +24,7 @@ public class JwtService : IJwtService var claims = new[] { new Claim("userID", user.Id.ToString()), - new Claim(ClaimTypes.Role, _invitesService.GetRole(user).Result, ClaimValueTypes.String) + new Claim(ClaimTypes.Role, _invitesService.GetRoleAsync(user).Result, ClaimValueTypes.String) }; var singing = new SigningCredentials( diff --git a/Govor.Contracts/Responses/Admins/UserResponse.cs b/Govor.Contracts/Responses/Admins/UserResponse.cs new file mode 100644 index 0000000..2cfc5e2 --- /dev/null +++ b/Govor.Contracts/Responses/Admins/UserResponse.cs @@ -0,0 +1,14 @@ +namespace Govor.Contracts.Responses.Admins; + +public class UserResponse +{ + public Guid Id { get; set; } + public string Username { get; set; } + public string Description { get; set; } + public string PasswordHash { get; set; } + public DateTime WasOnline { get; set; } + public DateOnly CreatedOn { get; set; } + public Guid IconId {get; set;} + public Guid InviteId {get; set;} + public bool IsAdmin {get; set;} +} \ No newline at end of file