Indentation cleanup (switch to tabs)

This commit is contained in:
Al Beano 2017-08-19 23:45:25 +01:00
parent f3632b24ca
commit f97a931d13
29 changed files with 1211 additions and 1211 deletions

View File

@ -9,8 +9,8 @@ use cyberman;
use Plack::Builder;
builder {
enable "Deflater";
enable "Session";
enable "CSRFBlock";
cyberman->to_app;
enable "Deflater";
enable "Session";
enable "CSRFBlock";
cyberman->to_app;
}

View File

@ -37,12 +37,12 @@ say $out <<'END';
END
if ($conf->{"include"}->{"enabled"}) {
say $out "\$INCLUDE $conf->{include}->{file}";
say $out "\$INCLUDE $conf->{include}->{file}";
}
# Time to get the records
die "Unsupported database!"
unless $yml->[0]->{"plugins"}->{"Database"}->{"driver"} eq "SQLite";
unless $yml->[0]->{"plugins"}->{"Database"}->{"driver"} eq "SQLite";
my $dbfile = "$Bin/../$yml->[0]->{plugins}->{Database}->{dbname}";
my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile", "", "");
@ -50,24 +50,24 @@ my $sth = $dbh->prepare("SELECT * FROM record");
$sth->execute;
while (my $r = $sth->fetchrow_hashref) {
# Look up domain
my $dsth = $dbh->prepare("select * from domain where id=?");
$dsth->bind_param(1, $r->{"domainid"});
$dsth->execute;
my $d = $dsth->fetchrow_hashref;
# Look up domain
my $dsth = $dbh->prepare("select * from domain where id=?");
$dsth->bind_param(1, $r->{"domainid"});
$dsth->execute;
my $d = $dsth->fetchrow_hashref;
# domain name
if ($r->{"name"} eq '@') {
print $out $d->{"name"}, " ";
} else {
print $out $r->{"name"}, ".", $d->{"name"}, " ";
}
# domain name
if ($r->{"name"} eq '@') {
print $out $d->{"name"}, " ";
} else {
print $out $r->{"name"}, ".", $d->{"name"}, " ";
}
# record type
print $out "IN $r->{type} ";
# record type
print $out "IN $r->{type} ";
# value
say $out $r->{value};
# value
say $out $r->{value};
}
close $out;

View File

@ -21,6 +21,6 @@ requires "Plack::Middleware::Session" => "0";
requires "Plack::Middleware::CSRFBlock" => "0";
on "test" => sub {
requires "Test::More" => "0";
requires "HTTP::Request::Common" => "0";
requires "Test::More" => "0";
requires "HTTP::Request::Common" => "0";
};

View File

@ -1,6 +1,6 @@
create table cyberman (
id integer primary key,
dbrev integer not null
id integer primary key,
dbrev integer not null
);
insert into cyberman (dbrev) values (2);

View File

@ -14,57 +14,57 @@ use cyberman::Forgot;
# Index route, hook and helper functions for authentication
sub get_auth {
my $uid = shift;
my $token = shift;
my $uid = shift;
my $token = shift;
my $result = database->quick_select("session", {"uid" => $uid, "token" => $token});
if ($result) {
return $uid;
} else {
return 0;
}
my $result = database->quick_select("session", {"uid" => $uid, "token" => $token});
if ($result) {
return $uid;
} else {
return 0;
}
}
hook 'before' => sub {
sub cookieval {
my $name = shift;
my $cookie = cookie($name);
if ($cookie) {
return $cookie->value;
} else {
return undef;
}
}
my $uid = cookieval("id");
my $token = cookieval("token");
my $auth = 0;
my $email;
if ($uid && $token) {
$auth = get_auth($uid, $token);
$email = database->quick_lookup(
"user",
{
"id" => $uid,
},
"email",
);
}
sub cookieval {
my $name = shift;
my $cookie = cookie($name);
if ($cookie) {
return $cookie->value;
} else {
return undef;
}
}
var auth => $auth;
var email => $email;
var config => config();
my $uid = cookieval("id");
my $token = cookieval("token");
my $auth = 0;
my $email;
if ($uid && $token) {
$auth = get_auth($uid, $token);
$email = database->quick_lookup(
"user",
{
"id" => $uid,
},
"email",
);
}
var auth => $auth;
var email => $email;
var config => config();
};
get qr{^/(index)?$} => sub {
if (!vars->{auth}) {
return template 'index';
}
if (!vars->{auth}) {
return template 'index';
}
template 'redir' => {
"redir" => "domains",
};
template 'redir' => {
"redir" => "domains",
};
};
true;

View File

@ -5,29 +5,29 @@ use Dancer2::Plugin::Database;
use cyberman::Helper;
get '/api/check_availability' => sub {
# No auth req'd
# returns 'y' or 'n'
# No auth req'd
# returns 'y' or 'n'
if (!param("name")) {
return "n";
}
if (!param("name")) {
return "n";
}
if (!check_name(param "name")) {
return "n";
}
if (!check_name(param "name")) {
return "n";
}
my $result = database->quick_select(
"domain",
{
"name" => param("name"),
}
);
my $result = database->quick_select(
"domain",
{
"name" => param("name"),
}
);
if ($result) {
return "n";
} else {
return "y";
}
if ($result) {
return "n";
} else {
return "y";
}
};
true;

View File

