From 5dd1d13b46f7a8e6160ccffa82d13259e3cb6305 Mon Sep 17 00:00:00 2001 From: Karchnu Date: Wed, 9 Dec 2020 19:00:18 +0100 Subject: [PATCH] Requests and responses are in separate files and directories. --- src/network.cr | 23 ++--------------------- src/requests/admin.cr | 32 ++++++++++++++++++++++++++++++++ src/requests/login.cr | 25 +++++++++++++++++++++++++ src/responses/error.cr | 9 +++++++++ src/responses/success.cr | 8 ++++++++ 5 files changed, 76 insertions(+), 21 deletions(-) create mode 100644 src/requests/admin.cr create mode 100644 src/requests/login.cr create mode 100644 src/responses/error.cr create mode 100644 src/responses/success.cr diff --git a/src/network.cr b/src/network.cr index cde8014..bef959a 100644 --- a/src/network.cr +++ b/src/network.cr @@ -12,24 +12,5 @@ module DNSManager class_getter responses = [] of IPC::JSON.class end -class DNSManager::Response - IPC::JSON.message Error, 0 do - property reason : String | Array(String) - def initialize(@reason) - end - end - IPC::JSON.message Success, 1 do - def initialize - end - end -end - -class DNSManager::Request - IPC::JSON.message Login, 0 do - end - IPC::JSON.message Logout, 1 do - end - DNSManager.requests << Logout -end - -# require "./requests/*" +require "./requests/*" +require "./responses/*" diff --git a/src/requests/admin.cr b/src/requests/admin.cr new file mode 100644 index 0000000..6a11583 --- /dev/null +++ b/src/requests/admin.cr @@ -0,0 +1,32 @@ + +class DNSManager::Request + # Periodic actions to perform as an administrator. + IPC::JSON.message Maintainance, 7 do + enum Subject + Verbosity # Change the verbosity of dnsmanagerd. + end + + property key : String + property subject : Subject + property value : Int32? + + def initialize(@key, @subject) + end + + def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event::Events) + # This request means serious business. + raise AdminAuthorizationException.new if key != dnsmanagerd.authd.key + + case @subject + when Subject::Verbosity + if verbosity = @value + Baguette::Context.verbosity = verbosity + end + Response::Success.new + else + Response::Error.new "not implemented" + end + end + end + DNSManager.requests << Maintainance +end diff --git a/src/requests/login.cr b/src/requests/login.cr new file mode 100644 index 0000000..719f1f5 --- /dev/null +++ b/src/requests/login.cr @@ -0,0 +1,25 @@ + +class DNSManager::Request + IPC::JSON.message Login, 0 do + property token : String + + def initialize(@token) + end + + def handle(dnsmanagerd : DNSManager::Service, event : IPC::Event::Events) + user, _ = dnsmanagerd.decode_token token + dnsmanagerd.logged_users[event.fd] = user + + # In case we want to log their last connection. + #dnsmanagerd.auth.edit_profile_content user.uid, { + # "dnsmanager-last-connection" => JSON::Any.new Time.utc.to_s + #} + + return Response::Success.new + rescue e + # FIXME: Should those be logged? + return Response::Error.new "unauthorized" + end + end + DNSManager.requests << Login +end diff --git a/src/responses/error.cr b/src/responses/error.cr new file mode 100644 index 0000000..5c506be --- /dev/null +++ b/src/responses/error.cr @@ -0,0 +1,9 @@ + +class DNSManager::Response + IPC::JSON.message Error, 0 do + property reason : String | Array(String) + def initialize(@reason) + end + end + DNSManager.responses << Error +end diff --git a/src/responses/success.cr b/src/responses/success.cr new file mode 100644 index 0000000..48b33f5 --- /dev/null +++ b/src/responses/success.cr @@ -0,0 +1,8 @@ + +class DNSManager::Response + IPC::JSON.message Success, 1 do + def initialize + end + end + DNSManager.responses << Success +end