renaming of the 3Blog3 setting => UserFilesRoot
All checks were successful
Dotnet build and test / build (pull_request) Successful in 33m37s

This commit is contained in:
Paul Schneider 2026-10-11 00:16:44 +01:00
commit 446b595077
Signed by: notazof
GPG key ID: AD4B9B545FBD7D12
18 changed files with 30 additions and 39 deletions

View file

@ -8,7 +8,7 @@
"CorsAllowedOrigins": [ "CorsAllowedOrigins": [
"https://preprod-api.$DOMAIN" "https://preprod-api.$DOMAIN"
], ],
"Blog": "blog" "UserFilesRoot": "files"
}, },
"ConnectionStrings": { "ConnectionStrings": {
"YavscConnection": "Server=localhost;Port=5432;Database=lame-db-name;Username=lame-user-name;Password=lame-password;" "YavscConnection": "Server=localhost;Port=5432;Database=lame-db-name;Username=lame-user-name;Password=lame-password;"

View file

@ -30,7 +30,7 @@
"EMail": "paul@pschneider.fr" "EMail": "paul@pschneider.fr"
}, },
"Quota": 200000000, "Quota": 200000000,
"Blog": "blog", "UserFilesRoot": "files",
"Avatars": "avatars", "Avatars": "avatars",
"Bills": "bills", "Bills": "bills",
"TempDir": "temp", "TempDir": "temp",

View file

@ -1,8 +0,0 @@
namespace Yavsc.Blogs;
public static class BlogConstants
{
public const string AdminRole = "Admin";
public const string ModeratorRole = "Moderator";
public const string UserRole = "User";
}

View file

@ -200,7 +200,7 @@ namespace Yavsc.Blogs.Controllers
if (string.IsNullOrEmpty(ownerUserName)) if (string.IsNullOrEmpty(ownerUserName))
return NotFound(new { error = "owner not found" }); return NotFound(new { error = "owner not found" });
var physicalPath = Path.Combine(siteSettings.Blog, ownerUserName, file.Path ?? ""); var physicalPath = Path.Combine(siteSettings.UserFilesRoot, ownerUserName, file.Path ?? "");
var fi = new FileInfo(physicalPath); var fi = new FileInfo(physicalPath);
if (!fi.Exists) return NotFound(new { error = "file not on disk" }); if (!fi.Exists) return NotFound(new { error = "file not on disk" });

View file

@ -9,7 +9,6 @@ using Yavsc.Models;
using Yavsc.Services; using Yavsc.Services;
using Yavsc.Server.Helpers; using Yavsc.Server.Helpers;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
namespace Yavsc.Blogs; namespace Yavsc.Blogs;
internal class Program internal class Program
@ -85,9 +84,9 @@ internal class Program
}) })
.Configure<SiteSettings>(settings => .Configure<SiteSettings>(settings =>
{ {
if (settings.Blog == null) if (settings.UserFilesRoot == null)
{ {
settings.Blog = "blog"; settings.UserFilesRoot = "blog";
} }
}); });

View file

