From 5e15e740e1f62f52e945b9d2f36c09e88be2357d Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Sun, 22 Aug 2021 10:58:35 -0700 Subject: [PATCH] Add UI for changing the minecraft server version --- minecraft/change_version.cgi | 15 ++++++++++ minecraft/images/versions.gif | Bin 0 -> 1001 bytes minecraft/index.cgi | 9 ++++-- minecraft/lang/en | 18 ++++++++++++ minecraft/list_versions.cgi | 51 ++++++++++++++++++++++++++++++++++ minecraft/log_parser.pl | 3 ++ minecraft/minecraft-lib.pl | 47 ++++++++++++++++++++++++++++++- 7 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 minecraft/change_version.cgi create mode 100644 minecraft/images/versions.gif create mode 100644 minecraft/list_versions.cgi diff --git a/minecraft/change_version.cgi b/minecraft/change_version.cgi new file mode 100644 index 000000000..db8603ed5 --- /dev/null +++ b/minecraft/change_version.cgi @@ -0,0 +1,15 @@ +#!/usr/local/bin/perl +# Update the current version + +use strict; +use warnings; +require './minecraft-lib.pl'; +our (%in, %text, %config); +&ReadParse(); + +my @vers = &list_installed_versions(); +my ($v) = grep { $_->{'file'} eq $in{'ver'} } @vers; +$v || &error($text{'versions_echange'}." ".$in{'ver'}); +&save_minecraft_jar($in{'ver'}); +&webmin_log("changeversion", undef, $in{'ver'}); +&redirect(""); diff --git a/minecraft/images/versions.gif b/minecraft/images/versions.gif new file mode 100644 index 0000000000000000000000000000000000000000..979b9cb53d412c4e0911fa1bae325cf343b6c4dc GIT binary patch literal 1001 zcmZ?wbhEHbG+;1bIF`;JrK&5Y=PIV}#^PAW=2XPtRK)96F6>>a5YeX-)}j#ErySj{ zmM~o_X@+XbJk8YkTB-9i)8=cX&DTzwr=2!mH+{ZC!4i++rJg0rd`g$c7ftl7Tp3ug zJh*CQK=rDi>Q$k&t0QVxh1IQztX~sbw>qwAU2@afl-BiWZR^w9*5`C?tZJWI(!Zr? z!qR3Snz*!K#?JP+dpqatoxJ?;%+*I{tv)()&9OzBPA%JddezorYj&PnxAWBc-RC#% zySVGp@kxcl(g{U>i8Jbm-v+1qC?-#&Z&@x_}@uik!o_3rbV_dxXJ?T0V#KYo4x z>FejOKfZnc`R&KAA3uNp{PpMepTB?p{`>du|G)p#1d9Izor_WvOHxx5$}>wc6x=<1 z0~i#4vM_Qn)HCQX00AhX7})3Yl`J~FdB+{ktVh~b zM{Lfz+jX`1=(5gbrh!h|*4*5jaoR|eQ!LPH#lP*h&N-z|T^+kSuGCM~*lcb5{_L+( zwOrSy$2e`^%ZNC*W8>rF6O@gw6)4P7j9@d$zISHl=I7_935qXp*tO;5TxP8C{MlSIg0gRk7e~vH6UVKxmRaA>%`K_Air4h4PggPvg8dx-9+VBi%9o1yDw s!oc9Q+^5o8Fi3LhN%e#_PBlr>lFTW}lb5V~rXn%J^33c4HYNsZ07fM!&;S4c literal 0 HcmV?d00001 diff --git a/minecraft/index.cgi b/minecraft/index.cgi index 20f4441d2..a954883e2 100755 --- a/minecraft/index.cgi +++ b/minecraft/index.cgi @@ -63,17 +63,20 @@ my @links = ( "edit_conf.cgi", "edit_users.cgi", "view_logs.cgi", "list_conns.cgi", "list_worlds.cgi", "edit_cmds.cgi", "console.cgi", "edit_backup.cgi", - "list_playtime.cgi", "edit_manual.cgi" ); + "list_playtime.cgi", "list_versions.cgi", + "edit_manual.cgi" ); my @titles = ( $text{'conf_title'}, $text{'users_title'}, $text{'logs_title'}, $text{'conns_title'}, $text{'worlds_title'}, $text{'cmds_title'}, $text{'console_title'}, $text{'backup_title'}, - $text{'playtime_title'}, $text{'manual_title'} ); + $text{'playtime_title'}, $text{'versions_title'}, + $text{'manual_title'} ); my @icons = ( "images/conf.gif", "images/users.gif", "images/logs.gif", "images/conns.gif", "images/worlds.gif", "images/cmds.gif", "images/console.gif", "images/backup.gif", - "images/playtime.gif", "images/manual.gif" ); + "images/playtime.gif", "images/versions.gif", + "images/manual.gif" ); &icons_table(\@links, \@titles, \@icons, 5); print &ui_hr(); diff --git a/minecraft/lang/en b/minecraft/lang/en index fb590a966..3c4123034 100644 --- a/minecraft/lang/en +++ b/minecraft/lang/en @@ -318,6 +318,8 @@ log_delboot=Disabled server at boot time log_enable_backup=Enabled scheduled backups to $1 log_disable_backup=Disabled scheduled backups log_playtime=Changed play time limits +log_changeversion=Changed server to version $1 +log_addversion=Added server version $1 monitor_up=Minecraft Server Alive monitor_latest=Minecraft Server Up To Date @@ -354,3 +356,19 @@ playtime_eusers=No users to limit entered playtime_edays=No days of the week selected playtime_eips=No IP addresses entered playtime_total=Total time + +versions_title=Minecraft Versions +versions_file=Filename +versions_desc=Description +versions_size=JAR Size +versions_save=Change Version +versions_save2=Change Version and Restart Server +versions_none=No Minecraft versions found! +versions_header=Add Minecraft Version +versions_src=JAR file source +versions_src0=Download from URL +versions_src1=Upload file +versions_newver=Server version +versions_newsame=Work out from filename +versions_all=Install Version +versions_echange=Selected version does not exist diff --git a/minecraft/list_versions.cgi b/minecraft/list_versions.cgi new file mode 100644 index 000000000..b17e67a81 --- /dev/null +++ b/minecraft/list_versions.cgi @@ -0,0 +1,51 @@ +#!/usr/local/bin/perl +# Show available server versions + +use strict; +use warnings; +require './minecraft-lib.pl'; +our (%in, %text, %config); + +&ui_print_header(undef, $text{'versions_title'}, ""); + +my @vers = &list_installed_versions(); +my $cur = &get_minecraft_jar(); +if (@vers) { + print &ui_form_start("change_version.cgi"); + print &ui_columns_start([ "", + $text{'versions_file'}, + $text{'versions_desc'}, + $text{'versions_size'} ], 100); + foreach my $v (@vers) { + my @st = stat($v->{'path'}); + print &ui_radio_columns_row([ + $v->{'file'}, + $v->{'desc'}, + &nice_size($st[9]), + ], undef, "ver", $v->{'file'}, + &same_file($v->{'path'}, $cur)); + } + print &ui_columns_end(); + print &ui_form_end([ [ undef, $text{'versions_save'} ] ]); + } +else { + print "$text{'versions_none'}

