diff --git a/minecraft/add_version.cgi b/minecraft/add_version.cgi new file mode 100755 index 000000000..79b03d35a --- /dev/null +++ b/minecraft/add_version.cgi @@ -0,0 +1,55 @@ +#!/usr/local/bin/perl +# Upload or download a new JAR + +use strict; +use warnings; +require './minecraft-lib.pl'; +our (%in, %text, %config); +&error_setup($text{'versions_err'}); +&ReadParseMime(); + +# Get the file +my $temp = &transname(); +my $origfile; +if ($in{'mode'} == 0) { + # Download the file + $in{'url'} || &error($text{'versions_eurl'}); + my ($host, $port, $page, $ssl) = &parse_http_url($in{'url'}); + $host || &error($text{'versions_eurl2'}); + my $err; + &http_download($host, $port, $page, $temp, \$err, undef, $ssl); + $err && &error($err); + $origfile = $page; + } +else { + # Use uploaded file + $in{'jar'} || &error($text{'versions_ejar'}); + $in{'jar_filename'} || &error($text{'versions_ejar2'}); + my $fh = "JAR"; + &open_tempfile($fh, ">$temp", 0, 1); + &print_tempfile($fh, $in{'jar'}); + &close_tempfile($fh); + $origfile = $in{'jar_filename'}; + } + +# Work out the filename to upload as +my $dir = $config{'minecraft_dir'}; +my $ver; +my $dest; +if ($in{'newver_def'}) { + $origfile =~ s/^.*[\/\\]//; + $origfile =~ /([0-9\.]+)\.jar$/ || &error($text{'versions_ever'}); + $ver = $1; + $dest = $dir."/".$origfile; + } +else { + $in{'newver'} =~ /^[0-9\.]+$/ || &error($text{'versions_enewver'}); + $ver = $in{'newver'}; + $dest = $dir."/"."minecraft_server.$in{'newver'}.jar"; + } + +# Check for a clash, and write the file +-r $dest && &error($text{'versions_eclash'}); +©_source_dest($temp, $dest); +&webmin_log("addversion", undef, $ver); +&redirect("list_versions.cgi"); diff --git a/minecraft/change_version.cgi b/minecraft/change_version.cgi old mode 100644 new mode 100755 diff --git a/minecraft/lang/en b/minecraft/lang/en index 3c4123034..5f8e4f205 100644 --- a/minecraft/lang/en +++ b/minecraft/lang/en @@ -372,3 +372,11 @@ versions_newver=Server version versions_newsame=Work out from filename versions_all=Install Version versions_echange=Selected version does not exist +versions_err=Failed to add new version +versions_eurl=Missing URL to download from +versions_eurl2=URL is not valid +versions_ejar=No JAR file uploaded +versions_ejar2=JAR file does not have a filename +versions_ever=Could not work out version from JAR filename +versions_enewver=Version must be numeric +versions_eclash=A server with the same filename already exists! diff --git a/minecraft/list_versions.cgi b/minecraft/list_versions.cgi old mode 100644 new mode 100755 diff --git a/minecraft/minecraft-lib.pl b/minecraft/minecraft-lib.pl index 77309fc29..761da2dec 100644 --- a/minecraft/minecraft-lib.pl +++ b/minecraft/minecraft-lib.pl @@ -1196,7 +1196,7 @@ 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->{'ver'} = $f =~ /([0-9][0-9\.]+)\.jar$/ ? $1 : "Unknown"; $ver->{'desc'} = $ver->{'ver'}; push(@rv, $ver); }