#74: Add UserID to the Song model #98

Merged
kdeng00 merged 5 commits from tsk-74 into master 2024-06-19 15:41:56 -04:00
2 changed files with 30 additions and 7 deletions
Showing only changes of commit cd5ee7d093 - Show all commits
+21 -7
View File
@@ -7,6 +7,7 @@ using Newtonsoft.Json;
using RestSharp; using RestSharp;
using Icarus.Models; using Icarus.Models;
using Microsoft.VisualBasic;
namespace Icarus.Controllers.Managers; namespace Icarus.Controllers.Managers;
@@ -77,10 +78,7 @@ public class TokenManager : BaseManager
public LoginResult LoginSymmetric(User user) public LoginResult LoginSymmetric(User user)
{ {
var tokenResult = new TokenTierOne var tokenResult = new TokenTierOne{ TokenType = "JWT" };
{
TokenType = "JWT"
};
var payload = Payload(); var payload = Payload();
payload.Add(new Claim("user_id", user.UserID.ToString(), ClaimValueTypes.Integer)); payload.Add(new Claim("user_id", user.UserID.ToString(), ClaimValueTypes.Integer));
@@ -100,7 +98,6 @@ public class TokenManager : BaseManager
Audience = _config["Jwt:Audience"] Audience = _config["Jwt:Audience"]
}; };
// var token =
tokenResult.AccessToken = tokenHandler.WriteToken(tokenHandler.CreateToken(tokenDescriptor)); tokenResult.AccessToken = tokenHandler.WriteToken(tokenHandler.CreateToken(tokenDescriptor));
var expClaim = payload.FirstOrDefault(cl => var expClaim = payload.FirstOrDefault(cl =>
@@ -112,8 +109,6 @@ public class TokenManager : BaseManager
var exp = Math.Floor((expiredDate - DateTime.UnixEpoch).TotalSeconds); var exp = Math.Floor((expiredDate - DateTime.UnixEpoch).TotalSeconds);
tokenResult.Expiration = Convert.ToInt32(exp); tokenResult.Expiration = Convert.ToInt32(exp);
var userId = this.RetrieveUserIdFromToken(tokenResult.AccessToken);
return new LoginResult return new LoginResult
{ {
UserID = user.UserID, Username = user.Username, Token = tokenResult.AccessToken, UserID = user.UserID, Username = user.Username, Token = tokenResult.AccessToken,
@@ -124,6 +119,11 @@ public class TokenManager : BaseManager
public int RetrieveUserIdFromToken(string token) public int RetrieveUserIdFromToken(string token)
{ {
if (this.ContainsBearer(token))
{
token = this.StripBearer(token);
}
var tokenHandler = new JwtSecurityTokenHandler(); var tokenHandler = new JwtSecurityTokenHandler();
var readTok = tokenHandler.ReadJwtToken(token); var readTok = tokenHandler.ReadJwtToken(token);
var userId = -1; var userId = -1;
@@ -133,12 +133,26 @@ public class TokenManager : BaseManager
if (item.Key == "user_id") if (item.Key == "user_id")
{ {
userId = Convert.ToInt32(item.Value); userId = Convert.ToInt32(item.Value);
break;
} }
} }
return userId; return userId;
} }
private string StripBearer(string token)
{
var start = 6;
var strippedToken = token.Substring(start);
return Strings.Trim(strippedToken);
}
private bool ContainsBearer(string token)
{
return token.Contains("Bearer");
}
private string AllScopes() private string AllScopes()
{ {
+9
View File
@@ -104,6 +104,15 @@ public class SongDataController : BaseController
if (up.SongData.Length > 0 && up.CoverArtData.Length > 0 && !string.IsNullOrEmpty(up.SongFile)) if (up.SongData.Length > 0 && up.CoverArtData.Length > 0 && !string.IsNullOrEmpty(up.SongFile))
{ {
var song = Newtonsoft.Json.JsonConvert.DeserializeObject<Song>(up.SongFile); var song = Newtonsoft.Json.JsonConvert.DeserializeObject<Song>(up.SongFile);
var tokMgr = new TokenManager(this._config);
var accessToken = Request.Headers["Authorization"];
var userId = tokMgr.RetrieveUserIdFromToken(accessToken);
if (userId != -1)
{
song.UserID = userId;
}
_logger.LogInformation($"Song title: {song.Title}"); _logger.LogInformation($"Song title: {song.Title}");
_songMgr.SaveSongToFileSystem(up.SongData, up.CoverArtData, song); _songMgr.SaveSongToFileSystem(up.SongData, up.CoverArtData, song);