@ -6,159 +6,159 @@ use URI::Escape;
use cyberman::Helper;
get '/account' => sub {
return auth_test() if auth_test();
return auth_test() if auth_test();
my $user = database->quick_select(
"user",
{
"id" => vars->{"auth"},
},
);
my $user = database->quick_select(
"user",
{
"id" => vars->{"auth"},
},
);
template 'account' => {
"user" => $user,
};
template 'account' => {
"user" => $user,
};
};
post '/account' => sub {
return auth_test() if auth_test();
return auth_test() if auth_test();
my %errs;
my $new_pass = 0;
my %errs;
my $new_pass = 0;
my $user = database->quick_select (
"user",
{
"id" => vars->{"auth"},
}
);
my $user = database->quick_select (
"user",
{
"id" => vars->{"auth"},
}
);
if (!param("email")) {
$errs{"e_no_email"} = 1;
}
if (!param("email")) {
$errs{"e_no_email"} = 1;
}
if (param("email") ne $user->{"email"}) {
my $result = database->quick_select (
"user",
{
"email" => param("email"),
},
);
if ($result) {
$errs{"e_email_exists"} = 1;
}
}
if (param("email") ne $user->{"email"}) {
my $result = database->quick_select (
"user",
{
"email" => param("email"),
},
);
if (param("password") || param("npassword") || param("npassword2")) {
$new_pass = 1;
if ($result) {
$errs{"e_email_exists"} = 1;
}
}
my ($o_hash, $o_salt) = hash_password(param("password"), $user->{"salt"});
if ($o_hash ne $user->{"password"}) {
$errs{"e_wrong_pass"} = 1;
}
if (param("password") || param("npassword") || param("npassword2")) {
$new_pass = 1;
if (param "npassword" ne param "npassword2") {
$errs{"e_pass_mismatch"} = 1;
} elsif (length(param "npassword") < 8) {
$errs{"e_pass_len"} = 1;
}
}
my ($o_hash, $o_salt) = hash_password(param("password"), $user->{"salt"});
if ($o_hash ne $user->{"password"}) {
$errs{"e_wrong_pass"} = 1;
}
if (scalar(keys %errs) != 0) {
return template 'account' => {
"user" => $user,
error => 1,
%errs,
};
}
if (param "npassword" ne param "npassword2") {
$errs{"e_pass_mismatch"} = 1;
} elsif (length(param "npassword") < 8) {
$errs{"e_pass_len"} = 1;
}
}
if (param("email") ne $user->{"email"}) {
my $conftoken = randstring(16);
if (scalar(keys %errs) != 0) {
return template 'account' => {
"user" => $user,
error => 1,
%errs,
};
}
database->quick_update (
"user",
{
"id" => vars->{"auth"},
},
{
"newemail" => param("email"),
"conftoken" => $conftoken,
},
);
if (param("email") ne $user->{"email"}) {
my $conftoken = randstring(16);
my $email = template 'email/update' => {
"link" => config->{"mail"}->{"baseurl"} . "/confirm_update?o=" . uri_escape($user->{"email"}) . "&n=" . uri_escape(param "email") . "&t=$conftoken",
},
{
"layout" => undef,
};
send_email(param("email"), $email);
}
database->quick_update (
"user",
{
"id" => vars->{"auth"},
},
{
"newemail" => param("email"),
"conftoken" => $conftoken,
},
);
if ($new_pass) {
my ($hash, $salt) = hash_password(param "npassword");
database->quick_update (
"user",
{
"id" => vars->{"auth"},
},
{
"password" => $hash,
"salt" => $salt,
},
);
my $email = template 'email/update' => {
"link" => config->{"mail"}->{"baseurl"} . "/confirm_update?o=" . uri_escape($user->{"email"}) . "&n=" . uri_escape(param "email") . "&t=$conftoken",
},
{
"layout" => undef,
};
send_email(param("email"), $email);
}
database->quick_delete (
"session",
{
"uid" => vars->{"auth"},
},
);
if ($new_pass) {
my ($hash, $salt) = hash_password(param "npassword");
database->quick_update (
"user",
{
"id" => vars->{"auth"},
},
{
"password" => $hash,
"salt" => $salt,
},
);
return template 'redir' => {
"redir" => "login?pwchange=1",
};
}
database->quick_delete (
"session",
{
"uid" => vars->{"auth"},
},
);
$user = database->quick_select (
"user",
{
"id" => vars->{"auth"},
},
);
return template 'redir' => {
"redir" => "login?pwchange=1",
};
}
template 'account' => {
updated => 1,
user => $user,
};
$user = database->quick_select (
"user",
{
"id" => vars->{"auth"},
},
);
template 'account' => {
updated => 1,
user => $user,
};
};
get '/confirm_update' => sub {
my $user = database->quick_select(
"user",
{
"email" => param("o"),
"newemail" => param("n"),
"conftoken" => param("t"),
},
);
my $user = database->quick_select(
"user",
{
"email" => param("o"),
"newemail" => param("n"),
"conftoken" => param("t"),
},
);
if (!$user) {
return "No such user/token!";
}
if (!$user) {
return "No such user/token!";
}
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"email" => param("n"),
},
);
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"email" => param("n"),
},
);
template 'confirmed';
template 'confirmed';
};
true;

View File

@ -10,153 +10,153 @@ use cyberman::Helper;
# Hooks and helper functions for authentication are in cyberman.pm
post '/register' => sub {
my %errs;
my %errs;
for my $param ("password", "password2", "email") {
if (!param($param)) {
$errs{"e_no_$param"} = 1;
}
}
for my $param ("password", "password2", "email") {
if (!param($param)) {
$errs{"e_no_$param"} = 1;
}
}
my $result = database->quick_select(
"user",
{
"email" => param("email"),
},
);
my $result = database->quick_select(
"user",
{
"email" => param("email"),
},
);
if ($result) {
$errs{"e_email_exists"} = 1;
}
if ($result) {
$errs{"e_email_exists"} = 1;
}
if (!exists $errs{"e_no_password"} || !exists $errs{"e_no_password2"}) {
if (param("password") ne param("password2")) {
$errs{"e_pass_match"} = 1;
}
if (!exists $errs{"e_no_password"} || !exists $errs{"e_no_password2"}) {
if (param("password") ne param("password2")) {
$errs{"e_pass_match"} = 1;
}
if (length param("password") < 8) {
$errs{"e_pass_len"} = 1;
}
}
if (length param("password") < 8) {
$errs{"e_pass_len"} = 1;
}
}
if (scalar(keys(%errs)) != 0) {
return template 'register' => {
error => 1,
%errs,
};
}
if (scalar(keys(%errs)) != 0) {
return template 'register' => {
error => 1,
%errs,
};
}
my ($hash, $salt) = hash_password(param("password"));
my $conftoken = randstring(16);
my ($hash, $salt) = hash_password(param("password"));
my $conftoken = randstring(16);
# Create the account in the database
database->quick_insert(
"user",
{
"email" => param("email"),
"password" => $hash,
"salt" => $salt,
"conftoken" => $conftoken,
},
);
# Create the account in the database
database->quick_insert(
"user",
{
"email" => param("email"),
"password" => $hash,
"salt" => $salt,
"conftoken" => $conftoken,
},
);
# Send email
my $email = template 'email/registration' => {
"link" => config->{"mail"}->{"baseurl"} . "/confirm_new?e=" . uri_escape(param "email") . "&t=$conftoken",
},
{
"layout" => undef,
};
send_email(param("email"), $email);
# Send email
my $email = template 'email/registration' => {
"link" => config->{"mail"}->{"baseurl"} . "/confirm_new?e=" . uri_escape(param "email") . "&t=$conftoken",
},
{
"layout" => undef,
};
send_email(param("email"), $email);
template 'login' => {
account_created => 1,
};
template 'login' => {
account_created => 1,
};
};
post '/login' => sub {
my %errs;
my %errs;
my $user = database->quick_select(
"user",
{
"email" => param("email"),
},
);
my $user = database->quick_select(
"user",
{
"email" => param("email"),
},
);
if (!$user) {
$errs{"e_no_user"} = 1;
}
if (!$user) {
$errs{"e_no_user"} = 1;
}
if (scalar(keys(%errs)) == 0) {
my ($hash, $salt) = hash_password(param("password"), $user->{"salt"});
$errs{"e_pass"} = 1 unless $hash eq $user->{"password"};
}
if (scalar(keys(%errs)) == 0) {
my ($hash, $salt) = hash_password(param("password"), $user->{"salt"});
$errs{"e_pass"} = 1 unless $hash eq $user->{"password"};
}
if (scalar(keys(%errs)) == 0) {
$errs{"e_not_confirmed"} = 1 unless $user->{"active"};
}
if (scalar(keys(%errs)) == 0) {
$errs{"e_not_confirmed"} = 1 unless $user->{"active"};
}
if (scalar(keys(%errs)) != 0) {
return template 'login' => {
error => 1,
%errs,
};
}
if (scalar(keys(%errs)) != 0) {
return template 'login' => {
error => 1,
%errs,
};
}
# checks finished, we can create a session now
# checks finished, we can create a session now
my $token = randstring(32);
my $token = randstring(32);
database->quick_insert(
"session",
{
"token" => $token,
"uid" => $user->{"id"},
"since" => time,
},
);
database->quick_insert(
"session",
{
"token" => $token,
"uid" => $user->{"id"},
"since" => time,
},
);
cookie id => $user->{"id"}, http_only => 1;
cookie token => $token, http_only => 1;
cookie id => $user->{"id"}, http_only => 1;
cookie token => $token, http_only => 1;
template 'redir' => {
"redir" => "domains",
};
template 'redir' => {
"redir" => "domains",
};
};
get '/confirm_new' => sub {
my $user = database->quick_select(
"user",
{
"email" => param("e"),
"conftoken" => param("t"),
},
);
my $user = database->quick_select(
"user",
{
"email" => param("e"),
"conftoken" => param("t"),
},
);
if (!$user) {
return "No such user/token!";
}
if (!$user) {
return "No such user/token!";
}
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"active" => 1,
},
);
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"active" => 1,
},
);
template 'confirmed';
template 'confirmed';
};
post '/logout' => sub {
cookie 'id' => undef;
cookie 'token' => undef;
template 'redir' => {
"redir" => "index",
};
cookie 'id' => undef;
cookie 'token' => undef;
template 'redir' => {
"redir" => "index",
};
};
true;

