124 lines
1.9 KiB
Perl
124 lines
1.9 KiB
Perl
package cyberman::Domains;
|
|
|
|
use Dancer2 appname => "cyberman";
|
|
use Dancer2::Plugin::Database;
|
|
|
|
use cyberman::Helper;
|
|
|
|
get '/domains' => sub {
|
|
return auth_test() if auth_test();
|
|
|
|
my @domains = database->quick_select(
|
|
"domain",
|
|
{
|
|
"ownerid" => vars->{"auth"},
|
|
},
|
|
);
|
|
|
|
template 'domains' => {
|
|
"domains" => \@domains,
|
|
}
|
|
};
|
|
|
|
post '/domains/new' => sub {
|
|
return auth_test() if auth_test();
|
|
|
|
my %errs;
|
|
|
|
if (!param("name")) {
|
|
$errs{"e_no_name"} = 1;
|
|
}
|
|
|
|
my $name = lc param("name");
|
|
|
|
if (scalar(keys(%errs)) == 0) {
|
|
if (!check_name(param "name")) {
|
|
$errs{"e_chars"} = 1;
|
|
}
|
|
}
|
|
|
|
if (scalar(keys(%errs)) == 0) {
|
|
my $result = database->quick_select(
|
|
"domain",
|
|
{
|
|
"name" => param("name"),
|
|
},
|
|
);
|
|
|
|
if ($result) {
|
|
$errs{"e_exists"} = 1;
|
|
}
|
|
}
|
|
|
|
if (scalar(keys(%errs)) == 0) {
|
|
foreach my $disallowed (@{ config->{"reserved_domains"} }) {
|
|
if ($name eq $disallowed) {
|
|
$errs{"e_reserved"} = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (scalar(keys(%errs)) != 0) {
|
|
return template 'domains/new' => {
|
|
%errs,
|
|
error => 1,
|
|
};
|
|
}
|
|
|
|
database->quick_insert(
|
|
"domain",
|
|
{
|
|
"name" => $name,
|
|
"ownerid" => vars->{"auth"},
|
|
},
|
|
);
|
|
|
|
template 'redir' => {
|
|
"redir" => "../domains?new=$name",
|
|
};
|
|
};
|
|
|
|
get '/domains/:name/remove' => sub {
|
|
my $domain = database->quick_select(
|
|
"domain",
|
|
{
|
|
"name" => param("name"),
|
|
},
|
|
);
|
|
|
|
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
|
|
|
|
template 'domains/remove.tt' => {
|
|
"domain" => $domain,
|
|
};
|
|
};
|
|
|
|
post '/domains/:name/remove' => sub {
|
|
my $domain = database->quick_select(
|
|
"domain",
|
|
{
|
|
"name" => param("name"),
|
|
},
|
|
);
|
|
|
|
if (!$domain) {
|
|
# quick and dirty error that shouldn't really appear
|
|
return "No such domain!";
|
|
}
|
|
|
|
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
|
|
|
|
database->quick_delete(
|
|
"domain",
|
|
{
|
|
"name" => param("name"),
|
|
},
|
|
);
|
|
|
|
template redir => {
|
|
redir => "../../domains?removed=$domain->{name}",
|
|
};
|
|
};
|
|
|
|
true;
|