Requests and responses are in separate files and directories.
This commit is contained in:
parent
7e211cead1
commit
5dd1d13b46
@ -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/*"
|
||||
|
32
src/requests/admin.cr
Normal file
32
src/requests/admin.cr
Normal file
@ -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
|
25
src/requests/login.cr
Normal file
25
src/requests/login.cr
Normal file
@ -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
|
9
src/responses/error.cr
Normal file
9
src/responses/error.cr
Normal file
@ -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
|
8
src/responses/success.cr
Normal file
8
src/responses/success.cr
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
class DNSManager::Response
|
||||
IPC::JSON.message Success, 1 do
|
||||
def initialize
|
||||
end
|
||||
end
|
||||
DNSManager.responses << Success
|
||||
end
|
Loading…
Reference in New Issue
Block a user