View File

@ -6,118 +6,118 @@ use Dancer2::Plugin::Database;
use cyberman::Helper;
get '/domains' => sub {
return auth_test() if auth_test();
return auth_test() if auth_test();
my @domains = database->quick_select(
"domain",
{
"ownerid" => vars->{"auth"},
},
);
my @domains = database->quick_select(
"domain",
{
"ownerid" => vars->{"auth"},
},
);
template 'domains' => {
"domains" => \@domains,
}
template 'domains' => {
"domains" => \@domains,
}
};
post '/domains/new' => sub {
return auth_test() if auth_test();
return auth_test() if auth_test();
my %errs;
my %errs;
if (!param("name")) {
$errs{"e_no_name"} = 1;
}
if (!param("name")) {
$errs{"e_no_name"} = 1;
}
my $name = lc param("name");
my $name = lc param("name");
if (scalar(keys(%errs)) == 0) {
if (!check_name(param "name")) {
$errs{"e_chars"} = 1;
}
}
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 (scalar(keys(%errs)) == 0) {
my $result = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
if ($result) {
$errs{"e_exists"} = 1;
}
}
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) {
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,
};
}
if (scalar(keys(%errs)) != 0) {
return template 'domains/new' => {
%errs,
error => 1,
};
}
database->quick_insert(
"domain",
{
"name" => $name,
"ownerid" => vars->{"auth"},
},
);
database->quick_insert(
"domain",
{
"name" => $name,
"ownerid" => vars->{"auth"},
},
);
template 'redir' => {
"redir" => "../domains?new=$name",
};
template 'redir' => {
"redir" => "../domains?new=$name",
};
};
get '/domains/:name/remove' => sub {
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
template 'domains/remove.tt' => {
"domain" => $domain,
};
template 'domains/remove.tt' => {
"domain" => $domain,
};
};
post '/domains/:name/remove' => sub {
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
if (!$domain) {
# quick and dirty error that shouldn't really appear
return "No such domain!";
}
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"});
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
database->quick_delete(
"domain",
{
"name" => param("name"),
},
);
database->quick_delete(
"domain",
{
"name" => param("name"),
},
);
template redir => {
redir => "../../domains?removed=$domain->{name}",
};
template redir => {
redir => "../../domains?removed=$domain->{name}",
};
};
true;

View File

@ -7,111 +7,111 @@ use URI::Escape;
use cyberman::Helper;
post '/forgot' => sub {
my $user = database->quick_select(
"user",
{
"email" => param("email"),
},
);
my $user = database->quick_select(
"user",
{
"email" => param("email"),
},
);
if (!$user) {
return template 'forgot' => {
err => 1,
e_no_user => 1,
};
}
if (!$user) {
return template 'forgot' => {
err => 1,
e_no_user => 1,
};
}
my $token = randstring(32);
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"recoverytoken" => $token,
},
);
my $token = randstring(32);
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"recoverytoken" => $token,
},
);
my $email = template 'email/forgot' => {
"link" => config->{"mail"}->{"baseurl"} . "/confirm_forgot?e=" . uri_escape(param("email")) . "&t=$token",
},
{
"layout" => undef,
};
send_email(param("email"), $email);
my $email = template 'email/forgot' => {
"link" => config->{"mail"}->{"baseurl"} . "/confirm_forgot?e=" . uri_escape(param("email")) . "&t=$token",
},
{
"layout" => undef,
};
send_email(param("email"), $email);
template 'forgot' => {
success => 1,
};
template 'forgot' => {
success => 1,
};
};
post '/confirm_forgot' => sub {
my %errs;
my %errs;
if (!param("e") || !param("t")) {
$errs{"e_bad_link"} = 1;
} elsif (!param("password")) {
$errs{"e_no_pass"} = 1;
} elsif (length(param("password")) < 8) {
$errs{"e_pass_len"} = 1;
} elsif (param("password") ne param("password2")) {
$errs{"e_pass_mismatch"} = 1;
}
if (!param("e") || !param("t")) {
$errs{"e_bad_link"} = 1;
} elsif (!param("password")) {
$errs{"e_no_pass"} = 1;
} elsif (length(param("password")) < 8) {
$errs{"e_pass_len"} = 1;
} elsif (param("password") ne param("password2")) {
$errs{"e_pass_mismatch"} = 1;
}
if (scalar(keys(%errs)) == 0) {
my $user = database->quick_select(
"user",
{
"email" => param("e"),
"recoverytoken" => param("t"),
},
);
if (scalar(keys(%errs)) == 0) {
my $user = database->quick_select(
"user",
{
"email" => param("e"),
"recoverytoken" => param("t"),
},
);
if (!$user) {
$errs{"e_bad_link"} = 1;
} else {
# Update the password
my ($hash, $salt) = hash_password(param "password");
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"password" => $hash,
"salt" => $salt,
},
);
if (!$user) {
$errs{"e_bad_link"} = 1;
} else {
# Update the password
my ($hash, $salt) = hash_password(param "password");
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"password" => $hash,
"salt" => $salt,
},
);
database->quick_delete(
"session",
{
"uid" => $user->{"id"},
},
);
database->quick_delete(
"session",
{
"uid" => $user->{"id"},
},
);
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"recoverytoken" => "",
},
);
}
}
database->quick_update(
"user",
{
"id" => $user->{"id"},
},
{
"recoverytoken" => "",
},
);
}
}
if (scalar(keys(%errs)) != 0) {
return template 'confirm_forgot' => {
"err" => 1,
%errs,
};
}
if (scalar(keys(%errs)) != 0) {
return template 'confirm_forgot' => {
"err" => 1,
%errs,
};
}
template 'redir' => {
"redir" => "login?pwchange=1",
};
template 'redir' => {
"redir" => "login?pwchange=1",
};
};
true;

View File

