From 716754330e70a61ed0cb119d24a54e7bc7b4736b Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 7 Mar 2022 00:44:07 +0100 Subject: Napravljene klase za token i zahteve za logovanje i registrovanje.Napravljen kontroler i servis za prijavljivanje i registrovanje. --- backend/api/api/Controllers/AuthController.cs | 34 +++++++++++++++++++++++ backend/api/api/Models/JwtToken.cs | 37 +++++++++++++++++++++++++ backend/api/api/Models/Users/AuthRequest.cs | 13 +++++++++ backend/api/api/Models/Users/RegisterRequest.cs | 23 +++++++++++++++ backend/api/api/Services/AuthService.cs | 36 ++++++++++++++++++++++++ backend/api/api/api.csproj | 2 ++ backend/api/api/appsettings.json | 17 +++++++----- 7 files changed, 155 insertions(+), 7 deletions(-) create mode 100644 backend/api/api/Controllers/AuthController.cs create mode 100644 backend/api/api/Models/JwtToken.cs create mode 100644 backend/api/api/Models/Users/AuthRequest.cs create mode 100644 backend/api/api/Models/Users/RegisterRequest.cs create mode 100644 backend/api/api/Services/AuthService.cs (limited to 'backend/api') 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> Register(RegisterRequest user) + { + + return Ok(_auth.Register(user)); + } + + [HttpPost("login")] + public async Task> 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 @@ + + 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": "*" } -- cgit v1.2.3