chiark / gitweb /
Clock skew is only if timestamp is > now
[ypp-sc-tools.db-live.git] / yarrg / commod-update-receiver
index 4ae267d9b41d3ce78e217b3d74164a0c6feda09a..0ae5ba8a8560a025b452c596ec9bad9be9458c06 100755 (executable)
@@ -3,22 +3,22 @@
 # This script is invoked when the yarrg client uploads to
 # the chiark database.
 
-# This is part of ypp-sc-tools, a set of third-party tools for assisting
-# players of Yohoho Puzzle Pirates.
+# This is part of the YARRG website.  YARRG is a tool and website
+# for assisting players of Yohoho Puzzle Pirates.
 #
 # Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
 #
 # This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# GNU Affero General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License
+# You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 # Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
@@ -41,15 +41,13 @@ our $now= time;  defined $now or die $!;
 
 my $re_any= "^(.*)\$";
 
-parse_info_serverside();
-
 sub fail ($) {
     my ($msg) = @_;
     addlog("failing $msg");
     print header(-status=>'400 Bad commodity update',
                 -type=>'text/plain',
                 -charset=>'us-ascii');
-    print "Error: $msg\n";
+    print "\nError: $msg\n";
     exit 0;
 }
 
@@ -63,6 +61,15 @@ sub must_param ($$) {
 
 my %o;
 
+if (param('get_source')) {
+    # There's another copy of this in dictionary-update-receiver.  Sorry.
+    print header('application/octet-stream') or die $!;
+    source_tarball('..', sub { print $_[0] or die $!; });
+    exit 0;
+}
+
+parse_info_serverside();
+
 my $midtmp= "_mid-pid$$.hold";
 open MIDTMP, ">$midtmp" or die "$midtmp $!";
 stat MIDTMP or die $!;
@@ -110,6 +117,8 @@ $o{'island'}= must_param('island', $re_any);
 my $arches= $oceans{$o{'ocean'}};
 fail("unknown ocean") unless $arches;
 
+parse_info_serverside_ocean($o{'ocean'});
+
 my $island_found= 0;
 foreach my $islands (values %$arches) {
     my $sources= $islands->{$o{'island'}};
@@ -120,7 +129,7 @@ foreach my $islands (values %$arches) {
 fail("unknown island") unless $island_found;
 
 $o{'timestamp'}= must_param('timestamp', "^([1-9]\\d{1,20})\$");
-fail("clock skew") if $o{'timestamp'} >= $now;
+fail("clock skew") if $o{'timestamp'} > $now;
 
 my $indatafh= upload('data');
 defined $indatafh or fail("data is not a file");