Skip to content
Snippets Groups Projects
Commit 47b6d585 authored by Nigel Kukard's avatar Nigel Kukard
Browse files

Added POST support to users add action

parent 599255fd
No related branches found
No related tags found
No related merge requests found
...@@ -31,6 +31,11 @@ our (@ISA,@EXPORT,@EXPORT_OK); ...@@ -31,6 +31,11 @@ our (@ISA,@EXPORT,@EXPORT_OK);
use DateTime; use DateTime;
use HTML::Entities;
use HTTP::Status qw( :constants );
use opentrafficshaper::utils;
# Sidebar menu options for this module # Sidebar menu options for this module
...@@ -48,12 +53,13 @@ my $menu = { ...@@ -48,12 +53,13 @@ my $menu = {
# Default page/action # Default page/action
sub default sub default
{ {
my ($globals,$module,$daction,$request) = @_; my ($kernel,$globals,$module,$daction,$request) = @_;
# If we not passed default by the main app, just return # If we not passed default by the main app, just return
return if ($daction ne "default"); return if ($daction ne "default");
# Build content # Build content
my $content = ""; my $content = "";
...@@ -120,40 +126,121 @@ EOF ...@@ -120,40 +126,121 @@ EOF
EOF EOF
return (200,$content,$menu); return (HTTP_OK,$content,$menu);
} }
# Add action # Add action
sub add sub add
{ {
my ($globals,$module,$daction,$request) = @_; my ($kernel,$globals,$module,$daction,$request) = @_;
# Errors to display
my @errors;
# Form items
my $params = {
'inputUsername' => undef,
'inputIP' => undef,
'inputLimitTx' => undef,
'inputLimitRx' => undef,
};
# If this is a form try parse it
if ($request->method eq "POST") {
# Parse form data
$params = parseFormContent($request->content);
# If user pressed cancel, redirect
if (defined($params->{'cancel'})) {
# Redirects to default page
return (HTTP_TEMPORARY_REDIRECT,'users');
}
# Check POST data
my $username;
if (!defined($username = isUsername($params->{'inputUsername'}))) {
push(@errors,"Username is not valid");
}
my $ipAddress;
if (!defined($ipAddress = isIP($params->{'inputIP'}))) {
push(@errors,"IP address is not valid");
}
my $trafficLimitTx;
if (!defined($trafficLimitTx = isNumber($params->{'inputLimitTx'}))) {
push(@errors,"Download limit is not valid");
}
my $trafficLimitRx;
if (!defined($trafficLimitRx = isNumber($params->{'inputLimitRx'}))) {
push(@errors,"Upload limit is not valid");
}
# If there are no errors we need to push this update
if (!@errors) {
# Build user
my $user = {
'Username' => $username,
'IP' => $ipAddress,
'GroupID' => 1,
'ClassID' => 1,
'TrafficLimitTx' => $trafficLimitTx,
'TrafficLimitRx' => $trafficLimitRx,
'TrafficLimitTxBurst' => $trafficLimitTx,
'TrafficLimitRxBurst' => $trafficLimitRx,
'Status' => "new",
'Source' => "plugin.webserver.users",
};
# Throw the change at the config manager
$kernel->post("configmanager" => "process_change" => $user);
print STDERR "[WEBSERVER/USERS/ADD] User: $username, IP: $ipAddress, Group: 1, Class: 2, ".
"Limits: ".prettyUndef($trafficLimitTx)."/".prettyUndef($trafficLimitRx).", Burst: ".prettyUndef($trafficLimitTx)."/".prettyUndef($trafficLimitRx) . "\n";
return (HTTP_TEMPORARY_REDIRECT,'users');
}
}
# Sanitize params if we need to
foreach my $item (keys %{$params}) {
$params->{$item} = defined($params->{$item}) ? encode_entities($params->{$item}) : "";
}
# Build content # Build content
my $content = ""; my $content = "";
# Header # Form header
$content .=<<EOF; $content .=<<EOF;
<form class="form-horizontal" method="post"> <form class="form-horizontal" method="post">
<legend>Add Manual User</legend> <legend>Add Manual User</legend>
EOF
# Spit out errors if we have any
if (@errors > 0) {
foreach my $error (@errors) {
$content .= '<div class="alert alert-error">'.$error.'</div>';
}
}
# Header
$content .=<<EOF;
<div class="control-group"> <div class="control-group">
<label class="control-label" for="inputUsername">Username</label> <label class="control-label" for="inputUsername">Username</label>
<div class="controls"> <div class="controls">
<input name="inputUsername" type="text" placeholder="Username"> <input name="inputUsername" type="text" placeholder="Username" value="$params->{'inputUsername'}" />
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label class="control-label" for="inputIP">IP Address</label> <label class="control-label" for="inputIP">IP Address</label>
<div class="controls"> <div class="controls">
<input name="inputIP" type="text" placeholder="IP Address"> <input name="inputIP" type="text" placeholder="IP Address" value="$params->{'inputIP'}" />
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label class="control-label" for="inputLimitTx">Download Limit</label> <label class="control-label" for="inputLimitTx">Download Limit</label>
<div class="controls"> <div class="controls">
<div class="input-append"> <div class="input-append">
<input name="inputLimitTx" type="text" class="span5" id="appendedInput" placeholder="TX Limit"> <input name="inputLimitTx" type="text" class="span5" placeholder="TX Limit" value="$params->{'inputLimitTx'}" />
<span class="add-on">Kbps<span> <span class="add-on">Kbps<span>
</div> </div>
</div> </div>
...@@ -162,7 +249,7 @@ sub add ...@@ -162,7 +249,7 @@ sub add
<label class="control-label" for="inputLimitRx">Upload Limit</label> <label class="control-label" for="inputLimitRx">Upload Limit</label>
<div class="controls"> <div class="controls">
<div class="input-append"> <div class="input-append">
<input name="inputLimitRx" type="text" class="span5" id="appendedInput" placeholder="RX Limit"> <input name="inputLimitRx" type="text" class="span5" placeholder="RX Limit" value="$params->{'inputLimitRx'}" />
<span class="add-on">Kbps<span> <span class="add-on">Kbps<span>
</div> </div>
</div> </div>
...@@ -170,7 +257,7 @@ sub add ...@@ -170,7 +257,7 @@ sub add
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<button type="submit" class="btn btn-primary">Add</button> <button type="submit" class="btn btn-primary">Add</button>
<button type="submit" class="btn">Cancel</button> <button name="cancel" type="submit" class="btn">Cancel</button>
</div> </div>
</div> </div>
</form> </form>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment