made folder paths cross platform, introduced file handler for abstracting the serving of files, enabled url mapping for broken file links, resolved public folder deletion issue

This commit is contained in:
Shaun Walker
2022-08-30 07:21:52 -04:00
parent d6bb802892
commit 075748d697
17 changed files with 199 additions and 43 deletions

View File

@ -73,7 +73,7 @@ namespace Oqtane.Repository
int start = segments.Length;
for (int i = 0; i < segments.Length; i++)
{
if (segments[i] == "api" || segments[i] == "pages" || segments[i] == Constants.ModuleDelimiter)
if (Constants.ReservedRoutes.Contains(segments[i]) || segments[i] == Constants.ModuleDelimiter)
{
start = i;
break;

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@ -82,6 +83,24 @@ namespace Oqtane.Repository
return file;
}
public File GetFile(int siteId, string folderPath, string fileName)
{
var file = _db.File.AsNoTracking()
.Include(item => item.Folder)
.FirstOrDefault(item => item.Folder.SiteId == siteId &&
item.Folder.Path.ToLower() == folderPath &&
item.Name.ToLower() == fileName);
if (file != null)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(EntityNames.Folder, file.FolderId).ToList();
file.Folder.Permissions = permissions.EncodePermissions();
file.Url = GetFileUrl(file, _tenants.GetAlias());
}
return file;
}
public void DeleteFile(int fileId)
{
File file = _db.File.Find(fileId);
@ -105,17 +124,7 @@ namespace Oqtane.Repository
private string GetFileUrl(File file, Alias alias)
{
string url = "";
switch (file.Folder.Type)
{
case FolderTypes.Private:
url = Utilities.ContentUrl(alias, file.FileId);
break;
case FolderTypes.Public:
url = alias.BaseUrl + Utilities.UrlCombine("Content", "Tenants", alias.TenantId.ToString(), "Sites", file.Folder.SiteId.ToString(), file.Folder.Path) + file.Name;
break;
}
return url;
return Utilities.FileUrl(alias, file.Folder.Path, file.Name);
}
}
}

View File

@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using Oqtane.Models;
namespace Oqtane.Repository
@ -10,6 +10,7 @@ namespace Oqtane.Repository
File UpdateFile(File file);
File GetFile(int fileId);
File GetFile(int fileId, bool tracking);
File GetFile(int siteId, string folderPath, string fileName);
void DeleteFile(int fileId);
string GetFilePath(int fileId);
string GetFilePath(File file);

View File

@ -134,7 +134,7 @@ namespace Oqtane.Repository
new Permission(PermissionNames.Edit, RoleNames.Admin, true)
}.EncodePermissions()
});
_folderRepository.AddFolder(new Folder { SiteId = site.SiteId, ParentId = folder.FolderId, Name = "Public", Type = FolderTypes.Public, Path = Utilities.PathCombine("Public", Path.DirectorySeparatorChar.ToString()), Order = 1, ImageSizes = "", Capacity = 0, IsSystem = false,
_folderRepository.AddFolder(new Folder { SiteId = site.SiteId, ParentId = folder.FolderId, Name = "Public", Type = FolderTypes.Public, Path = "Public/", Order = 1, ImageSizes = "", Capacity = 0, IsSystem = false,
Permissions = new List<Permission>
{
new Permission(PermissionNames.Browse, RoleNames.Admin, true),
@ -144,7 +144,7 @@ namespace Oqtane.Repository
});
_folderRepository.AddFolder(new Folder
{
SiteId = site.SiteId, ParentId = folder.FolderId, Name = "Users", Type = FolderTypes.Private, Path = Utilities.PathCombine("Users",Path.DirectorySeparatorChar.ToString()), Order = 3, ImageSizes = "", Capacity = 0, IsSystem = true,
SiteId = site.SiteId, ParentId = folder.FolderId, Name = "Users", Type = FolderTypes.Private, Path = "Users/", Order = 3, ImageSizes = "", Capacity = 0, IsSystem = true,
Permissions = new List<Permission>
{
new Permission(PermissionNames.Browse, RoleNames.Admin, true),

View File

@ -1,5 +1,4 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Oqtane.Extensions;
@ -41,7 +40,7 @@ namespace Oqtane.Repository
}
// add folder for user
Folder folder = _folders.GetFolder(user.SiteId, Utilities.PathCombine("Users", Path.DirectorySeparatorChar.ToString()));
Folder folder = _folders.GetFolder(user.SiteId, "Users/");
if (folder != null)
{
_folders.AddFolder(new Folder
@ -50,7 +49,7 @@ namespace Oqtane.Repository
ParentId = folder.FolderId,
Name = "My Folder",
Type = FolderTypes.Private,
Path = Utilities.PathCombine(folder.Path, user.UserId.ToString(), Path.DirectorySeparatorChar.ToString()),
Path = $"Users/{user.UserId}/",
Order = 1,
ImageSizes = "",
Capacity = Constants.UserFolderCapacity,