From 4c33b8f005376f3b386bf92fa6d9d6268f69ef4f Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Tue, 4 Mar 2025 18:05:21 +0000 Subject: [PATCH] Code cleanup --- .vscode/settings.json | 7 ++- SECURITY.md | 10 ---- TODO.md => TODO.fr.md | 0 .../Blogspot/FileSystemApiController.cs | 4 +- src/Directory.Build.props | 5 ++ ...eRecieved.Info.cs => IFileReceivedInfo.cs} | 6 +-- src/Yavsc.Abstract/Yavsc.Abstract.csproj | 2 +- src/Yavsc.Server/Config.cs | 26 +++++----- src/Yavsc.Server/Helpers/FileSystemHelpers.cs | 44 +++++++--------- ...ileRecievedInfo.cs => FileReceivedInfo.cs} | 24 ++++++--- src/Yavsc.Server/Settings/SiteSettings.cs | 51 +++++++++---------- .../ViewModels/LiveCastHandler.cs | 15 +++--- src/Yavsc.Server/Yavsc.Server.csproj | 1 + src/cli/Commands/GenerationCommander.cs | 13 +++-- 14 files changed, 105 insertions(+), 103 deletions(-) delete mode 100644 SECURITY.md rename TODO.md => TODO.fr.md (100%) create mode 100644 src/Directory.Build.props rename src/Yavsc.Abstract/FileSystem/{IFileRecieved.Info.cs => IFileReceivedInfo.cs} (54%) rename src/Yavsc.Server/Models/FileSystem/{FileRecievedInfo.cs => FileReceivedInfo.cs} (59%) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8bf0c416..32c21b1f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,5 +17,10 @@ "Newtonsoft", "Npgsql", "Yavsc" - ] + ], + "cSpell.dictionaries": [ + "fr" + ], + "cSpell.reportUnknownWords": true, + "cSpell.language": "fr,fr-FR,en,en-GB" } diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index a0fb9457..00000000 --- a/SECURITY.md +++ /dev/null @@ -1,10 +0,0 @@ -# Security Policy - -## Supported Versions - - -| Version | Supported | -| ------- | ------------------ | -| 1.0.6 | :x: | - -(https://pschneider.fr:84) diff --git a/TODO.md b/TODO.fr.md similarity index 100% rename from TODO.md rename to TODO.fr.md diff --git a/src/Api/Controllers/Blogspot/FileSystemApiController.cs b/src/Api/Controllers/Blogspot/FileSystemApiController.cs index 2dc63d59..efc9f062 100644 --- a/src/Api/Controllers/Blogspot/FileSystemApiController.cs +++ b/src/Api/Controllers/Blogspot/FileSystemApiController.cs @@ -54,7 +54,7 @@ namespace Yavsc.ApiControllers { if (!ModelState.IsValid) return new BadRequestObjectResult(ModelState); string destDir = null; - List received = new List(); + List received = new List(); InvalidPathException pathex = null; try { destDir = User.InitPostToFileSystem(subdir); @@ -80,7 +80,7 @@ namespace Yavsc.ApiControllers dbContext.SaveChanges(User.GetUserId()); received.Add(item); _logger.LogInformation($"Received '{item.FileName}'."); - if (item.QuotaOffensed) + if (item.QuotaOffense) break; i++; }; diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 00000000..f53f4fe8 --- /dev/null +++ b/src/Directory.Build.props @@ -0,0 +1,5 @@ + + + 1.0.8 + + diff --git a/src/Yavsc.Abstract/FileSystem/IFileRecieved.Info.cs b/src/Yavsc.Abstract/FileSystem/IFileReceivedInfo.cs similarity index 54% rename from src/Yavsc.Abstract/FileSystem/IFileRecieved.Info.cs rename to src/Yavsc.Abstract/FileSystem/IFileReceivedInfo.cs index 9fadaa14..8464401a 100644 --- a/src/Yavsc.Abstract/FileSystem/IFileRecieved.Info.cs +++ b/src/Yavsc.Abstract/FileSystem/IFileReceivedInfo.cs @@ -1,14 +1,14 @@ namespace Yavsc.Abstract.FileSystem { - public interface IFileRecievedInfo + public interface IFileReceivedInfo { string DestDir { get; set; } string FileName { get; set; } - bool Overriden { get; set; } + bool Overridden { get; set; } - bool QuotaOffensed { get; set; } + bool QuotaOffense { get; set; } } } diff --git a/src/Yavsc.Abstract/Yavsc.Abstract.csproj b/src/Yavsc.Abstract/Yavsc.Abstract.csproj index 6d0c7e5f..61e9f2ed 100644 --- a/src/Yavsc.Abstract/Yavsc.Abstract.csproj +++ b/src/Yavsc.Abstract/Yavsc.Abstract.csproj @@ -1,7 +1,7 @@ - net8.0 + net8.0 enable enable diff --git a/src/Yavsc.Server/Config.cs b/src/Yavsc.Server/Config.cs index 1ffaa06b..26545aea 100644 --- a/src/Yavsc.Server/Config.cs +++ b/src/Yavsc.Server/Config.cs @@ -9,23 +9,23 @@ namespace Yavsc; public static class Config { - public static string Authority { get; set; } + public static string? Authority { get; set; } public static IConfigurationRoot? GoogleWebClientConfiguration { get; set; } public static GoogleServiceAccount? GServiceAccount { get; set; } - public static SiteSettings SiteSetup { get; set; } - public static FileServerOptions UserFilesOptions { get; set; } - public static FileServerOptions GitOptions { get; set; } - public static string AvatarsDirName { set; get; } - public static string GitDirName { set; get; } + public static SiteSettings SiteSetup { get; set; } = new SiteSettings(); + public static FileServerOptions? UserFilesOptions { get; set; } + public static FileServerOptions? GitOptions { get; set; } + public static string AvatarsDirName { set; get; } = "Avatars"; + public static string GitDirName { set; get; } = "Git"; - public static GoogleAuthSettings GoogleSettings { get; set; } - public static SmtpSettings SmtpSetup { get; set; } - public static string Temp { get; set; } - public static FileServerOptions AvatarsOptions { get; set; } - public static string UserBillsDirName { set; get; } - public static string UserFilesDirName { set; get; } + public static GoogleAuthSettings? GoogleSettings { get; set; } + public static SmtpSettings? SmtpSetup { get; set; } + public static string? Temp { get; set; } + public static FileServerOptions? AvatarsOptions { get; set; } + public static string UserBillsDirName { set; get; } = "Bills"; + public static string UserFilesDirName { set; get; } = "Files"; @@ -89,5 +89,5 @@ public static class Config }, }; - public static PayPalSettings PayPalSettings { get; set; } + public static PayPalSettings? PayPalSettings { get; set; } } diff --git a/src/Yavsc.Server/Helpers/FileSystemHelpers.cs b/src/Yavsc.Server/Helpers/FileSystemHelpers.cs index f0d5782b..9c8ab5fc 100644 --- a/src/Yavsc.Server/Helpers/FileSystemHelpers.cs +++ b/src/Yavsc.Server/Helpers/FileSystemHelpers.cs @@ -25,22 +25,19 @@ namespace Yavsc.Server.Helpers } } } - public static FileRecievedInfo ReceiveProSignature(this ClaimsPrincipal user, string billingCode, long estimateId, IFormFile formFile, string signtype) + public static FileReceivedInfo ReceiveProSignature(this ClaimsPrincipal user, string billingCode, long estimateId, IFormFile formFile, string signType) { - var item = new FileRecievedInfo - { - FileName = AbstractFileSystemHelpers.SignFileNameFormat("pro", billingCode, estimateId) - }; + var item = new FileReceivedInfo( + Config.SiteSetup.Bills, + AbstractFileSystemHelpers.SignFileNameFormat("pro", billingCode, estimateId)); - var destFileName = Path.Combine(Config.SiteSetup.Bills, item.FileName); - - var fi = new FileInfo(destFileName); - if (fi.Exists) item.Overriden = true; + var fi = new FileInfo(item.FullName); + if (fi.Exists) item.Overridden = true; using (var org = formFile.OpenReadStream()) { using Image image = Image.Load(org); - image.Save(destFileName); + image.Save(fi.FullName); } return item; } @@ -170,26 +167,23 @@ namespace Yavsc.Server.Helpers { user.DiskQuota += quota; } - public static FileRecievedInfo ReceiveUserFile(this ApplicationUser user, string root, IFormFile f, string destFileName = null) + public static FileReceivedInfo ReceiveUserFile(this ApplicationUser user, string root, IFormFile f, string destFileName = null) { return ReceiveUserFile(user, root, f.OpenReadStream(), destFileName ?? ParseFileNameFromDisposition(f.ContentDisposition), f.ContentType, CancellationToken.None); } - public static FileRecievedInfo ReceiveUserFile(this ApplicationUser user, string root, Stream inputStream, string destFileName, string contentType, CancellationToken token) + public static FileReceivedInfo ReceiveUserFile(this ApplicationUser user, string root, Stream inputStream, string destFileName, string contentType, CancellationToken token) { // TODO lock user's disk usage for this scope, // this process is not safe at concurrent access. long usage = user.DiskUsage; - var item = new FileRecievedInfo - { - FileName = AbstractFileSystemHelpers.FilterFileName(destFileName), - DestDir = root - }; + var item = new FileReceivedInfo + (root, AbstractFileSystemHelpers.FilterFileName(destFileName)); var fi = new FileInfo(Path.Combine(root, item.FileName)); if (fi.Exists) { - item.Overriden = true; + item.Overridden = true; usage -= fi.Length; } using (var dest = fi.OpenWrite()) @@ -211,7 +205,7 @@ namespace Yavsc.Server.Helpers } } if (usage >= user.DiskQuota) { - item.QuotaOffensed = true; + item.QuotaOffense = true; } user.DiskUsage = usage; return item; @@ -231,12 +225,12 @@ namespace Yavsc.Server.Helpers } - public static FileRecievedInfo ReceiveAvatar(this ApplicationUser user, IFormFile formFile) + public static FileReceivedInfo ReceiveAvatar(this ApplicationUser user, IFormFile formFile) { - var item = new FileRecievedInfo - { - FileName = user.UserName + ".png" - }; + var item = new FileReceivedInfo + (Config.AvatarsOptions.RequestPath.ToUriComponent(), + user.UserName + ".png"); + using (var org = formFile.OpenReadStream()) { using Image image = Image.Load(org); @@ -247,14 +241,12 @@ namespace Yavsc.Server.Helpers image.Mutate(x=>x.Resize(32,32)); image.Save(Path.Combine(Config.SiteSetup.Avatars,user.UserName + ".xs.png")); } - item.DestDir = Config.AvatarsOptions.RequestPath.ToUriComponent(); user.Avatar = $"{item.DestDir}/{item.FileName}"; return item; } public static string GetFileUrl (this LiveFlow flow) { - if (flow.DifferedFileName==null) return null; // no server-side backup for this stream return $"{Config.UserFilesOptions.RequestPath}/{flow.Owner.UserName}/live/"+GetFileName(flow); } diff --git a/src/Yavsc.Server/Models/FileSystem/FileRecievedInfo.cs b/src/Yavsc.Server/Models/FileSystem/FileReceivedInfo.cs similarity index 59% rename from src/Yavsc.Server/Models/FileSystem/FileRecievedInfo.cs rename to src/Yavsc.Server/Models/FileSystem/FileReceivedInfo.cs index 66edbcc0..0f7dc498 100644 --- a/src/Yavsc.Server/Models/FileSystem/FileRecievedInfo.cs +++ b/src/Yavsc.Server/Models/FileSystem/FileReceivedInfo.cs @@ -25,18 +25,30 @@ using Yavsc.Abstract.FileSystem; namespace Yavsc.Models.FileSystem { - public class FileRecievedInfo : IFileRecievedInfo + public class FileReceivedInfo : IFileReceivedInfo { - public FileRecievedInfo() + public FileReceivedInfo(string destDir, string fileName, bool quotaOffense=false) { - QuotaOffensed = Overriden = false; - DestDir = FileName = null; + this.DestDir = destDir; + this.FileName = fileName; + this.QuotaOffense = quotaOffense; + } + public static FileReceivedInfo FromPath(string filePath) + { + FileInfo fi = new FileInfo(filePath); + return new FileReceivedInfo( + fi.Directory.FullName, + fi.Name + ); } public string DestDir { get; set; } + public string FileName { get; set; } - public bool Overriden { get; set; } + public bool Overridden { get; set; } + + public bool QuotaOffense { get; set; } + public string FullName { get => Path.Combine(DestDir, FileName); } - public bool QuotaOffensed { get; set; } } } diff --git a/src/Yavsc.Server/Settings/SiteSettings.cs b/src/Yavsc.Server/Settings/SiteSettings.cs index 500c5e7a..99dcca09 100644 --- a/src/Yavsc.Server/Settings/SiteSettings.cs +++ b/src/Yavsc.Server/Settings/SiteSettings.cs @@ -1,51 +1,61 @@ +using Microsoft.EntityFrameworkCore.Metadata.Builders; using Yavsc.Models.Relationship; namespace Yavsc { public class SiteSettings { - public string Title { get; set; } - public string Slogan { get; set; } + public string Title { get; set; } = "Yavsc"; + public string Slogan { get; set; } = ""; - public string StyleSheet { get; set; } - public string FavIcon { get; set; } - public string Logo { get; set; } + public string StyleSheet { get; set; } = "site.css"; + public string FavIcon { get; set; } = "favicon.ico"; + public string Logo { get; set; } = "logo.png"; /// /// Conceptually, /// This authorisation server only has this present site as unique audience. /// /// - public string Audience { get; set; } + public string Audience { get; set; } = "lua.pschneider.fr"; /// /// it's a very small company, with one domaine name only, /// so let it be the same as in the Audience field. /// /// - public string Authority { get; set; } + public string Authority { get; set; } = "lua.pschneider.fr"; /// /// Owner's email /// /// - public StaticContact Owner { get; set; } + public StaticContact Owner { get; set; } = new StaticContact + { + EMail = "root@lua.pschneider.fr", + Name = "Root" + } ; + /// /// Administrator's email /// /// - public StaticContact Admin { get; set; } + public StaticContact Admin { get; set; } = new StaticContact + { + EMail = "root@lua.pschneider.fr", + Name = "Root" + } ; - public string DataDir { get; set; } + public string DataDir { get; set; } = "data"; public string Avatars { get; set; } = "avatars"; public long Quota { get; set; } public string Blog { get; set; } = "blogs"; public string Bills { get; set; } = "bills"; public string GitRepository { get; set; } = "sources"; - public string BusinessName { get; set; } - public string Street { get; set; } - public string PostalCode { get; set; } - public string CountryCode { get; set; } + public string BusinessName { get; set; } = "Yavsc"; + public string? Street { get; set; } + public string? PostalCode { get; set; } + public string? CountryCode { get; set; } - public string HomeViewName { get; set; } + public string HomeViewName { get; set; } = "Home"; /// /// Specifies the directory where should be /// generated pdf files using pandoc @@ -53,17 +63,6 @@ namespace Yavsc /// The temporary directory to use public string TempDir { get; set; } = "temp"; - /// - /// Only one performer will capture payments - /// - /// user capturing payments id - public string OnlyOnePerformerId { get; set; } - - /// - /// Only one activity will be supported - /// - /// the supported activity code - public string OnlyOneActivityCode { get; set; } /// /// Disk usage user list maximum length in memory diff --git a/src/Yavsc.Server/ViewModels/LiveCastHandler.cs b/src/Yavsc.Server/ViewModels/LiveCastHandler.cs index e5e83506..f9384c4b 100644 --- a/src/Yavsc.Server/ViewModels/LiveCastHandler.cs +++ b/src/Yavsc.Server/ViewModels/LiveCastHandler.cs @@ -38,23 +38,22 @@ namespace Yavsc.ViewModels.Streaming { } - public async Task ReceiveUserFile(ApplicationUser user, ILogger logger, string root, Queue> queue, string destFileName, Func isEndOfInput) + public async Task ReceiveUserFile(ApplicationUser user, ILogger logger, string root, Queue> queue, string destFileName, Func isEndOfInput) { // TODO lock user's disk usage for this scope, // this process is not safe at concurrent access. long usage = user.DiskUsage; - var item = new FileRecievedInfo - { - FileName = AbstractFileSystemHelpers.FilterFileName(destFileName), - DestDir = root - }; + var item = new FileReceivedInfo + (root, AbstractFileSystemHelpers.FilterFileName(destFileName)); + var fi = new FileInfo(Path.Combine(root, item.FileName)); if (fi.Exists) { - item.Overriden = true; + item.Overridden = true; usage -= fi.Length; } + logger.LogInformation("Opening the file"); using (var dest = fi.Open(FileMode.Create, FileAccess.Write, FileShare.Read)) { @@ -82,7 +81,7 @@ namespace Yavsc.ViewModels.Streaming } if (usage >= user.DiskQuota) { - item.QuotaOffensed = true; + item.QuotaOffense = true; } user.DiskUsage = usage; return item; diff --git a/src/Yavsc.Server/Yavsc.Server.csproj b/src/Yavsc.Server/Yavsc.Server.csproj index b33cdc34..ddf488e5 100644 --- a/src/Yavsc.Server/Yavsc.Server.csproj +++ b/src/Yavsc.Server/Yavsc.Server.csproj @@ -4,6 +4,7 @@ enable enable 53bd70e8-ff81-497a-847f-a15fd8ea7a09 + diff --git a/src/cli/Commands/GenerationCommander.cs b/src/cli/Commands/GenerationCommander.cs index 8201a0d7..d1a5f089 100644 --- a/src/cli/Commands/GenerationCommander.cs +++ b/src/cli/Commands/GenerationCommander.cs @@ -1,10 +1,9 @@ -using cli.Model; using Microsoft.Extensions.CommandLineUtils; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.OptionsModel; - +using cli.Model; using cli.Services; using cli.Settings; @@ -19,7 +18,7 @@ namespace cli.Commands public CommandLineApplication Integrate(CommandLineApplication rootApp) { - CommandArgument nsarg=null; + CommandArgument nameSpaceArg=null; CommandArgument mdClass=null; CommandArgument ctrlName=null; CommandArgument rPath=null; @@ -28,7 +27,7 @@ namespace cli.Commands var cmd = rootApp.Command("mvc", config => { config.FullName = "mvc controller"; config.Description = "generates an mvc controller"; - nsarg = config.Argument("ns","default name space"); + nameSpaceArg = config.Argument("ns","default name space"); mdClass = config.Argument("mc","Model class name"); ctrlName = config.Argument("cn", "Controller name"); rPath = config.Argument("rp", "Relative path"); @@ -36,11 +35,11 @@ namespace cli.Commands }); cmd.OnExecute(() => { var host = new WebHostBuilder(); - var hostengnine = host.UseEnvironment("Development") + var hostEngine = host.UseEnvironment("Development") .UseServer("cli") .UseStartup() .Build(); - var app = hostengnine.Start(); + var app = hostEngine.Start(); var mailer = app.Services.GetService(); var loggerFactory = app.Services.GetService(); var logger = loggerFactory.CreateLogger(); @@ -49,7 +48,7 @@ namespace cli.Commands MvcGenerator generator = app.Services.GetService(); var modelFullName = mdClass?.Value ?? options?.Value.ModelFullName; - var nameSpace = nsarg?.Value?? options?.Value.NameSpace; + var nameSpace = nameSpaceArg?.Value?? options?.Value.NameSpace; var dbContext = dbCtx?.Value?? options?.Value.DbContextFullName; var controllerName = ctrlName?.Value?? options?.Value.ControllerName; var relativePath = rPath?.Value ?? options?.Value.RelativePath;