@ -9,7 +9,7 @@
"https://localhost:5005", "https://localhost:5005",
"https://api.pschneider.fr" "https://api.pschneider.fr"
], ],
"Blog": "blog" "UserFilesRoot": "files"
}, },
"ConnectionStrings": { "ConnectionStrings": {
"YavscConnection": "Server=localhost;Port=5432;Database=lame-db-name;Username=lame-user-name;Password=lame-password;" "YavscConnection": "Server=localhost;Port=5432;Database=lame-db-name;Username=lame-user-name;Password=lame-password;"

View file

@ -421,9 +421,9 @@ namespace Yavsc.Controllers
{ {
// Renames the blog files // Renames the blog files
var userdirinfo = new DirectoryInfo( var userdirinfo = new DirectoryInfo(
Path.Combine(_siteSettings.Blog, Path.Combine(_siteSettings.UserFilesRoot,
oldUserName)); oldUserName));
var newdir = Path.Combine(_siteSettings.Blog, var newdir = Path.Combine(_siteSettings.UserFilesRoot,
model.UserName); model.UserName);
if (userdirinfo.Exists) if (userdirinfo.Exists)
userdirinfo.MoveTo(newdir); userdirinfo.MoveTo(newdir);

View file

@ -1267,7 +1267,7 @@ ADD COLUMN IF NOT EXISTS ""Moderated"" boolean NOT NULL DEFAULT FALSE;");
{ {
throw new InvalidOperationException("GitRepository path is not configured in SiteSettings."); throw new InvalidOperationException("GitRepository path is not configured in SiteSettings.");
} }
if (settings.Blog == null) if (settings.UserFilesRoot == null)
{ {
throw new InvalidOperationException("Blog path is not configured in SiteSettings."); throw new InvalidOperationException("Blog path is not configured in SiteSettings.");
} }
@ -1284,7 +1284,7 @@ ADD COLUMN IF NOT EXISTS ""Moderated"" boolean NOT NULL DEFAULT FALSE;");
throw new InvalidOperationException("TempDir path is not configured in SiteSettings."); throw new InvalidOperationException("TempDir path is not configured in SiteSettings.");
} }
var userFilesDirInfo = new DirectoryInfo(settings.Blog); var userFilesDirInfo = new DirectoryInfo(settings.UserFilesRoot);
if (!userFilesDirInfo.Exists) userFilesDirInfo.Create(); if (!userFilesDirInfo.Exists) userFilesDirInfo.Create();

View file

@ -23,10 +23,10 @@ public class Startup
ResourcesHelpers.GlobalLocalizer = localizer; ResourcesHelpers.GlobalLocalizer = localizer;
Config.SmtpSetup = smtpSettings.Value; Config.SmtpSetup = smtpSettings.Value;
Config.Authority = siteSettings.Value.Authority; Config.Authority = siteSettings.Value.Authority;
string blogsDir = siteSettings.Value.Blog ?? throw new Exception("blogsDir is not set."); string blogsDir = siteSettings.Value.UserFilesRoot ?? throw new Exception("blogsDir is not set.");
string billsDir = siteSettings.Value.Bills ?? throw new Exception("billsDir is not set."); string billsDir = siteSettings.Value.Bills ?? throw new Exception("billsDir is not set.");
string tempDir = siteSettings.Value.TempDir ?? throw new Exception("tempDir is not set."); string tempDir = siteSettings.Value.TempDir ?? throw new Exception("tempDir is not set.");
Config.PayPalSettings = payPalSettings.Value; Config.PayPalSettings = payPalSettings.Value;
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);

View file

@ -28,7 +28,7 @@ namespace Yavsc.ViewComponents
{ {
string uid = ViewContext.HttpContext.User.GetUserId(); string uid = ViewContext.HttpContext.User.GetUserId();
return View(new UserDirectoryInfo( return View(new UserDirectoryInfo(
siteSettings.Blog, siteSettings.UserFilesRoot,
uid, dirname)); uid, dirname));
} }
} }

View file

@ -31,7 +31,7 @@
"Avatars": "avatars", "Avatars": "avatars",
"Quota": 200000000, "Quota": 200000000,
"Bills": "bills", "Bills": "bills",
"Blog": "blog", "UserFilesRoot": "files",
"TempDir": "temp", "TempDir": "temp",
"DataDir": "data", "DataDir": "data",
"GitRepository": "git" "GitRepository": "git"

View file

