From cd5ee7d0933a26800f81925256024f9e4c40f4a6 Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Tue, 18 Jun 2024 13:00:50 -0400 Subject: [PATCH] #74: Songs will now contain the User Id when uploading --- Controllers/Managers/TokenManager.cs | 28 +++++++++++++++++++++------- Controllers/v1/SongDataController.cs | 9 +++++++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Controllers/Managers/TokenManager.cs b/Controllers/Managers/TokenManager.cs index 500545b..9d7e785 100644 --- a/Controllers/Managers/TokenManager.cs +++ b/Controllers/Managers/TokenManager.cs @@ -7,6 +7,7 @@ using Newtonsoft.Json; using RestSharp; using Icarus.Models; +using Microsoft.VisualBasic; namespace Icarus.Controllers.Managers; @@ -77,10 +78,7 @@ public class TokenManager : BaseManager public LoginResult LoginSymmetric(User user) { - var tokenResult = new TokenTierOne - { - TokenType = "JWT" - }; + var tokenResult = new TokenTierOne{ TokenType = "JWT" }; var payload = Payload(); payload.Add(new Claim("user_id", user.UserID.ToString(), ClaimValueTypes.Integer)); @@ -100,7 +98,6 @@ public class TokenManager : BaseManager Audience = _config["Jwt:Audience"] }; - // var token = tokenResult.AccessToken = tokenHandler.WriteToken(tokenHandler.CreateToken(tokenDescriptor)); var expClaim = payload.FirstOrDefault(cl => @@ -112,8 +109,6 @@ public class TokenManager : BaseManager var exp = Math.Floor((expiredDate - DateTime.UnixEpoch).TotalSeconds); tokenResult.Expiration = Convert.ToInt32(exp); - var userId = this.RetrieveUserIdFromToken(tokenResult.AccessToken); - return new LoginResult { UserID = user.UserID, Username = user.Username, Token = tokenResult.AccessToken, @@ -124,6 +119,11 @@ public class TokenManager : BaseManager public int RetrieveUserIdFromToken(string token) { + if (this.ContainsBearer(token)) + { + token = this.StripBearer(token); + } + var tokenHandler = new JwtSecurityTokenHandler(); var readTok = tokenHandler.ReadJwtToken(token); var userId = -1; @@ -133,12 +133,26 @@ public class TokenManager : BaseManager if (item.Key == "user_id") { userId = Convert.ToInt32(item.Value); + break; } } 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() { diff --git a/Controllers/v1/SongDataController.cs b/Controllers/v1/SongDataController.cs index c76d5fb..cd68b35 100644 --- a/Controllers/v1/SongDataController.cs +++ b/Controllers/v1/SongDataController.cs @@ -104,6 +104,15 @@ public class SongDataController : BaseController if (up.SongData.Length > 0 && up.CoverArtData.Length > 0 && !string.IsNullOrEmpty(up.SongFile)) { var song = Newtonsoft.Json.JsonConvert.DeserializeObject(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}"); _songMgr.SaveSongToFileSystem(up.SongData, up.CoverArtData, song);