Skip to content

Commit

Permalink
Merge pull request #16 from mahmmoudkinawy/UpdatedAndMakeTheCodeMoreO…
Browse files Browse the repository at this point in the history
…rgainzed

Updated and make the code more orgainzed
  • Loading branch information
evgomes authored Nov 8, 2022
2 parents 5b7ad1b + efb1676 commit 2f3fa88
Show file tree
Hide file tree
Showing 48 changed files with 1,065 additions and 1,228 deletions.
98 changes: 41 additions & 57 deletions src/JWTAPI/JWTAPI/Controllers/LoginController.cs
Original file line number Diff line number Diff line change
@@ -1,72 +1,56 @@
using AutoMapper;
using JWTAPI.Controllers.Resources;
using JWTAPI.Core.Security.Tokens;
using JWTAPI.Core.Services;
using Microsoft.AspNetCore.Mvc;
namespace JWTAPI.Controllers;

namespace JWTAPI.Controllers
[ApiController]
[Route("api/")]
public class AuthController : ControllerBase
{
[ApiController]
public class AuthController : Controller
private readonly IMapper _mapper;
private readonly IAuthenticationService _authenticationService;

public AuthController(IMapper mapper, IAuthenticationService authenticationService)
{
private readonly IMapper _mapper;
private readonly IAuthenticationService _authenticationService;
_authenticationService = authenticationService;
_mapper = mapper;
}

public AuthController(IMapper mapper, IAuthenticationService authenticationService)
{
_authenticationService = authenticationService;
_mapper = mapper;
}
[HttpPost("login")]
public async Task<IActionResult> LoginAsync(
[FromBody] UserCredentialsResource userCredentials)
{
var response = await _authenticationService
.CreateAccessTokenAsync(userCredentials.Email, userCredentials.Password);

[Route("/api/login")]
[HttpPost]
public async Task<IActionResult> LoginAsync([FromBody] UserCredentialsResource userCredentials)
if (!response.Success)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
return BadRequest(response.Message);
}

var response = await _authenticationService.CreateAccessTokenAsync(userCredentials.Email, userCredentials.Password);
if(!response.Success)
{
return BadRequest(response.Message);
}
var accessTokenResource = _mapper.Map<AccessToken, AccessTokenResource>(response.Token);

var accessTokenResource = _mapper.Map<AccessToken, AccessTokenResource>(response.Token);
return Ok(accessTokenResource);
}
return Ok(accessTokenResource);
}

[Route("/api/token/refresh")]
[HttpPost]
public async Task<IActionResult> RefreshTokenAsync([FromBody] RefreshTokenResource refreshTokenResource)
[HttpPost("token/refresh")]
public async Task<IActionResult> RefreshTokenAsync(
[FromBody] RefreshTokenResource refreshTokenResource)
{
var response = await _authenticationService
.RefreshTokenAsync(refreshTokenResource.Token, refreshTokenResource.UserEmail);

if (!response.Success)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}

var response = await _authenticationService.RefreshTokenAsync(refreshTokenResource.Token, refreshTokenResource.UserEmail);
if(!response.Success)
{
return BadRequest(response.Message);
}

var tokenResource = _mapper.Map<AccessToken, AccessTokenResource>(response.Token);
return Ok(tokenResource);
return BadRequest(response.Message);
}

[Route("/api/token/revoke")]
[HttpPost]
public IActionResult RevokeToken([FromBody] RevokeTokenResource resource)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var tokenResource = _mapper.Map<AccessToken, AccessTokenResource>(response.Token);

_authenticationService.RevokeRefreshToken(resource.Token, resource.Email);
return NoContent();
}
return Ok(tokenResource);
}

[HttpPost("token/revoke")]
public IActionResult RevokeToken([FromBody] RevokeTokenResource resource)
{
_authenticationService.RevokeRefreshToken(resource.Token, resource.Email);
return NoContent();
}
}
35 changes: 16 additions & 19 deletions src/JWTAPI/JWTAPI/Controllers/ProtectedController.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,22 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace JWTAPI.Controllers;

namespace JWTAPI.Controllers
[ApiController]
[Route("api/protected")]
public class ProtectedController : ControllerBase
{
[ApiController]
public class ProtectedController : Controller
[HttpGet]
[Authorize]
[Route("for-commonusers")]
public IActionResult GetProtectedData()
{
[HttpGet]
[Authorize]
[Route("/api/protectedforcommonusers")]
public IActionResult GetProtectedData()
{
return Ok("Hello world from protected controller.");
}
return Ok("Hello world from protected controller.");
}

[HttpGet]
[Authorize(Roles = "Administrator")]
[Route("/api/protectedforadministrators")]
public IActionResult GetProtectedDataForAdmin()
{
return Ok("Hello admin!");
}
[HttpGet]
[Authorize(Roles = "Administrator")]
[Route("for-administrators")]
public IActionResult GetProtectedDataForAdmin()
{
return Ok("Hello admin!");
}
}
20 changes: 8 additions & 12 deletions src/JWTAPI/JWTAPI/Controllers/Resources/RefreshTokenResource.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
using System.ComponentModel.DataAnnotations;

