Commit Graph

1055 Commits

Author SHA1 Message Date
Masco Skray
73aec02216 feat(install): add options to choose which judger component to build
For only web, there is no need to build checkers.
There are so many checkers that will slow down make speed.
Also for some situations, users can build checkers without runners.
2019-07-16 18:28:00 +08:00
Masco Skray
d413b746eb chore(install): separate services with docker-compose support
Without bundle, now you can choose to download single container.
For example, you can only download judger container to setup a new judger.
Also, the web container now no db and judger containing, except local sandbox.
You can use docker-compose to get every single container work together from now.
Single DB this time uses the latest MySQL 8 version, so some preferences are different.
2019-07-16 17:26:05 +08:00
Masco Skray
28cd4ef8b8 style(web,install): set repo clone dir as work dir
Clone repository files to /opt, and make this as work dir.
Can save disk space, make folder tidy, and easy to access.
2019-07-16 10:48:02 +08:00
Masco Skray
fb6cae057c chore(web): set runtime version on faq page
The runtime versions on faq page are very old and not edited.
If judger is not with web, we can't determine the exact version.
So set these versions as default show, won't be too much different.
2019-07-16 10:38:08 +08:00
Masco Skray
d92f7b1177 fix(install): mend bundle installation scripts
With thesedays' modify, installation scripts are not working properly.
Now do some modify, and set the default workdir to /opt.
2019-07-15 23:30:00 +08:00
Masco Skray
6cd6f10f6e style(web,install): change judge_client work path
When move out judger from bundle, no need to create judger account.
So these work paths will no longer exist. Prepare for future.
2019-07-15 16:19:05 +08:00
Masco Skray
2156cdffef feat(web): add a new way to access blog
We add a new way to access blog page. Now there are 3.
The switch now uses number to choose the way.
1 is for subdomain and 3 is for subfolder.
2 is for separated blog domain with its subfolder.
For example, mike's link is blog.xxx.xxx/mike.
Blog list page link on navbar will change by domain mode.
2019-07-12 14:30:00 +08:00
Masco Skray
0854940fe0 style(web): change link location of blog functions
When using sub-directory blog, the 'blogof' not looks so good.
And, there are duplicate 'blog' characters, which making people uncomfortable.
So, for sub-directory blog, use 'blog' instead of 'blogof'.
'blog' is not as a sub folder or type anymore, use 'post' instead.

