-
Notifications
You must be signed in to change notification settings - Fork 104
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #16 from mahmmoudkinawy/UpdatedAndMakeTheCodeMoreO…
…rgainzed Updated and make the code more orgainzed
- Loading branch information
Showing
48 changed files
with
1,065 additions
and
1,228 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
20
src/JWTAPI/JWTAPI/Controllers/Resources/RefreshTokenResource.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
16
src/JWTAPI/JWTAPI/Controllers/Resources/RevokeTokenResource.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
22
src/JWTAPI/JWTAPI/Controllers/Resources/UserCredentialsResource.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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>(); | ||
} |
Oops, something went wrong.