filestoraged/src/common/requests/download.cr

38 lines
990 B
Crystal

class FileStorage::Request
JSONIPC.request Download, 30 do
property mid : String # autogenerated
property filedigest : String? # SHA256 digest of the file, used as ID
property name : String?
property tags : Array(String)?
def initialize(@filedigest = nil, @name = nil, @tags = nil)
@mid = UUID.random.to_s
end
def handle(filestoraged : FileStorage::Service, event : IPC::Event::Events)
user = filestoraged.get_logged_user event
return Errors::Authorization.new @mid if user.nil?
# FIXME: Maybe this should be moved to FileStorage::Service
fd = event.fd
user_data = filestoraged.get_user_data user.uid
filestoraged.storage.download self, user_data
rescue e
return Errors::GenericError.new @mid, e.to_s
end
end
FileStorage.requests << Download
end
class FileStorage::Response
JSONIPC.request Download, 30 do
property mid : String
property nb_chunks : Int32
def initialize(@mid, @nb_chunks)
end
end
end