App-ZofCMS
view release on metacpan or search on metacpan
lib/App/ZofCMS/Plugin/UserLogin.pm view on Meta::CPAN
) {
$dbh->do(
"UPDATE $opts->{table} SET login_time = ? WHERE login = ?;",
undef,
0,
$user_ref->{login},
);
return;
}
$dbh->do(
"UPDATE $opts->{table} SET login_time = ? WHERE login = ?;",
undef,
time(),
$user_ref->{login},
);
return $user_ref, $user_ref_raw;
}
sub process_login_page {
my ( $self, $template, $query, $config ) = @_;
my $opts = $self->opts;
$query->{login} = lc $query->{login};
if ( $query->{zofcms_plugin_login} ne 'login_user' ) {
$template->{t}{plug_login_form} = $self->make_login_form(
login_button => $opts->{login_button},
page => $query->{page},
(
$opts->{preserve_login}
? ( cookie_login => $self->{COOKIE_LOGIN} ) : ()
),
smart_deny_name => $opts->{smart_deny},
smart_deny_value => $query->{ $opts->{smart_deny} },
);
return 1;
}
else {
my $session_id = $self->login_user( @$query{ qw/login pass/ } );
unless ( $session_id ) {
$template->{t}{plug_login_form} = $self->make_login_form(
login_button => $opts->{login_button},
error => $self->login_error,
page => $query->{page},
(
$opts->{preserve_login}
? ( cookie_login => $self->{COOKIE_LOGIN} ) : ()
),
smart_deny_name => $opts->{smart_deny},
smart_deny_value => $query->{ $opts->{smart_deny} },
);
return;
}
if ( $opts->{no_cookies} ) {
$template->{t}{plug_login_session_id} = $session_id;
}
else {
print "Set-Cookie: $opts->{preserve_login}=$query->{login}; path=/; expires=Sat, 23 May 2037 23:38:25 GMT\n"
if $opts->{preserve_login};
print "Set-Cookie: zofcms_plug_login_s=$session_id; path=/;\n";
printf "Set-Cookie: zofcms_plug_login_l=%s; path=/;\n",
md5_hex($query->{login});
}
if ( $opts->{redirect_on_login} ) {
print $config->cgi->redirect(
process_smart_deny_logon( $opts, $query )
);
exit;
}
else {
$self->cookie_l( md5_hex($query->{login}) );
$self->cookie_s( $session_id );
}
return 1;
}
}
sub login_user {
my ( $self, $login, $pass ) = @_;
my $opts = $self->opts;
$login = lc $login;
my $dbh = DBI->connect_cached(
@$opts{ qw/dsn user pass opt/ }
);
my $users_ref = $dbh->selectall_arrayref(
"SELECT * FROM $opts->{table} WHERE login = ? AND password = ?;",
undef,
$login,
md5_hex($pass),
);
# create TABLE users (login TEXT, password TEXT, login_time VARCHAR(10), session_id VARCHAR(55), role VARCHAR(20));
unless ( @$users_ref ) {
$self->login_error("Invalid login or password");
return;
}
my $session_id = rand() . rand() . rand();
$dbh->do(
"UPDATE $opts->{table} SET login_time = ?, session_id = ?"
. " WHERE login = ?;",
undef,
time(),
$session_id,
$login,
);
return $session_id;
}
sub make_login_form {
my ( $self, %args ) = @_;
my $t = HTML::Template->new_scalar_ref( \ login_form_template() );
$t->param(
%args,
( run in 0.868 second using v1.01-cache-2.11-cpan-39bf76dae61 )