diff --git a/frontend_routes.pm b/frontend_routes.pm
index 3726440..d792396 100644
--- a/frontend_routes.pm
+++ b/frontend_routes.pm
@@ -86,6 +86,21 @@ sub verifyChannelAccess {
return 1;
}
+sub enumerateServers {
+ my $aConnection = $_[0];
+
+ my $output = "";
+ return $output;
+}
+
sub enumerateChannels {
my $aConnection = $_[0];
@@ -129,13 +144,13 @@ sub handlePath {
$userbar.="";
}
- my $query = $aConnection->prepare(qq(select channels.id, channels.name, channels.enabled, servers.name from channels inner join servers on channels.server_id=servers.id where channels.public=1;));
+ my $query = $aConnection->prepare(qq(select channels.id, channels.name, channels.enabled, servers.name, servers.enabled from channels inner join servers on channels.server_id=servers.id where channels.public=1;));
$query->execute();
my $table = "";
while(my @row = $query->fetchrow_array()) {
my $channelID = $row[0];
my $channelName = $row[1];
- my $channelEnabled = $row[2];
+ my $channelEnabled = $row[2] && $row[4];
my $serverName = $row[3];
$channelName =~ s/%23/#/;
my $status = $channelEnabled?"Enabled":"Disabled";
@@ -159,12 +174,12 @@ sub handlePath {
}
while(@row = $query->fetchrow_array()) {
my $channelID = $row[0];
- my $channelQuery = $aConnection->prepare(qq(select channels.name, channels.enabled, servers.name from channels inner join servers on channels.server_id=servers.id where channels.id=$channelID;));
+ my $channelQuery = $aConnection->prepare(qq(select channels.name, channels.enabled, servers.name, servers.enabled from channels inner join servers on channels.server_id=servers.id where channels.id=$channelID;));
$channelQuery->execute();
@row = $channelQuery->fetchrow_array();
my $channelName = $row[0];
$channelName =~ s/%23/#/;
- my $channelEnabled = $row[1];
+ my $channelEnabled = $row[1] && $row[3];
my $serverName = $row[2];
my $status = $channelEnabled?"Enabled":"Disabled";
$privateChannels.="
$channelName | $serverName | $status |
";
@@ -274,6 +289,7 @@ sub handlePath {
}
my $addServer = "";
+ my $updateServer = "";
if($privileges==2) {
$addServer.="Add server
";
$addServer.="";
+ $updateServer.="Update server
";
+ $updateServer.="";
}
my $addChannel = "";
@@ -312,7 +334,15 @@ sub handlePath {
$updateChannel.="";
}
- frontend::sendTemplate("templates/panel.html", $aClient, {"username"=>$session->{"username"}, "manageChannelAccess"=>$manageChannelAccess, "addUser"=>$addUser, "addServer"=>$addServer, "addChannel"=>$addChannel, "updateChannel"=>$updateChannel});
+ frontend::sendTemplate("templates/panel.html", $aClient, {
+ "username"=>$session->{"username"},
+ "manageChannelAccess"=>$manageChannelAccess,
+ "addUser"=>$addUser,
+ "addServer"=>$addServer,
+ "updateServer"=>$updateServer,
+ "addChannel"=>$addChannel,
+ "updateChannel"=>$updateChannel
+ });
return 1;
}
when("/change_password_action") {
@@ -505,6 +535,47 @@ sub handlePath {
logger::createLogger($parameters{"name"}, $parameters{"address"}, $port, ());
return 1;
}
+ when("/update_server_action") {
+ if(!verifyRequestPrivileges($aRequest, $aClient, 2, $aConnection)) {
+ return 1;
+ }
+ my %parameters = frontend::parsePathParameters($aRequest->{"content"});
+ if(!defined($parameters{"server"}) || length($parameters{"server"})==0) {
+ frontend::sendBadRequest($aClient, "Server required");
+ return 1;
+ }
+ my $query = $aConnection->prepare(qq(select name, host, port, enabled from servers where id=?;));
+ $query->execute($parameters{"server"});
+ my @row = $query->fetchrow_array();
+ if(scalar(@row)==0) {
+ frontend::sendBadRequest($aClient, "Server with ID $parameters{'server'} doesn't exist");
+ return 1;
+ }
+ my $server = $row[0];
+ my $serverEnabled = $row[3];
+ if(defined($parameters{"enabled"}) && !$serverEnabled) {
+ my $host = $row[1];
+ my $port = $row[2];
+ $query = $aConnection->prepare(qq(select name, enabled from channels where server_id=?;));
+ $query->execute($parameters{"server"});
+ my @channels;
+ while(@row = $query->fetchrow_array()) {
+ if(!$row[1]) {
+ next;
+ }
+ push(@channels, $row[0]);
+ }
+ logger::createLogger($server, $host, $port, \@channels);
+ }
+ elsif($serverEnabled) {
+ my $actionQueue = logger::getActionQueueByServerName($server);
+ push(@$actionQueue, "QUIT");
+ }
+ $query = $aConnection->prepare(qq(update servers set enabled=? where id=?;));
+ $query->execute(defined($parameters{"enabled"})?1:0, $parameters{"server"});
+ frontend::redirect($aClient, "/server_updated.html");
+ return 1;
+ }
when("/add_channel_action") {
if(!verifyRequestPrivileges($aRequest, $aClient, 2, $aConnection)) {
return 1;
@@ -577,7 +648,6 @@ sub handlePath {
my $actionQueue = logger::getActionQueueByServerName($row[0]);
if(defined($parameters{"enabled"}) && !$channelEnabled) {
push(@$actionQueue, "JOIN", $channel);
- print("Joining\n");
}
elsif($channelEnabled) {
push(@$actionQueue, "PART", $channel);
diff --git a/logger.pm b/logger.pm
index b42ea99..d4233bd 100644
--- a/logger.pm
+++ b/logger.pm
@@ -361,6 +361,12 @@ sub partChannel {
$aStream->send(sprintf("PART %s\r\n", $aChannel));
}
+sub quitFromServer {
+ my $aStream = $_[0];
+
+ $aStream->send("QUIT\r\n");
+}
+
sub handleNames {
my $aCommand = $_[0];
my $aChannels = $_[1];
@@ -413,17 +419,22 @@ sub connectionWorker {
my $buffer = "";
my @actionQueue :shared;
+ my $running = 1;
my @connection :shared = ($aServerName, \@actionQueue);
push(@connections, \@connection);
my %logFiles;
while($running) {
my $stream = connectToServer($aHost, $aPort, $aServerName);
my $streamSelect = IO::Select->new($stream);
- while(!eof($stream)) {
+ while(!eof($stream) && $running) {
if(scalar(@actionQueue)>0) {
given($actionQueue[0]) {
when("JOIN") { joinChannel($stream, $actionQueue[1]); }
when("PART") { partChannel($stream, $actionQueue[1]); }
+ when("QUIT") {
+ quitFromServer($stream);
+ $running = 0;
+ }
}
@actionQueue = ();
}
@@ -460,6 +471,12 @@ sub connectionWorker {
}
close($stream);
}
+ foreach my $i (0..scalar(@connections)-1) {
+ if($connections[$i][0] eq $aServerName) {
+ $connections[$i][0] = "";
+ last;
+ }
+ }
}
sub createLogger {
diff --git a/static/server_updated.html b/static/server_updated.html
new file mode 100644
index 0000000..6b410f3
--- /dev/null
+++ b/static/server_updated.html
@@ -0,0 +1,10 @@
+
+
+
+ Server updated
+
+
+ Server successfully updated
+ Return to user panel
+
+
diff --git a/templates/panel.html b/templates/panel.html
index f5c1337..ea18388 100644
--- a/templates/panel.html
+++ b/templates/panel.html
@@ -15,6 +15,7 @@
{{manageChannelAccess}}
{{addUser}}
{{addServer}}
+ {{updateServer}}
{{addChannel}}
{{updateChannel}}