.NET 8 migration
This commit is contained in:
+10
-7
@@ -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);
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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(() =>
|
||||
{
|
||||
|
||||
@@ -41,5 +41,9 @@ public class Program
|
||||
.ConfigureWebHostDefaults(webBuilder =>
|
||||
{
|
||||
webBuilder.UseStartup<Startup>();
|
||||
webBuilder.UseKestrel(options =>
|
||||
{
|
||||
options.Limits.MaxRequestBodySize = 262144000;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
+3
-1
@@ -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"]))
|
||||
|
||||
Reference in New Issue
Block a user