using Microsoft.CodeAnalysis; using Seenginx.Models; using Seenginx.Services.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Seenginx.Services { public class NginxService : INginxService { private readonly ConfigPaths ConfigPaths; public NginxService(ConfigPaths configPaths) { ConfigPaths = configPaths; } public async Task> AddFileAsync(NewFileForm newFileForm) { await Task.Run(() => { }); var newFile = new ConfigFile(); newFile.Name = $"{newFileForm.Name}.conf"; newFile.Folder = "/conf.d"; newFile.FullPath = Path.Combine(ConfigPaths.NginxPath, "conf.d", newFile.Name); newFile.Body = newFileForm.SelectedTemplate == 0.ToString() ? string.Empty : (await GetTemplates()).SingleOrDefault(t => t.Name == newFileForm.SelectedTemplate)?.Code; newFile.LastUpdated = DateTime.UtcNow; await File.WriteAllTextAsync(newFile.FullPath, newFile.Body, Encoding.UTF8); var addResult = new Result(); addResult.SetData(newFile); return addResult; } public async Task> GetFilesAsync() { await Task.Run(() => { }); var rootConfigs = Directory.GetFiles(ConfigPaths.NginxPath, "*.conf"); var confdConfigs = Directory.GetFiles(Path.Combine(ConfigPaths.NginxPath, "conf.d"), "*.conf"); var sitesAvailableConfigs = Directory.GetFiles(Path.Combine(ConfigPaths.NginxPath, "sites-available"), "*.conf"); var sitesEnabledConfigs = Directory.GetFiles(Path.Combine(ConfigPaths.NginxPath, "sites-enabled"), "*.conf"); var rootConfigFiles = rootConfigs.Select(fp => { var fileName = Path.GetFileName(fp); var configFile = new ConfigFile(); configFile.CanBeDeleted = fileName != "nginx.conf"; configFile.Folder = "/"; configFile.LastUpdated = File.GetLastWriteTime(fp); configFile.Name = fileName; configFile.FullPath = Path.Combine(ConfigPaths.NginxPath, configFile.Folder, configFile.Name); configFile.Body = File.ReadAllText(fp); return configFile; }); var confdConfigFiles = confdConfigs.Select(fp => { var fileName = Path.GetFileName(fp); var configFile = new ConfigFile(); configFile.CanBeDeleted = true; configFile.Folder = "/conf.d"; configFile.LastUpdated = File.GetLastWriteTime(fp); configFile.Name = fileName; configFile.FullPath = Path.Combine(ConfigPaths.NginxPath, configFile.Folder, configFile.Name); configFile.Body = File.ReadAllText(fp); return configFile; }); var sitesAvailableConfigFiles = sitesAvailableConfigs.Select(fp => { var fileName = Path.GetFileName(fp); var configFile = new ConfigFile(); configFile.CanBeDeleted = true; configFile.Folder = "/sites-available"; configFile.LastUpdated = File.GetLastWriteTime(fp); configFile.Name = fileName; configFile.FullPath = Path.Combine(ConfigPaths.NginxPath, configFile.Folder, configFile.Name); configFile.Body = File.ReadAllText(fp); return configFile; }); var sitesEnabledConfigFiles = sitesEnabledConfigs.Select(fp => { var fileName = Path.GetFileName(fp); var configFile = new ConfigFile(); configFile.CanBeDeleted = true; configFile.Folder = "/sites-enabled"; configFile.LastUpdated = File.GetLastWriteTime(fp); configFile.Name = fileName; configFile.FullPath = Path.Combine(ConfigPaths.NginxPath, configFile.Folder, configFile.Name); configFile.Body = File.ReadAllText(fp); return configFile; }); var finalList = new List(); finalList.AddRange(rootConfigFiles); finalList.AddRange(confdConfigFiles); finalList.AddRange(sitesAvailableConfigFiles); finalList.AddRange(sitesEnabledConfigFiles); return finalList; } public async Task> GetTemplates() { var templates = new List