aboutsummaryrefslogtreecommitdiff
path: root/Backend/Api
diff options
context:
space:
mode:
Diffstat (limited to 'Backend/Api')
-rw-r--r--Backend/Api/Api/Interfaces/IJwtService.cs3
-rw-r--r--Backend/Api/Api/Interfaces/IUserService.cs1
-rw-r--r--Backend/Api/Api/Program.cs1
-rw-r--r--Backend/Api/Api/Services/JwtService.cs40
-rw-r--r--Backend/Api/Api/Services/UserService.cs6
5 files changed, 50 insertions, 1 deletions
diff --git a/Backend/Api/Api/Interfaces/IJwtService.cs b/Backend/Api/Api/Interfaces/IJwtService.cs
index 075ea6c..35f5843 100644
--- a/Backend/Api/Api/Interfaces/IJwtService.cs
+++ b/Backend/Api/Api/Interfaces/IJwtService.cs
@@ -5,5 +5,8 @@ namespace Api.Interfaces
public interface IJwtService
{
Task<string> GenToken(User user);
+ Task<string> TokenToId(string token);
+ Task<string> RenewToken(string existingToken);
+
}
} \ No newline at end of file
diff --git a/Backend/Api/Api/Interfaces/IUserService.cs b/Backend/Api/Api/Interfaces/IUserService.cs
index 63fbd18..8b6f6fc 100644
--- a/Backend/Api/Api/Interfaces/IUserService.cs
+++ b/Backend/Api/Api/Interfaces/IUserService.cs
@@ -10,5 +10,6 @@ namespace Api.Interfaces
Task<User> getUserByUsername(String username);
Task<long> updateUser(User user);
Task<User> deleteUser(String email);
+ Task<User> getUserById(string id);
}
}
diff --git a/Backend/Api/Api/Program.cs b/Backend/Api/Api/Program.cs
index 2c2a444..1059a82 100644
--- a/Backend/Api/Api/Program.cs
+++ b/Backend/Api/Api/Program.cs
@@ -21,6 +21,7 @@ builder.Services.AddSingleton<IMongoClient>(s =>
new MongoClient(builder.Configuration.GetValue<string>("DatabaseSettings:ConnectionString")));
builder.Services.AddScoped<IUserService, UserService>();
+builder.Services.AddScoped<IJwtService, JwtService>();
diff --git a/Backend/Api/Api/Services/JwtService.cs b/Backend/Api/Api/Services/JwtService.cs
index 0700619..a10f093 100644
--- a/Backend/Api/Api/Services/JwtService.cs
+++ b/Backend/Api/Api/Services/JwtService.cs
@@ -13,9 +13,11 @@ namespace Api.Services
public class JwtService : IJwtService
{
private readonly IConfiguration _config;
- public JwtService(IConfiguration config)
+ private readonly IUserService _userService;
+ public JwtService(IConfiguration config,IUserService userService)
{
_config = config;
+ _userService = userService;
}
public async Task<string> GenToken(User user)
@@ -31,5 +33,41 @@ namespace Api.Services
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
+ public async Task<string> TokenToId(string token)
+ {
+ if (token == null)
+ return null;
+ var tokenHandler = new JwtSecurityTokenHandler();
+ var key = Encoding.ASCII.GetBytes(_config.GetSection("AppSettings:JwtToken").Value);
+ try
+ {
+ tokenHandler.ValidateToken(token, new TokenValidationParameters
+ {
+ ValidateIssuerSigningKey = true,
+ IssuerSigningKey = new SymmetricSecurityKey(key),
+ ValidateIssuer = false,
+ ValidateAudience = false,
+ }, out SecurityToken validatedToken);
+
+ var jwtToken = (JwtSecurityToken)validatedToken;
+ return jwtToken.Claims.First(x => x.Type == "id").Value;
+ }
+ catch
+ {
+ return null;
+ }
+
+ }
+
+ public async Task<string> RenewToken(string existingToken)
+ {
+ var id = await TokenToId(existingToken);
+ if (id == null)
+ return null;
+ var user = await _userService.getUserById(id);
+
+ return await GenToken(user);
+
+ }
}
}
diff --git a/Backend/Api/Api/Services/UserService.cs b/Backend/Api/Api/Services/UserService.cs
index 264085c..40cc507 100644
--- a/Backend/Api/Api/Services/UserService.cs
+++ b/Backend/Api/Api/Services/UserService.cs
@@ -40,6 +40,12 @@ namespace Api.Services
return await _users.Find(_=>true).ToListAsync();
}
+ public async Task<User> getUserById(string id)
+ {
+ return await _users.Find(user => user._id == id).SingleAsync();
+
+ }
+
public async Task<long> updateUser(User user)
{
/* vraca broj izmenjenih korisnika