From cc7e7558fcf610a4cad5611dbd325d13efbd9d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Fri, 8 Mar 2024 08:07:19 +0000 Subject: [PATCH 01/10] Update Gemfile --- Dockerfile | 21 ++++++++++----------- Gemfile.lock | 4 +++- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 877e4631..569b0d7f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,21 +38,20 @@ COPY . . ENTRYPOINT ["/api/docker-entrypoint.sh"] CMD ["/api/scripts/server"] -ENV JUDGE0_VERSION "1.13.0" -LABEL version=$JUDGE0_VERSION +RUN useradd -u 1000 -m -r judge0 && \ + echo "judge0 ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers && \ + chown judge0: /api/tmp/ +USER judge0 -FROM production AS development +ENV JUDGE0_VERSION "1.13.1" +LABEL version=$JUDGE0_VERSION -ARG DEV_USER=judge0 -ARG DEV_USER_ID=1000 -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - vim && \ - useradd -u $DEV_USER_ID -m -r $DEV_USER && \ - echo "$DEV_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers +FROM production AS development -USER $DEV_USER +RUN sudo apt-get update && \ + sudo apt-get install -y --no-install-recommends \ + vim CMD ["sleep", "infinity"] diff --git a/Gemfile.lock b/Gemfile.lock index 1524fe4f..532948b9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -91,7 +91,9 @@ GEM mime-types (3.3.1) mime-types-data (~> 3.2015) mime-types-data (3.2020.0512) - mimemagic (0.3.5) + mimemagic (0.3.10) + nokogiri (~> 1) + rake mini_mime (1.0.2) mini_portile2 (2.4.0) minitest (5.14.1) From f3b8547b3b67863e4ea0ded3adcb963add56addd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Fri, 8 Mar 2024 09:10:36 +0000 Subject: [PATCH 02/10] Just remove files without chown --- app/jobs/isolate_job.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/jobs/isolate_job.rb b/app/jobs/isolate_job.rb index 49e3ff2f..52db05e2 100644 --- a/app/jobs/isolate_job.rb +++ b/app/jobs/isolate_job.rb @@ -168,7 +168,7 @@ def compile files_to_remove = [compile_output_file] files_to_remove << compile_script unless submission.is_project files_to_remove.each do |f| - `sudo chown $(whoami): #{f} && sudo rm -rf #{f}` + `sudo rm -rf #{f}` end return :success if process_status.success? @@ -229,7 +229,7 @@ def run `#{command}` - `sudo chown $(whoami): #{run_script} && rm #{run_script}` unless submission.is_project + `sudo rm #{run_script}` unless submission.is_project end def verify From 8f292900b795db9d5c213ba9f9fc5ce634b119bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Sat, 9 Mar 2024 04:54:56 +0000 Subject: [PATCH 03/10] Run cron with sudo --- docker-entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 5bd80749..0f4e9911 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,3 +1,3 @@ #!/bin/bash -cron -exec "$@" \ No newline at end of file +sudo cron +exec "$@" From ea2fced56d303f91de74fdf98640c08471520f73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Sat, 9 Mar 2024 09:54:38 +0000 Subject: [PATCH 04/10] Use load-config directly --- cron/clear_cache | 2 +- cron/telemetry | 2 +- scripts/load-config | 3 --- scripts/server | 5 +++-- scripts/workers | 1 + 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/cron/clear_cache b/cron/clear_cache index 18e1e7b8..ae1aad99 100644 --- a/cron/clear_cache +++ b/cron/clear_cache @@ -1 +1 @@ -0 0 * * * bash -c "source /api/tmp/environment; cd /api; rake judge0:clear_cache &> /api/log/clear_cache.log" +0 0 * * * bash -c "source /api/environment && cd /api && rake judge0:clear_cache &> ./log/clear_cache.log" diff --git a/cron/telemetry b/cron/telemetry index d15d6520..33ab0a59 100644 --- a/cron/telemetry +++ b/cron/telemetry @@ -1 +1 @@ -0 */12 * * * bash -c "source /api/tmp/environment; /api/bin/telemetry &> /api/log/telemetry.log" +0 */12 * * * bash -c "source /api/environment && cd /api && ./bin/telemetry &> ./log/telemetry.log" diff --git a/scripts/load-config b/scripts/load-config index 6148a700..e42cd344 100755 --- a/scripts/load-config +++ b/scripts/load-config @@ -49,6 +49,3 @@ export POSTGRES_USER=${POSTGRES_USER:-postgres} # Other export RUBYOPT=-W:no-deprecated export DISABLE_DATABASE_ENVIRONMENT_CHECK=1 - - -export > /api/tmp/environment diff --git a/scripts/server b/scripts/server index d5fb5399..d6011f4f 100755 --- a/scripts/server +++ b/scripts/server @@ -3,9 +3,10 @@ # # Usage: ./scripts/server # -for i in $(seq 1 $RESTART_MAX_TRIES); do - source ./scripts/load-config +source ./scripts/load-config +export | sudo tee /api/environment +for i in $(seq 1 $RESTART_MAX_TRIES); do [[ -f tmp/pids/server.pid ]] && rm -f tmp/pids/server.pid rails db:create db:migrate db:seed diff --git a/scripts/workers b/scripts/workers index 6ad74755..5419c5875 100755 --- a/scripts/workers +++ b/scripts/workers @@ -4,6 +4,7 @@ # Usage: ./scripts/workers # source ./scripts/load-config +export | sudo tee /api/environment run_resque=1 resque_pid=0 From 9d9c3a1883f1774587f3b3042d7e9090d35230c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Wed, 17 Apr 2024 21:22:52 +0000 Subject: [PATCH 05/10] Update docs --- docker-compose.dev.yml | 37 -------------- docker-compose.https.yml | 77 ----------------------------- docker-compose.server.yml | 47 ------------------ docker-compose.standalone.yml | 70 -------------------------- docker-compose.workers.yml | 18 ------- docker-compose.yml | 6 +-- docs/api/docs.md | 7 +-- docs/api/submissions/submissions.md | 4 +- 8 files changed, 5 insertions(+), 261 deletions(-) delete mode 100644 docker-compose.https.yml delete mode 100644 docker-compose.server.yml delete mode 100644 docker-compose.standalone.yml delete mode 100644 docker-compose.workers.yml diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 84a80a60..dff685fa 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,19 +1,6 @@ -version: '2' services: - nginx: - image: judge0/jwilder-nginx-proxy:latest-2020-10-30 - environment: - - DEFAULT_HOST=judge0.local - volumes: - - /var/run/docker.sock:/tmp/docker.sock:ro - ports: - - "80:80" - restart: always - server: image: judge0/judge0:latest-dev - environment: - - VIRTUAL_HOST=judge0.local volumes: - .:/api ports: @@ -28,18 +15,6 @@ services: - postgres-data:/var/lib/postgresql/data/ restart: always - # Not actually currently used. Just for testing purposes in development. - pgbouncer: - image: pgbouncer/pgbouncer:1.14.0 - environment: # DATABASES_* are the same as from judge0.conf - - DATABASES_HOST=db - - DATABASES_PORT=5432 - - DATABASES_DBNAME=judge0 - - DATABASES_USER=judge0 - - DATABASES_PASSWORD=YourPasswordHere1234 - - PGBOUNCER_LISTEN_PORT=5432 # Set the same as Postgres - restart: always - redis: image: redis:6.0 command: [ @@ -51,18 +26,6 @@ services: - redis-data:/data restart: always - resque: - image: ennexa/resque-web:latest - entrypoint: "" - command: [ - "bash", "-c", - 'resque-web -FL -r redis://:$$REDIS_PASSWORD@$$REDIS_HOST:$$REDIS_PORT' - ] - env_file: judge0.conf - ports: - - "5678:5678" - restart: always - volumes: postgres-data: redis-data: diff --git a/docker-compose.https.yml b/docker-compose.https.yml deleted file mode 100644 index 30f6c208..00000000 --- a/docker-compose.https.yml +++ /dev/null @@ -1,77 +0,0 @@ -version: '2' - -x-logging: - &default-logging - logging: - driver: json-file - options: - max-size: 100m - -services: - nginx: - image: judge0/jwilder-nginx-proxy:latest-2020-10-30 - volumes: - - /var/run/docker.sock:/tmp/docker.sock:ro - - ./srv/nginx/vhost.d:/etc/nginx/vhost.d - - ./srv/nginx/html:/usr/share/nginx/html - - ./srv/ssl_certs:/etc/nginx/certs:ro - ports: - - "80:80" - - "443:443" - <<: *default-logging - restart: always - - letsencrypt: - image: judge0/jrcs-letsencrypt-nginx-proxy-companion:2.0 - volumes: - - /var/run/docker.sock:/var/run/docker.sock:ro - - ./srv/ssl_certs:/etc/nginx/certs:rw - volumes_from: - - nginx - <<: *default-logging - restart: always - - server: - image: judge0/judge0:latest - environment: - - VIRTUAL_HOST=example.com - - LETSENCRYPT_HOST=example.com - - LETSENCRYPT_EMAIL=john.doe@gmail.com - volumes: - - ./judge0.conf:/judge0.conf:ro - privileged: true - <<: *default-logging - restart: always - - workers: - image: judge0/judge0:latest - command: ["./scripts/workers"] - volumes: - - ./judge0.conf:/judge0.conf:ro - privileged: true - <<: *default-logging - restart: always - - db: - image: postgres:13.0 - env_file: judge0.conf - volumes: - - postgres-data:/var/lib/postgresql/data/ - <<: *default-logging - restart: always - - redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - env_file: judge0.conf - volumes: - - redis-data:/data - <<: *default-logging - restart: always - -volumes: - postgres-data: - redis-data: \ No newline at end of file diff --git a/docker-compose.server.yml b/docker-compose.server.yml deleted file mode 100644 index d91feda9..00000000 --- a/docker-compose.server.yml +++ /dev/null @@ -1,47 +0,0 @@ -version: '2' - -x-logging: - &default-logging - logging: - driver: json-file - options: - max-size: 100m - -services: - server: - image: judge0/judge0:latest - volumes: - - ./judge0.conf:/judge0.conf:ro - ports: - - "2358:2358" - privileged: true - <<: *default-logging - restart: always - - db: - image: postgres:13.0 - env_file: judge0.conf - volumes: - - postgres-data:/var/lib/postgresql/data/ - ports: - - "5432:5432" - <<: *default-logging - restart: always - - redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - env_file: judge0.conf - volumes: - - redis-data:/data - ports: - - "6379:6379" - <<: *default-logging - restart: always - -volumes: - postgres-data: - redis-data: \ No newline at end of file diff --git a/docker-compose.standalone.yml b/docker-compose.standalone.yml deleted file mode 100644 index a2835c55..00000000 --- a/docker-compose.standalone.yml +++ /dev/null @@ -1,70 +0,0 @@ -version: '2' - -x-logging: &logging - logging: - driver: json-file - options: - max-size: 100m - -x-db: &db - POSTGRES_HOST: db - POSTGRES_PORT: 5432 - POSTGRES_DB: judge0 - POSTGRES_USER: judge0 - POSTGRES_PASSWORD: YourPasswordHere1234 - -x-redis: &redis - REDIS_HOST: redis - REDIS_PORT: 6379 - REDIS_PASSWORD: YourPasswordHere1234 - -x-config: &config - JUDGE0_CONFIGURATION_OPTIONS_HELP: https://github.com/judge0/judge0/blob/master/judge0.conf - -services: - server: - image: judge0/judge0:latest - environment: - <<: *config - <<: *db - <<: *redis - ports: - - "2358:2358" - privileged: true - <<: *logging - restart: always - - workers: - image: judge0/judge0:latest - command: ["./scripts/workers"] - environment: - <<: *config - <<: *db - <<: *redis - privileged: true - <<: *logging - restart: always - - db: - image: postgres:13.0 - environment: *db - volumes: - - postgres-data:/var/lib/postgresql/data/ - <<: *logging - restart: always - - redis: - image: redis:6.0 - command: [ - "bash", "-c", - 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' - ] - environment: *redis - volumes: - - redis-data:/data - <<: *logging - restart: always - -volumes: - postgres-data: - redis-data: \ No newline at end of file diff --git a/docker-compose.workers.yml b/docker-compose.workers.yml deleted file mode 100644 index 63b62abb..00000000 --- a/docker-compose.workers.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: '2' - -x-logging: - &default-logging - logging: - driver: json-file - options: - max-size: 100m - -services: - workers: - image: judge0/judge0:latest - command: ["./scripts/workers"] - volumes: - - ./judge0.conf:/judge0.conf:ro - privileged: true - <<: *default-logging - restart: always diff --git a/docker-compose.yml b/docker-compose.yml index 56e4d02d..451d4b81 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,9 @@ -version: '2' - x-logging: &default-logging logging: driver: json-file options: - max-size: 100m + max-size: 100M services: server: @@ -49,4 +47,4 @@ services: volumes: postgres-data: - redis-data: \ No newline at end of file + redis-data: diff --git a/docs/api/docs.md b/docs/api/docs.md index 1ecabf04..44dfd6f3 100644 --- a/docs/api/docs.md +++ b/docs/api/docs.md @@ -12,8 +12,6 @@ In our research paper [Robust and Scalable Online Code Execution System](https:/ To see Judge0 in action, try [Judge0 IDE](https://ide.judge0.com) - our free and open-source online code editor. You can also try using a [dummy client](/dummy-client.html) that can help you explore and test most of the features of Judge0. -Easily integrate online code editor with code execution (a.k.a. online compiler) to your website with our [**embeddable web widgets**](https://judge0.com/#judge0-widgets). - ## Features
  • Quick and easy installation
  • @@ -49,7 +47,7 @@ You can find the source code for Judge0 CE on the [`master`](https://github.com/ Judge0 Extra CE is also available on [RapidAPI](https://judge0.com/extra-ce). ## Version -This document describes Judge0 CE [v1.13.0](https://github.com/judge0/judge0/tree/v1.13.0). +This document describes Judge0 CE [v1.13.1](https://github.com/judge0/judge0/tree/v1.13.1). ## Date and time formats [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) standard is used. @@ -59,9 +57,6 @@ Example: `2016-09-11T10:19:35Z` ## License Judge0 is licensed under the [GNU General Public License v3.0](https://github.com/judge0/judge0/blob/master/LICENSE). -## Donate -Your are more than welcome to support Judge0 development on [Patreon](https://www.patreon.com/hermanzdosilovic), via [PayPal](https://paypal.me/hermanzdosilovic) or [Revolut](https://pay.revolut.com/profile/hermancy5). Thank you. -
    diff --git a/docs/api/submissions/submissions.md b/docs/api/submissions/submissions.md index 341f4fae..997943ef 100644 --- a/docs/api/submissions/submissions.md +++ b/docs/api/submissions/submissions.md @@ -63,7 +63,7 @@ To use multi-file program feature you need to choose a language called *Multi-fi As mentioned in the table above, `additional_files` attribute should be a content of a Base64 encoded `.zip` archive. This archive will be extracted in the sandbox before compilation and execution. -For the Judge0 to know how to compile and execute your multi-file program you need to provide two special files that should be available in the root of the `.zip` archive that you are sending with `additional_files` attribute. These files should be named `compile` and `run`, and are expected to be Bash scripts that know how to compile and execute your multi-file program. If your multi-file program does not need compilation step, then you don't need to provide `compile` script. Take a look at [this example](https://github.com/judge0/examples/tree/master/cpp-project-01) to learn how to use this feature to compile and run multi-file C++ project that uses CMake. +For the Judge0 to know how to compile and execute your multi-file program you need to provide two special files that should be available in the root of the `.zip` archive that you are sending with `additional_files` attribute. These files should be named `compile` and `run`, and are expected to be Bash scripts that know how to compile and execute your multi-file program. If your multi-file program does not need compilation step, then you don't need to provide `compile` script. Take a look at [this example](https://github.com/judge0/examples/tree/master/cpp-and-cmake-01) to learn how to use this feature to compile and run multi-file C++ project that uses CMake. @@ -73,4 +73,4 @@ For the Judge0 to know how to compile and execute your multi-file program you ne ## Submission Batch [/submissions/batch{?tokens,base64_encoded,fields}] - \ No newline at end of file + From 0eea9a02c342ddcbc08396b969efa2cc3773e942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herman=20Zvonimir=20Do=C5=A1ilovi=C4=87?= Date: Wed, 17 Apr 2024 21:49:19 +0000 Subject: [PATCH 06/10] Update Compose files --- docker-compose.dev.yml | 16 ++++++++-------- docker-compose.yml | 11 ++++------- docs/api/hostname.html | 19 ------------------- public/docs.html | 30 ++++-------------------------- scripts/dev/shell | 2 +- 5 files changed, 17 insertions(+), 61 deletions(-) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index dff685fa..863915b6 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,6 +1,9 @@ services: - server: + judge0: image: judge0/judge0:latest-dev + build: + context: . + target: development volumes: - .:/api ports: @@ -9,23 +12,20 @@ services: privileged: true db: - image: postgres:13.0 + image: postgres:16.2 env_file: judge0.conf volumes: - - postgres-data:/var/lib/postgresql/data/ + - data:/var/lib/postgresql/data/ restart: always redis: - image: redis:6.0 + image: redis:6.2.14 command: [ "bash", "-c", 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' ] env_file: judge0.conf - volumes: - - redis-data:/data restart: always volumes: - postgres-data: - redis-data: + data: diff --git a/docker-compose.yml b/docker-compose.yml index 451d4b81..1a25f45e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,25 +26,22 @@ services: restart: always db: - image: postgres:13.0 + image: postgres:16.2 env_file: judge0.conf volumes: - - postgres-data:/var/lib/postgresql/data/ + - data:/var/lib/postgresql/data/ <<: *default-logging restart: always redis: - image: redis:6.0 + image: redis:6.2.14 command: [ "bash", "-c", 'docker-entrypoint.sh --appendonly yes --requirepass "$$REDIS_PASSWORD"' ] env_file: judge0.conf - volumes: - - redis-data:/data <<: *default-logging restart: always volumes: - postgres-data: - redis-data: + data: diff --git a/docs/api/hostname.html b/docs/api/hostname.html index 2148a9bb..1141d82c 100644 --- a/docs/api/hostname.html +++ b/docs/api/hostname.html @@ -1,21 +1,2 @@ - - diff --git a/public/docs.html b/public/docs.html index 5e756d9c..3b3df5b3 100644 --- a/public/docs.html +++ b/public/docs.html @@ -1,23 +1,4 @@ -Judge0 CE - API Docs Back to top

    Judge0 CE - API Docs

    - - @@ -47,7 +28,6 @@

    About Judge0 is a robust, scalable, and open-source online code execution system. You can use it to build a wide range of applications that need online code execution features. Some examples include competitive programming platforms, e-learning platforms, candidate assessment and recruitment platforms, online code editors, online IDEs, and many more.

    In our research paper Robust and Scalable Online Code Execution System, we present Judge0’s modern modular architecture that can be easily deployed and scaled. We study its design, comment on the various challenges in building such systems, and compare it with other available online code execution systems and online judge systems.

    To see Judge0 in action, try Judge0 IDE - our free and open-source online code editor. You can also try using a dummy client that can help you explore and test most of the features of Judge0.

    -

    Easily integrate online code editor with code execution (a.k.a. online compiler) to your website with our embeddable web widgets.

    Features

    • Quick and easy installation
    • @@ -73,14 +53,12 @@

      Flavors master branch, while you can find the source code for Judge0 Extra CE on the extra branch.

      Judge0 Extra CE is also available on RapidAPI.

      Version

      -

      This document describes Judge0 CE v1.13.0.

      +

      This document describes Judge0 CE v1.13.1.

      Date and time formats

      ISO 8601 standard is used.

      Example: 2016-09-11T10:19:35Z

      License

      Judge0 is licensed under the GNU General Public License v3.0.

      -

      Donate

      -

      Your are more than welcome to support Judge0 development on Patreon, via PayPal or Revolut. Thank you.


      Authentication

      Administrators of Judge0 can configure Judge0 to require you to have an authentication token (a.k.a. API key). If that is the case with the instance of Judge0 you are using, then you should provide X-Auth-Token header field in every API request.

      @@ -426,7 +404,7 @@

      Multi-file programs v1.10.0 and they allow you specify your own compilation and execution scripts that Judge0 will use.

      To use multi-file program feature you need to choose a language called Multi-file program whoose ID is 89. Moreover, you need to send all program files with additional_files attribute. With multi-file programs attribute source_code cannot be used, i.e. all files should be sent with additional_files attribute.

      As mentioned in the table above, additional_files attribute should be a content of a Base64 encoded .zip archive. This archive will be extracted in the sandbox before compilation and execution.

      -

      For the Judge0 to know how to compile and execute your multi-file program you need to provide two special files that should be available in the root of the .zip archive that you are sending with additional_files attribute. These files should be named compile and run, and are expected to be Bash scripts that know how to compile and execute your multi-file program. If your multi-file program does not need compilation step, then you don’t need to provide compile script. Take a look at this example to learn how to use this feature to compile and run multi-file C++ project that uses CMake.

      +

      For the Judge0 to know how to compile and execute your multi-file program you need to provide two special files that should be available in the root of the .zip archive that you are sending with additional_files attribute. These files should be named compile and run, and are expected to be Bash scripts that know how to compile and execute your multi-file program. If your multi-file program does not need compilation step, then you don’t need to provide compile script. Take a look at this example to learn how to use this feature to compile and run multi-file C++ project that uses CMake.

      Create a Submission
      POST/submissions/{?base64_encoded,wait}

      Creates new submission. Created submission waits in queue to be processed. On successful creation, you are returned submission token which can be used to check submission status.

      If submission’s source_code, stdin or expected_output contains non printable characters, or @@ -1706,7 +1684,7 @@

      Example URI

      GET& }

    Version

    Version
    GET/version

    Returns current version.

    Example URI

    GET https://ce.judge0.com/version

    Isolate

    Isolate
    GET/isolate

    Returns result of isolate --version.

    Example URI

    GET https://ce.judge0.com/isolate

    License

    License
    GET/license

    Returns a license.

    -

    Example URI

    GET https://ce.judge0.com/license

    Generated by aglio on 09 Mar 2021