Source of login.inc.plp
<:
use 5.014;
use warnings;
our $db = eval {
require Shiar_Sheet::DB;
Shiar_Sheet::DB->connect;
} or Abort('Database error', 501, $@);
our $user = eval {
if (defined $post{username}) {
$cookie{login} = EncodeURI(join ':', @post{qw( username pass )});
}
elsif (exists $fields{logout}) {
require CGI::Cookie;
if (AddCookie(CGI::Cookie->new(
-name => 'login',
-value => '',
-path => $editorurl,
-expires => 'now',
)->as_string)) {
delete $cookie{login};
die "Logged out as requested\n";
}
Alert("Failed to log out", "Login cookie could not be removed.");
}
my $cookiedata = $cookie{login} or return;
my ($name, $key) = split /[:\v]/, DecodeURI($cookiedata);
my %rowmatch = (username => $name, pass => $key);
my $found = $db->select(login => '*', \%rowmatch)->hash
or die "Invalid user or password\n";
eval {
require CGI::Cookie;
my $httpcookie = CGI::Cookie->new(
-name => 'login',
-value => join(':', @{$found}{qw( username pass )}),
-path => $editorurl,
) or die "prepared object is empty\n";
AddCookie($httpcookie->as_string);
} or Abort(["Unable to create login cookie", $@], 403);
return $found;
} or do {
say '<h1>Login to edit words</h1>';
Alert('Access denied', $@) if $@;
say '<form action="?" method="post" class="inline">';
say '<section><ul class="table">';
my $loginform = bless {%post}, 'Shiar_Sheet::FormRow';
say '<li>', $loginform->input(@{$_}), '</li>' for (
[username => {-label => 'User name'}],
[pass => {-label => 'Password', type => 'password'}],
);
say '</ul>';
say '<p><input type="submit" value="Login" /></p>';
say '</section>';
say '</form>';
exit;
};
sub parseinput {
return undef if not length $_[0];
require Encode;
return Encode::decode_utf8($_[0]);
}