#!/usr/bin/perl # # Routino non-Javascript router CGI # # Part of the Routino routing software. # # This file Copyright 2008-2010 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # Use the generic router script require "router.pl"; # Use the perl CGI module use CGI ':cgi'; # Create the query and get the parameters $query=new CGI; @rawparams=$query->param; # Legal CGI parameters with regexp validity check %legalparams=( "lon[1-9]" => "[-0-9.]+", "lat[1-9]" => "[-0-9.]+", "transport" => "[a-z]+", "highway-[a-z]+" => "[0-9.]+", "speed-[a-z]+" => "[0-9.]+", "property-[a-z]+" => "[0-9.]+", "oneway" => "(1|0|true|false|on|off)", "weight" => "[0-9.]+", "height" => "[0-9.]+", "width" => "[0-9.]+", "length" => "[0-9.]+", "length" => "[0-9.]+", "language" => "[-a-zA-Z]+", "submit" => "(shortest|quickest|link)", "format" => "(html|gpx-route|gpx-track|text|text-all|form)" ); # Validate the CGI parameters, ignore invalid ones foreach $key (@rawparams) { foreach $test (keys (%legalparams)) { if($key =~ m%^$test$%) { $value=$query->param($key); if($value =~ m%^$legalparams{$test}$%) { $cgiparams{$key}=$value; last; } } } } # Get the important parameters $submit=$cgiparams{submit}; delete $cgiparams{submit}; $format=$cgiparams{format}; delete $cgiparams{format}; $format="form" if(!$format || ($submit ne "shortest" && $submit ne "quickest")); # Generate a custom URL $customurl=""; if($submit) { $customurl="noscript.cgi?"; foreach $key (sort (keys %cgiparams)) { $customurl.="$key=$cgiparams{$key};"; } $customurl.="submit=custom"; } # Fill in the default parameters %fullparams=FillInDefaults(%cgiparams); # Open template file before running the router (including changing directory) open(TEMPLATE,") { if (m%%) { $key=$1; m%type="([a-z]+)"%; $type=$1; m%value="([a-z]+)"%; $value=$1; if ($type eq "radio") { $checked=""; $checked="checked" if($fullparams{$key} eq $value); s%>% $checked>%; } elsif ($type eq "checkbox") { $checked=""; $checked="checked" if($fullparams{$key}); s%>% $checked>%; } elsif ($type eq "text") { s%>% value="$fullparams{$key}">%; } print; } elsif (m%%) { s%%$customurl%; print if($submit); } elsif (m%%) { $results_section=1; } elsif (m%%) { $results_section=0; } elsif ($results_section) { s%%$router_Type%; s%%$router_type%; s%%$router_uuid%; s%%$router_time%; s%%$router_result%; s%%$router_message%; print if($router_uuid); } else { print; } } close(TEMPLATE);