@ -15,80 +15,80 @@ our @EXPORT = qw(auth_test randstring hash_password check_name send_email);
# Helper functions
sub auth_test {
my $id = undef;
if (@_) {
$id = shift;
}
my $id = undef;
if (@_) {
$id = shift;
}
if (!vars->{"auth"}) {
return template 'redir' => {
"redir" => "/index",
};
} elsif ($id && vars->{"auth"} != $id) {
return template 'redir' => {
"redir" => "/index",
};
} else {
return 0; # nothing to be returned, route can continue
}
if (!vars->{"auth"}) {
return template 'redir' => {
"redir" => "/index",
};
} elsif ($id && vars->{"auth"} != $id) {
return template 'redir' => {
"redir" => "/index",
};
} else {
return 0; # nothing to be returned, route can continue
}
}
sub randstring {
my $len = shift;
my $len = shift;
my @chars = (0..9, "a".."z", "A".."Z");
my $ret;
my @chars = (0..9, "a".."z", "A".."Z");
my $ret;
for (1..$len) {
$ret .= $chars[irand(scalar(@chars))];
}
return $ret;
for (1..$len) {
$ret .= $chars[irand(scalar(@chars))];
}
return $ret;
}
sub hash_password {
my $plaintext = shift;
my $plaintext = shift;
my $salt;
if (scalar(@_) > 0) {
$salt = shift;
} else {
$salt = randstring(16);
}
my $salt;
if (scalar(@_) > 0) {
$salt = shift;
} else {
$salt = randstring(16);
}
my $b = new Digest::Bcrypt;
$b->cost(8);
$b->salt($salt);
$b->add($plaintext);
my $b = new Digest::Bcrypt;
$b->cost(8);
$b->salt($salt);
$b->add($plaintext);
return ($b->bcrypt_b64digest, $salt);
return ($b->bcrypt_b64digest, $salt);
}
sub check_name {
my $name = shift;
if ($name =~ m/^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$/) {
return 1;
} else {
return 0;
}
my $name = shift;
if ($name =~ m/^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$/) {
return 1;
} else {
return 0;
}
}
sub send_email {
my $addy = shift;
my $body = shift;
my $addy = shift;
my $body = shift;
# TODO: this function is quick and dirty to get this
# online - it needs to be rewritten so it doesn't block the thread!!
# TODO: this function is quick and dirty to get this
# online - it needs to be rewritten so it doesn't block the thread!!
my $email = Email::Simple->create(
header => [
To => $addy,
From => config->{"mail"}->{"from"},
Subject => "Confirm your email address",
],
body => $body,
);
my $email = Email::Simple->create(
header => [
To => $addy,
From => config->{"mail"}->{"from"},
Subject => "Confirm your email address",
],
body => $body,
);
sendmail($email) if config->{"mail"}->{"enabled"};
sendmail($email) if config->{"mail"}->{"enabled"};
}
1;

View File

@ -7,168 +7,168 @@ use Switch;
use cyberman::Helper;
get '/domains/:name/records' => sub {
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
if (!$domain) {
return "No such domain!";
}
if (!$domain) {
return "No such domain!";
}
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
my @records = database->quick_select(
"record",
{
"domainid" => $domain->{"id"},
},
);
my @records = database->quick_select(
"record",
{
"domainid" => $domain->{"id"},
},
);
template 'records' => {
domain => $domain,
records => \@records,
};
template 'records' => {
domain => $domain,
records => \@records,
};
};
get '/domains/:name/records/add' => sub {
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
if (!$domain) {
return "No such domain!";
}
if (!$domain) {
return "No such domain!";
}
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
template 'records/add' => {
domain => $domain,
};
template 'records/add' => {
domain => $domain,
};
};
post '/domains/:name/records/add' => sub {
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
if (!$domain) {
return "No such domain!";
}
if (!$domain) {
return "No such domain!";
}
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
my %errs;
my %errs;
# tw overuse of regex
# 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;
}
}
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 (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,
};
}
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,
},
);
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"),
},
);
database->quick_insert(
"record",
{
"sid" => $sid,
"domainid" => $domain->{"id"},
"type" => param("type"),
"name" => param("rname"),
"value" => param("value"),
},
);
template 'redir' => {
"redir" => "../records?added=1",
};
template 'redir' => {
"redir" => "../records?added=1",
};
};
post '/domains/:name/records/:sid/remove' => sub {
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
my $domain = database->quick_select(
"domain",
{
"name" => param("name"),
},
);
if (!$domain) {
return "No such domain!";
}
if (!$domain) {
return "No such domain!";
}
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
return auth_test($domain->{"ownerid"}) if auth_test($domain->{"ownerid"});
my $record = database->quick_select(
"record",
{
"domainid" => $domain->{"id"},
"sid" => param("sid"),
},
);
my $record = database->quick_select(
"record",
{
"domainid" => $domain->{"id"},
"sid" => param("sid"),
},
);
if (!$record) {
return "No such record!";
}
if (!$record) {
return "No such record!";
}
database->quick_delete(
"record",
{
"domainid" => $domain->{"id"},
"sid" => param("sid"),
},
);
database->quick_delete(
"record",
{
"domainid" => $domain->{"id"},
"sid" => param("sid"),
},
);
template 'redir' => {
"redir" => "../../records?removed=1",
};
template 'redir' => {
"redir" => "../../records?removed=1",
};
};
true;

View File

@ -1,55 +1,55 @@
* {
margin: 0;
margin: 0;
}
body, a {
background-color: black;
font-family: monospace;
color: white;
font-size: 14px;
line-height: 1.6em;
background-color: black;
font-family: monospace;
color: white;
font-size: 14px;
line-height: 1.6em;
}
p {
margin-bottom: 0.8em;
margin-bottom: 0.8em;
}
.body {
max-width: 700px;
margin-left: auto;
margin-right: auto;
max-width: 700px;
margin-left: auto;
margin-right: auto;
}
.toolbar {
border: 1px solid white;
border: 1px solid white;
}
a.bracketButton {
text-decoration: none;
text-decoration: none;
}
a.bracketButton:hover {
text-decoration: underline;
text-decoration: underline;
}
button.textButton {
background: none !important;
color: inherit;
border: none;
padding: 0 !important;
font: inherit;
cursor: pointer;
background: none !important;
color: inherit;
border: none;
padding: 0 !important;
font: inherit;
cursor: pointer;
}
button.textButton:hover {
text-decoration: underline;
text-decoration: underline;
}
form.login>table>tbody>tr>td>label {
margin-right: 10px;
margin-right: 10px;
}
table.domains {
width: 100%;
width: 100%;
}
table.domains td:first-child {
width: 50%;
width: 50%;
}
.msgBox {
border: 1px solid white;
display: inline-block;
padding: 10px;
border: 1px solid white;
display: inline-block;
padding: 10px;
}

View File

@ -1,23 +1,23 @@
function updateAvailability() {
if (this.responseText === "y") {
document.getElementById("avail").innerHTML = "Available!";
} else {
document.getElementById("avail").innerHTML = "Not available";
}
if (this.responseText === "y") {
document.getElementById("avail").innerHTML = "Available!";
} else {
document.getElementById("avail").innerHTML = "Not available";
}
}
function checkAvailability() {
var name = document.getElementById("name").value;
var name = document.getElementById("name").value;
if (name === "") {
document.getElementById("avail").innerHTML = "";
return
}
if (name === "") {
document.getElementById("avail").innerHTML = "";
return
}
document.getElementById("avail").innerHTML = "Checking availability...";
document.getElementById("avail").innerHTML = "Checking availability...";
var req = new XMLHttpRequest();
req.addEventListener("load", updateAvailability);
req.open("GET", "/api/check_availability?name="+encodeURIComponent(name));
req.send();
var req = new XMLHttpRequest();
req.addEventListener("load", updateAvailability);
req.open("GET", "/api/check_availability?name="+encodeURIComponent(name));
req.send();
}

View File

