using Microsoft.CodeAnalysis; using Seenginx.Models; using Seenginx.Services.Models; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Security.AccessControl; using System.Text; using System.Threading.Tasks; namespace Seenginx.Services { public class NginxService : INginxService { private readonly SeenginxSettings Settings; private readonly CommandService CommandService; public NginxService(SeenginxSettings configPaths, CommandService commandService) { Settings = configPaths; CommandService = commandService; } public async Task> GetFilesAsync() { await Task.Run(() => { }); var rootConfigs = Directory.GetFiles(Settings.nginx.rootPath, "*.conf"); var rootDraftConfigs = Directory.GetFiles(Settings.nginx.rootPath, "*.conf.draft"); var confdConfigs = Directory.GetFiles(Path.Combine(Settings.nginx.rootPath, "conf.d"), "*.conf"); var confDraftConfigs = Directory.GetFiles(Path.Combine(Settings.nginx.rootPath, "conf.d"), "*.conf.draft"); var sitesAvailableConfigs = Directory.GetFiles(Path.Combine(Settings.nginx.rootPath, "sites-available"), "*.conf"); var sitesAvailableDraftConfigs = Directory.GetFiles(Path.Combine(Settings.nginx.rootPath, "sites-available"), "*.conf.draft"); var rootConfigFiles = rootConfigs.Select(fp => { var name = Path.GetFileNameWithoutExtension(fp); var configFile = new ConfigFile(); configFile.CanBeDeleted = false; configFile.Folder = string.Empty; configFile.LastUpdated = File.GetLastWriteTime(fp); configFile.Name = name; configFile.FullPath = Path.Combine(Settings.nginx.rootPath, $"{configFile.Name}.conf"); configFile.Body = File.ReadAllText(fp); if (rootDraftConfigs.Any(cfp => cfp.Contains(name))) configFile.DraftBody = File.ReadAllText(rootDraftConfigs.First(cfp => cfp.Contains(name))); return configFile; }); var confdConfigFiles = confdConfigs.Select(fp => { var fileName = Path.GetFileNameWithoutExtension(fp); var configFile = new ConfigFile(); configFile.CanBeDeleted = true; configFile.Folder = "conf.d"; configFile.LastUpdated = File.GetLastWriteTime(fp); configFile.Name = fileName; configFile.FullPath = Path.Combine(Settings.nginx.rootPath, configFile.Folder, $"{configFile.Name}.conf"); configFile.Body = File.ReadAllText(fp); if (confDraftConfigs.Any(cfp => cfp.Contains(fileName))) configFile.DraftBody = File.ReadAllText(confDraftConfigs.First(cfp => cfp.Contains(fileName))); return configFile; }); var sitesAvailableConfigFiles = sitesAvailableConfigs.Select(fp => { var fileName = Path.GetFileNameWithoutExtension(fp); var configFile = new ConfigFile(); configFile.CanBeDeleted = true; configFile.Folder = "sites-available"; configFile.LastUpdated = File.GetLastWriteTime(fp); configFile.Name = fileName; configFile.FullPath = Path.Combine(Settings.nginx.rootPath, configFile.Folder, $"{configFile.Name}.conf"); configFile.Body = File.ReadAllText(fp); if (sitesAvailableDraftConfigs.Any(cfp => cfp.Contains(fileName))) configFile.DraftBody = File.ReadAllText(sitesAvailableDraftConfigs.First(cfp => cfp.Contains(fileName))); return configFile; }); var finalList = new List(); finalList.AddRange(rootConfigFiles); finalList.AddRange(confdConfigFiles); finalList.AddRange(sitesAvailableConfigFiles); finalList = finalList.OrderBy(cf => cf.Name).ToList(); return finalList; } public async Task> GetTemplates() { var templates = new List