{"id":13994504,"url":"https://github.com/vijos/vj4","last_synced_at":"2026-01-21T21:40:05.035Z","repository":{"id":8418533,"uuid":"58306028","full_name":"vijos/vj4","owner":"vijos","description":"The online judge service with millions of submissions, since 2005.","archived":false,"fork":false,"pushed_at":"2024-01-01T17:43:03.000Z","size":6034,"stargazers_count":534,"open_issues_count":121,"forks_count":109,"subscribers_count":25,"default_branch":"master","last_synced_at":"2024-11-29T16:39:21.396Z","etag":null,"topics":["mongodb","online-judge","python","vijos"],"latest_commit_sha":null,"homepage":"https://vijos.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vijos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-05-08T09:55:54.000Z","updated_at":"2024-11-28T06:16:16.000Z","dependencies_parsed_at":"2024-01-01T18:34:12.333Z","dependency_job_id":"a5cd94b6-c809-4099-9d46-b69fdf94fb2f","html_url":"https://github.com/vijos/vj4","commit_stats":null,"previous_names":[],"tags_count":71,"template":false,"template_full_name":null,"purl":"pkg:github/vijos/vj4","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vijos%2Fvj4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vijos%2Fvj4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vijos%2Fvj4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vijos%2Fvj4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vijos","download_url":"https://codeload.github.com/vijos/vj4/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vijos%2Fvj4/sbom","scorecard":{"id":921403,"data":{"date":"2025-08-11","repo":{"name":"github.com/vijos/vj4","commit":"7ce61263b163a6b6a6cb6de41dfd9c4b17709de2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Code-Review","score":8,"reason":"Found 6/7 approved changesets -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/fe.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fe.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/fe.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/fe.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/fe.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fe.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/fe.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fe.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/fe.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fe.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/fe.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fe.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/fe.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fe.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/fe.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/fe.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/fe.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:88: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:91: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:97: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:102: update your workflow using https://app.stepsecurity.io/secureworkflow/vijos/vj4/test.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:112","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:114","Info:   0 out of  17 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU Affero General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact uibuild-ab12355 not signed: https://api.github.com/repos/vijos/vj4/releases/114624127","Warn: release artifact uibuild-99ddf89 not signed: https://api.github.com/repos/vijos/vj4/releases/102186455","Warn: release artifact uibuild-9376ae1 not signed: https://api.github.com/repos/vijos/vj4/releases/102184540","Warn: release artifact uibuild-7384d94 not signed: https://api.github.com/repos/vijos/vj4/releases/102185739","Warn: release artifact uibuild-33e7a62 not signed: https://api.github.com/repos/vijos/vj4/releases/102183748","Warn: release artifact uibuild-ab12355 does not have provenance: https://api.github.com/repos/vijos/vj4/releases/114624127","Warn: release artifact uibuild-99ddf89 does not have provenance: https://api.github.com/repos/vijos/vj4/releases/102186455","Warn: release artifact uibuild-9376ae1 does not have provenance: https://api.github.com/repos/vijos/vj4/releases/102184540","Warn: release artifact uibuild-7384d94 does not have provenance: https://api.github.com/repos/vijos/vj4/releases/102185739","Warn: release artifact uibuild-33e7a62 does not have provenance: https://api.github.com/repos/vijos/vj4/releases/102183748"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"82 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2023-120 / GHSA-45c4-8wx5-qw6w","Warn: Project is vulnerable to: GHSA-5m98-qgg9-wh84","Warn: Project is vulnerable to: GHSA-7gpw-8wmc-pm8g","Warn: Project is vulnerable to: GHSA-8495-4g3g-x7pr","Warn: Project is vulnerable to: PYSEC-2024-26 / GHSA-8qpw-xqxj-h4r2","Warn: Project is vulnerable to: GHSA-9548-qrrj-x5pj","Warn: Project is vulnerable to: PYSEC-2023-246 / GHSA-gfw2-4jvh-wgfg","Warn: Project is vulnerable to: GHSA-pjjw-qhg8-p2p9","Warn: Project is vulnerable to: PYSEC-2023-250 / GHSA-q3qx-c6g2-7pw2","Warn: Project is vulnerable to: PYSEC-2023-251 / GHSA-qvrw-v9rv-5rjx","Warn: Project is vulnerable to: PYSEC-2021-76 / GHSA-v6wp-4m6f-gcjg","Warn: Project is vulnerable to: PYSEC-2023-247 / GHSA-xx9p-xxvh-7g8j","Warn: Project is vulnerable to: PYSEC-2024-4 / GHSA-2mqj-m65w-jghx","Warn: Project is vulnerable to: PYSEC-2023-165 / GHSA-cwvm-v4w8-q58c","Warn: Project is vulnerable to: PYSEC-2022-42992 / GHSA-hcpj-qp55-gfph","Warn: Project is vulnerable to: PYSEC-2023-137 / GHSA-pr76-5cm5-w9cj","Warn: Project is vulnerable to: PYSEC-2023-161 / GHSA-wfm5-v35h-vwf4","Warn: Project is vulnerable to: PYSEC-2019-217 / GHSA-462w-v97r-4m45","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: PYSEC-2021-66 / GHSA-g3rq-g295-4j3m","Warn: Project is vulnerable to: GHSA-h5c8-rqwp-cp95","Warn: Project is vulnerable to: GHSA-h75v-3vvj-5mfj","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: PYSEC-2021-142 / GHSA-8q59-q68h-6hv4","Warn: Project is vulnerable to: PYSEC-2018-49 / GHSA-rprw-h62v-c2w7","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-4gmj-3p3h-gm8h","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-7r28-3m3f-r2pr","Warn: Project is vulnerable to: GHSA-r8j5-h5cx-65gg","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-3wc5-fcw2-2329","Warn: Project is vulnerable to: GHSA-64fm-8hw2-v72w","Warn: Project is vulnerable to: GHSA-f98w-7cxr-ff2h","Warn: Project is vulnerable to: GHSA-cg87-wmx4-v546","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-x7hr-w5r2-h6wg","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-hxcc-f52p-wc94","Warn: Project is vulnerable to: GHSA-vx3p-948g-6vhq","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-r628-mhmh-qjhw","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-h6q6-9hqw-rwfv","Warn: Project is vulnerable to: GHSA-5fg8-2547-mr8q","Warn: Project is vulnerable to: GHSA-crh6-fp67-6883","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-25T03:34:58.641Z","repository_id":8418533,"created_at":"2025-08-25T03:34:58.641Z","updated_at":"2025-08-25T03:34:58.641Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28644149,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T21:29:11.980Z","status":"ssl_error","status_checked_at":"2026-01-21T21:24:31.872Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mongodb","online-judge","python","vijos"],"created_at":"2024-08-09T14:02:54.494Z","updated_at":"2026-01-21T21:40:05.012Z","avatar_url":"https://github.com/vijos.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/vijos/vj4\"\u003e\n    \u003cimg src=\"https://rawgit.com/vijos/vj4/master/.github_banner.png\" alt=\"vj4\" width=\"100%\" align=\"middle\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/vijos/vj4/actions\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/vijos/vj4/actions/workflows/test.yml/badge.svg?branch=master\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://codeclimate.com/github/vijos/vj4/maintainability\" target=\"_blank\"\u003e\u003cimg src=\"https://api.codeclimate.com/v1/badges/1e9710a66983c8124712/maintainability\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.versioneye.com/user/projects/598d6f846725bd005228a0e4\" target=\"_blank\"\u003e\u003cimg src=\"https://www.versioneye.com/user/projects/598d6f846725bd005228a0e4/badge.svg?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://raw.githubusercontent.com/vijos/vj4/master/LICENSE\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-AGPLv3-blue.svg?style=flat-square\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Next generation of \u003ca href=\"https://vijos.org\" target=\"_blank\"\u003eVijos\u003c/a\u003e, built with asyncio on Python 3.\n\u003c/p\u003e\n\n***\n\n## Overview\n\n- Problem Categories and Tags\n- Solution Sharing \u0026 Voting\n- Online Coding and Testing (a.k.a. Scratchpad Mode)\n- Discussions \u0026 Comments\n- Trainings\n- Contests (ACM \u0026 OI)\n- Dynamic Ranking System\n- Real-time Status Updates\n- Online Judge as a Service (a.k.a. Domain): create your own OJ website without dev-ops!\n- Management UI\n- Sandboxed \u0026 Distributed Judging: see [jd4](https://github.com/vijos/jd4), [winjudge](https://github.com/iceb0y/winjudge) and [windows-container](https://github.com/iceb0y/windows-container)\n- Secure (we are also CTF players)\n- Modern Architecture \u0026 User Interface\n\n## Usage\n\n### Pre-built docker package\n\nThere is pre-built docker package at `vijos/vj4`. This is maintained by [@moesoha](https://github.com/moesoha). Source code is available at https://github.com/vijos/vj4-docker.\n\n### Manual build\n\n#### Prerequisites\n\n* [Python 3.7+, \u003c=3.9](https://www.python.org/downloads/)\n* [MongoDB 3.0+, \u003c=5.0](https://www.mongodb.com/docs/v5.0/installation/)\n* [Node.js 10.0+](https://nodejs.org/en/download/package-manager/)\n* [RabbitMQ](http://www.rabbitmq.com/)\n\n#### Install requirements\n\nIn the root of the repository, where `requirements.txt` and `package.json` locates:\n\n```bash\npython3 -m pip install -r requirements.txt\nyarn\n```\n\nYou don't need root privilege to run `yarn`. It installs stuffs in the project directory. We recommend using Node 10.\n\nYou may want to use [tuna](https://pypi.tuna.tsinghua.edu.cn/) if you are in China.\n\nSome requirements may need `Python.h` and `ffi.h`. In Debian/Ubuntu you can use\n\n```bash\napt install python3-dev libffi-dev\n```\n\nto resolve this.\n\n#### IP Geo-Location\n\nTo enable IP geo-location translation, you need to follow the instruction on [MaxMind GeoLite2](http://dev.maxmind.com/geoip/geoip2/geolite2/) to obtain a GeoLite2 City Database, unzip it, and put it in the project root directory with the filename `GeoLite2-City.mmdb`.\n\nYou may also want to install [libmaxminddb](https://github.com/maxmind/libmaxminddb/blob/master/README.md) for higher performance.\n\n## Development\n\nIn the root of the repository:\n\n```bash\nyarn build   # or: yarn build:watch\npython3 -m vj4.server --debug\n```\n\n\u003e Set `--listen` (default: http://127.0.0.1:8888) to listen on a different address.\n\nAs an intuitive example, you may want to add a super administrator and a problem to start:\n\n```bash\nalias pm=\"python3 -m\"\npm vj4.model.user add -1 icebox 12345 icebox@iceboy.org\npm vj4.model.user set_superadmin -1\npm vj4.model.adaptor.problem add system \"Dummy Problem\" \"# It *works*\" -1 1000   # you can also use web UI\n```\n\nYou need to run these scripts on a regular basis to maintain correct RP and ranks for all users:\n\n```bash\npm vj4.job.rp recalc_all\npm vj4.job.rank run_all\n```\n\n### Watch and Restart\n\nFrontend source codes can be recompiled automatically by running:\n\n```bash\nyarn build:watch\n```\n\nHowever you need to manually restart the server for server-side code to take effect.\n\n## Production\n\n```bash\nyarn build:production\npython3 -m vj4.server --listen=unix:/var/run/vj4.sock\n```\n\n* Set `--listen` (default: http://127.0.0.1:8888) to listen on a different address.\n* Set `--prefork` (default: 1) to specify the number of worker processes.\n* Set `--ip-header` (default: '') to use IP address in request headers.\n* Set `--url-prefix` (default: https://vijos.org) to set URL prefix.\n* Set `--cdn-prefix` (default: /) to set CDN prefix.\n* Set `--smtp-host`, `--smtp-user`, `--smtp-password`, and `--mail-from` to specify a SMTP server.\n* Set `--db-host` (default: localhost) and/or `--db-name` (default: test) to use a different\n  database.\n\nBetter to use a reverse proxy like Nginx or h2o.\n\n## Judging\n\nTo enable vj4 to judge, at least one judge user and one judge daemon instance are needed.\n\n* Use following commands to create a judge user:\n\n```bash\nalias pm=\"python3 -m\"\npm vj4.model.user add -2 judge 123456 judge@example.org\npm vj4.model.user set_judge -2\n```\n\n### Use jd4\n\n* See https://github.com/vijos/jd4 for more details about the judge daemon.\n\n### Use HydroJudge\n\n* You can also use [HydroJudge](https://hydro.js.org/plugins/hydrojudge/) from [Hydro](https://github.com/hydro-dev/Hydro).\n\n## Notes\n\nHave fun!\n\nMaximum line width: 100\n\nIndentation: 2 spaces\n\n[JavaScript Style Guide](https://github.com/airbnb/javascript)\n\nNo commercial use, except get permission from us.\n\n## References\n\n* [aiohttp](http://aiohttp.readthedocs.org/en/stable/)\n* [Jinja2 Documentation](http://jinja.pocoo.org/docs/)\n* [Motor: Asynchronous Python driver for MongoDB](http://motor.readthedocs.org/en/stable/)\n* [Webpack Module Bundler](https://webpack.js.org/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvijos%2Fvj4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvijos%2Fvj4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvijos%2Fvj4/lists"}