Add methods for the Apache Manager
This commit is contained in:
parent
ce13a75aaa
commit
78d8c8d0bd
|
@ -7,8 +7,8 @@ public static class AugeasExtensions
|
||||||
public static AugSettings GetSettings()
|
public static AugSettings GetSettings()
|
||||||
{
|
{
|
||||||
// if DEBUG we use this
|
// if DEBUG we use this
|
||||||
var rootDir = Environment.CurrentDirectory + "/root";
|
var rootDir = Environment.CurrentDirectory + "/Augeas/root";
|
||||||
var lensDir = Environment.CurrentDirectory + "/lens";
|
var lensDir = Environment.CurrentDirectory + "/Augeas/lens";
|
||||||
|
|
||||||
return new AugSettings(rootDir, lensDir);
|
return new AugSettings(rootDir, lensDir);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,29 +5,74 @@ namespace CodeLiturgy.Views.Augeas
|
||||||
public class AugeasManager
|
public class AugeasManager
|
||||||
{
|
{
|
||||||
private readonly Sharp.Augeas.Augeas _augeas;
|
private readonly Sharp.Augeas.Augeas _augeas;
|
||||||
|
|
||||||
private AugSettings _augSettings;
|
private AugSettings _augSettings;
|
||||||
|
|
||||||
|
public List<string> CurrentApacheConfigurations => _currentApacheConfigurations;
|
||||||
|
|
||||||
|
private List<string> _currentApacheConfigurations;
|
||||||
|
|
||||||
|
private const string _apachePath = "/etc/apache2/sites-available";
|
||||||
|
|
||||||
|
|
||||||
public AugeasManager()
|
public AugeasManager()
|
||||||
{
|
{
|
||||||
_augeas = new Sharp.Augeas.Augeas(AugeasExtensions.GetSettings());
|
_augSettings = AugeasExtensions.GetSettings();
|
||||||
|
_augeas = new Sharp.Augeas.Augeas(_augSettings);
|
||||||
|
RefreshApacheConfigurations();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetPreview()
|
public string GetPreview(string site)
|
||||||
{
|
{
|
||||||
var preview = _augeas.GetPreview("/files/etc/apache2/sites-available/example.com.conf");
|
|
||||||
|
if (!_currentApacheConfigurations.Contains(site))
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
var siteFullPath = $"{_apachePath}/{site}";
|
||||||
|
_augeas.LoadFile(siteFullPath);
|
||||||
|
var preview = _augeas.GetPreview($"/files{siteFullPath}");
|
||||||
return preview;
|
return preview;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<string> GetApacheAvailableConfigurations()
|
public List<string> GetApacheAvailableConfigurations(int skip, int take)
|
||||||
{
|
{
|
||||||
DirectoryInfo d = new DirectoryInfo(_augSettings.); //Assuming Test is your Folder
|
var result = _currentApacheConfigurations
|
||||||
|
.Skip(skip)
|
||||||
|
.Take(take)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
FileInfo[] Files = d.GetFiles("*.txt"); //Getting Text files
|
return _currentApacheConfigurations;
|
||||||
string str = "";
|
|
||||||
|
|
||||||
foreach(FileInfo file in Files )
|
}
|
||||||
|
|
||||||
|
public SuperNode GetVirtualHostTree(string site)
|
||||||
|
{
|
||||||
|
if (!_currentApacheConfigurations.Contains(site))
|
||||||
{
|
{
|
||||||
str = str + ", " +
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var siteFullPath = $"{_apachePath}/{site}";
|
||||||
|
_augeas.LoadFile(siteFullPath);
|
||||||
|
var tree = _augeas.GetTree("VirtualHost",$"/files{siteFullPath}/VirtualHost/*");
|
||||||
|
return tree;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void RefreshApacheConfigurations()
|
||||||
|
{
|
||||||
|
var apacheDir = _augSettings.root + _apachePath;
|
||||||
|
DirectoryInfo d = new DirectoryInfo(apacheDir);
|
||||||
|
|
||||||
|
FileInfo[] files = d.GetFiles("*.conf");
|
||||||
|
|
||||||
|
var result = files
|
||||||
|
.Select(x => x.Name)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
_currentApacheConfigurations = result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<IfModule mod_ssl.c>
|
<IfModule mod_ssl.c>
|
||||||
<VirtualHost 91.218.230.167:443>
|
<VirtualHost 91.99.99.99:443>
|
||||||
ServerName www.example.com
|
ServerName www.example.com
|
||||||
ServerAlias example.com
|
ServerAlias example.com
|
||||||
#SSLEngine on
|
#SSLEngine on
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<VirtualHost 95.181.226.174:443>
|
<VirtualHost 10.10.10.10:443>
|
||||||
ServerName git.example2.com
|
ServerName git.example2.com
|
||||||
ServerAlias www.git.example2.com
|
ServerAlias www.git.example2.com
|
||||||
SSLEngine on
|
SSLEngine on
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="6.4.0" />
|
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="6.4.0" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.4.0" />
|
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.4.0" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.4.0" />
|
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.4.0" />
|
||||||
|
<PackageReference Include="System.Json" Version="4.7.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.css" />
|
<_ContentIncludedByDefault Remove="wwwroot\lib\bootstrap\dist\css\bootstrap-grid.css" />
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
using CodeLiturgy.Data.Auth.Context.Users;
|
||||||
|
using CodeLiturgy.Domain;
|
||||||
|
using CodeLiturgy.Views.Augeas;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Sharp.Augeas;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
namespace CodeLiturgy.Views.Controllers
|
||||||
|
{
|
||||||
|
[ApiController]
|
||||||
|
[Authorize]
|
||||||
|
public class ApacheController : ControllerBase
|
||||||
|
{
|
||||||
|
private ILogger<SitesController> _logger;
|
||||||
|
private readonly SiteDbContext _siteDbContext;
|
||||||
|
private readonly AugeasManager _augeasManager;
|
||||||
|
|
||||||
|
public ApacheController(
|
||||||
|
ApplicationUserManager userManager,
|
||||||
|
ILogger<SitesController> logger,
|
||||||
|
SiteDbContext siteDbContext,
|
||||||
|
AugeasManager augeasManager)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_siteDbContext = siteDbContext;
|
||||||
|
_augeasManager = augeasManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("/api/apache")]
|
||||||
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||||
|
|
||||||
|
public ActionResult GetSites(
|
||||||
|
|
||||||
|
int skip = 0, int take = 50, int orderDir = 1)
|
||||||
|
{
|
||||||
|
var sites = _augeasManager
|
||||||
|
.GetApacheAvailableConfigurations(skip, take);
|
||||||
|
|
||||||
|
return Ok(sites);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("/api/apache/preview/{site}")]
|
||||||
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||||
|
|
||||||
|
public ActionResult GetSitePreview(
|
||||||
|
string site)
|
||||||
|
{
|
||||||
|
var preview = _augeasManager
|
||||||
|
.GetPreview(site);
|
||||||
|
|
||||||
|
return Ok(preview);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet("/api/apache/tree/{site}")]
|
||||||
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||||
|
|
||||||
|
public ActionResult<SuperNode> GetSiteTree(
|
||||||
|
string site)
|
||||||
|
{
|
||||||
|
var tree = _augeasManager
|
||||||
|
.GetVirtualHostTree(site);
|
||||||
|
|
||||||
|
return Ok(tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ using System.Globalization;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using CodeLiturgy.Data.Auth;
|
using CodeLiturgy.Data.Auth;
|
||||||
using CodeLiturgy.Startup.Application;
|
using CodeLiturgy.Startup.Application;
|
||||||
|
using CodeLiturgy.Views.Augeas;
|
||||||
using CodeLiturgy.Views.Utils;
|
using CodeLiturgy.Views.Utils;
|
||||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||||
using Microsoft.AspNetCore.Localization;
|
using Microsoft.AspNetCore.Localization;
|
||||||
|
@ -50,6 +51,7 @@ public class Startup
|
||||||
services.ConfigureSwagger();
|
services.ConfigureSwagger();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
services.AddSingleton<AugeasManager>();
|
||||||
|
|
||||||
services.AddControllersWithViews(x => x.EnableEndpointRouting = false);
|
services.AddControllersWithViews(x => x.EnableEndpointRouting = false);
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit f5c1368b8fbcc0fa293e6d47ab3437fd060e290c
|
Subproject commit eae24d1b142738f40597284a24d637ad51506c0c
|
Loading…
Reference in New Issue