64 lines
1.4 KiB
Crystal
64 lines
1.4 KiB
Crystal
|
|
class FileStorage::Request
|
|
JSONIPC.request Upload, 20 do
|
|
property mid : String # autogenerated
|
|
property file : FileInfo
|
|
def initialize(@file : FileInfo)
|
|
@mid = UUID.random.to_s
|
|
end
|
|
|
|
def handle(filestoraged : FileStorage::Service, event : IPC::Event::Events)
|
|
user = altideald.get_logged_user event
|
|
|
|
raise Exception.new "unauthorized" if user.nil?
|
|
|
|
# FIXME: Maybe this should be moved to FileStorage::Service
|
|
fd = event.connection.fd
|
|
|
|
user_data = filestoraged.get_user_data user.uid
|
|
|
|
filestoraged.storage.upload self, event
|
|
rescue e
|
|
return Response::Error.new @mid, "unauthorized"
|
|
end
|
|
end
|
|
FileStorage.requests << Upload
|
|
end
|
|
|
|
class FileStorage::Client
|
|
def upload(token : String)
|
|
request = FileStorage::Request::Upload.new token
|
|
send request
|
|
|
|
response = parse_message [ FileStorage::Response::Upload, FileStorage::Response::Error ], read
|
|
|
|
case response
|
|
when FileStorage::Response::Upload
|
|
when FileStorage::Response::Error
|
|
raise "Upload request failed: #{response.reason}"
|
|
end
|
|
|
|
response
|
|
end
|
|
end
|
|
|
|
class FileStorage::Response
|
|
JSONIPC.request Upload, 20 do
|
|
property mid : String
|
|
def initialize(@mid)
|
|
end
|
|
end
|
|
|
|
JSONIPC.request Responses, 100 do
|
|
include JSON::Serializable
|
|
|
|
property mid : String
|
|
property responses : Array(Response) # a response for each request
|
|
property response : String
|
|
property reason : String?
|
|
|
|
def initialize(@mid, @response, @responses, @reason = nil)
|
|
end
|
|
end
|
|
end
|