├── web
├── .gitignore
└── src
│ ├── main
│ ├── webapp
│ │ ├── assets
│ │ │ ├── img
│ │ │ │ ├── logo.jpg
│ │ │ │ ├── logo.png
│ │ │ │ ├── avatar.jpg
│ │ │ │ ├── error.png
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── favicon.png
│ │ │ │ ├── loading.gif
│ │ │ │ ├── wmd-draft.png
│ │ │ │ ├── browsers
│ │ │ │ │ ├── ie.jpg
│ │ │ │ │ ├── opera.jpg
│ │ │ │ │ ├── chrome.jpg
│ │ │ │ │ ├── firefox.jpg
│ │ │ │ │ └── safari.jpg
│ │ │ │ ├── discussion.png
│ │ │ │ ├── logo-light.png
│ │ │ │ ├── switch-mask.png
│ │ │ │ ├── sliders
│ │ │ │ │ ├── slide-01.jpg
│ │ │ │ │ ├── slide-02.jpg
│ │ │ │ │ └── slide-03.jpg
│ │ │ │ ├── upgrade-browser.png
│ │ │ │ ├── glyphicons-halflings.png
│ │ │ │ ├── police-badge-of-china.png
│ │ │ │ └── glyphicons-halflings-white.png
│ │ │ ├── fonts
│ │ │ │ ├── FontAwesome.otf
│ │ │ │ ├── Flat-UI-Icons.eot
│ │ │ │ ├── Flat-UI-Icons.ttf
│ │ │ │ ├── Flat-UI-Icons.woff
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ └── fontawesome-webfont.woff
│ │ │ ├── css
│ │ │ │ ├── misc
│ │ │ │ │ ├── error.css
│ │ │ │ │ └── about.css
│ │ │ │ ├── discussion
│ │ │ │ │ └── new-thread.css
│ │ │ │ ├── administration
│ │ │ │ │ ├── new-user.css
│ │ │ │ │ ├── general-settings.css
│ │ │ │ │ ├── language-settings.css
│ │ │ │ │ ├── edit-submission.css
│ │ │ │ │ ├── all-users.css
│ │ │ │ │ ├── all-problems.css
│ │ │ │ │ ├── edit-user.css
│ │ │ │ │ ├── problem-categories.css
│ │ │ │ │ ├── all-submissions.css
│ │ │ │ │ └── dashboard.css
│ │ │ │ ├── contests
│ │ │ │ │ ├── leaderboard.css
│ │ │ │ │ └── contest.css
│ │ │ │ ├── accounts
│ │ │ │ │ ├── login.css
│ │ │ │ │ ├── reset-password.css
│ │ │ │ │ └── register.css
│ │ │ │ └── highlight.min.css
│ │ │ ├── mode
│ │ │ │ ├── pascal.min.js
│ │ │ │ └── go.min.js
│ │ │ └── js
│ │ │ │ └── site.js
│ │ ├── index.jsp
│ │ └── WEB-INF
│ │ │ ├── views
│ │ │ ├── administration
│ │ │ │ └── include
│ │ │ │ │ ├── header.jsp
│ │ │ │ │ └── footer-script.jsp
│ │ │ └── include
│ │ │ │ └── footer.jsp
│ │ │ └── web.xml
│ ├── resources
│ │ ├── log4j2.xml
│ │ ├── voj.properties
│ │ ├── mappers
│ │ │ ├── JudgeResultMapper.xml
│ │ │ ├── UserGroupMapper.xml
│ │ │ ├── EmailValidationMapper.xml
│ │ │ ├── OptionMapper.xml
│ │ │ ├── CheckpointMapper.xml
│ │ │ ├── UserMetaMapper.xml
│ │ │ ├── LanguageMapper.xml
│ │ │ ├── DiscussionTopicMapper.xml
│ │ │ ├── BulletinBoardMessageMapper.xml
│ │ │ ├── ContestSubmissionMapper.xml
│ │ │ ├── ContestMapper.xml
│ │ │ └── DiscussionReplyMapper.xml
│ │ └── mails
│ │ │ └── reset-password.ftl
│ └── java
│ │ └── org
│ │ └── verwandlung
│ │ └── voj
│ │ └── web
│ │ ├── exception
│ │ └── ResourceNotFoundException.java
│ │ ├── util
│ │ ├── HttpRequestParser.java
│ │ ├── DateUtils.java
│ │ ├── HtmlTextFilter.java
│ │ ├── SlugifyUtils.java
│ │ ├── DigestUtils.java
│ │ ├── HttpSessionParser.java
│ │ └── LocaleUtils.java
│ │ ├── mapper
│ │ ├── JudgeResultMapper.java
│ │ ├── EmailValidationMapper.java
│ │ ├── UserGroupMapper.java
│ │ ├── OptionMapper.java
│ │ ├── CheckpointMapper.java
│ │ ├── ContestMapper.java
│ │ ├── DiscussionTopicMapper.java
│ │ ├── LanguageMapper.java
│ │ └── DiscussionReplyMapper.java
│ │ ├── messenger
│ │ └── MessageSender.java
│ │ ├── model
│ │ └── ContestSubmission.java
│ │ └── service
│ │ └── BulletinBoardService.java
│ └── test
│ ├── resources
│ ├── log4j2-test.xml
│ └── voj-test.properties
│ └── java
│ └── org
│ └── verwandlung
│ └── voj
│ └── web
│ └── util
│ ├── MessageReceiverTest.java
│ ├── SlugifyUtilsTest.java
│ ├── HtmlTextFilterTest.java
│ ├── MessageSenderTest.java
│ ├── OffensiveWordFilterTest.java
│ └── DigestUtilsTest.java
├── .lgtm.yml
├── docker
├── web
│ └── supervisord.conf
├── README.md
└── judger
│ └── Dockerfile
├── .gitignore
├── judger
├── src
│ ├── test
│ │ ├── resources
│ │ │ ├── log4j2-test.xml
│ │ │ ├── voj-test-linux.properties
│ │ │ └── voj-test-windows.properties
│ │ └── java
│ │ │ └── org
│ │ │ └── verwandlung
│ │ │ └── voj
│ │ │ └── judger
│ │ │ └── mapper
│ │ │ ├── UserMapperTest.java
│ │ │ ├── ProblemMapperTest.java
│ │ │ ├── SubmissionMapperTest.java
│ │ │ └── UserGroupMapperTest.java
│ └── main
│ │ ├── cpp
│ │ ├── org_verwandlung_voj_judger_core_Runner.h
│ │ └── org_verwandlung_voj_jni_library.h
│ │ ├── resources
│ │ ├── voj.properties
│ │ └── log4j2.xml
│ │ └── java
│ │ └── org
│ │ └── verwandlung
│ │ └── voj
│ │ └── judger
│ │ ├── exception
│ │ ├── CreateDirectoryException.java
│ │ └── IllgealSubmissionException.java
│ │ ├── messenger
│ │ └── MessageSender.java
│ │ └── mapper
│ │ ├── UserGroupMapper.java
│ │ └── CheckpointMapper.java
└── Makefile
├── .github
└── workflows
│ ├── docker.yml
│ └── sonarqube.yml
├── .travis.yml
├── .circleci
└── config.yml
└── appveyor.yml
/web/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 |
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/logo.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/logo.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/avatar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/avatar.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/error.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/favicon.ico
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/favicon.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/loading.gif
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/wmd-draft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/wmd-draft.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/browsers/ie.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/browsers/ie.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/discussion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/discussion.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/logo-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/logo-light.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/switch-mask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/switch-mask.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/browsers/opera.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/browsers/opera.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/fonts/Flat-UI-Icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/fonts/Flat-UI-Icons.eot
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/fonts/Flat-UI-Icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/fonts/Flat-UI-Icons.ttf
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/fonts/Flat-UI-Icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/fonts/Flat-UI-Icons.woff
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/browsers/chrome.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/browsers/chrome.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/browsers/firefox.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/browsers/firefox.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/browsers/safari.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/browsers/safari.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/sliders/slide-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/sliders/slide-01.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/sliders/slide-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/sliders/slide-02.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/sliders/slide-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/sliders/slide-03.jpg
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/upgrade-browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/upgrade-browser.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/glyphicons-halflings.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/police-badge-of-china.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/police-badge-of-china.png
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/img/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hzxie/voj/HEAD/web/src/main/webapp/assets/img/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/.lgtm.yml:
--------------------------------------------------------------------------------
1 | extraction:
2 | java:
3 | index:
4 | build_command:
5 | - "mvn package -DskipTests -f web/pom.xml"
6 | - "mvn package -DskipTests -f judger/pom.xml"
7 |
8 |
--------------------------------------------------------------------------------
/web/src/main/webapp/assets/css/misc/error.css:
--------------------------------------------------------------------------------
1 | div#content div#error-message {
2 | padding-top: 180px;
3 | }
4 |
5 | @media only screen and (max-width: 767px) {
6 | div#content div#error-message {
7 | padding-top: 0;
8 | }
9 | }
--------------------------------------------------------------------------------
/docker/web/supervisord.conf:
--------------------------------------------------------------------------------
1 | [supervisord]
2 | nodaemon=true
3 |
4 | [program:mysqld]
5 | command=/etc/init.d/mariadb start
6 |
7 | [program:activemq]
8 | command=/opt/activemq/bin/activemq start
9 |
10 | [program:tomcat]
11 | command=bash -c 'sleep 15 && /opt/tomcat/bin/startup.sh'
12 |
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.log
2 | bin/
3 | logs/
4 | cache/
5 |
6 | # Maven
7 | target/
8 | pom.xml.tag
9 | pom.xml.releaseBackup
10 | pom.xml.versionsBackup
11 | pom.xml.next
12 | release.properties
13 | dependency-reduced-pom.xml
14 |
15 | # Eclipse
16 | .classpath
17 | .project
18 | .settings/
19 |
20 | # IntelliJ IDEA
21 | *.iml
22 | .idea/
23 | META-INF/
24 |
25 | # File Generated by Mac
26 | .DS_Store
27 |
--------------------------------------------------------------------------------
/web/src/test/resources/log4j2-test.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | [%p] %d [%t] %c - %m%n
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/judger/src/test/resources/log4j2-test.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | [%p] %d [%t] %c - %m%n
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/web/src/test/resources/voj-test.properties:
--------------------------------------------------------------------------------
1 | # Database Configuration
2 | jdbc.driverClassName = com.mysql.cj.jdbc.Driver
3 | jdbc.url = jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
4 | jdbc.username = root
5 | jdbc.password =
6 | jdbc.initialSize = 1
7 | jdbc.maxActive = 1
8 | jdbc.minIdle = 0
9 | jdbc.maxIdle = 1
10 | jdbc.maxWait = 1800
11 | jdbc.timeBetweenEvictionRunsMillis = 1800
12 | jdbc.minEvictableIdleTimeMillis = 1800
13 | jdbc.removeAbandoned = true
14 | jdbc.removeAbandonedTimeout = 1800
15 |
16 | # Mail Service Configuration
17 | mail.host =
18 | mail.username =
19 | mail.password =
20 | mail.senderMail =
21 | mail.senderName =
22 |
23 | # Message Service Configuration
24 | jms.broker.url = vm://localhost?broker.persistent=false
25 |
26 | # Web Service Configuration
27 | url.base =
--------------------------------------------------------------------------------
/judger/src/main/cpp/org_verwandlung_voj_judger_core_Runner.h:
--------------------------------------------------------------------------------
1 | /* DO NOT EDIT THIS FILE - it is machine generated */
2 | #include
3 | /* Header for class org_verwandlung_voj_judger_core_Runner */
4 |
5 | #ifndef _Included_org_verwandlung_voj_judger_core_Runner
6 | #define _Included_org_verwandlung_voj_judger_core_Runner
7 | #ifdef __cplusplus
8 | extern "C" {
9 | #endif
10 | /*
11 | * Class: org_verwandlung_voj_judger_core_Runner
12 | * Method: getRuntimeResult
13 | * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)Ljava/util/Map;
14 | */
15 | JNIEXPORT jobject JNICALL Java_org_verwandlung_voj_judger_core_Runner_getRuntimeResult
16 | (JNIEnv *, jobject, jstring, jstring, jstring, jstring, jstring, jint, jint);
17 |
18 | #ifdef __cplusplus
19 | }
20 | #endif
21 | #endif
22 |
--------------------------------------------------------------------------------
/web/src/main/webapp/index.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
2 | <%@ taglib prefix="c" uri="jakarta.tags.core" %>
3 |
4 |
5 |
6 |
7 | ${WebsiteName}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |