|
|
|
#!/usr/bin/perl
|
|
|
|
#
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
use AN::Tools;
|
|
|
|
use Data::Dumper;
|
|
|
|
|
|
|
|
my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0];
|
|
|
|
my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0];
|
|
|
|
if (($running_directory =~ /^\./) && ($ENV{PWD}))
|
|
|
|
{
|
|
|
|
$running_directory =~ s/^\./$ENV{PWD}/;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $an = AN::Tools->new();
|
|
|
|
|
|
|
|
# Print the html headers, with a new line to break the header from the body.
|
|
|
|
print $an->Template->get({file => "shared.html", name => "http_headers"})."\n";
|
|
|
|
|
|
|
|
# Set the log level to 2
|
|
|
|
$an->Log->level({set => 2});
|
|
|
|
|
|
|
|
# Read in our words file.
|
|
|
|
$an->Words->read({file => $an->data->{path}{directories}{'cgi-bin'}."/words.xml"});
|
|
|
|
|
|
|
|
# Turn off buffering so that the pinwheel will display while waiting for the SSH call(s) to complete.
|
|
|
|
$| = 1;
|
|
|
|
|
|
|
|
# Read in any CGI variables, if needed.
|
|
|
|
$an->Get->cgi();
|
|
|
|
|
|
|
|
$an->data->{skin}{url} = $an->data->{path}{urls}{skins}."/".$an->Template->skin;
|
|
|
|
my $header = $an->Template->get({file => "main.html", name => "header", variables => { language => $an->Words->language }});
|
|
|
|
my $body = "";
|
|
|
|
# This will be true when the dashboard is unconfigured.
|
|
|
|
if (not $an->data->{cgi}{step}{value})
|
|
|
|
{
|
|
|
|
$body = config_step1($an);
|
|
|
|
}
|
|
|
|
elsif ($an->data->{cgi}{step}{value} eq "step1")
|
|
|
|
{
|
|
|
|
# Sanity check step1.
|
|
|
|
my $sane = sanity_check_step1($an);
|
|
|
|
if ($sane)
|
|
|
|
{
|
|
|
|
# No good
|
|
|
|
$body = config_step1($an);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
# Step 1 was sanem show step 2.
|
|
|
|
$body = config_step2($an);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$body = get_network_details($an);
|
|
|
|
}
|
|
|
|
my $buttons = $an->Template->get({file => "main.html", name => "button_bar"});
|
|
|
|
my $footer = $an->Template->get({file => "main.html", name => "footer"});
|
|
|
|
|
|
|
|
# Display the page.
|
|
|
|
my $template = $an->Template->get({file => "main.html", name => "master", variables => {
|
|
|
|
header => $header,
|
|
|
|
skin_url => $an->data->{path}{urls}{skins}."/".$an->Template->skin,
|
|
|
|
left_top_bar => " ",
|
|
|
|
center_top_bar => " ",
|
|
|
|
right_top_bar => $buttons,
|
|
|
|
center_body => $body,
|
|
|
|
left_bottom_bar => " ",
|
|
|
|
center_bottom_bar => " ",
|
|
|
|
right_bottom_bar => " ",
|
|
|
|
footer => $footer,
|
|
|
|
}});
|
|
|
|
|
|
|
|
print $template;
|
|
|
|
|
|
|
|
exit(0);
|
|
|
|
|
|
|
|
#############################################################################################################
|
|
|
|
# Functions #
|
|
|
|
#############################################################################################################
|
|
|
|
|
|
|
|
# This is step2 where the user maps their network.
|
|
|
|
sub config_step2
|
|
|
|
{
|
|
|
|
my ($an) = @_;
|
|
|
|
|
|
|
|
# TODO...
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
# This sanity-checks step 1 and returns '1' if there was a problem.
|
|
|
|
sub sanity_check_step1
|
|
|
|
{
|
|
|
|
my ($an) = @_;
|
|
|
|
|
|
|
|
my $sane = 1;
|
|
|
|
# TODO...
|
|
|
|
|
|
|
|
return($sane);
|
|
|
|
}
|
|
|
|
|
|
|
|
# This is step 1 in asking the user how to configure Striker.
|
|
|
|
sub config_step1
|
|
|
|
{
|
|
|
|
my ($an) = @_;
|
|
|
|
|
|
|
|
# TODO: Later, this will be a check to see if we've configured this Striker before and, if so, offer
|
|
|
|
# an option to restore.
|
|
|
|
my $reload_old_config = "";
|
|
|
|
if (1)
|
|
|
|
{
|
|
|
|
# Old config exists. Load the detail and present the option to reload.
|
|
|
|
}
|
|
|
|
|
|
|
|
my $say_organization = $an->Template->get({file => "main.html", name => "input_text_form", variables => {
|
|
|
|
name => "organization",
|
|
|
|
id => "organization",
|
|
|
|
field => "#!string!striker_0003!#",
|
|
|
|
description => "#!string!striker_0004!#",
|
|
|
|
value => defined $an->data->{cgi}{organization}{value} ? $an->data->{cgi}{organization}{value} : "",
|
|
|
|
extra => "",
|
|
|
|
}});
|
|
|
|
$an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { say_organization => $say_organization }});
|
|
|
|
my $say_prefix = $an->Template->get({file => "main.html", name => "input_text_form", variables => {
|
|
|
|
name => "prefix",
|
|
|
|
id => "prefix",
|
|
|
|
field => "#!string!striker_0005!#",
|
|
|
|
description => "#!string!striker_0006!#",
|
|
|
|
value => defined $an->data->{cgi}{prefix}{value} ? $an->data->{cgi}{prefix}{value} : "",
|
|
|
|
extra => "maxlength=\"5\"",
|
|
|
|
}});
|
|
|
|
$an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { say_prefix => $say_prefix }});
|
|
|
|
my $say_domain = $an->Template->get({file => "main.html", name => "input_text_form", variables => {
|
|
|
|
name => "domain",
|
|
|
|
id => "domain",
|
|
|
|
field => "#!string!striker_0007!#",
|
|
|
|
description => "#!string!striker_0008!#",
|
|
|
|
value => defined $an->data->{cgi}{domain}{value} ? $an->data->{cgi}{domain}{value} : "",
|
|
|
|
extra => "maxlength=\"255\"",
|
|
|
|
}});
|
|
|
|
$an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { say_domain => $say_domain }});
|
|
|
|
my $say_sequence = $an->Template->get({file => "main.html", name => "input_number_form", variables => {
|
|
|
|
name => "sequence",
|
|
|
|
id => "sequence",
|
|
|
|
field => "#!string!striker_0009!#",
|
|
|
|
description => "#!string!striker_0010!#",
|
|
|
|
value => defined $an->data->{cgi}{sequence}{value} ? $an->data->{cgi}{sequence}{value} : "",
|
|
|
|
extra => "maxlength=\"2\"",
|
|
|
|
}});
|
|
|
|
$an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { say_domain => $say_domain }});
|
|
|
|
my $say_ifn_count = $an->Template->get({file => "main.html", name => "input_number_form", variables => {
|
|
|
|
name => "ifn_count",
|
|
|
|
id => "ifn_count",
|
|
|
|
field => "#!string!striker_0011!#",
|
|
|
|
description => "#!string!striker_0012!#",
|
|
|
|
value => defined $an->data->{cgi}{ifn_count}{value} ? $an->data->{cgi}{ifn_count}{value} : "",
|
|
|
|
extra => "maxlength=\"2\"",
|
|
|
|
}});
|
|
|
|
$an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { say_ifn_count => $say_ifn_count }});
|
|
|
|
|
|
|
|
my $step1_body = $an->Template->get({file => "main.html", name => "config_step1", variables => {
|
|
|
|
step1_welcome_title_id => "",
|
|
|
|
step1_welcome_message_id => "",
|
|
|
|
organization_form => $say_organization,
|
|
|
|
prefix_form => $say_prefix,
|
|
|
|
domain_form => $say_domain,
|
|
|
|
sequence_form => $say_sequence,
|
|
|
|
ifn_count_form => $say_ifn_count,
|
|
|
|
cgi_list => "organization,prefix,domain,sequence,ifn_count",
|
|
|
|
}});
|
|
|
|
$an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { step1_body => $step1_body }});
|
|
|
|
|
|
|
|
return($step1_body);
|
|
|
|
}
|
|
|
|
|
|
|
|
# This reads the network status XML file and creates the template body.
|
|
|
|
sub get_network_details
|
|
|
|
{
|
|
|
|
my ($an) = @_;
|
|
|
|
|
|
|
|
my $file = $an->data->{path}{directories}{html}."/status/network.xml";
|
|
|
|
$an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { file => $file }});
|
|
|
|
my $xml = XML::Simple->new();
|
|
|
|
my $data = "";
|
|
|
|
my $network = "";
|
|
|
|
eval { $data = $xml->XMLin($file, KeyAttr => { interface => 'name', key => 'name' }, ForceArray => [ 'interface', 'key' ]) };
|
|
|
|
if ($@)
|
|
|
|
{
|
|
|
|
chomp $@;
|
|
|
|
my $error = "[ Error ] - The was a problem reading: [$file]. The error was:\n";
|
|
|
|
$error .= "===========================================================\n";
|
|
|
|
$error .= $@."\n";
|
|
|
|
$error .= "===========================================================\n";
|
|
|
|
$an->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", raw => $error});
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
my $interface_list = "";
|
|
|
|
$network = $an->Template->get({file => "main.html", name => "network_header"});
|
|
|
|
foreach my $interface (sort {$a cmp $b} keys %{$data->{interface}})
|
|
|
|
{
|
|
|
|
$interface_list .= "$interface,";
|
|
|
|
$network .= $an->Template->get({file => "main.html", name => "network_entry", variables => {
|
|
|
|
#mac => $data->{interface}{$interface}{mac},
|
|
|
|
mac => "",
|
|
|
|
mac_id => $interface."_mac",
|
|
|
|
name => $interface,
|
|
|
|
name_id => $interface."_name",
|
|
|
|
#speed => $data->{interface}{$interface}{speed},
|
|
|
|
speed => "",
|
|
|
|
speed_id => $interface."_speed",
|
|
|
|
#'link' => $data->{interface}{$interface}{'link'},
|
|
|
|
'link' => "",
|
|
|
|
link_id => $interface."_link",
|
|
|
|
}});
|
|
|
|
}
|
|
|
|
$interface_list =~ s/,$//;
|
|
|
|
$network .= $an->Template->get({file => "main.html", name => "network_footer", variables => { interface_list => $interface_list }});
|
|
|
|
}
|
|
|
|
|
|
|
|
$an->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { network => $network }});
|
|
|
|
return($network);
|
|
|
|
}
|