From b00b426e9cd4b991a3ef92a0044ccbb0ce4a4574 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Tue, 15 Aug 2023 15:50:35 -0400 Subject: [PATCH] fix the id handling for the progressinfo and progressbar, include OnSelect events on Upload and Delete, add missing backend implementation for AddFileAsync --- .../Modules/Controls/FileManager.razor | 23 ++++++---- Oqtane.Server/Controllers/FileController.cs | 42 +++++++++++++++++++ 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/Oqtane.Client/Modules/Controls/FileManager.razor b/Oqtane.Client/Modules/Controls/FileManager.razor index 17ed8f81..80426de8 100644 --- a/Oqtane.Client/Modules/Controls/FileManager.razor +++ b/Oqtane.Client/Modules/Controls/FileManager.razor @@ -157,6 +157,15 @@ [Parameter] public EventCallback OnDelete { get; set; } // optional - executes a method in the calling component when a file is deleted + protected override void OnInitialized() + { + // create unique id for component + _guid = Guid.NewGuid().ToString("N"); + _fileinputid = "FileInput_" + _guid; + _progressinfoid = "ProgressInfo_" + _guid; + _progressbarid = "ProgressBar_" + _guid; + } + protected override async Task OnParametersSetAsync() { // packages folder is a framework folder for uploading installable nuget packages @@ -223,12 +232,6 @@ await GetFiles(); - // create unique id for component - _guid = Guid.NewGuid().ToString("N"); - _fileinputid = "FileInput_" + _guid; - _progressinfoid = "ProgressInfo_" + _guid; - _progressbarid = "ProgressBar_" + _guid; - _initialized = true; } @@ -398,8 +401,8 @@ // reset progress indicators if (ShowProgress) { - await interop.SetElementAttribute(_guid + "ProgressInfo", "style", "display: none;"); - await interop.SetElementAttribute(_guid + "ProgressBar", "style", "display: none;"); + await interop.SetElementAttribute(_progressinfoid, "style", "display: none;"); + await interop.SetElementAttribute(_progressbarid, "style", "display: none;"); } else { @@ -435,6 +438,7 @@ { FileId = file.FileId; await SetImage(); + await OnSelect.InvokeAsync(FileId); await OnUpload.InvokeAsync(FileId); } await GetFiles(); @@ -481,7 +485,8 @@ await GetFiles(); FileId = -1; await SetImage(); - StateHasChanged(); + await OnSelect.InvokeAsync(FileId); + StateHasChanged(); } catch (Exception ex) { diff --git a/Oqtane.Server/Controllers/FileController.cs b/Oqtane.Server/Controllers/FileController.cs index 636803b1..c005c4db 100644 --- a/Oqtane.Server/Controllers/FileController.cs +++ b/Oqtane.Server/Controllers/FileController.cs @@ -159,6 +159,48 @@ namespace Oqtane.Controllers } } + // POST api/ + [HttpPost] + [Authorize(Roles = RoleNames.Registered)] + public Models.File Post([FromBody] Models.File file) + { + var folder = _folders.GetFolder(file.FolderId); + if (ModelState.IsValid && folder != null && folder.SiteId == _alias.SiteId) + { + if (_userPermissions.IsAuthorized(User, folder.SiteId, EntityNames.Folder, file.FolderId, PermissionNames.Edit)) + { + var filepath = _files.GetFilePath(file); + if (System.IO.File.Exists(filepath)) + { + file = CreateFile(file.Name, folder.FolderId, filepath); + file = _files.AddFile(file); + _syncManager.AddSyncEvent(_alias.TenantId, EntityNames.File, file.FileId, SyncEventActions.Create); + _logger.Log(LogLevel.Information, this, LogFunction.Create, "File Added {File}", file); + } + else + { + _logger.Log(LogLevel.Error, this, LogFunction.Security, "File Does Not Exist At Path {FilePath}", filepath); + HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; + file = null; + } + } + else + { + _logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized File Post Attempt {File}", file); + HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden; + file = null; + } + } + else + { + _logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized File Post Attempt {File}", file); + HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden; + file = null; + } + + return file; + } + // PUT api//5 [HttpPut("{id}")] [Authorize(Roles = RoleNames.Registered)]