@ -1,44 +1,44 @@
drop table if exists cyberman;
create table cyberman (
id integer primary key,
dbrev integer not null
id integer primary key,
dbrev integer not null
);
insert into cyberman (dbrev) values (3);
drop table if exists user;
create table user (
id integer primary key,
email text not null,
password text not null,
salt text not null,
active integer not null default 0,
conftoken text not null,
newemail text,
recoverytoken text
id integer primary key,
email text not null,
password text not null,
salt text not null,
active integer not null default 0,
conftoken text not null,
newemail text,
recoverytoken text
);
drop table if exists session;
create table session (
id integer primary key,
uid integer not null,
since integer not null,
token text not null
id integer primary key,
uid integer not null,
since integer not null,
token text not null
);
drop table if exists domain;
create table domain (
id integer primary key,
name string not null,
ownerid integer not null,
lastsid integer not null default 0
id integer primary key,
name string not null,
ownerid integer not null,
lastsid integer not null default 0
);
drop table if exists record;
create table record (
id integer primary key,
sid integer not null,
domainid integer not null,
type string not null,
name string not null,
value string not null
id integer primary key,
sid integer not null,
domainid integer not null,
type string not null,
name string not null,
value string not null
);

View File

@ -1,79 +1,79 @@
<center>
<br />
<h1>Your Account</h1>
<br />
<% IF updated %>
<div class="msgBox">
Your account details were updated successfully. If you updated your email address, you need to click the link sent to you before the changes can be applied.
</div>
<br /><br />
<% END %>
<br />
<h1>Your Account</h1>
<br />
<% IF updated %>
<div class="msgBox">
Your account details were updated successfully. If you updated your email address, you need to click the link sent to you before the changes can be applied.
</div>
<br /><br />
<% END %>
</center>
<% IF error %>
<div style="text-align:center">
<div class="msgBox" style="text-align:left">
There were some problems with your submission:
<br />
<ul>
<% IF e_no_email %>
<li>You need too enter a valid email address.</li>
<% END %>
<% IF e_wrong_pass %>
<li>The password you entered is incorrect.</li>
<% END %>
<% IF e_pass_mismatch %>
<li>The two passwords you entered do not match.</li>
<% END %>
<% IF e_pass_len %>
<li>Your password must be at least 8 characters long.</li>
<% END %>
<% IF e_email_exists %>
<li>There is already an account with that email address.</li>
<% END %>
</ul>
</div>
<div class="msgBox" style="text-align:left">
There were some problems with your submission:
<br />
<ul>
<% IF e_no_email %>
<li>You need too enter a valid email address.</li>
<% END %>
<% IF e_wrong_pass %>
<li>The password you entered is incorrect.</li>
<% END %>
<% IF e_pass_mismatch %>
<li>The two passwords you entered do not match.</li>
<% END %>
<% IF e_pass_len %>
<li>Your password must be at least 8 characters long.</li>
<% END %>
<% IF e_email_exists %>
<li>There is already an account with that email address.</li>
<% END %>
</ul>
</div>
</div>
<br />
<% END %>
<div class="body">
<form method="POST">
<table class="domains">
<tr>
<td>
<label for="email">Email address:</label>
</td>
<td>
<input type="email" name="email" id="email" value="<% user.email | html_entity %>" />
</td>
</tr>
<tr>
<td>
<label for="password">Old password:</label>
</td>
<td>
<input type="password" name="password" id="password" />
</td>
</tr>
<tr>
<td>
<label for="npassword">New password:</label>
</td>
<td>
<input type="password" name="npassword" id="npassword" />
</td>
</tr>
<tr>
<td>
<label for="npassword2">New password (confirm):</label>
</td>
<td>
<input type="password" name="npassword2" id="npassword2" />
</td>
</tr>
</table>
<br />
[&nbsp;<button class="textButton" action="submit">update</button>&nbsp;]
</form>
<form method="POST">
<table class="domains">
<tr>
<td>
<label for="email">Email address:</label>
</td>
<td>
<input type="email" name="email" id="email" value="<% user.email | html_entity %>" />
</td>
</tr>
<tr>
<td>
<label for="password">Old password:</label>
</td>
<td>
<input type="password" name="password" id="password" />
</td>
</tr>
<tr>
<td>
<label for="npassword">New password:</label>
</td>
<td>
<input type="password" name="npassword" id="npassword" />
</td>
</tr>
<tr>
<td>
<label for="npassword2">New password (confirm):</label>
</td>
<td>
<input type="password" name="npassword2" id="npassword2" />
</td>
</tr>
</table>
<br />
[&nbsp;<button class="textButton" action="submit">update</button>&nbsp;]
</form>
</div>

View File

@ -1,11 +1,11 @@
<center>
<br />
<h1>.cyb charter</h1>
<br />
<br />
<h1>.cyb charter</h1>
<br />
</center>
<div class="body">
<pre style="white-space:pre-wrap;word-wrap:break-word">
<pre style="white-space:pre-wrap;word-wrap:break-word">
Description
- - - - - -
@ -48,5 +48,5 @@ Contacts
* DNS master - hostmaster@opennic.cyb
* Abuse - abuse@opennic.cyb
* Webmaster - webmaster@opennic.cyb
</pre>
</pre>
</div>

View File

@ -1,49 +1,49 @@
<center>
<br />
<h1>Update your password</h1>
<br />
<% IF err %>
<div class="msgBox">
Error:
<% IF e_bad_link %>
The link you clicked on is invalid!
<% ELSIF e_no_pass %>
You must enter a password.
<% ELSIF e_pass_len %>
Your password must be at least 8 characters long.
<% ELSIF e_pass_mismatch %>
The two passwords you entered do not match.
<% END%>
</div>
<br /><br />
<% END %>
<br />
<h1>Update your password</h1>
<br />
<% IF err %>
<div class="msgBox">
Error:
<% IF e_bad_link %>
The link you clicked on is invalid!
<% ELSIF e_no_pass %>
You must enter a password.
<% ELSIF e_pass_len %>
Your password must be at least 8 characters long.
<% ELSIF e_pass_mismatch %>
The two passwords you entered do not match.
<% END%>
</div>
<br /><br />
<% END %>
</center>
<div class="body">
Enter a new password and click update.
<br />
<form method="POST" class="login" action="confirm_forgot">
<input type="hidden" name="e" value="<% params.e | html_entity %>" />
<input type="hidden" name="t" value="<% params.t | html_entity %>" />
<table>
<tr>
<td>
<label for="password">New password:</label>
</td>
<td>
<input type="password" name="password" id="password" />
</td>
</tr>
<tr>
<td>
<label for="password2">New password (confirm):</label>
</td>
<td>
<input type="password" name="password2" id="password2" />
</td>
</tr>
</table>
<br />
[&nbsp;<button class="textButton" action="submit">update</button>&nbsp;]
</form>
Enter a new password and click update.
<br />
<form method="POST" class="login" action="confirm_forgot">
<input type="hidden" name="e" value="<% params.e | html_entity %>" />
<input type="hidden" name="t" value="<% params.t | html_entity %>" />
<table>
<tr>
<td>
<label for="password">New password:</label>
</td>
<td>
<input type="password" name="password" id="password" />
</td>
</tr>
<tr>
<td>
<label for="password2">New password (confirm):</label>
</td>
<td>
<input type="password" name="password2" id="password2" />
</td>
</tr>
</table>
<br />
[&nbsp;<button class="textButton" action="submit">update</button>&nbsp;]
</form>
</div>

View File

