Seenginx/Seenginx/Services/NginxService.cs

141 lines
5.0 KiB
C#
Raw Normal View History

2020-07-01 19:36:22 +02:00
using Microsoft.CodeAnalysis;
2020-04-12 20:01:46 +02:00
using Seenginx.Models;
2020-04-19 03:04:46 +02:00
using Seenginx.Services.Models;
2020-04-12 20:01:46 +02:00
using System;
using System.Collections.Generic;
2020-04-19 03:04:46 +02:00
using System.IO;
2020-04-12 20:01:46 +02:00
using System.Linq;
2020-07-01 19:36:22 +02:00
using System.Text;
2020-04-12 20:01:46 +02:00
using System.Threading.Tasks;
namespace Seenginx.Services
{
public class NginxService : INginxService
{
2020-04-19 03:04:46 +02:00
private readonly ConfigPaths ConfigPaths;
public NginxService(ConfigPaths configPaths)
2020-04-12 20:01:46 +02:00
{
2020-04-19 03:04:46 +02:00
ConfigPaths = configPaths;
}
2020-05-03 02:10:32 +02:00
public async Task<Result<ConfigFile>> AddFileAsync(NewFileForm newFileForm)
{
2020-07-01 19:36:22 +02:00
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);
2020-05-03 02:10:32 +02:00
var addResult = new Result<ConfigFile>();
2020-07-01 19:36:22 +02:00
addResult.SetData(newFile);
2020-05-03 02:10:32 +02:00
return addResult;
}
2020-04-19 03:04:46 +02:00
public async Task<IEnumerable<ConfigFile>> GetFilesAsync()
{
2020-07-01 19:36:22 +02:00
await Task.Run(() => { });
2020-04-19 03:04:46 +02:00
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;
2020-05-02 18:57:42 +02:00
configFile.FullPath = Path.Combine(ConfigPaths.NginxPath, configFile.Folder, configFile.Name);
configFile.Body = File.ReadAllText(fp);
2020-04-19 03:04:46 +02:00
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;
2020-05-02 18:57:42 +02:00
configFile.FullPath = Path.Combine(ConfigPaths.NginxPath, configFile.Folder, configFile.Name);
configFile.Body = File.ReadAllText(fp);
2020-04-19 03:04:46 +02:00
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;
2020-05-02 18:57:42 +02:00
configFile.FullPath = Path.Combine(ConfigPaths.NginxPath, configFile.Folder, configFile.Name);
configFile.Body = File.ReadAllText(fp);
2020-04-19 03:04:46 +02:00
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;
2020-05-02 18:57:42 +02:00
configFile.FullPath = Path.Combine(ConfigPaths.NginxPath, configFile.Folder, configFile.Name);
configFile.Body = File.ReadAllText(fp);
2020-04-19 03:04:46 +02:00
return configFile;
});
var finalList = new List<ConfigFile>();
finalList.AddRange(rootConfigFiles);
finalList.AddRange(confdConfigFiles);
finalList.AddRange(sitesAvailableConfigFiles);
finalList.AddRange(sitesEnabledConfigFiles);
return finalList;
2020-04-12 20:01:46 +02:00
}
2020-07-01 19:36:22 +02:00
public async Task<IEnumerable<Template>> GetTemplates()
{
var templates = new List<Template>();
try
{
var nginxTemplateDirectory = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "templates", "nginx");
//var systemdTemplateDirectory = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "systemd");
var nginxTemplateFiles = Directory.GetFiles(nginxTemplateDirectory, "*.template");
//var systemdTemplateFiles = Directory.GetFiles(nginxTemplateDirectory, "*.template");
foreach (var templateFilePath in nginxTemplateFiles)
{
var template = new Template();
var templateFileLines = await File.ReadAllLinesAsync(templateFilePath);
template.Name = templateFileLines.FirstOrDefault();
template.Code = string.Join(Environment.NewLine, templateFileLines.Skip(2));
templates.Add(template);
}
return templates;
}
catch (Exception ex)
{
throw ex;
}
}
2020-05-03 02:10:32 +02:00
public async Task<Result<string>> TestNginxConfigurations(ConfigFile configFile)
2020-04-12 20:01:46 +02:00
{
2020-07-01 19:36:22 +02:00
await Task.Run(() => { });
2020-05-03 02:10:32 +02:00
var result = new Result<string>();
result.SetData("Uhu");
2020-04-13 23:58:26 +02:00
return result;
2020-04-12 20:01:46 +02:00
}
}
}