\n"; + } + +# Show form to download / add one +print &ui_hr(); +print &ui_form_start("add_version.cgi", "form-data"); +print &ui_table_start($text{'versions_header'}, undef, 2); + +print &ui_table_row($text{'versions_src'}, + &ui_radio_table("mode", 0, + [ [ 0, $text{'versions_src0'}, &ui_textbox("url", undef, 60) ], + [ 1, $text{'versions_src1'}, &ui_upload("jar") ] ])); + +print &ui_table_row($text{'versions_newver'}, + &ui_opt_textbox("newver", undef, 10, $text{'versions_newsame'})); + +print &ui_table_end(); +print &ui_form_end([ [ undef, $text{'versions_all'} ] ]); + +&ui_print_footer("", $text{'index_return'}); diff --git a/minecraft/log_parser.pl b/minecraft/log_parser.pl index 6569c55e5..6b2f0a956 100755 --- a/minecraft/log_parser.pl +++ b/minecraft/log_parser.pl @@ -11,6 +11,9 @@ my ($user, $script, $action, $type, $object, $p) = @_; if ($object eq 'backup') { return &text('log_'.$action.'_backup', $object); } +elsif ($action eq 'changeversion' || $action eq 'addversion') { + return &text('log_'.$action, "".&html_escape($object).""); + } else { return $text{'log_'.$action}; } diff --git a/minecraft/minecraft-lib.pl b/minecraft/minecraft-lib.pl index 19b0198f8..77309fc29 100644 --- a/minecraft/minecraft-lib.pl +++ b/minecraft/minecraft-lib.pl @@ -11,7 +11,8 @@ use POSIX; &init_config(); our ($module_root_directory, %text, %gconfig, $root_directory, %config, $module_name, $remote_user, $base_remote_user, $gpgpath, - $module_config_directory, @lang_order_list, @root_directories); + $module_config_directory, @lang_order_list, @root_directories, + $module_config_file); our $history_file = "$module_config_directory/history.txt"; our $download_page_url = "https://www.minecraft.net/en-us/download/server/"; our $playtime_dir = "$module_config_directory/playtime"; @@ -1175,4 +1176,48 @@ my $jar = &get_minecraft_jar(); return $jar =~ /bukkit-[0-9]/ ? 'bukkit' : 'default'; } +# list_installed_versions() +# Returns a list of hash refs, one per available server version +sub list_installed_versions +{ +# Find all the jars +my @files; +my $dir = $config{'minecraft_dir'}; +my $cur = &get_minecraft_jar(); +opendir(DIR, $dir); +foreach my $f (readdir(DIR)) { + push(@files, $dir."/".$f) if ($f =~ /\.jar$/); + } +closedir(DIR); +push(@files, $cur) if (&indexof($cur, @files) < 0); + +# Figure out what they are +my @rv; +foreach my $f (sort { $a cmp $b } @files) { + my $ver = { 'path' => $f }; + $ver->{'file'} = $f =~ /^\Q$dir\E\/(.*)/ ? $1 : $f; + $ver->{'ver'} = $f =~ /([0-9\.]+)\.jar$/ ? $1 : "Unknown"; + $ver->{'desc'} = $ver->{'ver'}; + push(@rv, $ver); + } +return @rv; +} + +# save_minecraft_jar(file) +# Update the server jar file +sub save_minecraft_jar +{ +my ($file) = @_; +my $dir = $config{'minecraft_dir'}; +&lock_file($module_config_file); +if ($file =~ /^\Q$dir\E\/(.*)$/) { + $config{'minecraft_jar'} = $1; + } +else { + $config{'minecraft_jar'} = $file; + } +&save_module_config(\%config); +&unlock_file($module_config_file); +} + 1;