Changeset 28759eb
- Timestamp:
- 10/28/25 10:49:02 (11 months ago)
- Branches:
- master
- Children:
- 1d32d5c, e423ff3
- Parents:
- 5eb7847 (diff), 1e58098 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - git-author:
- Boris Gjorgjievski <69085722+imbrsk@…> (10/28/25 10:49:02)
- git-committer:
- GitHub <noreply@…> (10/28/25 10:49:02)
- Location:
- iknow-api
- Files:
-
- 6 added
- 10 edited
- 2 moved
-
Controllers/AuthController.cs (modified) (2 diffs)
-
DTOs/RefreshTokenDTO.cs (added)
-
DTOs/UserDTO.cs (modified) (1 diff)
-
Data/AppDbContext.cs (modified) (1 diff)
-
Migrations/20251028091953_new.Designer.cs (moved) (moved from iknow-api/Migrations/20251022202014_InitialCreate.Designer.cs ) (3 diffs)
-
Migrations/20251028091953_new.cs (moved) (moved from iknow-api/Migrations/20251022202014_InitialCreate.cs ) (3 diffs)
-
Migrations/AppDbContextModelSnapshot.cs (modified) (2 diffs)
-
Models/RefreshToken.cs (added)
-
Models/User.cs (modified) (1 diff)
-
Program.cs (modified) (1 diff)
-
Repository/Implementations/RefreshTokenRepository.cs (added)
-
Repository/Implementations/UserRepository.cs (modified) (1 diff)
-
Repository/Interface/IRefreshTokenRepository.cs (added)
-
Repository/Interface/IUserRepository.cs (modified) (1 diff)
-
Services/Implementations/AuthService.cs (modified) (5 diffs)
-
Services/Implementations/RefreshTokenService.cs (added)
-
Services/Interfaces/IAuthService.cs (modified) (2 diffs)
-
Services/Interfaces/IRefreshTokenService.cs (added)
Legend:
- Unmodified
- Added
- Removed
-
iknow-api/Controllers/AuthController.cs
r5eb7847 r28759eb 12 12 { 13 13 private readonly IAuthService _authService; 14 private readonly IRefreshTokenService _refreshTokenService; 14 15 15 public AuthController(IAuthService authService )16 public AuthController(IAuthService authService, IRefreshTokenService refreshTokenService) 16 17 { 17 18 _authService = authService; 19 _refreshTokenService = refreshTokenService; 18 20 } 19 21 … … 54 56 return Ok(new { message = "You are authorized!" }); 55 57 } 58 59 [HttpPost("verify-user-token")] 60 public async Task<IActionResult> VerifyToken([FromBody] VerifyRefreshTokenDto verifyRefreshToken) 61 { 62 if (await _refreshTokenService.VerifyRefreshToken(verifyRefreshToken)) 63 { return Ok(await _authService.GenerateNewJWT(verifyRefreshToken)); } 64 else 65 { return BadRequest(new { message = "No token found!" }); } 66 } 56 67 } 57 68 } -
iknow-api/DTOs/UserDTO.cs
r5eb7847 r28759eb 6 6 public string Email { get; set; } = string.Empty; 7 7 public string Password { get; set; } = string.Empty; 8 public bool GenerateRefreshToken { get; set; } 8 9 } 9 10 -
iknow-api/Data/AppDbContext.cs
r5eb7847 r28759eb 10 10 11 11 public DbSet<User> User { get; set; } 12 public DbSet<RefreshToken> RefreshToken { get; set; } 12 13 } 13 14 } -
iknow-api/Migrations/20251028091953_new.Designer.cs
r5eb7847 r28759eb 13 13 { 14 14 [DbContext(typeof(AppDbContext))] 15 [Migration("2025102 2202014_InitialCreate")]16 partial class InitialCreate15 [Migration("20251028091953_new")] 16 partial class @new 17 17 { 18 18 /// <inheritdoc /> … … 26 26 NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); 27 27 28 modelBuilder.Entity("iknow_api.Core.Models.User", b => 28 modelBuilder.Entity("iknow_api.Models.RefreshToken", b => 29 { 30 b.Property<int>("Id") 31 .ValueGeneratedOnAdd() 32 .HasColumnType("integer"); 33 34 NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); 35 36 b.Property<DateTime>("ExpiresAt") 37 .HasColumnType("timestamp with time zone"); 38 39 b.Property<bool>("IsValid") 40 .HasColumnType("boolean"); 41 42 b.Property<string>("Token") 43 .IsRequired() 44 .HasColumnType("text"); 45 46 b.Property<int>("UserId") 47 .HasColumnType("integer"); 48 49 b.HasKey("Id"); 50 51 b.HasIndex("UserId"); 52 53 b.ToTable("RefreshToken"); 54 }); 55 56 modelBuilder.Entity("iknow_api.Models.User", b => 29 57 { 30 58 b.Property<int>("Id") … … 62 90 b.ToTable("User"); 63 91 }); 92 93 modelBuilder.Entity("iknow_api.Models.RefreshToken", b => 94 { 95 b.HasOne("iknow_api.Models.User", "User") 96 .WithMany() 97 .HasForeignKey("UserId") 98 .OnDelete(DeleteBehavior.Cascade) 99 .IsRequired(); 100 101 b.Navigation("User"); 102 }); 64 103 #pragma warning restore 612, 618 65 104 } -
iknow-api/Migrations/20251028091953_new.cs
r5eb7847 r28759eb 8 8 { 9 9 /// <inheritdoc /> 10 public partial class InitialCreate: Migration10 public partial class @new : Migration 11 11 { 12 12 /// <inheritdoc /> … … 32 32 table.PrimaryKey("PK_User", x => x.Id); 33 33 }); 34 35 migrationBuilder.CreateTable( 36 name: "RefreshToken", 37 columns: table => new 38 { 39 Id = table.Column<int>(type: "integer", nullable: false) 40 .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), 41 UserId = table.Column<int>(type: "integer", nullable: false), 42 Token = table.Column<string>(type: "text", nullable: false), 43 ExpiresAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false), 44 IsValid = table.Column<bool>(type: "boolean", nullable: false) 45 }, 46 constraints: table => 47 { 48 table.PrimaryKey("PK_RefreshToken", x => x.Id); 49 table.ForeignKey( 50 name: "FK_RefreshToken_User_UserId", 51 column: x => x.UserId, 52 principalTable: "User", 53 principalColumn: "Id", 54 onDelete: ReferentialAction.Cascade); 55 }); 56 57 migrationBuilder.CreateIndex( 58 name: "IX_RefreshToken_UserId", 59 table: "RefreshToken", 60 column: "UserId"); 34 61 } 35 62 … … 38 65 { 39 66 migrationBuilder.DropTable( 67 name: "RefreshToken"); 68 69 migrationBuilder.DropTable( 40 70 name: "User"); 41 71 } -
iknow-api/Migrations/AppDbContextModelSnapshot.cs
r5eb7847 r28759eb 23 23 NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); 24 24 25 modelBuilder.Entity("iknow_api.Core.Models.User", b => 25 modelBuilder.Entity("iknow_api.Models.RefreshToken", b => 26 { 27 b.Property<int>("Id") 28 .ValueGeneratedOnAdd() 29 .HasColumnType("integer"); 30 31 NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id")); 32 33 b.Property<DateTime>("ExpiresAt") 34 .HasColumnType("timestamp with time zone"); 35 36 b.Property<bool>("IsValid") 37 .HasColumnType("boolean"); 38 39 b.Property<string>("Token") 40 .IsRequired() 41 .HasColumnType("text"); 42 43 b.Property<int>("UserId") 44 .HasColumnType("integer"); 45 46 b.HasKey("Id"); 47 48 b.HasIndex("UserId"); 49 50 b.ToTable("RefreshToken"); 51 }); 52 53 modelBuilder.Entity("iknow_api.Models.User", b => 26 54 { 27 55 b.Property<int>("Id") … … 59 87 b.ToTable("User"); 60 88 }); 89 90 modelBuilder.Entity("iknow_api.Models.RefreshToken", b => 91 { 92 b.HasOne("iknow_api.Models.User", "User") 93 .WithMany() 94 .HasForeignKey("UserId") 95 .OnDelete(DeleteBehavior.Cascade) 96 .IsRequired(); 97 98 b.Navigation("User"); 99 }); 61 100 #pragma warning restore 612, 618 62 101 } -
iknow-api/Models/User.cs
r5eb7847 r28759eb 21 21 public DateTime CreatedAt { get; set; } 22 22 public UserRole Role { get; set; } 23 23 24 } 24 25 } -
iknow-api/Program.cs
r5eb7847 r28759eb 42 42 // Register your services 43 43 builder.Services.AddScoped<IAuthService, AuthService>(); 44 builder.Services.AddScoped<IUserRepository, UserRepository>(); // You'll need to add the UserRepository implementation 44 builder.Services.AddScoped<IRefreshTokenService, RefreshTokenService>(); 45 builder.Services.AddScoped<IUserRepository, UserRepository>(); 46 builder.Services.AddScoped<IRefreshTokenRepository, RefreshTokenRepository>(); 45 47 builder.Services.AddAuthorization(); 46 48 var app = builder.Build(); -
iknow-api/Repository/Implementations/UserRepository.cs
r5eb7847 r28759eb 24 24 return await _context.User.FirstOrDefaultAsync(u => u.Email == username); 25 25 } 26 26 public async Task<User?> GetOnlyUserByIdAsync(int id) 27 { 28 return await _context.User.FirstOrDefaultAsync(u => u.Id == id); 29 } 27 30 public async Task AddUserAsync(User user) 28 31 { -
iknow-api/Repository/Interface/IUserRepository.cs
r5eb7847 r28759eb 8 8 Task AddUserAsync(User user); 9 9 Task<int> GetUsersCountAsync(); 10 Task<User?> GetOnlyUserByIdAsync(int id); 11 10 12 } 11 13 } -
iknow-api/Services/Implementations/AuthService.cs
r5eb7847 r28759eb 3 3 using System.Text; 4 4 using BCrypt.Net; 5 using iknow_api. Controllers;5 using iknow_api.Services; 6 6 using iknow_api.Models; 7 7 using iknow_api.DTOs; … … 14 14 { 15 15 private readonly IUserRepository _userRepository; 16 private readonly IRefreshTokenRepository _refreshTokenRepository; 17 private readonly IRefreshTokenService _refreshTokenService; 16 18 private readonly IConfiguration _configuration; 17 19 18 public AuthService(IUserRepository userRepository, IConfiguration configuration) 20 public AuthService(IUserRepository userRepository, IConfiguration configuration 21 , IRefreshTokenService refreshTokenService, IRefreshTokenRepository refreshTokenRepository) 19 22 { 20 23 _userRepository = userRepository; 21 24 _configuration = configuration; 25 _refreshTokenService = refreshTokenService; 26 _refreshTokenRepository = refreshTokenRepository; 22 27 } 23 28 … … 43 48 } 44 49 45 public async Task< string?> LoginAsync(LoginDto loginDto)50 public async Task<AuthResultDto?> LoginAsync(LoginDto loginDto) 46 51 { 47 52 var user = await _userRepository.GetUserByUsernameAsync(loginDto.Email); … … 49 54 return null; 50 55 51 return CreateToken(user); 56 var result = new AuthResultDto 57 { 58 AccessToken = CreateToken(user) 59 }; 60 61 if (loginDto.GenerateRefreshToken) 62 { 63 int userid = _userRepository.GetUserByUsernameAsync(loginDto.Email).Id; 64 result.RefreshToken = await _refreshTokenService.GenerateRefreshToken(userid); 65 } 66 67 return result; 52 68 } 53 69 … … 55 71 { 56 72 return await _userRepository.GetUsersCountAsync(); 73 } 74 75 public async Task<AuthResultDto> GenerateNewJWT(VerifyRefreshTokenDto token) 76 { 77 int userid = await _refreshTokenRepository.GetUserId(token.token) ?? 0; 78 User user = await _userRepository.GetOnlyUserByIdAsync(userid); 79 80 var result = new AuthResultDto 81 { 82 AccessToken = CreateToken(user) 83 }; 84 85 return result; 57 86 } 58 87 -
iknow-api/Services/Interfaces/IAuthService.cs
r5eb7847 r28759eb 1 1 using iknow_api.DTOs; 2 2 using iknow_api.DTOs; 3 3 namespace iknow_api.Services 4 4 { … … 6 6 { 7 7 Task<bool> RegisterAsync(RegisterDto registerDto); 8 Task< string?> LoginAsync(LoginDto loginDto);8 Task<AuthResultDto?> LoginAsync(LoginDto loginDto); 9 9 Task<int> GetUsersCountAsync(); 10 Task<AuthResultDto> GenerateNewJWT(VerifyRefreshTokenDto token); 10 11 } 11 12 }
Note:
See TracChangeset
for help on using the changeset viewer.
