#!/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);