Files
dashcaddy/desktop/Services/CaddyConfigGenerator.cs
T
Hermes 86e4c9fc81 wip: Windows desktop app scaffold (WinUI 3/.NET 8) + NSIS installer + docs
Owner decision pending (STATE.md DC-100 tick): adopt/ship/park.
Preserved from fragile git stash to named branch 2026-08-23.
NOTE: requires a Windows build machine (WinUI XAML compiler + MSIX do not
cross-build on Linux) — see WINDOWS_APP_BUILD.md in this tree.
Secret-scanned clean 2026-08-23 (no keys/tokens/PEM in tree).
2026-08-22 23:50:34 -07:00

57 lines
1.5 KiB
C#

using System.Text;
using DashCaddy.Desktop.Models;
namespace DashCaddy.Desktop.Services;
public class CaddyConfigGenerator
{
private const string CaddyfilePath = @"E:\dockerdata\dashcaddy\caddy\Caddyfile";
public void RegenerateConfig(List<ServiceModel> services)
{
var sb = new StringBuilder();
// Global options
sb.AppendLine("{");
sb.AppendLine(" admin :2019");
sb.AppendLine(" email admin@example.com");
sb.AppendLine("}");
sb.AppendLine();
// Each service gets a site block
foreach (var svc in services.Where(s => s.Health != "unhealthy"))
{
var domain = ExtractDomain(svc.Url);
if (string.IsNullOrEmpty(domain)) continue;
sb.AppendLine($"{domain} {{");
sb.AppendLine($" reverse_proxy {svc.Host}:{svc.Port}");
sb.AppendLine(" tls internal");
sb.AppendLine("}");
sb.AppendLine();
}
File.WriteAllText(CaddyfilePath, sb.ToString());
}
public async Task ReloadCaddyAsync()
{
// Call Caddy admin API to reload config
using var http = new HttpClient();
await http.PostAsync("http://localhost:2019/load",
new StringContent(File.ReadAllText(CaddyfilePath), Encoding.UTF8, "text/caddyfile"));
}
private string ExtractDomain(string url)
{
try
{
var uri = new Uri(url);
return uri.Host;
}
catch
{
return null;
}
}
}