@ -1,9 +1,9 @@
<center>
<br />
<h1>Success</h1>
<br />
<br />
<h1>Success</h1>
<br />
</center>
<div class="body">
Your email address was confirmed successfully.
Your email address was confirmed successfully.
</div>

View File

@ -1,62 +1,62 @@
<center>
<br />
<h1>Your Domains</h1>
<br />
<% IF params.new %>
<div class="msgBox">
The domain '<% params.new | html_entity %>.<% vars.config.tld %>' was registered successfully!
</div>
<br /><br />
<% END %>
<% IF params.removed %>
<div class="msgBox">
The domain '<% params.removed | html_entity %>.<% vars.config.tld %>' was removed successfully.
</div>
<br /><br />
<% END %>
<br />
<h1>Your Domains</h1>
<br />
<% IF params.new %>
<div class="msgBox">
The domain '<% params.new | html_entity %>.<% vars.config.tld %>' was registered successfully!
</div>
<br /><br />
<% END %>
<% IF params.removed %>
<div class="msgBox">
The domain '<% params.removed | html_entity %>.<% vars.config.tld %>' was removed successfully.
</div>
<br /><br />
<% END %>
</center>
<div class="body">
<center>
[&nbsp;<a class="bracketButton" href="domains/new">register a domain</a>&nbsp;]
</center>
<center>
[&nbsp;<a class="bracketButton" href="domains/new">register a domain</a>&nbsp;]
</center>
<% IF domains.size > 0 %>
<em>
<% domains.size %>
<% IF domains.size == 1 %>
domain
<% ELSE %>
domains
<% END %>
</em>
<% IF domains.size > 0 %>
<em>
<% domains.size %>
<% IF domains.size == 1 %>
domain
<% ELSE %>
domains
<% END %>
</em>
<br />
<br />
<table class="domains">
<tr>
<td>
<strong>Domain name</strong>
</td>
<td>
<strong>Actions</strong>
</td>
</tr>
<% FOREACH d IN domains %>
<tr>
<td>
<% d.name | html_entity %>.<% vars.config.tld %>
</td>
<td>
[&nbsp;<a class="bracketButton" href="domains/<% d.name %>/records">edit</a>&nbsp;]
[&nbsp;<a class="bracketButton" href="domains/<% d.name %>/remove">remove</a>&nbsp;]
</td>
</tr>
<% END %>
</table>
<table class="domains">
<tr>
<td>
<strong>Domain name</strong>
</td>
<td>
<strong>Actions</strong>
</td>
</tr>
<% FOREACH d IN domains %>
<tr>
<td>
<% d.name | html_entity %>.<% vars.config.tld %>
</td>
<td>
[&nbsp;<a class="bracketButton" href="domains/<% d.name %>/records">edit</a>&nbsp;]
[&nbsp;<a class="bracketButton" href="domains/<% d.name %>/remove">remove</a>&nbsp;]
</td>
</tr>
<% END %>
</table>
<% ELSE %>
You don't have any domains registered.
<% END %>
<% ELSE %>
You don't have any domains registered.
<% END %>
</div>

View File

@ -1,40 +1,40 @@
<center>
<br />
<h1>Register a domain</h1>
<br />
<br />
<h1>Register a domain</h1>
<br />
</center>
<% IF error %>
<center>
<div class="msgBox">
<% IF e_no_name %>
You did not specify a domain to register.
<% END %>
<% IF e_exists %>
The domain '<% params.name | html_entity %>.<% vars.config.tld %>' has already been registered. Please choose a different domain name.
<% END %>
<% IF e_chars %>
The domain '<% params.name | html_entity %>.<% vars.config.tld %>' contains invalid characters.
<% END %>
<% IF e_reserved %>
The domain '<% params.name | html_entity %>.<% vars.config.tld %>' is reserved for use by the registry.
<% END %>
</div>
<br /><br />
<div class="msgBox">
<% IF e_no_name %>
You did not specify a domain to register.
<% END %>
<% IF e_exists %>
The domain '<% params.name | html_entity %>.<% vars.config.tld %>' has already been registered. Please choose a different domain name.
<% END %>
<% IF e_chars %>
The domain '<% params.name | html_entity %>.<% vars.config.tld %>' contains invalid characters.
<% END %>
<% IF e_reserved %>
The domain '<% params.name | html_entity %>.<% vars.config.tld %>' is reserved for use by the registry.
<% END %>
</div>
<br /><br />
</center>
<% END %>
<div class="body">
Please choose a domain to register:
<br /><br />
Please choose a domain to register:
<br /><br />
<form method="POST" class="login">
<input type="text" name="name" id="name" onkeyup="checkAvailability()">.<% vars.config.tld %>
<br /><br />
[&nbsp;<button action="submit" class="textButton">register&nbsp;domain</button>&nbsp;]
[&nbsp;<a href="../domains" class="bracketButton">go&nbsp;back</a>&nbsp;]
</form>
<span id="avail"></span>
<form method="POST" class="login">
<input type="text" name="name" id="name" onkeyup="checkAvailability()">.<% vars.config.tld %>
<br /><br />
[&nbsp;<button action="submit" class="textButton">register&nbsp;domain</button>&nbsp;]
[&nbsp;<a href="../domains" class="bracketButton">go&nbsp;back</a>&nbsp;]
</form>
<span id="avail"></span>
</div>
<script type="text/javascript" src="/js/domain_check.js"></script>

View File

@ -1,32 +1,32 @@
<% IF domain %>
<center>
<br />
<h1>Removal of <% domain.name %>.<% vars.config.tld %></h1>
<br />
<br />
<h1>Removal of <% domain.name %>.<% vars.config.tld %></h1>
<br />
</center>
<div class="body">
<p>
You are about to permanently remove <% domain.name %>.<% vars.config.tld %> and all its records.
</p>
<p style="font-size:1.6em">
YOU ARE ABOUT TO PERMANENTLY REMOVE <% domain.name %>.<% vars.config.tld %> AND ALL ITS RECORDS!
</p>
<p>
There is <strong>no</strong> guarantee that you will be able to re-register this domain at a later date.
</p>
<p>
<center>
<form method="POST">
[&nbsp;<button class="textButton" action="submit">yes,&nbsp;destroy&nbsp;the&nbsp;domain</button>&nbsp;]
</form>
</center>
</p>
<p>
You are about to permanently remove <% domain.name %>.<% vars.config.tld %> and all its records.
</p>
<p style="font-size:1.6em">
YOU ARE ABOUT TO PERMANENTLY REMOVE <% domain.name %>.<% vars.config.tld %> AND ALL ITS RECORDS!
</p>
<p>
There is <strong>no</strong> guarantee that you will be able to re-register this domain at a later date.
</p>
<p>
<center>
<form method="POST">
[&nbsp;<button class="textButton" action="submit">yes,&nbsp;destroy&nbsp;the&nbsp;domain</button>&nbsp;]
</form>
</center>
</p>
</div>
<% ELSE %>
<center>
No such domain!
<br />
[&nbsp;<a href="../../domains" class="bracketButton">go&nbsp;back</a>&nbsp;]
No such domain!
<br />
[&nbsp;<a href="../../domains" class="bracketButton">go&nbsp;back</a>&nbsp;]
</center>
<% END %>

View File

