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 )