diff options
author | Ognjen Cirkovic <ciraboxkg@gmail.com> | 2022-03-07 00:44:07 +0100 |
---|---|---|
committer | Ognjen Cirkovic <ciraboxkg@gmail.com> | 2022-03-07 00:44:07 +0100 |
commit | 716754330e70a61ed0cb119d24a54e7bc7b4736b (patch) | |
tree | 41b07769fbaac8f473294937a19dab575447cad6 | |
parent | a86d5871e6e1270f9863efe3642a7a1f645c980c (diff) |
Napravljene klase za token i zahteve za logovanje i registrovanje.Napravljen kontroler i servis za prijavljivanje i registrovanje.
-rw-r--r-- | backend/api/api/Controllers/AuthController.cs | 34 | ||||
-rw-r--r-- | backend/api/api/Models/JwtToken.cs | 37 | ||||
-rw-r--r-- | backend/api/api/Models/Users/AuthRequest.cs | 13 | ||||
-rw-r--r-- | backend/api/api/Models/Users/RegisterRequest.cs | 23 | ||||
-rw-r--r-- | backend/api/api/Services/AuthService.cs | 36 | ||||
-rw-r--r-- | backend/api/api/api.csproj | 2 | ||||
-rw-r--r-- | backend/api/api/appsettings.json | 17 |
7 files changed, 155 insertions, 7 deletions
diff --git a/backend/api/api/Controllers/AuthController.cs b/backend/api/api/Controllers/AuthController.cs new file mode 100644 index 00000000..1f47067f --- /dev/null +++ b/backend/api/api/Controllers/AuthController.cs @@ -0,0 +1,34 @@ +using api.Models.Users; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using api.Services; + +namespace api.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class AuthController : ControllerBase + { + private AuthService _auth; + public AuthController(IConfiguration configuration) + { + _auth=new AuthService(configuration); + } + + [HttpPost("register")] + public async Task<ActionResult<string>> Register(RegisterRequest user) + { + + return Ok(_auth.Register(user)); + } + + [HttpPost("login")] + public async Task<ActionResult<string>> Login(AuthRequest user) + { + + return Ok(_auth.Login(user)); + } + + + } +} diff --git a/backend/api/api/Models/JwtToken.cs b/backend/api/api/Models/JwtToken.cs new file mode 100644 index 00000000..23307185 --- /dev/null +++ b/backend/api/api/Models/JwtToken.cs @@ -0,0 +1,37 @@ +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; +using System.Text; +using api.Models.Users; +using Microsoft.IdentityModel.Tokens; + +namespace api.Models +{ + public class JwtToken + { + private readonly IConfiguration _configuration; + + public JwtToken(IConfiguration configuration) + { + _configuration = configuration; + } + + public string GenToken(AuthRequest user) + { + var tokenHandler = new JwtSecurityTokenHandler(); + var key = Encoding.ASCII.GetBytes(_configuration.GetSection("AppSettings:JwtToken").Value); + var tokenDescriptor = new SecurityTokenDescriptor + { + Subject = new ClaimsIdentity(new[] { new Claim("name", user.UserName), + new Claim("role", "User")}), + Expires = DateTime.UtcNow.AddDays(1), + SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) + }; + var token = tokenHandler.CreateToken(tokenDescriptor); + return tokenHandler.WriteToken(token); + + } + + + + } +} diff --git a/backend/api/api/Models/Users/AuthRequest.cs b/backend/api/api/Models/Users/AuthRequest.cs new file mode 100644 index 00000000..fbf2412d --- /dev/null +++ b/backend/api/api/Models/Users/AuthRequest.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; + +namespace api.Models.Users +{ + public class AuthRequest + { + [Required] + public string UserName { get; set; } + [Required] + public string Password { get; set; } + + } +} diff --git a/backend/api/api/Models/Users/RegisterRequest.cs b/backend/api/api/Models/Users/RegisterRequest.cs new file mode 100644 index 00000000..675d571d --- /dev/null +++ b/backend/api/api/Models/Users/RegisterRequest.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; + +namespace api.Models.Users +{ + public class RegisterRequest + { + [Required] + public string firstName { get; set; } + + [Required] + public string lastName { get; set; } + + [Required] + public string username { get; set; } + + [Required] + public string email { get; set; } + + [Required] + public string password { get; set; } + + } +} diff --git a/backend/api/api/Services/AuthService.cs b/backend/api/api/Services/AuthService.cs new file mode 100644 index 00000000..1a901cb8 --- /dev/null +++ b/backend/api/api/Services/AuthService.cs @@ -0,0 +1,36 @@ +using api.Models; +using api.Models.Users; + +namespace api.Services +{ + public class AuthService + { + private JwtToken _jwt; + private readonly IConfiguration _configuration; + public AuthService(IConfiguration configuration) + { + _configuration = configuration; + _jwt = new JwtToken(_configuration); + } + public string Login(AuthRequest user) + { + //Check username in DB + + //Verify password + + //gen token + + return _jwt.GenToken(user); + + } + public RegisterRequest Register(RegisterRequest user) + { + //check for existing email and username + user.password = PasswordCrypt.hashPassword(user.password); + //Add to DB. TO DO + return user; + } + + + } +} diff --git a/backend/api/api/api.csproj b/backend/api/api/api.csproj index 97b88d00..d2a5dd9d 100644 --- a/backend/api/api/api.csproj +++ b/backend/api/api/api.csproj @@ -8,6 +8,8 @@ <ItemGroup> <PackageReference Include="BCrypt.Net-Next" Version="4.0.3" /> + <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.16.0" /> + <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.16.0" /> </ItemGroup> </Project> diff --git a/backend/api/api/appsettings.json b/backend/api/api/appsettings.json index 10f68b8c..5d8e7156 100644 --- a/backend/api/api/appsettings.json +++ b/backend/api/api/appsettings.json @@ -1,9 +1,12 @@ { - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" + "AppSettings": { + "JwtToken": "2mnttqPtRb4GIWHFtagm" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" } |