diff options
Diffstat (limited to 'Backend/Api')
-rw-r--r-- | Backend/Api/Api/Interfaces/IJwtService.cs | 3 | ||||
-rw-r--r-- | Backend/Api/Api/Interfaces/IUserService.cs | 1 | ||||
-rw-r--r-- | Backend/Api/Api/Program.cs | 1 | ||||
-rw-r--r-- | Backend/Api/Api/Services/JwtService.cs | 40 | ||||
-rw-r--r-- | Backend/Api/Api/Services/UserService.cs | 6 |
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 |