Frontend: Implement channel adding support

This commit is contained in:
2023-09-14 18:13:02 +02:00
parent d594c53e50
commit 61ea7c8eec
3 changed files with 152 additions and 18 deletions

View File

@@ -21,6 +21,7 @@ use frontend_session;
use logger;
use Digest::SHA;
use threads::shared;
use feature qw(switch);
use strict;
@@ -368,6 +369,73 @@ sub handlePath {
logger::createLogger($parameters{"name"}, $parameters{"address"}, $port, ());
return 1;
}
when("/manage_channel_action") {
if(!defined($aRequest->{"cookies"}{"session"}) || !frontend_session::isValidSession($aRequest->{"cookies"}{"session"})) {
frontend::redirect($aClient, "/");
return 1;
}
if(defined($aRequest->{"headers"}{"Content-Type"}) && $aRequest->{"headers"}{"Content-Type"} ne "application/x-www-form-urlencoded") {
frontend::sendBadRequest($aClient, "Unsupported form Content-Type (application/x-www-form-urlencoded required)");
return 1;
}
if(!defined($aRequest->{"content"})) {
frontend::sendBadRequest($aClient, "Request content required");
return 1;
}
my $session = $frontend_session::sessions{$aRequest->{"cookies"}{"session"}};
my $query = $aConnection->prepare(qq(select privileges from users where name=?;));
$query->execute($session->{"username"});
my @row = $query->fetchrow_array();
if($row[0]<2) {
frontend::sendForbidden($aClient, "Insufficient permissions to perform this operation");
return 1;
}
my %parameters = frontend::parsePathParameters($aRequest->{"content"});
if(!defined($parameters{"channel"})) {
frontend::sendBadRequest($aClient, "Channel name required");
return 1;
}
if(!defined($parameters{"server"})) {
frontend::sendBadRequest($aClient, "Server ID required");
return 1;
}
$query = $aConnection->prepare(qq(select name from servers where id=?;));
$query->execute($parameters{"server"});
@row = $query->fetchrow_array();
if(scalar(@row)==0) {
frontend::sendBadRequest($aClient, "Invalid server ID");
return 1;
}
my $serverName = $row[0];
$query = $aConnection->prepare(qq(select id from channels where name=? and server_id=?;));
$query->execute($parameters{"channel"}, $parameters{"server"});
@row = $query->fetchrow_array();
$parameters{"channel"}=~s/%23/#/;
if(scalar(@row)>0) {
frontend::sendConflict($aClient, "Channel $parameters{'channel'} already exists on server $serverName");
return 1;
}
$query = $aConnection->prepare(qq(select id from channels order by rowid desc limit 1;));
$query->execute();
@row = $query->fetchrow_array();
my $lastID = 0;
if(scalar(@row)>0) {
$lastID = $row[0]+1;
}
$query = $aConnection->prepare(qq(insert into channels values($lastID, ?, ?, 1);));
$query->execute($parameters{"server"}, $parameters{"channel"});
my $actionQueue = logger::getActionQueueByServerName($serverName);
push(@$actionQueue, "JOIN", $parameters{"channel"});
frontend::redirect($aClient, "/channel_added.html");
return 1;
}
when("/view_logs") {
my $channelID = $aRequest->{"path"}{"parameters"}{"channel"};
if(!defined($channelID)) {