# We verify the user's rights to upload files. # TODO RIGHTS # if user wants to upload but not allowed to: Response # if user wants to get a file but not allowed to: Response # The user is authorized to upload files. # TODO: quotas # Quotas are not defined yet. #class FileStorage::Request # IPC::JSON.message Authentication, 10 do # property mid : String # autogenerated # property token : Token # property uploads : Array(UploadRequest)? # property downloads : Array(DownloadRequest)? # # def initialize(@token, @uploads = nil, @downloads = nil) # @mid = UUID.random.to_s # end # # # Store the client in connected_users and users_status. # # If already in users_status: # # check if the requests are the same # # if not: add them to the user structure in users_status # def handle(filestoraged : FileStorage::Service, event : IPC::Event) # # token = filestoraged.auth.decode_token @token # userid = token.uid # # puts "user authentication: #{userid}" # # # Is the user already recorded in users_status? # if filestoraged.users_status[userid]? # puts "We already knew this user" # # filestoraged.connected_users[event.fd] = userid # # TODO # pp! filestoraged.connected_users # pp! filestoraged.users_status[userid] # # # Let's ignore this error, just continue. # # It could have been a network error, for example. # # return FileStorage::Response::Error.new @mid, "user already connected" # else # # AuthenticationMessage includes requests. # new_user = User.new token, @uploads, @downloads # # filestoraged.connected_users[event.fd] = userid # # # record the new user in users_status # filestoraged.users_status[userid] = new_user # # puts "New user is: #{new_user.token.login}" # end # # # The user is now connected. # user = filestoraged.users_status[userid] # # responses = filestoraged.storage.requests [ @uploads, @downloads ].flatten, # filestoraged.users_status[userid], # event # # # Sending a response, containing a response for each request. # FileStorage::Response::Success.new @mid, responses # end # end # FileStorage.requests << Authentication #end # #class FileStorage::Response # IPC::JSON.message AuthenticationSuccess, 10 do # property mid : String # property responses : Array(FileStorage::Response) # def initialize(@mid, @responses) # end # end #end