aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/api/api/Controllers/AuthController.cs34
-rw-r--r--backend/api/api/Models/JwtToken.cs37
-rw-r--r--backend/api/api/Models/Users/AuthRequest.cs13
-rw-r--r--backend/api/api/Models/Users/RegisterRequest.cs23
-rw-r--r--backend/api/api/Services/AuthService.cs36
-rw-r--r--backend/api/api/api.csproj2
-rw-r--r--backend/api/api/appsettings.json17
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": "*"
}