From 009fdea353d6203fb0f23398d20052af43b8fdfc Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Fri, 16 Jun 2023 18:41:20 +0200 Subject: [PATCH] New Domain message: WIP. --- src/requests/zone.cr | 13 +++++++++++++ src/storage.cr | 28 ++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/requests/zone.cr b/src/requests/zone.cr index 38ca35e..d06c775 100644 --- a/src/requests/zone.cr +++ b/src/requests/zone.cr @@ -3,6 +3,19 @@ require "grok" class DNSManager::Request + IPC::JSON.message NewDomain, 9 do + property domain : String + + def initialize(@zone) + end + + def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event) : IPC::JSON + user = dnsmanagerd.get_logged_user event + raise NotLoggedException.new if user.nil? + dnsmanagerd.storage.new_domain user.uid, @domain + end + end + IPC::JSON.message AddOrUpdateZone, 10 do property zone : DNSManager::Storage::Zone diff --git a/src/storage.cr b/src/storage.cr index ff6f36f..1e441b6 100644 --- a/src/storage.cr +++ b/src/storage.cr @@ -54,6 +54,34 @@ class DNSManager::Storage Response::Success.new end + def add_or_update_zone(user_id : Int32, domain : String) : IPC::JSON + # User must exist. + user_data = user_data_by_uid.get? user_id.to_s + unless user_data + Baguette::Log.warning "unknown user #{user_id} tries to add -or update- zone #{zone.domain}" + return Response::UnknownUser.new + end + + if zones_by_domain.get? domain + Response::DomainAlreadyExists.new + else + # Add the domain to the user's domain. + user_data.domains << zone.domain + + # Actually write data on-disk. + update_user_data user_data + + # TODO: Fill a template zone. + + ## # 2 NS + ## zone << rr + ## # Update the zone. + ## zones_by_domain.update_or_create zone.domain, zone + + Response::Success.new + end + end + def add_or_update_zone(user_id : Int32, zone : Zone) : IPC::JSON # Test zone validity. if errors = zone.get_errors?