Add DHCP API

This commit is contained in:
Samuel Lorch 2023-04-13 18:23:12 +02:00
parent 1cf1fe7a2e
commit 23dcf81690
4 changed files with 175 additions and 0 deletions

View file

@ -0,0 +1,81 @@
package service
import (
"context"
"fmt"
"nfsense.net/nfsense/internal/definitions/service"
)
type GetDHCPv4ServerParameters struct {
Index uint
}
type GetDHCPv4ServerResult struct {
service.DHCPv4Server
}
func (f *Service) GetDHCPv4Server(ctx context.Context, params GetDHCPv4ServerParameters) (GetDHCPv4ServerResult, error) {
if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Service.DHCPv4Servers) {
return GetDHCPv4ServerResult{}, fmt.Errorf("DHCPv4Server does not Exist")
}
return GetDHCPv4ServerResult{
DHCPv4Server: f.ConfigManager.GetPendingConfig().Service.DHCPv4Servers[params.Index],
}, nil
}
type GetDHCPv4ServersResult struct {
DHCPv4Servers []service.DHCPv4Server `json:"dhcp_v4_servers"`
}
func (f *Service) GetDHCPv4Servers(ctx context.Context, params struct{}) (GetDHCPv4ServersResult, error) {
return GetDHCPv4ServersResult{
DHCPv4Servers: f.ConfigManager.GetPendingConfig().Service.DHCPv4Servers,
}, nil
}
type CreateDHCPv4ServerParameters struct {
DHCPv4Server service.DHCPv4Server `json:"dhcp_v4_server"`
}
func (f *Service) CreateDHCPv4Server(ctx context.Context, params CreateDHCPv4ServerParameters) (struct{}, error) {
t, conf := f.ConfigManager.StartTransaction()
defer t.Discard()
conf.Service.DHCPv4Servers = append(conf.Service.DHCPv4Servers, params.DHCPv4Server)
return struct{}{}, t.Commit()
}
type UpdateDHCPv4ServerParameters struct {
Index uint64 `json:"index"`
DHCPv4Server service.DHCPv4Server `json:"dhcp_v4_server"`
}
func (f *Service) UpdateDHCPv4Server(ctx context.Context, params UpdateDHCPv4ServerParameters) (struct{}, error) {
if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Service.DHCPv4Servers) {
return struct{}{}, fmt.Errorf("DHCPv4Server does not Exist")
}
t, conf := f.ConfigManager.StartTransaction()
defer t.Discard()
conf.Service.DHCPv4Servers[params.Index] = params.DHCPv4Server
return struct{}{}, t.Commit()
}
type DeleteDHCPv4ServerParameters struct {
Index uint64 `json:"index"`
}
func (f *Service) DeleteDHCPv4Server(ctx context.Context, params DeleteDHCPv4ServerParameters) (struct{}, error) {
if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Service.DHCPv4Servers) {
return struct{}{}, fmt.Errorf("DHCPv4Server does not Exist")
}
t, conf := f.ConfigManager.StartTransaction()
defer t.Discard()
conf.Service.DHCPv4Servers = append(conf.Service.DHCPv4Servers[:params.Index], conf.Service.DHCPv4Servers[params.Index+1:]...)
return struct{}{}, t.Commit()
}

View file

@ -0,0 +1,81 @@
package service
import (
"context"
"fmt"
"nfsense.net/nfsense/internal/definitions/service"
)
type GetDHCPv6ServerParameters struct {
Index uint
}
type GetDHCPv6ServerResult struct {
service.DHCPv6Server
}
func (f *Service) GetDHCPv6Server(ctx context.Context, params GetDHCPv6ServerParameters) (GetDHCPv6ServerResult, error) {
if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Service.DHCPv6Servers) {
return GetDHCPv6ServerResult{}, fmt.Errorf("DHCPv6Server does not Exist")
}
return GetDHCPv6ServerResult{
DHCPv6Server: f.ConfigManager.GetPendingConfig().Service.DHCPv6Servers[params.Index],
}, nil
}
type GetDHCPv6ServersResult struct {
DHCPv6Servers []service.DHCPv6Server `json:"dhcp_v6_servers"`
}
func (f *Service) GetDHCPv6Servers(ctx context.Context, params struct{}) (GetDHCPv6ServersResult, error) {
return GetDHCPv6ServersResult{
DHCPv6Servers: f.ConfigManager.GetPendingConfig().Service.DHCPv6Servers,
}, nil
}
type CreateDHCPv6ServerParameters struct {
DHCPv6Server service.DHCPv6Server `json:"dhcp_v6_server"`
}
func (f *Service) CreateDHCPv6Server(ctx context.Context, params CreateDHCPv6ServerParameters) (struct{}, error) {
t, conf := f.ConfigManager.StartTransaction()
defer t.Discard()
conf.Service.DHCPv6Servers = append(conf.Service.DHCPv6Servers, params.DHCPv6Server)
return struct{}{}, t.Commit()
}
type UpdateDHCPv6ServerParameters struct {
Index uint64 `json:"index"`
DHCPv6Server service.DHCPv6Server `json:"dhcp_v6_server"`
}
func (f *Service) UpdateDHCPv6Server(ctx context.Context, params UpdateDHCPv6ServerParameters) (struct{}, error) {
if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Service.DHCPv6Servers) {
return struct{}{}, fmt.Errorf("DHCPv6Server does not Exist")
}
t, conf := f.ConfigManager.StartTransaction()
defer t.Discard()
conf.Service.DHCPv6Servers[params.Index] = params.DHCPv6Server
return struct{}{}, t.Commit()
}
type DeleteDHCPv6ServerParameters struct {
Index uint64 `json:"index"`
}
func (f *Service) DeleteDHCPv6Server(ctx context.Context, params DeleteDHCPv6ServerParameters) (struct{}, error) {
if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Service.DHCPv6Servers) {
return struct{}{}, fmt.Errorf("DHCPv6Server does not Exist")
}
t, conf := f.ConfigManager.StartTransaction()
defer t.Discard()
conf.Service.DHCPv6Servers = append(conf.Service.DHCPv6Servers[:params.Index], conf.Service.DHCPv6Servers[params.Index+1:]...)
return struct{}{}, t.Commit()
}

View file

@ -0,0 +1,11 @@
package service
import (
"github.com/godbus/dbus/v5"
"nfsense.net/nfsense/internal/config"
)
type Service struct {
ConfigManager *config.ConfigManager
DbusConn *dbus.Conn
}

View file

@ -15,6 +15,7 @@ import (
"nfsense.net/nfsense/internal/api/firewall"
"nfsense.net/nfsense/internal/api/network"
"nfsense.net/nfsense/internal/api/object"
"nfsense.net/nfsense/internal/api/service"
"nfsense.net/nfsense/internal/config"
"nfsense.net/nfsense/internal/jsonrpc"
"nfsense.net/nfsense/internal/networkd"
@ -96,4 +97,5 @@ func RegisterAPIMethods(apiHandler *jsonrpc.Handler, configManager *config.Confi
apiHandler.Register("Firewall", &firewall.Firewall{ConfigManager: configManager})
apiHandler.Register("Network", &network.Network{ConfigManager: configManager, DbusConn: dbusConn})
apiHandler.Register("Object", &object.Object{ConfigManager: configManager})
apiHandler.Register("Service", &service.Service{ConfigManager: configManager, DbusConn: dbusConn})
}