@ -1,27 +1,27 @@
<center>
<br />
<h1 >Forgotten password</h1>
<br />
<% IF err || success %>
<div class="msgBox">
<% IF e_no_user %>
Error: There is no user account associated with that email address.
<% END %>
<% IF success %>
An email has been sent to <% params.email | html_entity %>. Please click the link to reset your password.
<% END %>
</div>
<br /><br />
<% END %>
<br />
<h1 >Forgotten password</h1>
<br />
<% IF err || success %>
<div class="msgBox">
<% IF e_no_user %>
Error: There is no user account associated with that email address.
<% END %>
<% IF success %>
An email has been sent to <% params.email | html_entity %>. Please click the link to reset your password.
<% END %>
</div>
<br /><br />
<% END %>
</center>
<div class="body">
Enter your email into the field below and we'll send an email with a link to reset your password.
<br />
<form method="POST">
<label for="email">Email address:</label>
<input type="email" name="email" id="email" value="<% params.email | html_entity %>"/>
<br />
[&nbsp;<button action="submit" class="textButton">submit</button>&nbsp;]
</form>
Enter your email into the field below and we'll send an email with a link to reset your password.
<br />
<form method="POST">
<label for="email">Email address:</label>
<input type="email" name="email" id="email" value="<% params.email | html_entity %>"/>
<br />
[&nbsp;<button action="submit" class="textButton">submit</button>&nbsp;]
</form>
</div>

View File

@ -1,15 +1,15 @@
<center>
<br /><br /><br />
<h1>Welcome to cybNIC</h1>
<br /><br /><br />
<h1>Welcome to cybNIC</h1>
</center>
<br />
<div class="body">
<p>.cyb is a new TLD (top level domain) for anything and everything cyberpunk-related, on the OpenNIC network. To get started, change your computer's DNS settings to use OpenNIC's servers - <a href="https://www.moderntld.com/get-started/">here's how</a>. Registering a .cyb domain is free for everyone.</p>
<p>You can <a href="charter">read our charter</a> for more information and details on how to report abuse of cybNIC services.</p>
<p>Create or log in to an account in order to register or update .cyb domains.</p>
<center>
<p>[&nbsp;<a class="bracketButton" href="login">log&nbsp;in</a>&nbsp;]&nbsp;&nbsp;[&nbsp;<a class="bracketButton" href="register">register</a>&nbsp;]</p>
</center>
<p>.cyb is a new TLD (top level domain) for anything and everything cyberpunk-related, on the OpenNIC network. To get started, change your computer's DNS settings to use OpenNIC's servers - <a href="https://www.moderntld.com/get-started/">here's how</a>. Registering a .cyb domain is free for everyone.</p>
<p>You can <a href="charter">read our charter</a> for more information and details on how to report abuse of cybNIC services.</p>
<p>Create or log in to an account in order to register or update .cyb domains.</p>
<center>
<p>[&nbsp;<a class="bracketButton" href="login">log&nbsp;in</a>&nbsp;]&nbsp;&nbsp;[&nbsp;<a class="bracketButton" href="register">register</a>&nbsp;]</p>
</center>
</div>

View File

@ -1,31 +1,31 @@
<!DOCTYPE HTML>
<html lang=en>
<head>
<meta charset="utf8" />
<meta name="viewport" content="width=device-width" />
<% IF redir %>
<meta http-equiv="refresh" content="0;<% redir %>" />
<% END %>
<title>cybNIC</title>
<link rel="stylesheet" type="text/css" href="/css/style.css" />
</head>
<body>
<% IF vars.auth %>
<div class="toolbar">
<div class="body">
<span>
Logged in as <% vars.email | html_entity %>
</span>
<span style="float:right;">
<form action="/logout" method="POST">
[&nbsp;<a href="/domains" class="bracketButton">domains</a>&nbsp;]
[&nbsp;<a href="/account" class="bracketButton">account</a>&nbsp;]
[&nbsp;<button class="textButton" action="submit">log&nbsp;out</button>&nbsp;]
</form>
</span>
</div>
</div>
<% END %>
<% content %>
</body>
<head>
<meta charset="utf8" />
<meta name="viewport" content="width=device-width" />
<% IF redir %>
<meta http-equiv="refresh" content="0;<% redir %>" />
<% END %>
<title>cybNIC</title>
<link rel="stylesheet" type="text/css" href="/css/style.css" />
</head>
<body>
<% IF vars.auth %>
<div class="toolbar">
<div class="body">
<span>
Logged in as <% vars.email | html_entity %>
</span>
<span style="float:right;">
<form action="/logout" method="POST">
[&nbsp;<a href="/domains" class="bracketButton">domains</a>&nbsp;]
[&nbsp;<a href="/account" class="bracketButton">account</a>&nbsp;]
[&nbsp;<button class="textButton" action="submit">log&nbsp;out</button>&nbsp;]
</form>
</span>
</div>
</div>
<% END %>
<% content %>
</body>
</html>

View File

@ -1,63 +1,63 @@
<center>
<br />
<h1>Log in</h1>
<br />
<br />
<h1>Log in</h1>
<br />
<% IF account_created %>
<div class="msgBox">
Your account has been created and a confirmation email sent to <% params.email | html_entity %>. Please confirm your email address, then log in here.
</div>
<br /><br />
<% END %>
<% IF params.pwchange %>
<div class="msgBox">
Your password has been changed and all browsers logged out. Please log in again here.
</div>
<br /><br />
<% END %>
<% IF account_created %>
<div class="msgBox">
Your account has been created and a confirmation email sent to <% params.email | html_entity %>. Please confirm your email address, then log in here.
</div>
<br /><br />
<% END %>
<% IF error %>
<div class="msgBox">
<% IF e_no_user %>
The email address <% params.email | html_entity %> is not registered.
<% END %>
<% IF e_pass %>
Your password was incorrect, sorry.
<% END %>
<% IF e_not_confirmed %>
Please confirm your email address using the link sent to <% params.email | html_entity %>.
<% END %>
</div>
<br /><br />
<% END %>
<% IF params.pwchange %>
<div class="msgBox">
Your password has been changed and all browsers logged out. Please log in again here.
</div>
<br /><br />
<% END %>
<% IF error %>
<div class="msgBox">
<% IF e_no_user %>
The email address <% params.email | html_entity %> is not registered.
<% END %>
<% IF e_pass %>
Your password was incorrect, sorry.
<% END %>
<% IF e_not_confirmed %>
Please confirm your email address using the link sent to <% params.email | html_entity %>.
<% END %>
</div>
<br /><br />
<% END %>
</center>
<div class="body">
<form method=POST class="login" action="login">
<table>
<tr>
<td>
<label for="email">Email address:</label>
</td>
<td>
<input type="email" name="email" id="email" />
</td>
</tr>
<tr>
<td>
<label for="password">Password:</label>
</td>
<td>
<input type="password" name="password" id="password" />
</td>
</tr>
</table>
<br />
[&nbsp;<button action="submit" class="textButton">log&nbsp;in</button>&nbsp;]
[&nbsp;<a href="index" class="bracketButton">go&nbsp;back</a>&nbsp;]
<br /><br />
[&nbsp;<a href="forgot" class="bracketButton">recover forgotten password</a>&nbsp;]
</form>
<form method=POST class="login" action="login">
<table>
<tr>
<td>
<label for="email">Email address:</label>
</td>
<td>
<input type="email" name="email" id="email" />
</td>
</tr>
<tr>
<td>
<label for="password">Password:</label>
</td>
<td>
<input type="password" name="password" id="password" />
</td>
</tr>
</table>
<br />
[&nbsp;<button action="submit" class="textButton">log&nbsp;in</button>&nbsp;]
[&nbsp;<a href="index" class="bracketButton">go&nbsp;back</a>&nbsp;]
<br /><br />
[&nbsp;<a href="forgot" class="bracketButton">recover forgotten password</a>&nbsp;]
</form>
</div>

