Forward JSON from runner to client if possible
This commit is contained in:
@ -130,13 +130,13 @@ class SubmissionsController < ApplicationController
|
|||||||
client_socket.send_data JSON.dump({cmd: :status, status: :container_running})
|
client_socket.send_data JSON.dump({cmd: :status, status: :container_running})
|
||||||
|
|
||||||
runner_socket.on :stdout do |data|
|
runner_socket.on :stdout do |data|
|
||||||
json_data = JSON.dump({cmd: :write, stream: :stdout, data: data})
|
json_data = prepare data, :stdout
|
||||||
@output << json_data[0, max_output_buffer_size - @output.size]
|
@output << json_data[0, max_output_buffer_size - @output.size]
|
||||||
client_socket.send_data(json_data)
|
client_socket.send_data(json_data)
|
||||||
end
|
end
|
||||||
|
|
||||||
runner_socket.on :stderr do |data|
|
runner_socket.on :stderr do |data|
|
||||||
json_data = JSON.dump({cmd: :write, stream: :stderr, data: data})
|
json_data = prepare data, :stderr
|
||||||
@output << json_data[0, max_output_buffer_size - @output.size]
|
@output << json_data[0, max_output_buffer_size - @output.size]
|
||||||
client_socket.send_data(json_data)
|
client_socket.send_data(json_data)
|
||||||
end
|
end
|
||||||
@ -271,6 +271,14 @@ class SubmissionsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def prepare(data, stream)
|
||||||
|
if valid_command? data
|
||||||
|
data
|
||||||
|
else
|
||||||
|
JSON.dump({cmd: :write, stream: stream, data: data})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def sanitize_filename
|
def sanitize_filename
|
||||||
params[:filename].gsub(/\.json$/, '')
|
params[:filename].gsub(/\.json$/, '')
|
||||||
end
|
end
|
||||||
@ -314,4 +322,11 @@ class SubmissionsController < ApplicationController
|
|||||||
@submission = Submission.find(params[:id])
|
@submission = Submission.find(params[:id])
|
||||||
authorize!
|
authorize!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def valid_command?(data)
|
||||||
|
parsed = JSON.parse(data)
|
||||||
|
parsed.instance_of?(Hash) && parsed.key?('cmd')
|
||||||
|
rescue JSON::ParserError
|
||||||
|
false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user