diff --git a/Certs/Signing.cs b/Certs/Signing.cs index 80347fb..a6672a2 100644 --- a/Certs/Signing.cs +++ b/Certs/Signing.cs @@ -1,20 +1,21 @@ using System; -using System.Security.Cryptography; +// using System.Security.Cryptography; using Microsoft.IdentityModel.Tokens; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.OpenSsl; +// using BouncyCastle.Crypto; namespace Icarus.Certs; public class SigningIssuerCertificate : IDisposable { - private readonly RSACryptoServiceProvider _rsa; + private readonly System.Security.Cryptography.RSACryptoServiceProvider _rsa; public SigningIssuerCertificate() { - _rsa = new RSACryptoServiceProvider(); + _rsa = new System.Security.Cryptography.RSACryptoServiceProvider(); } public RsaSecurityKey GetIssuerSigningKey(string publicKeyPath) @@ -26,7 +27,7 @@ public class SigningIssuerCertificate : IDisposable { var pem = new PemReader(reader); var o = (RsaKeyParameters)pem.ReadObject(); - var parameters = new RSAParameters(); + var parameters = new System.Security.Cryptography.RSAParameters(); parameters.Modulus = o.Modulus.ToByteArray(); parameters.Exponent = o.Exponent.ToByteArray(); _rsa.ImportParameters(parameters); @@ -45,11 +46,11 @@ public class SigningIssuerCertificate : IDisposable public class SigningAudienceCertificate : IDisposable { - private readonly RSACryptoServiceProvider _rsa; + private readonly System.Security.Cryptography.RSACryptoServiceProvider _rsa; public SigningAudienceCertificate() { - _rsa = new RSACryptoServiceProvider(); + _rsa = new System.Security.Cryptography.RSACryptoServiceProvider(); } public SigningCredentials GetAudienceSigningKey(string keyPath) @@ -60,8 +61,10 @@ public class SigningAudienceCertificate : IDisposable using (var reader = System.IO.File.OpenText(file)) { var pem = new PemReader(reader); + // var pem = new Org.BouncyCastle.Utilities.IO.Pem.PemReader(reader); + // var pem = new BouncyCastle.OpenSsl.PemReader(reader); var o = (RsaKeyParameters)pem.ReadObject(); - var parameters = new RSAParameters(); + var parameters = new System.Security.Cryptography.RSAParameters(); parameters.Modulus = o.Modulus.ToByteArray(); parameters.Exponent = o.Exponent.ToByteArray(); _rsa.ImportParameters(parameters); diff --git a/Constants/FileExtensions.cs b/Constants/FileExtensions.cs new file mode 100644 index 0000000..9b252c5 --- /dev/null +++ b/Constants/FileExtensions.cs @@ -0,0 +1,13 @@ +namespace Icarus.Constants; + +public class FileExtensions +{ + // Contains file extension with period at the beginning + public static string MP3_EXTENSION = ".mp3"; + + // Contains file extension with period at the beginning + public static string WAV_EXTENSION = ".wav"; + + // Contains file extension with period at the beginning + public static string JPG_EXTENSION = ".jpg"; +} \ No newline at end of file diff --git a/Controllers/Managers/SongManager.cs b/Controllers/Managers/SongManager.cs index 34d4bfd..dafb215 100644 --- a/Controllers/Managers/SongManager.cs +++ b/Controllers/Managers/SongManager.cs @@ -243,10 +243,10 @@ public class SongManager : BaseManager var coverMgr = new CoverArtManager(_config); var meta = new MetadataRetriever(); var coverArt = coverMgr.SaveCoverArt(coverArtData, song); - meta.UpdateCoverArt(song, coverArt); - song.Duration = meta.RetrieveSongDuration(song.SongPath()); + // meta.UpdateCoverArt(song, coverArt); + // song.Duration = meta.RetrieveSongDuration(song.SongPath()); - meta.UpdateMetadata(song, song); + // meta.UpdateMetadata(song, song); DirectoryManager dirMgr = new DirectoryManager(_config, song); diff --git a/Controllers/Managers/TokenManager.cs b/Controllers/Managers/TokenManager.cs index 7d16f4a..004bb58 100644 --- a/Controllers/Managers/TokenManager.cs +++ b/Controllers/Managers/TokenManager.cs @@ -87,6 +87,7 @@ public class TokenManager : BaseManager } + /* [Obsolete("Asymmetric key signing for tokens have been deprecated")] public LoginResult LogIn(User user) { @@ -115,6 +116,7 @@ public class TokenManager : BaseManager Message = "Successfully retrieved token" }; } + */ public LoginResult LoginSymmetric(User user) { @@ -124,6 +126,7 @@ public class TokenManager : BaseManager var payload = Payload(); payload.Add(new System.Security.Claims.Claim("user_id", user.UserID.ToString(), ClaimValueTypes.Integer)); + /* var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["JWT:Secret"])); var signIn = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( @@ -132,8 +135,28 @@ public class TokenManager : BaseManager payload, expires: DateTime.UtcNow.AddMinutes(30), signingCredentials: signIn); + */ + + var tokenHandler = new JwtSecurityTokenHandler(); + var key = Encoding.ASCII.GetBytes(_config["JWT:Secret"]); + var tokenDescriptor = new SecurityTokenDescriptor + { + Subject = new ClaimsIdentity(new Claim[] + { + new Claim("user_id", user.UserID.ToString(), ClaimValueTypes.Integer) + // Add more claims as needed + }), + Expires = DateTime.UtcNow.AddHours(1), + SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature), + Issuer = _config["Jwt:Issuer"], // Add this line + Audience = _config["Jwt:Audience"] + }; + + var token = tokenHandler.CreateToken(tokenDescriptor); - tokenResult.AccessToken = new JwtSecurityTokenHandler().WriteToken(token); + + // tokenResult.AccessToken = new JwtSecurityTokenHandler().WriteToken(token); + tokenResult.AccessToken = tokenHandler.WriteToken(token); var expClaim = payload.FirstOrDefault(cl => { @@ -152,6 +175,7 @@ public class TokenManager : BaseManager }; } + /* [Obsolete("Asymmetric key signing for tokens have been deprecated")] public bool IsTokenValid(string scope, string accessToken) { @@ -204,6 +228,7 @@ public class TokenManager : BaseManager return tok; } + */ private string AllScopes() @@ -266,6 +291,7 @@ public class TokenManager : BaseManager return claim; } + /* [Obsolete("Asymmetric key signing for tokens have been deprecated")] private string CreateToken(List claims, string privateKey) { @@ -331,7 +357,7 @@ public class TokenManager : BaseManager { using (var tr = new System.IO.StringReader(publicKey)) { - var pemReader = new PemReader(tr); + var pemReader = new Org.BouncyCastle.Crypto.PemReader(tr); var publicKeyParams = pemReader.ReadObject() as RsaKeyParameters; if (publicKeyParams == null) { @@ -340,6 +366,7 @@ public class TokenManager : BaseManager return DotNetUtilities.ToRSAParameters(publicKeyParams); } } + */ private async Task ReadKeyContent(string filepath) { diff --git a/Controllers/Utilities/SongCompression.cs b/Controllers/Utilities/SongCompression.cs index 469c128..1b4dca4 100644 --- a/Controllers/Utilities/SongCompression.cs +++ b/Controllers/Utilities/SongCompression.cs @@ -83,7 +83,7 @@ public class SongCompression Console.WriteLine(exMsg); } - if (songDetails.Filename.Contains(".mp3")) + if (songDetails.Filename.Contains(Constants.FileExtensions.WAV_EXTENSION)) { _compressedSongFilename = StripMP3Extension(songDetails.Filename); } diff --git a/Controllers/v1/BaseController.cs b/Controllers/v1/BaseController.cs index 40765c7..11cb5e5 100644 --- a/Controllers/v1/BaseController.cs +++ b/Controllers/v1/BaseController.cs @@ -39,6 +39,7 @@ public class BaseController : ControllerBase return token; } + /** [ApiExplorerSettings(IgnoreApi = true)] [Obsolete("Asymmetric key signing for tokens have been deprecated")] protected bool IsTokenValid(string scope) @@ -48,5 +49,6 @@ public class BaseController : ControllerBase return tokMgr.IsTokenValid(scope, token); } + */ #endregion } diff --git a/Controllers/v1/SongStreamController.cs b/Controllers/v1/SongStreamController.cs index 957a152..7e5aa07 100644 --- a/Controllers/v1/SongStreamController.cs +++ b/Controllers/v1/SongStreamController.cs @@ -53,7 +53,12 @@ public class SongStreamController : BaseController var stream = new FileStream(song.SongPath(), FileMode.Open, FileAccess.Read); stream.Position = 0; - var filename = $"{song.Title}.mp3"; + var filename = song.Filename; + + if (string.IsNullOrEmpty(song.Filename)) + { + filename = song.GenerateFilename(); + } _logger.LogInformation("Starting to stream song...>"); Console.WriteLine("Starting to streamsong..."); diff --git a/Icarus.csproj b/Icarus.csproj index b4164ab..0c7d70f 100644 --- a/Icarus.csproj +++ b/Icarus.csproj @@ -1,32 +1,33 @@ - net6 + net8 InProcess 0.1.10 + - - - - - + + + + + runtime; build; native; contentfiles; analyzers all - - + + - - + + diff --git a/Models/CoverArt.cs b/Models/CoverArt.cs index 8b3cc1a..fd54089 100644 --- a/Models/CoverArt.cs +++ b/Models/CoverArt.cs @@ -34,7 +34,7 @@ public class CoverArt var random = new Random(); var filename = new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray()); - var extension = ".mp3"; + var extension = Icarus.Constants.FileExtensions.JPG_EXTENSION; return (flag == 0) ? filename : $"{filename}{extension}"; } diff --git a/Models/Song.cs b/Models/Song.cs index 1fab172..5a76ce4 100644 --- a/Models/Song.cs +++ b/Models/Song.cs @@ -78,7 +78,7 @@ public class Song var random = new Random(); var filename = new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray()); - var extension = ".mp3"; + var extension = Icarus.Constants.FileExtensions.WAV_EXTENSION; return flag == 0 ? filename : $"{filename}{extension}"; } @@ -86,7 +86,7 @@ public class Song { const int length = 25; const string chars = "ABCDEF0123456789"; - var extension = ".mp3"; + var extension = Icarus.Constants.FileExtensions.WAV_EXTENSION; var random = new Random(); var filename = await Task.Run(() => { diff --git a/Program.cs b/Program.cs index 2fa72b3..7820275 100644 --- a/Program.cs +++ b/Program.cs @@ -41,5 +41,9 @@ public class Program .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); + webBuilder.UseKestrel(options => + { + options.Limits.MaxRequestBodySize = 262144000; + }); }); } diff --git a/Startup.cs b/Startup.cs index 0da5769..b957940 100644 --- a/Startup.cs +++ b/Startup.cs @@ -16,7 +16,7 @@ using Microsoft.OpenApi.Models; using Newtonsoft.Json; using NLog; using NLog.Web; -using NLog.Web.AspNetCore; +// using NLog.Web.AspNetCore; using Icarus.Database.Contexts; @@ -55,6 +55,8 @@ public class Startup { ValidateIssuer = true, ValidateAudience = true, + ValidateIssuerSigningKey = true, + ValidateLifetime = true, ValidAudience = Configuration["JWT:Audience"], ValidIssuer = Configuration["JWT:Issuer"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWT:Secret"]))