Skip to content

Commit 78dba75

Browse files
Implement Authentication
1 parent f0a20f4 commit 78dba75

20 files changed

+1166
-182
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using Microsoft.AspNetCore.Authorization;
2+
using Microsoft.AspNetCore.Mvc;
3+
using taskmaster_api.Data.DTOs;
4+
using taskmaster_api.Services.Interface;
5+
6+
namespace taskmaster_api.Controllers
7+
{
8+
[Route("api/[controller]")]
9+
[ApiController]
10+
public class AuthController : ApplicationControllerBase
11+
{
12+
private readonly IAuthService _authService;
13+
14+
public AuthController(IAuthService authService)
15+
{
16+
_authService = authService;
17+
}
18+
19+
[HttpPost("login")]
20+
[AllowAnonymous]
21+
public IActionResult Login(LoginDto loginDto)
22+
{
23+
return ToHttpResult<LoginResponseDto>(_authService.Login(loginDto));
24+
}
25+
26+
[HttpPost("register")]
27+
[AllowAnonymous]
28+
public IActionResult Register(RegisterDto registerDto)
29+
{
30+
return ToHttpResult<RegisterDto>(_authService.Register(registerDto));
31+
}
32+
33+
[HttpPost("register-admin")]
34+
[AllowAnonymous]
35+
public IActionResult RegisterAdmin(RegisterDto registerDto)
36+
{
37+
return ToHttpResult<RegisterDto>(_authService.RegisterAdmin(registerDto));
38+
}
39+
}
40+
}
Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
1-
using Microsoft.AspNetCore.Http;
2-
using Microsoft.AspNetCore.Http.HttpResults;
1+
using Microsoft.AspNetCore.Authorization;
32
using Microsoft.AspNetCore.Mvc;
43
using taskmaster_api.Data.DTOs;
5-
using taskmaster_api.Data.DTOs.Interface;
6-
using taskmaster_api.Data.Entities;
7-
using taskmaster_api.Data.Repositories.Interface;
8-
using taskmaster_api.Services;
4+
using taskmaster_api.Data.Models;
95
using taskmaster_api.Services.Interface;
106

117
namespace taskmaster_api.Controllers
@@ -14,35 +10,37 @@ namespace taskmaster_api.Controllers
1410
[ApiController]
1511
public class TaskController : ApplicationControllerBase
1612
{
17-
private readonly ITaskAppService _taskAppService;
13+
private readonly ITaskService _taskService;
1814

19-
public TaskController(ITaskAppService taskAppService)
15+
public TaskController(ITaskService taskService)
2016
{
21-
_taskAppService = taskAppService;
17+
_taskService = taskService;
2218
}
2319

2420
[HttpGet("{id}")]
21+
[Authorize]
2522
public IActionResult GetTask(int id)
2623
{
27-
return ToHttpResult<TaskDto>(_taskAppService.GetTaskById(id));
24+
return ToHttpResult<TaskDto>(_taskService.GetTaskById(id));
2825
}
2926

3027
[HttpPost]
3128
public IActionResult CreateTask(TaskDto taskDto)
3229
{
33-
return ToHttpResult<TaskDto>(_taskAppService.CreateTask(taskDto));
30+
return ToHttpResult<TaskDto>(_taskService.CreateTask(taskDto));
3431
}
3532

3633
[HttpPut("{id}")]
34+
[Authorize(Roles = UserRoles.Admin)]
3735
public IActionResult UpdateTask(int id, TaskDto taskDto)
3836
{
39-
return ToHttpResult<TaskDto>(_taskAppService.UpdateTask(id, taskDto));
37+
return ToHttpResult<TaskDto>(_taskService.UpdateTask(id, taskDto));
4038
}
4139

4240
[HttpDelete("{id}")]
4341
public IActionResult DeleteTask(int id)
4442
{
45-
return ToHttpResult(_taskAppService.DeleteTask(id));
43+
return ToHttpResult(_taskService.DeleteTask(id));
4644
}
4745
}
4846
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
using Microsoft.EntityFrameworkCore;
1+
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore;
23
using taskmaster_api.Data.Entities;
34

45
namespace taskmaster_api.Data.Contexts
56
{
6-
public class ApplicationDbContext : DbContext
7+
public class ApplicationDbContext : IdentityDbContext
78
{
89
public ApplicationDbContext(DbContextOptions options) : base(options)
910
{
1011
}
1112

12-
public virtual DbSet<UserEntity> Users { get; set; }
1313
public virtual DbSet<TaskEntity> Tasks { get; set; }
1414
}
1515
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System.ComponentModel.DataAnnotations;
2+
3+
namespace taskmaster_api.Data.DTOs
4+
{
5+
public class LoginDto
6+
{
7+
[Required(ErrorMessage = "User Name is required")]
8+
public string? Username { get; set; }
9+
10+
[Required(ErrorMessage = "Password is required")]
11+
public string? Password { get; set; }
12+
}
13+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace taskmaster_api.Data.DTOs
2+
{
3+
public class LoginResponseDto
4+
{
5+
public string Token { get; set; }
6+
public DateTime Expiration { get; set; }
7+
}
8+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.ComponentModel.DataAnnotations;
2+
3+
namespace taskmaster_api.Data.DTOs
4+
{
5+
public class RegisterDto
6+
{
7+
[Required(ErrorMessage = "User Name is required")]
8+
public string? Username { get; set; }
9+
10+
[EmailAddress]
11+
[Required(ErrorMessage = "Email is required")]
12+
public string? Email { get; set; }
13+
14+
[Required(ErrorMessage = "Password is required")]
15+
public string? Password { get; set; }
16+
}
17+
}

taskmaster-api/Data/Entities/UserEntity.cs

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace taskmaster_api.Data.Models
2+
{
3+
public static class UserRoles
4+
{
5+
public const string Admin = "Admin";
6+
public const string User = "User";
7+
}
8+
}

taskmaster-api/Migrations/20231207132920_InitialCreate.Designer.cs

Lines changed: 0 additions & 75 deletions
This file was deleted.

taskmaster-api/Migrations/20231207132920_InitialCreate.cs

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)