@ -44,7 +44,7 @@ namespace Yavsc.Server.Helpers
this ClaimsPrincipal user, this ClaimsPrincipal user,
string subpath, SiteSettings siteSettings) string subpath, SiteSettings siteSettings)
{ {
var root = Path.Combine(siteSettings.Blog, user.GetUserName()); var root = Path.Combine(siteSettings.UserFilesRoot, user.GetUserName());
if (!string.IsNullOrWhiteSpace(subpath)) if (!string.IsNullOrWhiteSpace(subpath))
{ {
if (!subpath.IsValidYavscPath()) if (!subpath.IsValidYavscPath())
@ -67,7 +67,7 @@ namespace Yavsc.Server.Helpers
public static void DeleteUserFile(this ApplicationUser user, string fileName, SiteSettings siteSettings) public static void DeleteUserFile(this ApplicationUser user, string fileName, SiteSettings siteSettings)
{ {
var root = Path.Combine(siteSettings.Blog, user.UserName); var root = Path.Combine(siteSettings.UserFilesRoot, user.UserName);
var fi = new FileInfo(Path.Combine(root, fileName)); var fi = new FileInfo(Path.Combine(root, fileName));
if (!fi.Exists) return; if (!fi.Exists) return;
// Capture the length BEFORE deleting: FileInfo.Length throws // Capture the length BEFORE deleting: FileInfo.Length throws
@ -80,7 +80,7 @@ namespace Yavsc.Server.Helpers
public static FsOperationInfo DeleteUserDirOrFile(this ApplicationUser user, string dirName, SiteSettings siteSettings) public static FsOperationInfo DeleteUserDirOrFile(this ApplicationUser user, string dirName, SiteSettings siteSettings)
{ {
var root = Path.Combine(siteSettings.Blog, user.UserName); var root = Path.Combine(siteSettings.UserFilesRoot, user.UserName);
if (string.IsNullOrEmpty(dirName)) if (string.IsNullOrEmpty(dirName))
return new FsOperationInfo { Done = false, ErrorCode = ErrorCode.InvalidRequest, ErrorMessage = "specify a directory or file name" }; return new FsOperationInfo { Done = false, ErrorCode = ErrorCode.InvalidRequest, ErrorMessage = "specify a directory or file name" };
@ -110,7 +110,7 @@ namespace Yavsc.Server.Helpers
public static FsOperationInfo MoveUserDir(this ApplicationUser user, string fromDirName, string toDirName, SiteSettings siteSettings) public static FsOperationInfo MoveUserDir(this ApplicationUser user, string fromDirName, string toDirName, SiteSettings siteSettings)
{ {
var root = Path.Combine(siteSettings.Blog, user.UserName); var root = Path.Combine(siteSettings.UserFilesRoot, user.UserName);
if (string.IsNullOrEmpty(fromDirName)) if (string.IsNullOrEmpty(fromDirName))
return new FsOperationInfo { Done = false, ErrorCode = ErrorCode.InvalidRequest, ErrorMessage = "specify a dir name " }; return new FsOperationInfo { Done = false, ErrorCode = ErrorCode.InvalidRequest, ErrorMessage = "specify a dir name " };
@ -136,7 +136,7 @@ namespace Yavsc.Server.Helpers
} }
public static FsOperationInfo MoveUserFileToDir(this ApplicationUser user, string fileNameFrom, string fileNameDest, SiteSettings siteSettings) public static FsOperationInfo MoveUserFileToDir(this ApplicationUser user, string fileNameFrom, string fileNameDest, SiteSettings siteSettings)
{ {
var root = Path.Combine(siteSettings.Blog, user.UserName); var root = Path.Combine(siteSettings.UserFilesRoot, user.UserName);
var fi = new FileInfo(Path.Combine(root, fileNameFrom)); var fi = new FileInfo(Path.Combine(root, fileNameFrom));
if (!fi.Exists) return new FsOperationInfo { Done = false, ErrorCode = ErrorCode.NotFound, ErrorMessage = "no file to move" }; if (!fi.Exists) return new FsOperationInfo { Done = false, ErrorCode = ErrorCode.NotFound, ErrorMessage = "no file to move" };
string dest; string dest;
@ -151,7 +151,7 @@ namespace Yavsc.Server.Helpers
} }
public static FsOperationInfo MoveUserFile(this ApplicationUser user, string fileNameFrom, string fileNameDest, SiteSettings siteSettings) public static FsOperationInfo MoveUserFile(this ApplicationUser user, string fileNameFrom, string fileNameDest, SiteSettings siteSettings)
{ {
var root = Path.Combine(siteSettings.Blog, user.UserName); var root = Path.Combine(siteSettings.UserFilesRoot, user.UserName);
var fi = new FileInfo(Path.Combine(root, fileNameFrom)); var fi = new FileInfo(Path.Combine(root, fileNameFrom));
if (!fi.Exists) return new FsOperationInfo { Done = false, ErrorCode = ErrorCode.NotFound, ErrorMessage = "no file to move" }; if (!fi.Exists) return new FsOperationInfo { Done = false, ErrorCode = ErrorCode.NotFound, ErrorMessage = "no file to move" };
var fo = new FileInfo(Path.Combine(root, fileNameDest)); var fo = new FileInfo(Path.Combine(root, fileNameDest));
@ -318,7 +318,7 @@ namespace Yavsc.Server.Helpers
public static UserDirectoryInfo GetUserFiles(SiteSettings settings, string userId, string subdir) public static UserDirectoryInfo GetUserFiles(SiteSettings settings, string userId, string subdir)
{ {
UserDirectoryInfo di = new UserDirectoryInfo(settings.Blog, userId, subdir); UserDirectoryInfo di = new UserDirectoryInfo(settings.UserFilesRoot, userId, subdir);
return di; return di;
} }

View file

@ -36,7 +36,7 @@ public class BlogSpotService
_context = context; _context = context;
this.fileSystemAuthManager = fileSystemAuthManager; this.fileSystemAuthManager = fileSystemAuthManager;
this.siteSettings = siteSettings.Value; this.siteSettings = siteSettings.Value;
if (siteSettings.Value.Blog == null) if (siteSettings.Value.UserFilesRoot == null)
{ {
throw new InvalidOperationException("SiteSettings.Blog is not configured."); throw new InvalidOperationException("SiteSettings.Blog is not configured.");
} }
@ -56,7 +56,7 @@ public class BlogSpotService
{ {
string blogFilesSubdir = $"blogs/{postId}"; string blogFilesSubdir = $"blogs/{postId}";
string destDir = Path.Combine( string destDir = Path.Combine(
siteSettings.Blog, siteSettings.UserFilesRoot,
user.UserName, user.UserName,
blogFilesSubdir); blogFilesSubdir);
var di = new DirectoryInfo(destDir); var di = new DirectoryInfo(destDir);

View file

@ -49,7 +49,7 @@ namespace Yavsc
public string DataDir { get; set; } public string DataDir { get; set; }
public string Avatars { get; set; } public string Avatars { get; set; }
public long Quota { get; set; } public long Quota { get; set; }
public string Blog { get; set; } public string UserFilesRoot { get; set; }
public string Bills { get; set; } public string Bills { get; set; }
public string GitRepository { get; set; } public string GitRepository { get; set; }

View file

@ -131,7 +131,7 @@ public sealed class BlogsWebServerFixture : WebHostFixture
// on real files. // on real files.
builder.Services.Configure<SiteSettings>(s => builder.Services.Configure<SiteSettings>(s =>
{ {
s.Blog = BlogFilesRoot; s.UserFilesRoot = BlogFilesRoot;
}); });
// Real BlogSpotService — same instance the production host // Real BlogSpotService — same instance the production host

View file

@ -49,7 +49,7 @@ public sealed class MappedClaimsBlogsWebServerFixture : IDisposable, IBackendFix
// BlogsWebServerFixture. // BlogsWebServerFixture.
builder.Services.Configure<SiteSettings>(s => builder.Services.Configure<SiteSettings>(s =>
{ {
s.Blog = Path.Combine(Path.GetTempPath(), "postit-blogs-mappedclaims-" + Guid.NewGuid().ToString("N")); s.UserFilesRoot = Path.Combine(Path.GetTempPath(), "postit-blogs-mappedclaims-" + Guid.NewGuid().ToString("N"));
}); });
builder.Services.AddScoped<BlogSpotService>(); builder.Services.AddScoped<BlogSpotService>();
builder.Services.AddScoped<IAuthorizationHandler, PermissionHandler>(); builder.Services.AddScoped<IAuthorizationHandler, PermissionHandler>();

View file

@ -9,9 +9,9 @@
"FavIcon": "/favicon.ico", "FavIcon": "/favicon.ico",
"Icon": "/images/yavsc.png", "Icon": "/images/yavsc.png",
"GitRepository": "testingrepo", "GitRepository": "testingrepo",
"Blog": "blog", "UserFilesRoot": "files",
"Bills": "bills", "Bills": "bills",
"TempDir": "temp", "TempDir": "temp",
"Avatars": "avatars", "Avatars": "avatars",
"Owner": { "Owner": {
"Name": "Site Owner Name", "Name": "Site Owner Name",

View file

@ -115,7 +115,7 @@ public sealed class ServerServicesFixture : IDisposable
// Details itself doesn't read it, but the service constructor // Details itself doesn't read it, but the service constructor
// throws if SiteSettings.Blog is null, so configure a temp // throws if SiteSettings.Blog is null, so configure a temp
// value to keep construction alive. // value to keep construction alive.
services.Configure<SiteSettings>(s => s.Blog = "server-tests-files-root"); services.Configure<SiteSettings>(s => s.UserFilesRoot = "server-tests-files-root");
// Trivial file-system auth: Details never calls into it, but // Trivial file-system auth: Details never calls into it, but
// the DI container needs an instance to construct the service. // the DI container needs an instance to construct the service.
@ -449,4 +449,4 @@ public sealed class ServerServicesFixture : IDisposable
public void SetAccess(long circleId, string normalizedFullPath, public void SetAccess(long circleId, string normalizedFullPath,
FileAccessRight access) { } FileAccessRight access) { }
} }
} }