Changes in / [e49c3ed:c2e73b6]


Ignore:
Location:
iknow-api
Files:
8 added
2 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • iknow-api/Controllers/AuthController.cs

    re49c3ed rc2e73b6  
    1212    {
    1313        private readonly IAuthService _authService;
     14        private readonly IRefreshTokenService _refreshTokenService;
    1415
    15         public AuthController(IAuthService authService)
     16        public AuthController(IAuthService authService, IRefreshTokenService refreshTokenService)
    1617        {
    1718            _authService = authService;
     19            _refreshTokenService = refreshTokenService;
    1820        }
    1921
    … …  
    5456            return Ok(new { message = "You are authorized!" });
    5557        }
     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        }
    5667    }
    5768}
  • iknow-api/DTOs/UserDTO.cs

    re49c3ed rc2e73b6  
    66        public string Email { get; set; } = string.Empty;
    77        public string Password { get; set; } = string.Empty;
     8        public bool GenerateRefreshToken { get; set; }
    89    }
    910
  • iknow-api/Data/AppDbContext.cs

    re49c3ed rc2e73b6  
    1010
    1111        public DbSet<User> User { get; set; }
     12        public DbSet<RefreshToken> RefreshToken { get; set; }
    1213    }
    1314}
  • iknow-api/Migrations/AppDbContextModelSnapshot.cs

    re49c3ed rc2e73b6  
    2323            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
    2424
    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 =>
    2654                {
    2755                    b.Property<int>("Id")
    … …  
    5987                    b.ToTable("User");
    6088                });
     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                });
    61100#pragma warning restore 612, 618
    62101        }
  • iknow-api/Models/User.cs

    re49c3ed rc2e73b6  
    2121        public DateTime CreatedAt { get; set; }
    2222        public UserRole Role { get; set; }
     23
    2324    }
    2425}
  • iknow-api/Program.cs

    re49c3ed rc2e73b6  
    4242// Register your services
    4343builder.Services.AddScoped<IAuthService, AuthService>();
    44 builder.Services.AddScoped<IUserRepository, UserRepository>(); // You'll need to add the UserRepository implementation
     44builder.Services.AddScoped<IRefreshTokenService, RefreshTokenService>();
     45builder.Services.AddScoped<IUserRepository, UserRepository>();
     46builder.Services.AddScoped<IRefreshTokenRepository, RefreshTokenRepository>();
    4547builder.Services.AddAuthorization();
    4648var app = builder.Build();
  • iknow-api/Repository/Implementations/UserRepository.cs

    re49c3ed rc2e73b6  
    2424            return await _context.User.FirstOrDefaultAsync(u => u.Email == username);
    2525        }
    26 
     26        public async Task<User?> GetOnlyUserByIdAsync(int id)
     27        {
     28            return await _context.User.FirstOrDefaultAsync(u => u.Id == id);
     29        }
    2730        public async Task AddUserAsync(User user)
    2831        {
  • iknow-api/Repository/Interface/IUserRepository.cs

    re49c3ed rc2e73b6  
    88        Task AddUserAsync(User user);
    99        Task<int> GetUsersCountAsync();
     10        Task<User?> GetOnlyUserByIdAsync(int id);
     11
    1012    }
    1113}
  • iknow-api/Services/Implementations/AuthService.cs

    re49c3ed rc2e73b6  
    33using System.Text;
    44using BCrypt.Net;
    5 using iknow_api.Controllers;
     5using iknow_api.Services;
    66using iknow_api.Models;
    77using iknow_api.DTOs;
    … …  
    1414    {
    1515        private readonly IUserRepository _userRepository;
     16        private readonly IRefreshTokenRepository _refreshTokenRepository;
     17        private readonly IRefreshTokenService _refreshTokenService;
    1618        private readonly IConfiguration _configuration;
    1719
    18         public AuthService(IUserRepository userRepository, IConfiguration configuration)
     20        public AuthService(IUserRepository userRepository, IConfiguration configuration
     21                            , IRefreshTokenService refreshTokenService, IRefreshTokenRepository refreshTokenRepository)
    1922        {
    2023            _userRepository = userRepository;
    2124            _configuration = configuration;
     25            _refreshTokenService = refreshTokenService;
     26            _refreshTokenRepository = refreshTokenRepository;
    2227        }
    2328
    … …  
    4348        }
    4449
    45         public async Task<string?> LoginAsync(LoginDto loginDto)
     50        public async Task<AuthResultDto?> LoginAsync(LoginDto loginDto)
    4651        {
    4752            var user = await _userRepository.GetUserByUsernameAsync(loginDto.Email);
    … …  
    4954                return null;
    5055
    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;
    5268        }
    5369
    … …  
    5571        {
    5672            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;
    5786        }
    5887
  • iknow-api/Services/Interfaces/IAuthService.cs

    re49c3ed rc2e73b6  
    11using iknow_api.DTOs;
    2 
     2using iknow_api.DTOs;
    33namespace iknow_api.Services
    44{
    … …  
    66    {
    77        Task<bool> RegisterAsync(RegisterDto registerDto);
    8         Task<string?> LoginAsync(LoginDto loginDto);
     8        Task<AuthResultDto?> LoginAsync(LoginDto loginDto);
    99        Task<int> GetUsersCountAsync();
     10        Task<AuthResultDto> GenerateNewJWT(VerifyRefreshTokenDto token);
    1011    }
    1112}
  • iknow-api/appsettings.Development.json

    re49c3ed rc2e73b6  
    77  },
    88    "ConnectionStrings": {
    9         "DefaultConnection": "Host=localhost;Port=5432;Database=myappdb;Username=postgres;Password=newpassword"
     9        "DefaultConnection": "Host=localhost;Port=5432;Database=myappdb;Username=myuser;Password=kodrum2025"
    1010    }
    1111}
Note: See TracChangeset for help on using the changeset viewer.