Seenginx/Seenginx/Pages/Nginx.razor.cs

126 lines
4.0 KiB
C#

using Blazored.Modal;
using Blazored.Modal.Services;
using Blazorise;
using Microsoft.AspNetCore.Components;
using Seenginx.Models;
using Seenginx.Services;
using Seenginx.Shared;
using Seenginx.Utility;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Seenginx.Pages
{
public class NginxBase : ComponentBase
{
[Inject] public INginxService NginxService { get; set; }
[Inject] public IFileManager FileService { get; set; }
[Inject] public IModalService Modal { get; set; }
public string InputSearch { get; set; }
public List<ConfigFile> ConfigFiles { get; set; } = new List<ConfigFile>();
public ConfigFile SelectedFile { get; set; }
public List<string> Filters { get; set; } = new List<string>();
public List<int> FilteredOutFiles { get; set; } = new List<int>();
public NotificationSettings GeneralNotificationSettings { get; set; } = null;
public List<Template> Templates { get; set; } = new List<Template>();
public Dictionary<string, string> FilterFolder { get; set; } = new Dictionary<string, string>();
protected override async Task OnParametersSetAsync()
{
try
{
ConfigFiles.AddRange(await NginxService.GetFilesAsync());
Filters.AddRange(new List<string> { "All", "Root", "Conf.d", "Available", "Enabled" });
FilterFolder.Add("All", null);
FilterFolder.Add("Root", "/");
FilterFolder.Add("Conf.d", "/conf.d");
FilterFolder.Add("Available", "/sites-available");
FilterFolder.Add("Enabled", "/sites-enabled");
Templates.AddRange(await NginxService.GetTemplates());
}
catch (Exception ex)
{
throw ex;
}
await base.OnParametersSetAsync();
}
public void SelectedFileChanged(ConfigFile configFile)
{
SelectedFile = configFile;
}
public async Task ShowAddFileModal()
{
var parameters = new ModalParameters();
parameters.Add(nameof(Templates), Templates);
var resultAwait = Modal.Show<NginxConfigForm>(string.Empty, parameters);
var result = await resultAwait.Result;
if (result.Cancelled) return;
var validationResult = await NginxService.ValidateNewConfigurationAsync((NewFileForm)result.Data);
if (!validationResult.AllOk)
{
var validationPopupParameters = new ModalParameters().Setup(PopupType.Ok, validationResult.ErrorMessage);
var validationPopup = Modal.Show<GenericPopup>(string.Empty, validationPopupParameters);
await validationPopup.Result;
validationPopup.Close();
return;
}
var addFileResult = await NginxService.AddFileAsync((NewFileForm)result.Data);
if (SelectedFile != null)
SelectedFile.Deselect();
ConfigFiles.Add(addFileResult.Data);
ConfigFiles = ConfigFiles.OrderBy(cf => cf.Name).ToList();
SelectedFile = ConfigFiles.Find(cf => cf.Name == addFileResult.Data.Name);
SelectedFile.Select();
}
public async Task SaveUpdateDraftFileAsync()
{
var saveUpdateDraftResult = await FileService.SaveUpdateDraftFileAsync(SelectedFile);
}
public async Task SaveUpdateFileAsync()
{
var saveUpdateResult = await FileService.SaveUpdateFileAsync(SelectedFile);
}
public async Task TestConfiguration()
{
}
public async Task DeleteFile()
{
var parameters = new ModalParameters().Setup(PopupType.YesNo, $"Are you sure you want to delete '{SelectedFile.Name}'?");
var resultAwait = Modal.Show<GenericPopup>(string.Empty, parameters);
var result = await resultAwait.Result;
if ((PopupAnswer)result.Data == PopupAnswer.No) return;
var deleteFileResult = await NginxService.DeleteConfigurationFileAsync(SelectedFile);
if (!deleteFileResult.AllOk)
{
var errorParameters = new ModalParameters().Setup(PopupType.Ok, $"Something went wrong, here's the error message: '{deleteFileResult.ErrorMessage}'?");
var errorReportModalAwait = Modal.Show<GenericPopup>(string.Empty, errorParameters);
await errorReportModalAwait.Result;
return;
}
ConfigFiles.Remove(SelectedFile);
SelectedFile = null;
}
}
}