filestoraged/src/common/requests/upload.cr

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