View File

@ -1,75 +1,75 @@
<center>
<br />
<h1>Add a record</h1>
<br />
<br />
<h1>Add a record</h1>
<br />
</center>
<% IF error %>
<div style="text-align:center">
<div class="msgBox" style="text-align:left">
There were some problems with your submission:
<br />
<ul>
<% IF e_bad_value %>
<li>The value you entered was invalid.
<% IF params.type == 'NS' %>(Did you forget the trailing '.'?)<% END %></li>
<% END %>
<% IF e_bad_type %>
<li>You must choose a type for the record.</li>
<% END %>
<% IF e_bad_name %>
<li>The name of the record is invalid.</li>
<% END %>
</ul>
</div>
<div class="msgBox" style="text-align:left">
There were some problems with your submission:
<br />
<ul>
<% IF e_bad_value %>
<li>The value you entered was invalid.
<% IF params.type == 'NS' %>(Did you forget the trailing '.'?)<% END %></li>
<% END %>
<% IF e_bad_type %>
<li>You must choose a type for the record.</li>
<% END %>
<% IF e_bad_name %>
<li>The name of the record is invalid.</li>
<% END %>
</ul>
</div>
</div>
<br />
<% END %>
<div class="body">
<em>Adding a record for <% domain.name | html_entity %>.<% vars.config.tld %></em>
<em>Adding a record for <% domain.name | html_entity %>.<% vars.config.tld %></em>
<form method="POST" class="login">
<table class="domains">
<tr>
<td>
<strong>
<label for="name">Record name:</label>
</strong>
</td>
<td>
<input type="text" style="width: 100px" name="rname" id="rname" placeholder="Use @ for root"
value="<% params.rname | html_entity %>" />.<% domain.name | html_entity %>.<% vars.config.tld %>
</td>
</tr>
<tr>
<td>
<strong>
<label for="type">Record type:</label>
</strong>
</td>
<td>
<select name="type" id="type">
<option value="">- Select -</option>
<option value="A">A</option>
<option value="AAAA">AAAA</option>
<option value="NS">NS</option>
</select>
</td>
</tr>
<tr>
<td>
<strong>
<label for="value">Value:</label>
</strong>
</td>
<td>
<input type="text" name="value" id="value" value="<% params.value | html_entity %>" />
</td>
</tr>
</table>
<br />
[&nbsp;<button action="submit" class="textButton">create&nbsp;record</button>&nbsp;]
[&nbsp;<a class="bracketButton" href="../records">go&nbsp;back</a>&nbsp;]
</form>
<form method="POST" class="login">
<table class="domains">
<tr>
<td>
<strong>
<label for="name">Record name:</label>
</strong>
</td>
<td>
<input type="text" style="width: 100px" name="rname" id="rname" placeholder="Use @ for root"
value="<% params.rname | html_entity %>" />.<% domain.name | html_entity %>.<% vars.config.tld %>
</td>
</tr>
<tr>
<td>
<strong>
<label for="type">Record type:</label>
</strong>
</td>
<td>
<select name="type" id="type">
<option value="">- Select -</option>
<option value="A">A</option>
<option value="AAAA">AAAA</option>
<option value="NS">NS</option>
</select>
</td>
</tr>
<tr>
<td>
<strong>
<label for="value">Value:</label>
</strong>
</td>
<td>
<input type="text" name="value" id="value" value="<% params.value | html_entity %>" />
</td>
</tr>
</table>
<br />
[&nbsp;<button action="submit" class="textButton">create&nbsp;record</button>&nbsp;]
[&nbsp;<a class="bracketButton" href="../records">go&nbsp;back</a>&nbsp;]
</form>
</div>

View File

@ -1,3 +1,3 @@
<div class="body">
Redirecting, please wait.
Redirecting, please wait.
</div>

View File

@ -1,71 +1,71 @@
<center>
<br />
<h1>Register</h1>
<br />
<br />
<h1>Register</h1>
<br />
</center>
<% IF error %>
<div style="text-align:center">
<div class="msgBox" style="text-align:left">
There were some problems with your registration:
<br />
<ul>
<% IF e_no_email %>
<li>You need to enter a valid email address.</li>
<% END %>
<% IF e_no_password %>
<li>You need to enter a password.</li>
<% END %>
<% IF e_pass_len %>
<li>Your password must be at least 8 characters!</li>
<% END %>
<% IF e_no_password2 %>
<li>You need to enter a password confirmation.</li>
<% END %>
<% IF e_pass_match %>
<li>The two passwords you entered do not match!</li>
<% END %>
<% IF e_email_exists %>
<li>There is already an account with that email address.</li>
<% END %>
</ul>
</div>
<div class="msgBox" style="text-align:left">
There were some problems with your registration:
<br />
<ul>
<% IF e_no_email %>
<li>You need to enter a valid email address.</li>
<% END %>
<% IF e_no_password %>
<li>You need to enter a password.</li>
<% END %>
<% IF e_pass_len %>
<li>Your password must be at least 8 characters!</li>
<% END %>
<% IF e_no_password2 %>
<li>You need to enter a password confirmation.</li>
<% END %>
<% IF e_pass_match %>
<li>The two passwords you entered do not match!</li>
<% END %>
<% IF e_email_exists %>
<li>There is already an account with that email address.</li>
<% END %>
</ul>
</div>
</div>
<br />
<% END %>
<div class="body">
<form class="login" method="POST" action="register">
<table>
<tr>
<td>
<label for="email">Email address:</label>
</td>
<td>
<input type="email" name="email" id="email" value="<% params.email | html_entity %>" />
</td>
</tr>
<tr>
<td>
<label for="password">Password:</label>
</td>
<td>
<input type="password" name="password" id="password" value="<% params.password | html_entity %>" />
</td>
</tr>
<tr>
<td>
<label for="password2">Confirm password:</label>
</td>
<td>
<input type="password" name="password2" id="password2" value="<% params.password2 | html_entity %>" />
</td>
</tr>
</table>
<br />
[&nbsp;<button action="submit" class="textButton">register</button>&nbsp;]
[&nbsp;<a href="index" class="bracketButton">go&nbsp;back</a>&nbsp;]
<br /><br />
<em>By registering, you agree to be bound by the policies set forward in our <a href="charter">charter</a>.</em>
</form>
<form class="login" method="POST" action="register">
<table>
<tr>
<td>
<label for="email">Email address:</label>
</td>
<td>
<input type="email" name="email" id="email" value="<% params.email | html_entity %>" />
</td>
</tr>
<tr>
<td>
<label for="password">Password:</label>
</td>
<td>
<input type="password" name="password" id="password" value="<% params.password | html_entity %>" />
</td>
</tr>
<tr>
<td>
<label for="password2">Confirm password:</label>
</td>
<td>
<input type="password" name="password2" id="password2" value="<% params.password2 | html_entity %>" />
</td>
</tr>
</table>
<br />
[&nbsp;<button action="submit" class="textButton">register</button>&nbsp;]
[&nbsp;<a href="index" class="bracketButton">go&nbsp;back</a>&nbsp;]
<br /><br />
<em>By registering, you agree to be bound by the policies set forward in our <a href="charter">charter</a>.</em>
</form>
</div>