diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb index 1a66ad7d..6c9d44ee 100644 --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -1,3 +1,5 @@ +require 'open-uri' + class SubmissionsController < ApplicationController before_action :authorize_request, only: [:index, :destroy] before_action :check_maintenance, only: [:create, :destroy] @@ -181,12 +183,29 @@ def submission_params(params) ) submission_params[:additional_files] = Base64Service.decode(submission_params[:additional_files]) - + incoming_stdin = params[:stdin] + if @base64_encoded + incoming_stdin = Base64Service.decode(params[:stdin]) + end + if Config::FILE_BASE_URL + if incoming_stdin and incoming_stdin.start_with?(Config::FILE_BASE_URL) + incoming_stdin = open(incoming_stdin).read + end + end + incoming_expected_output = params[:expected_output] + if @base64_encoded + incoming_expected_output = Base64Service.decode(params[:expected_output]) + end + if Config::FILE_BASE_URL + if incoming_expected_output and incoming_expected_output.start_with?(Config::FILE_BASE_URL) + incoming_expected_output = open(incoming_expected_output).read + end + end if @base64_encoded submission_params[:source_code] = Base64Service.decode(submission_params[:source_code]) - submission_params[:stdin] = Base64Service.decode(submission_params[:stdin]) - submission_params[:expected_output] = Base64Service.decode(submission_params[:expected_output]) end + submission_params[:stdin] = incoming_stdin + submission_params[:expected_output] = incoming_expected_output submission_params end diff --git a/app/helpers/config.rb b/app/helpers/config.rb index 10120c36..5df99db3 100644 --- a/app/helpers/config.rb +++ b/app/helpers/config.rb @@ -41,6 +41,7 @@ module Config USE_DOCS_AS_HOMEPAGE = ENV["USE_DOCS_AS_HOMEPAGE"] == "true" ALLOW_ENABLE_NETWORK = ENV["ALLOW_ENABLE_NETWORK"] != "false" ENABLE_NETWORK = ENV["ENABLE_NETWORK"] == "true" + FILE_BASE_URL = ENV["FILE_BASE_URL"].presence def self.config_info @@default_confg ||= { @@ -82,7 +83,8 @@ def self.config_info "submission_cache_duration": SUBMISSION_CACHE_DURATION, "use_docs_as_homepage": USE_DOCS_AS_HOMEPAGE, "allow_enable_network": ALLOW_ENABLE_NETWORK, - "enable_network": ENABLE_NETWORK + "enable_network": ENABLE_NETWORK, + "file_base_url": FILE_BASE_URL } end end diff --git a/judge0.conf b/judge0.conf index 532f4434..5999b26f 100644 --- a/judge0.conf +++ b/judge0.conf @@ -356,3 +356,10 @@ RAILS_SERVER_PROCESSES= # Secret key base for production, if not set it will be randomly generated # Default: randomly generated SECRET_KEY_BASE= + +################################################################################ +# STDIN EXPECTED_OUTPUR Url Configuration +################################################################################ +# Specify Rails environment: production or development +# Default: empty +FILE_BASE_URL=