175 lines
3.5 KiB
Perl
175 lines
3.5 KiB
Perl
package cyberman::Records;
|
|
|
|
use Dancer2 appname => "cyberman";
|
|
use Dancer2::Plugin::Database;
|
|
use Switch;
|
|
|
|
use cyberman::Helper;
|
|
|
|
get '/domains/:name/records' => sub {
|
|
my $domain = database->quick_select(
|
|
"domain",
|
|
{
|
|
"name" => param("name"),
|
|
},
|
|
);
|
|
|
|
if (!$domain) {
|
|
return "No such domain!";
|
|
}
|
|
|
|
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
|
|
|
|
my @records = database->quick_select(
|
|
"record",
|
|
{
|
|
"domainid" => $domain->{"id"},
|
|
},
|
|
);
|
|
|
|
template 'records' => {
|
|
domain => $domain,
|
|
records => \@records,
|
|
};
|
|
};
|
|
|
|
get '/domains/:name/records/add' => sub {
|
|
my $domain = database->quick_select(
|
|
"domain",
|
|
{
|
|
"name" => param("name"),
|
|
},
|
|
);
|
|
|
|
if (!$domain) {
|
|
return "No such domain!";
|
|
}
|
|
|
|
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
|
|
|
|
template 'records/add' => {
|
|
domain => $domain,
|
|
};
|
|
};
|
|
|
|
post '/domains/:name/records/add' => sub {
|
|
my $domain = database->quick_select(
|
|
"domain",
|
|
{
|
|
"name" => param("name"),
|
|
},
|
|
);
|
|
|
|
if (!$domain) {
|
|
return "No such domain!";
|
|
}
|
|
|
|
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
|
|
|
|
my %errs;
|
|
|
|
# tw overuse of regex
|
|
|
|
switch (param("type")) {
|
|
case "A" {
|
|
if (param("value") !~ m/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}$/) {
|
|
# here we go...
|
|
$errs{"e_bad_value"} = 1;
|
|
}
|
|
}
|
|
case "AAAA" {
|
|
if (param("value") !~ m/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/) {
|
|
# I am sorry
|
|
$errs{"e_bad_value"} = 1;
|
|
}
|
|
}
|
|
case "NS" {
|
|
if (param("value") !~ m/^([a-zA-Z0-9]([a-zA-Z0-9-_]*[a-zA-Z0-9])?\.)+$/) {
|
|
$errs{"e_bad_value"} = 1;
|
|
}
|
|
}
|
|
else {
|
|
$errs{"e_bad_type"} = 1;
|
|
}
|
|
}
|
|
|
|
if (param("rname") !~ m/^(@|([a-zA-Z0-9]([a-zA-Z0-9-_]*[a-zA-Z0-9])?\.)*[a-zA-Z0-9]([a-zA-Z0-9-_]*[a-zA-Z0-9])?)$/) {
|
|
$errs{"e_bad_name"} = 1;
|
|
}
|
|
|
|
if (scalar(keys(%errs)) != 0) {
|
|
return template 'records/add' => {
|
|
domain => $domain,
|
|
%errs,
|
|
error => 1,
|
|
};
|
|
}
|
|
|
|
my $sid = $domain->{"lastsid"} + 1;
|
|
database->quick_update(
|
|
"domain",
|
|
{
|
|
"id" => $domain->{"id"},
|
|
},
|
|
{
|
|
"lastsid" => $sid,
|
|
},
|
|
);
|
|
|
|
database->quick_insert(
|
|
"record",
|
|
{
|
|
"sid" => $sid,
|
|
"domainid" => $domain->{"id"},
|
|
"type" => param("type"),
|
|
"name" => param("rname"),
|
|
"value" => param("value"),
|
|
},
|
|
);
|
|
|
|
template 'redir' => {
|
|
"redir" => "../records?added=1",
|
|
};
|
|
};
|
|
|
|
post '/domains/:name/records/:sid/remove' => sub {
|
|
my $domain = database->quick_select(
|
|
"domain",
|
|
{
|
|
"name" => param("name"),
|
|
},
|
|
);
|
|
|
|
if (!$domain) {
|
|
return "No such domain!";
|
|
}
|
|
|
|
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
|
|
|
|
my $record = database->quick_select(
|
|
"record",
|
|
{
|
|
"domainid" => $domain->{"id"},
|
|
"sid" => param("sid"),
|
|
},
|
|
);
|
|
|
|
if (!$record) {
|
|
return "No such record!";
|
|
}
|
|
|
|
database->quick_delete(
|
|
"record",
|
|
{
|
|
"domainid" => $domain->{"id"},
|
|
"sid" => param("sid"),
|
|
},
|
|
);
|
|
|
|
template 'redir' => {
|
|
"redir" => "../../records?removed=1",
|
|
};
|
|
};
|
|
|
|
true;
|