From 377e4744ec70f37da685d07d36f740a891ca7c1f Mon Sep 17 00:00:00 2001 From: AliveDevil Date: Wed, 15 Nov 2023 00:21:36 +0100 Subject: [PATCH] Types --- src/pdns-dhcp/Options/KeaDhcpOptions.cs | 10 ++++++++ src/pdns-dhcp/Options/PowerDnsOptions.cs | 11 ++++++++ src/pdns-dhcp/PowerDns/PowerDnsSocket.cs | 11 ++++++++ src/pdns-dhcp/PowerDns/SocketFactory.cs | 8 ++++++ src/pdns-dhcp/Program.cs | 21 ++++++++++++++-- src/pdns-dhcp/Services/DhcpLeaseWatcher.cs | 29 ++++++++++++++++++++++ src/pdns-dhcp/Services/PowerDnsBackend.cs | 16 ++++++++++++ src/pdns-dhcp/appsettings.json | 15 +++++++++++ 8 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 src/pdns-dhcp/Options/KeaDhcpOptions.cs create mode 100644 src/pdns-dhcp/Options/PowerDnsOptions.cs create mode 100644 src/pdns-dhcp/PowerDns/PowerDnsSocket.cs create mode 100644 src/pdns-dhcp/PowerDns/SocketFactory.cs create mode 100644 src/pdns-dhcp/Services/DhcpLeaseWatcher.cs create mode 100644 src/pdns-dhcp/Services/PowerDnsBackend.cs create mode 100644 src/pdns-dhcp/appsettings.json diff --git a/src/pdns-dhcp/Options/KeaDhcpOptions.cs b/src/pdns-dhcp/Options/KeaDhcpOptions.cs new file mode 100644 index 0000000..0e297ba --- /dev/null +++ b/src/pdns-dhcp/Options/KeaDhcpOptions.cs @@ -0,0 +1,10 @@ +namespace pdns_dhcp.Options; + +public class KeaDhcpOptions +{ + public KeaDhcpServerOptions? Dhcp4 { get; set; } + + public KeaDhcpServerOptions? Dhcp6 { get; set; } +} + +public record class KeaDhcpServerOptions(FileInfo Leases); diff --git a/src/pdns-dhcp/Options/PowerDnsOptions.cs b/src/pdns-dhcp/Options/PowerDnsOptions.cs new file mode 100644 index 0000000..a93ac29 --- /dev/null +++ b/src/pdns-dhcp/Options/PowerDnsOptions.cs @@ -0,0 +1,11 @@ +namespace pdns_dhcp.Options; + +public class PowerDnsOptions +{ + public PowerDnsListenerOptions Listener { get; set; } +} + +public class PowerDnsListenerOptions(string socket) +{ + public string Socket { get; } = socket; +} diff --git a/src/pdns-dhcp/PowerDns/PowerDnsSocket.cs b/src/pdns-dhcp/PowerDns/PowerDnsSocket.cs new file mode 100644 index 0000000..1607b51 --- /dev/null +++ b/src/pdns-dhcp/PowerDns/PowerDnsSocket.cs @@ -0,0 +1,11 @@ +using System.Net.Sockets; + +namespace pdns_dhcp.PowerDns; + +public class PowerDnsSocket +{ + public PowerDnsSocket() + { + + } +} diff --git a/src/pdns-dhcp/PowerDns/SocketFactory.cs b/src/pdns-dhcp/PowerDns/SocketFactory.cs new file mode 100644 index 0000000..4718b52 --- /dev/null +++ b/src/pdns-dhcp/PowerDns/SocketFactory.cs @@ -0,0 +1,8 @@ +using Stl.Interception; + +namespace pdns_dhcp.PowerDns; + +public interface SocketFactory : IRequiresFullProxy +{ + PowerDnsSocket Create(); +} diff --git a/src/pdns-dhcp/Program.cs b/src/pdns-dhcp/Program.cs index 3751555..2dc47ba 100644 --- a/src/pdns-dhcp/Program.cs +++ b/src/pdns-dhcp/Program.cs @@ -1,2 +1,19 @@ -// See https://aka.ms/new-console-template for more information -Console.WriteLine("Hello, World!"); +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +using pdns_dhcp.Options; +using pdns_dhcp.PowerDns; +using pdns_dhcp.Services; + +using Stl.Interception; + +var builder = Host.CreateApplicationBuilder(args); +builder.Services.Configure(builder.Configuration.GetSection("KeaDhcp")); +builder.Services.Configure(builder.Configuration.GetSection("PowerDns")); + +builder.Services.AddHostedService(); +builder.Services.AddHostedService(); + +builder.Services.AddTypedFactory(); + +builder.Build().Run(); diff --git a/src/pdns-dhcp/Services/DhcpLeaseWatcher.cs b/src/pdns-dhcp/Services/DhcpLeaseWatcher.cs new file mode 100644 index 0000000..ac0e778 --- /dev/null +++ b/src/pdns-dhcp/Services/DhcpLeaseWatcher.cs @@ -0,0 +1,29 @@ +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Options; + +using pdns_dhcp.Options; +using pdns_dhcp.PowerDns; + +namespace pdns_dhcp.Services; + +public class DhcpLeaseWatcher : IHostedService +{ + private readonly PowerDnsOptions _options; + private readonly PowerDnsSocket _socket; + + public DhcpLeaseWatcher(IOptions options, SocketFactory factory) + { + _options = options.Value; + _socket = factory.Create(); + } + + public Task StartAsync(CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public Task StopAsync(CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } +} diff --git a/src/pdns-dhcp/Services/PowerDnsBackend.cs b/src/pdns-dhcp/Services/PowerDnsBackend.cs new file mode 100644 index 0000000..6568702 --- /dev/null +++ b/src/pdns-dhcp/Services/PowerDnsBackend.cs @@ -0,0 +1,16 @@ +using Microsoft.Extensions.Hosting; + +namespace pdns_dhcp.Services; + +public class PowerDnsBackend : IHostedService +{ + public Task StartAsync(CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public Task StopAsync(CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } +} diff --git a/src/pdns-dhcp/appsettings.json b/src/pdns-dhcp/appsettings.json new file mode 100644 index 0000000..d6659c2 --- /dev/null +++ b/src/pdns-dhcp/appsettings.json @@ -0,0 +1,15 @@ +{ + "PowerDns": { + "Listener": { + "Socket": "/run/pdns-dhcp/pdns.sock" + } + }, + "KeaDhcp": { + "Dhcp4": { + "Leases": "/var/lib/kea/dhcp4.leases" + }, + "Dhcp6": { + "Leases": "/var/lib/kea/dhcp6.leases" + } + } +} \ No newline at end of file