Skip to content

Commit 66b5944

Browse files
author
Kun Deng
authored
Merge pull request #81 from kdeng00/pre-release
Pre release
2 parents 1643f78 + 8062829 commit 66b5944

27 files changed

+821
-260
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
################################################################################
44

55
/.vs/Icarus
6+
/bin/*
67
/bin/Debug/netcoreapp2.2
78
/Migrations
89
/obj
10+
/obj/*
11+
/Icarus.txt

Certs/Signing.cs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using System;
2+
using System.Security.Cryptography;
3+
4+
using Microsoft.IdentityModel.Tokens;
5+
using Org.BouncyCastle.Crypto.Parameters;
6+
using Org.BouncyCastle.OpenSsl;
7+
8+
9+
namespace Icarus.Certs
10+
{
11+
public class SigningIssuerCertificate : IDisposable
12+
{
13+
private readonly RSACryptoServiceProvider _rsa;
14+
15+
public SigningIssuerCertificate()
16+
{
17+
_rsa = new RSACryptoServiceProvider();
18+
}
19+
20+
public RsaSecurityKey GetIssuerSigningKey(string publicKeyPath)
21+
{
22+
var file = publicKeyPath;
23+
var publicKey = System.IO.File.ReadAllText(file);
24+
25+
using (var reader = System.IO.File.OpenText(file))
26+
{
27+
var pem = new PemReader(reader);
28+
var o = (RsaKeyParameters)pem.ReadObject();
29+
var parameters = new RSAParameters();
30+
parameters.Modulus = o.Modulus.ToByteArray();
31+
parameters.Exponent = o.Exponent.ToByteArray();
32+
_rsa.ImportParameters(parameters);
33+
}
34+
35+
return new RsaSecurityKey(_rsa);
36+
}
37+
38+
39+
public void Dispose()
40+
{
41+
_rsa?.Dispose();
42+
}
43+
}
44+
45+
46+
public class SigningAudienceCertificate : IDisposable
47+
{
48+
private readonly RSACryptoServiceProvider _rsa;
49+
50+
public SigningAudienceCertificate()
51+
{
52+
_rsa = new RSACryptoServiceProvider();
53+
}
54+
55+
public SigningCredentials GetAudienceSigningKey(string keyPath)
56+
{
57+
var file = keyPath;
58+
var publicKey = System.IO.File.ReadAllText(file);
59+
60+
using (var reader = System.IO.File.OpenText(file))
61+
{
62+
var pem = new PemReader(reader);
63+
var o = (RsaKeyParameters)pem.ReadObject();
64+
var parameters = new RSAParameters();
65+
parameters.Modulus = o.Modulus.ToByteArray();
66+
parameters.Exponent = o.Exponent.ToByteArray();
67+
_rsa.ImportParameters(parameters);
68+
}
69+
70+
return new SigningCredentials(
71+
key: new RsaSecurityKey(_rsa),
72+
algorithm: SecurityAlgorithms.RsaSha256);
73+
}
74+
75+
public void Dispose()
76+
{
77+
_rsa?.Dispose();
78+
}
79+
}
80+
}

Controllers/Managers/SongManager.cs

Lines changed: 63 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -180,23 +180,30 @@ public async Task SaveSongToFileSystem(IFormFile songFile)
180180
DirectoryManager dirMgr = new DirectoryManager(_config, song);
181181
dirMgr.CreateDirectory();
182182

183-
var filePath = dirMgr.SongDirectory;
184-
filePath += $"{song.Filename}";
183+
var tempPath = song.SongPath();
184+
song.Filename = song.GenerateFilename(1);
185+
var filePath = $"{dirMgr.SongDirectory}{song.Filename}";
185186

186187
_logger.Info($"Absolute song path: {filePath}");
187188

188189

189-
using (var fileStream = new FileStream(filePath, FileMode.Create))
190+
await Task.Run(() =>
190191
{
191-
var songBytes = await System.IO.File.ReadAllBytesAsync(song.SongPath());
192+
using (var fileStream = new FileStream(filePath, FileMode.Create))
193+
{
194+
var songBytes = System.IO.File.ReadAllBytes(tempPath);
192195

193-
System.IO.File.WriteAllBytesAsync(filePath, songBytes);
194-
System.IO.File.Delete(song.SongPath());
196+
_logger.Info("Saving song to the filesystem");
197+
fileStream.Write(songBytes, 0, songBytes.Count());
195198

196-
song.SongDirectory = dirMgr.SongDirectory;
199+
System.IO.File.Delete(tempPath);
200+
_logger.Info("Deleting temp file");
197201

198-
_logger.Info("Song successfully saved to filesystem");
199-
}
202+
_logger.Info("Song successfully saved to filesystem");
203+
}
204+
});
205+
206+
song.SongDirectory = dirMgr.SongDirectory;
200207

201208
var coverMgr = new CoverArtManager(_config);
202209
var coverArt = coverMgr.SaveCoverArt(song);
@@ -211,51 +218,74 @@ public async Task SaveSongToFileSystem(IFormFile songFile)
211218
}
212219
}
213220

214-
public async Task SaveSongToFileSystem(IFormFile songFile, IFormFile coverArtData, Song song)
221+
public void SaveSongToFileSystem(IFormFile songFile, IFormFile coverArtData, Song song)
215222
{
223+
song.SongDirectory = _tempDirectoryRoot;
224+
song.DateCreated = DateTime.Now;
225+
216226
if (string.IsNullOrEmpty(song.Filename))
217227
{
218228
song.Filename = song.GenerateFilename(1);
219229
}
220230

221-
song.SongDirectory = _tempDirectoryRoot;
222-
song.DateCreated = DateTime.Now;
231+
_logger.Info($"Temporary directory: {_tempDirectoryRoot}");
223232

224-
using (var filestream = new FileStream(song.SongPath(), FileMode.Create))
233+
var tempPath = song.SongPath();
234+
235+
_logger.Info("Temporary song path: {0}", tempPath);
236+
237+
using (var filestream = new FileStream(tempPath, FileMode.Create))
225238
{
226239
_logger.Info("Saving song to temporary directory");
227-
await songFile.CopyToAsync(filestream);
240+
songFile.CopyTo(filestream);
228241
}
229242

230243
var coverMgr = new CoverArtManager(_config);
231-
var coverArt = coverMgr.SaveCoverArt(coverArtData, song);
232-
233244
var meta = new MetadataRetriever();
245+
var coverArt = coverMgr.SaveCoverArt(coverArtData, song);
246+
meta.UpdateCoverArt(song, coverArt);
234247
song.Duration = meta.RetrieveSongDuration(song.SongPath());
235248

236249
meta.UpdateMetadata(song, song);
237-
meta.UpdateCoverArt(song, coverArt);
250+
238251

239252
DirectoryManager dirMgr = new DirectoryManager(_config, song);
240253
dirMgr.CreateDirectory();
241254

242-
var filePath = dirMgr.SongDirectory + song.Filename;
255+
song.SongDirectory = dirMgr.SongDirectory;
243256

257+
var filePath = song.SongPath();
244258
_logger.Info($"Absolute song path: {filePath}");
245259

246-
247260
using (var fileStream = new FileStream(filePath, FileMode.Create))
248261
{
249-
var songBytes = await System.IO.File.ReadAllBytesAsync(song.SongPath());
262+
var songBytes = System.IO.File.ReadAllBytes(tempPath);
250263

251-
await System.IO.File.WriteAllBytesAsync(filePath, songBytes);
252-
System.IO.File.Delete(song.SongPath());
253-
song.SongDirectory = dirMgr.SongDirectory;
264+
try
265+
{
266+
if (System.IO.File.Exists(filePath) && System.IO.File.Exists(tempPath) && fileStream.Length > 0)
267+
{
268+
System.IO.File.Delete(tempPath);
269+
_logger.Info("Deleted temp song from filesystem: {0}", tempPath);
270+
}
271+
else
272+
{
273+
fileStream.Write(songBytes, 0, songBytes.Count());
274+
_logger.Info("Saved song to filesystem: {0}", filePath);
275+
276+
System.IO.File.Delete(tempPath);
277+
_logger.Info("Deleted temp song from filesystem: {0}", tempPath);
278+
}
279+
}
280+
catch (Exception ex)
281+
{
282+
var msg = ex.Message;
283+
_logger.Error($"An error occurred: {msg}");
284+
}
254285

255286
_logger.Info("Song successfully saved to filesystem");
256287
}
257288

258-
259289
coverMgr.SaveCoverArtToDatabase(ref song, ref coverArt);
260290
SaveSongToDatabase(song);
261291
}
@@ -296,20 +326,23 @@ private async Task<Song> SaveSongTemp(IFormFile songFile)
296326
var song = new Song();
297327
_logger.Info("Assigning song filename");
298328
song.SongDirectory = _tempDirectoryRoot;
299-
song.Filename = song.GenerateFilename(1);
329+
var filename = song.GenerateFilename(1);
330+
song.Filename = filename;
300331

301332
using (var filestream = new FileStream(song.SongPath(), FileMode.Create))
302333
{
303-
_logger.Info("Saving song to temporary directory");
334+
_logger.Info("Saving temp song: {0}", song.SongPath());
304335
await songFile.CopyToAsync(filestream);
305336
}
306-
307-
MetadataRetriever meta = new MetadataRetriever();
308-
song = meta.RetrieveMetaData(song.SongPath());
337+
await Task.Run(() =>
338+
{
339+
MetadataRetriever meta = new MetadataRetriever();
340+
song = meta.RetrieveMetaData(song.SongPath());
341+
});
309342

310343
song.SongDirectory = _tempDirectoryRoot;
311-
song.Filename = song.GenerateFilename(1);
312344
song.DateCreated = DateTime.Now;
345+
song.Filename = filename;
313346

314347
return song;
315348
}

0 commit comments

Comments
 (0)