Net8 #89

Merged
kdeng00 merged 9 commits from net8 into master 2024-06-15 12:17:12 -04:00
12 changed files with 85 additions and 28 deletions
Showing only changes of commit c4ab90d4eb - Show all commits
+10 -7
View File
@@ -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);
+13
View File
@@ -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";
}
+3 -3
View File
@@ -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);
+29 -2
View File
@@ -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<Claim> 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<string> ReadKeyContent(string filepath)
{
+1 -1
View File
@@ -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);
}
+2
View File
@@ -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
}
+6 -1
View File
@@ -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...");
+11 -10
View File
@@ -1,32 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6</TargetFramework>
<TargetFramework>net8</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<Version>0.1.10</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BCrypt.Net-Next" Version="4.0.2" />
<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />
<PackageReference Include="DotNetZip" Version="1.15.0" />
<PackageReference Include="EntityFramework" Version="6.4.4" />
<PackageReference Include="ID3" Version="0.6.0" />
<PackageReference Include="JWT" Version="9.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.8">
<PackageReference Include="JWT" Version="10.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.6" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.6">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="MySql.EntityFrameworkCore" Version="5.0.8" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="MySql.EntityFrameworkCore" Version="8.0.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
<PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
<PackageReference Include="RestSharp" Version="106.15.0" />
<PackageReference Include="SevenZip" Version="19.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.15.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.6.0" />
<PackageReference Include="system.text.encoding.codepages" Version="8.0.0" />
<PackageReference Include="taglib" Version="2.1.0" />
</ItemGroup>
<ItemGroup>
+1 -1
View File
@@ -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}";
}
+2 -2
View File
@@ -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(() =>
{
+4
View File
@@ -41,5 +41,9 @@ public class Program
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseKestrel(options =>
{
options.Limits.MaxRequestBodySize = 262144000;
});
});
}
+3 -1
View File
@@ -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"]))