namespace JWTAPI.Controllers.Resources
namespace JWTAPI.Controllers.Resources;
public class RefreshTokenResource
{
public class RefreshTokenResource
{
[Required]
public string Token { get; set; }
[Required]
public string Token { get; set; }

[Required]
[DataType(DataType.EmailAddress)]
[StringLength(255)]
public string UserEmail { get; set; }
}
[Required]
[EmailAddress]
[StringLength(255)]
public string UserEmail { get; set; }
}
16 changes: 6 additions & 10 deletions src/JWTAPI/JWTAPI/Controllers/Resources/RevokeTokenResource.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
using System.ComponentModel.DataAnnotations;

namespace JWTAPI.Controllers.Resources
namespace JWTAPI.Controllers.Resources;
public class RevokeTokenResource
{
public class RevokeTokenResource
{
[Required]
public string Token { get; set; }
[Required]
public string Token { get; set; }

[Required]
public string Email { get; set; }
}
[Required]
public string Email { get; set; }
}
12 changes: 5 additions & 7 deletions src/JWTAPI/JWTAPI/Controllers/Resources/TokenResource.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
namespace JWTAPI.Controllers.Resources
namespace JWTAPI.Controllers.Resources;
public class AccessTokenResource
{
public class AccessTokenResource
{
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
public long Expiration { get; set; }
}
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
public long Expiration { get; set; }
}
22 changes: 9 additions & 13 deletions src/JWTAPI/JWTAPI/Controllers/Resources/UserCredentialsResource.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
using System.ComponentModel.DataAnnotations;

namespace JWTAPI.Controllers.Resources
namespace JWTAPI.Controllers.Resources;
public class UserCredentialsResource
{
public class UserCredentialsResource
{
[Required]
[DataType(DataType.EmailAddress)]
[StringLength(255)]
public string Email { get; set; }
[Required]
[EmailAddress]
[StringLength(255)]
public string Email { get; set; }

[Required]
[StringLength(32)]
public string Password { get; set; }
}
[Required]
[StringLength(32)]
public string Password { get; set; }
}
14 changes: 5 additions & 9 deletions src/JWTAPI/JWTAPI/Controllers/Resources/UserResource.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
using System.Collections.Generic;

namespace JWTAPI.Controllers.Resources
namespace JWTAPI.Controllers.Resources;
public class UserResource
{
public class UserResource
{
public int Id { get; set; }
public string Email { get; set; }
public IEnumerable<string> Roles { get; set; }
}
public int Id { get; set; }
public string Email { get; set; }
public IEnumerable<string> Roles { get; set; }
}
55 changes: 23 additions & 32 deletions src/JWTAPI/JWTAPI/Controllers/UsersController.cs
Original file line number Diff line number Diff line change
@@ -1,42 +1,33 @@
using AutoMapper;
using JWTAPI.Controllers.Resources;
using JWTAPI.Core.Models;
using JWTAPI.Core.Services;
using Microsoft.AspNetCore.Mvc;
namespace JWTAPI.Controllers;

namespace JWTAPI.Controllers
[ApiController]
[Route("/api/users")]
public class UsersController : ControllerBase
{
[ApiController]
[Route("/api/[controller]")]
public class UsersController : Controller
private readonly IMapper _mapper;
private readonly IUserService _userService;

public UsersController(IUserService userService, IMapper mapper)
{
private readonly IMapper _mapper;
private readonly IUserService _userService;
_userService = userService;
_mapper = mapper;
}

public UsersController(IUserService userService, IMapper mapper)
{
_userService = userService;
_mapper = mapper;
}
[HttpPost]
public async Task<IActionResult> CreateUserAsync(
[FromBody] UserCredentialsResource userCredentials)
{
var user = _mapper.Map<UserCredentialsResource, User>(userCredentials);

var response = await _userService.CreateUserAsync(user, ApplicationRole.Common);

[HttpPost]
public async Task<IActionResult> CreateUserAsync([FromBody] UserCredentialsResource userCredentials)
if (!response.Success)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
return BadRequest(response.Message);
}

var user = _mapper.Map<UserCredentialsResource, User>(userCredentials);

var response = await _userService.CreateUserAsync(user, ApplicationRole.Common);
if(!response.Success)
{
return BadRequest(response.Message);
}
var userResource = _mapper.Map<User, UserResource>(response.User);

var userResource = _mapper.Map<User, UserResource>(response.User);
return Ok(userResource);
}
return Ok(userResource);
}
}
10 changes: 4 additions & 6 deletions src/JWTAPI/JWTAPI/Core/Models/ApplicationRole.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
namespace JWTAPI.Core.Models
namespace JWTAPI.Core.Models;
public enum ApplicationRole
{
public enum ApplicationRole
{
Common = 1,
Administrator = 2
}
Common = 1,
Administrator = 2
}
19 changes: 7 additions & 12 deletions src/JWTAPI/JWTAPI/Core/Models/Role.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;

namespace JWTAPI.Core.Models
namespace JWTAPI.Core.Models;
public class Role
{
public class Role
{
public int Id { get; set; }
public int Id { get; set; }

[Required]
[StringLength(50)]
public string Name { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }

public ICollection<UserRole> UsersRole { get; set; } = new Collection<UserRole>();
}
public virtual ICollection<UserRole> UsersRole { get; set; } = new Collection<UserRole>();
}
Loading

0 comments on commit 2f3fa88

Please sign in to comment.