BREAKING CHANGE: Due to the conflict of 'blog' sub-directory, when go to blog post,
now should use 'blogs/{id}'; but when subdomain mode is on, you can still use 'blog'
to access these blog posts. 'blogof' is no longer used, and you need to inform users
that blog link is changed, to avoid the inaccessbility.
2019-07-12 12:13:30 +08:00
Masco Skray
46c8644a6e feat(web): support utf8mb4 character set (#39)
The utf8 set in MySQL is not real UTF-8.
Use utf8mb4 character set instead of utf8.
妈妈再也不用担心写东西用不了 Emoji 了~

BREAKING CHANGE: Old databases and tables need to be upgraded.
Better not use old database structure with new connect parameters.
2019-07-10 12:14:45 +08:00
Masco Skray
f72d0fda6c style(web): merge contests_asks table into main sql file
The web interface is merged but the table is not.
Merge it into a single SQL file, without execute PHP.
Redumped database structure with mysqldump command.
2019-07-10 11:04:51 +08:00
Masco Skray
50f26075ac style(web/app/controllers): subfolder move command as a single line
8 lines are too much. Why not make it into one line?
2019-07-10 10:58:15 +08:00
Masco Skray
a522d58f1d feat(install): separate judge apache access log to another file
When judger is polling, there will be many items under access log file.
It makes access log file very big and makes us difficult to check the log.
Move judge access log to another single file, make it easier to manage log files.
2019-07-08 13:20:30 +08:00
Masco Skray
e030a23ecb fix(install): support v8js upgrade to 2.1.1
The latest v8js 2.1.1 needs libv8 to be 6.9 or newer.
This fix applies new ppa source and installs libv8 7.5.
2019-07-08 12:56:08 +08:00
Masco Skray
a642895253 style(judger,web): do not specify minor version to Python2
Python 2 is Python 2, Python 2.7 is also Python 2.
So why Python 2.7 is Python 2.7?
Make things tidy.
2019-06-28 16:40:41 +08:00
Masco Skray
d030c261b2 feat(judger,web): drop Java7, add Java11 with OpenJDK
Java 7 is now out of support. A large number of people use Java 8.
As the latest Java LTS version, now add support for Java 11.
Due to the policies from Oracle, SunJDK is replaced.
2019-06-28 16:00:40 +08:00
Masco Skray
d650f87f32 feat(judger): upgrade judge_client from py2 to py3
Upgrade judge_client from Python 2 to Python 3.
Add back and support a new judger update method.
Remove the Makefile outside of the folder which not contain any C file.
2019-06-28 14:00:20 +08:00
Masco Skray
c603c41e00 style(web): disable hack by default
Users rarely use hack, but it is enabled by default.
They need to disable it manually, and there are also many people do not now why should disable it.
Make the hack function disabled when creating a new problem.
2019-06-14 23:41:40 +08:00
Masco Skray
96d4a3ecf7 style(judger,web): move code out from subfolder "1"
Due to historical reasons, the code is in subfolder "1".
With SVN removal, we place the code back and remove the annoying "1" folder.
2019-06-14 23:34:41 +08:00
mcfx0
69912ba9b3 feat(install, svn): remove svn (#45)
* feat(install, svn): remove svn

Remove everything related to svn.
Rename uoj-svn-lib to uoj-data-lib.
Save preparing problem data to /var/uoj_data/prepare/problem_id.

* Typo: uoj_date -> uoj_data

* add: backward compatibility

BREAKING CHANGE: Preparing problem data location is changed
You need to move files from /var/svn/problem/{id}/cur/{id}/1 to
/var/uoj_data/upload/{id}
2019-06-14 23:30:02 +08:00
Linfei Lee
94fbfea97f fix(support IOI competition system):#6 (#33) 2019-06-11 11:03:53 +08:00
EarringYYR
ec54596ab4 feat(problem.php): Suppot show limits (#32)
The system will get the time_limit and memory_limit from problem.conf automatically. In addition, the problem that doesn't have any data will show: time_limit: N/A memory_limit: N/A
2019-06-11 10:59:04 +08:00
Kaifeng Lyu
9c21c957c9 fix(UOJContext.php): fix the bug that "page expires" occurs when accessing by localhost (#41)
To support subdomain cookies, an extra "." is added to the domain when setting the cookies.
However, this strategy fails on "localhost", because browsers do not recognize ".localhost".
So I add a check for this so that "localhost" is used as the cookie domain in this case.
2019-06-11 10:27:22 +08:00
Billchenchina
4ed05e6388 feat(uoj/1/app): make the Internet secure with friendly to 443 SSL 😎 (#22)
Change some static resources starting with https.
Replace long UOJConfig to HTML::URL.
New detection of protocol settings.
2019-05-01 00:30:55 +08:00
TRCYX
a8cec5a42f fix(blog): fix incorrect blog links from writing page (#38)
When a blogs was saved, only links of form "/blog/id/write" was
returned, ignoring username. Under a subdomain
("user.blog.site/blog/id/write") this is fine, but it does not work if
a subdomain is not used ("site/blog/id/write"). `HTML::blog_url` should
be called to return the links.

Also, DB::insert_id is called before actually inserting the blogs to get
the new blog's id. This sometimes return a 0, especially when the user
has just deleted a blog. DB::insert_id should be called after the
insert instead.
2019-04-26 00:07:47 +08:00
Masco Skray
e0914a8f31 chore(install/bundle): let Dockerfile get current branch when building
Previous the branch in Dockerfile is specified manually in each branch.
But when someone want to change the branch or test they must modify it.
To make the process more intelligent, we will auto get the branch name.
And, to make the image smaller, we added --single-branch argument onto.
2019-04-20 10:51:03 +08:00
Masco Skray
2565c18256 style(uoj/1/app): modify some page footer views
Add translations to some footer texts.
Open external links to the new blank view.
2019-04-18 11:10:53 +08:00
Masco Skray
2dc8e74fc1 feat(uoj/1/app): move data to the root when subfolder exists in the uploaded data zip
There is subfolder in the uploaded data archive file, we can now process it.
We will move files in the subfolder out to the data rootdir of current problem.
If you have some data archives with subfolder, don't need to repack them manually.
2019-04-16 22:48:13 +08:00
Masco Skray
2e3817cabe fix(uoj/1/app/controllers): fix problem data upload zip type detection error
In the previous version when upload a zip online, even
if it is a real zip file the system refuses to accept.
Just simply disabled this function but it is not suitable.
We found that there is not just one MIME type for zip file.
So we add another common zip MIME types to temporarily solve it.
2019-04-16 21:12:52 +08:00
EarringYYR
3bc9419e3f fix(install/bundle): fix the wrong submission time
The submissions' submit time is not correct because the time zone of mysql isn't set. And this commit has fixed it.
2019-04-15 23:58:10 +08:00
EarringYYR
a604bf9476 fix(blog-preview.php): click readmore will lead to 404 page
On Blog Preview page when someone set readmore flag will make rest of the content invisible.
Instead there will be a button for users to click and get the full article.
Because of the wrongly put link, it will make the last slash missing.
Put the blog id back in the right place to get a right link.
2019-02-24 02:50:20 +08:00
Masco Skray
46aa7b7005 chore(install/bundle): improve installation procedure
In the past, we make the bundle installation as two parts.
Some of the steps such as compile judger is done at local.
And, to make it work, the steps may in a wrong order.
Now we make most of the steps working online automaticly,
and if you start the container you don't need to wait for
a long time to let it prepare. It will only reset passwords.
There are also some works moved to another place in order
to make the installation flow clearer and simpler.
Using more threads to boost judge_client's make.
Deleted some old things and doing something new.

TODAY: **Merry Christmas!**
2018-12-25 23:58:50 +08:00
Masco Skray
eff4c8ed9c style(install/bundle): make install script dash compatible
We wrote the script that can only be executed on bash.
But Ubuntu sets dash as its default shell environment.
One of the most difference is the POSIX standard echo,
another is parameter of chown can't be put to the end.
So we made some changes to let the script used widely.
And you will not face the syntax error when open this.
2018-12-15 19:57:57 +08:00
Masco Skray
fb3b0dad3c chore(uoj/1/js): update Readmore.js version
Update Readmore.js version to 2.2.1.
2018-12-15 13:16:26 +08:00
Masco Skray
fa5f1759e0 chore(install/bundle): set Dockerfile build from new branch name
We've just change php7 branch as the master branch, and php5 version turned into legacy.
To make docker automated build work correctly, the branch name specify now changed.
2018-12-15 13:16:24 +08:00
Masco Skray
fd2f41eb4e style(judge_client/1/uoj_judger): change "Judgment" spelling
Okay, in truth it is not really a bug.
We just change its name in php because function lacks.
For judger it will work correctly and will not crash during running the program.
But, to avoid inconsistence we use "Judgement" for all purpose.

"Judgment" or "Judgement"? They are both right.
You ask me which is better? I don't know.
I make the choice only because the word with more "e" is used almost everywhere.
Used more frequently and I don't want to edit a lot of files.
2018-12-15 13:12:26 +08:00
Masco Skray
f2056f17d1 fix(uoj/1): change server time's timezone that always set to UTC
Since PHP 5.1.0 (when the date/time functions were rewritten), we need to specify the default timezone.
Otherwise the timezone will always set to UTC that may cause problem or cause confusion.
We set the default timezone to Asia/Shanghai. If you are not at the area of this timezone, you can change it manually.
2018-10-11 23:40:05 +08:00
Masco Skray
c1294121d3 fix(uoj/1/app/libs): fix no preview of text files in problem_data_manage
When managing data, there will be a preview of test data or validator binary file.
But in PHP7 the prefiew of test data text file or problem.conf text file is not shown.
After my test it is caused by file_get_contents() when passing offset with -1.
It is strange that the manual on php.net in Chinese the default of $offset is -1,
but in English the default of $offset is 0. Use -1 will get nothing, 0 instead is fine.
The commit also change uojFilePreview() that can also be used as viewing binary file.
For backwards compatibility, we just set text as the default file type and no need to specify.
2018-10-11 23:40:05 +08:00
Masco Skray
58e70164ba fix(uoj/1/app/controllers): fix Judgement Failed submissions table not shown for superuser
When printing the table of Judgement Failed items at super-manage, there is nothing shown.
It caused by using echoSubmissionsList(), arguments that 3 passed but exactly 4 expected.
So add the missing argument, and let the result hidden because we select an exact result.
Also, because of the typo of "Judgement", there will be nothing shown if
only fixed too few arguments. This commit changes it too.
2018-10-11 23:35:32 +08:00
Masco Skray
923e1e61f8 fix(uoj/1/app/models): session issue caused by wrong cookie domain
After we changed the detection of the real httpHost value, the token check will fail when register.
A long time ago we just simply added "Session_Start();" at the beginning of uoj/1/app/index.php.
It temporally solved the problem but caused another series of issues that we can't see outside.
There is also a session_start() when executing Session::init() at importing app/libs/uoj-lib.php.
So, when we add one more "Session_Start();" it will execute this one more time, just cause warning:
> session_name(): Cannot change session name when session is active
> PHP Warning:  ini_set(): A session is active. You cannot change the session module's ini settings at this time
And, the session name and session path, session domain will not be set so may cause other problems.
The reason is that using UOJContext::httpHost() as web hostname when default, it will add the port at the end.
When using IP the validateIP() will return false, or using domain with port the cookie domain will be set wrongly.
As a result the register process throws out the "Expired" error and refuses to register, and other uses token will fail too.
We made it cut out the port when setting cookie domain, and also changed the style of UOJContext::httpHost() to make it easier to read.
With this problem known and solved the "Session_Start();" in index.php will also say bye-bye, and there will be no multiple session_start()s.

NOTICE: If you have set all your information to yours in .config.php, and not using address with port other than 80, you may not face this problem.
But the warning of php will consistently shown in the error log file. So kick the annoying warning information out if you are angry with this ;-)
2018-10-11 18:46:58 +08:00
Masco Skray
47320c8758 fix(install/bundle): mysqld cannot start due to overlayfs of docker
This is an old enough bug while using MySQL version 5.5 with Ubuntu 14.04.
According to these issues form docker or moby repository:
https://github.com/docker/for-linux/issues/72
https://github.com/moby/moby/issues/35503
overlayfs only supports a subset of the POSIX standard.
But the problem does not arise when using aufs.
We do a little trick to MAKE MYSQL GREAT AGAIN.

NOTICE: Only people who are using docker may face this problem.
If you are using a bare-metal system or just running a virtual machine,
executing the installation script without using container works fine.
2018-10-10 23:50:50 +08:00
Billchenchina
de24c3c08b
fix(uoj/1/app/libs): fix compile error when hack enabled
Previous g++-4.8 version will cause compile error when hack enabled.
2018-10-03 00:40:49 +08:00
Masco Skray
1d72c5e914 fix(uoj/1/app/controllers): fix login failure loop when logout from user profile modify page
When logout by clicking logout button on the top of /user/modify-profile link, you will be redirected to the login page.
But if you login immediately then you will get the login page again and loop.
It is caused by an address checking error. Now try to fix.
2018-09-23 23:14:39 +08:00
Masco Skray
b7c10c82c3 feat(judge_client/1/uoj_judger): support new version of compilers in Ubuntu 18.04
The compilers are all updated in Ubuntu 18.04 basesystem.
Add some defines for judger on compiling and replace web's display version to the real version.
To support new compilers we must modify the syscall list to let them run properly, otherwise they will error with "Dangerous Syscalls".
The Oracle JDK8 will read usagetracker profiles and record usage infomation, so disable it in order to not making junk files which may cause DGS.
2018-09-22 07:55:06 +08:00
Masco Skray
6cc048d9d1 style(judge_client/1/uoj_judger): remove compiler version specification
Due to historic reasons, the version and path of compilers are specified.
This will remove these specifications to make judger more adaptable.
Also provide defines to specify new version and keep for default.
2018-09-21 22:16:25 +08:00
Masco Skray
64683ad93f feat(install/bundle): install script adapt to Ubuntu 18.04
Update base system to Ubuntu 18.04.
.htaccess file's session path changed correctly.
Add gnupg install choice, due to base system has no gpg support.
Set DEBIAN_FRONTEND to noninteractive in order to prevent tzdata stuck.
Change Dockerfile's verion and buanch checkout method, in order to save space.
Fix mysql conf when not restart service and the database can't import judger info.
Change install.sh, support PHP7.2, update libv8 repo to artful, with missing php-mbstring.
The old JDK distfile mirrors are deprecated, changed to official.sed modded to get the latest jdk8.

BREAKING CHANGE: Ubuntu 14/16 users shouln't execute this script, due to config files and packages not the same.
2018-09-20 22:05:15 +08:00
Masco Skray
ce61130caf style(uoj/1/app/models): a little modify of db connection
Prevent too many information printed out, leak.
Modify it to make it looks simple and can output error correctly.
2018-09-20 19:49:26 +08:00
vfleaking
4d2b0735dc update: fetch commits from upstream
Update from vfleaking/uoj upstream, commit aa8a85c - 9f1302c.
Because of this repo's modify, also with the adaption of community version.
2018-09-20 19:34:38 +08:00
TRCYX
e9df8f54ab fix(uoj-form-lib.php): UniversalOJ/UOJ-System#13
From vfleaking/uoj@43280f92d6.
Fix wrongly written `isset`s.
2018-09-20 17:39:42 +08:00
Masco Skray
163dd8bb30 feat(install/bundle): add install script PHP7 and Ubuntu 16.04 support
In order to support PHP7 and Ubuntu 16.04, there must be some changes to make it runs properly.
The install script added php7 and mysql 5.7, newer v8js packages and supports, adjusted some config files.
Also used new way to detect install args, and change tab to 4-char-long space char.

BREAKING CHANGE: This branch can only be used for PHP7, and Ubuntu 14.04 users shouln't execute this script.
2018-09-20 17:38:21 +08:00
Masco Skray
2d0b0814fd fix(install/bundle): fix the wrong generation of our-root password and length
The last commit changed the installation script a lot, but made some mistakes on the genration of config.
It gens the $_svn_ourroot_password_ to $_svn_certroot_password_. Just fix it.
According to the version from @vfleaking, the judger_socket password and the our-root password is 32 chars long. Strengthen it.
There is also a *** space char on the end of a line. Kick it out.
2018-09-20 17:38:21 +08:00