AnnoCPAN

 view release on metacpan or  search on metacpan

lib/AnnoCPAN/Control.pm  view on Meta::CPAN


=cut

sub New_user {
    ({}, "new_user");
}

=item $obj->Create_user

Coming from the New_user form, create a new account. Uses the login, passwd,
passwd2, and email CGI parameters. Checks that the login and password are not
blank, that the passwords match, and that the login is not already taken.

=cut

sub Create_user {
    my ($self) = @_;
    my $login   = $self->param('login');
    my $passwd  = $self->param('passwd');
    my $passwd2 = $self->param('passwd2');
    my $email   = $self->param('email');
    my %vars = (login => $login, email => $email);

    return ({%vars, error => "missing password"}, "new_user")
        unless (length $passwd);

    return ({%vars, error => "missing login"}, "new_user")
        unless (length $login);

    $login =~ s/^\s+//;
    $login =~ s/\s+$//;

    return ({%vars, error => "invalid login"}, "new_user")
        unless ($login =~ /^\w+$/);

    if (AnnoCPAN::DBI::User->retrieve(username => $login)) {
        return ({%vars, error => 'login already taken'}, "new_user");
    }

    if ($passwd ne $passwd2) {
        return ({%vars, error => "passwords don't match"}, "new_user");
    }

    my $user = AnnoCPAN::DBI::User->create({
        username => $login,
        password => crypt($passwd, $login),
        email    => $email,
        member_since => time,
        privs    => 1,
    });
    $self->set_login_cookies($user);
    $self->Main({%vars, message => "account created"});
}

=item $sub->Login

Log in; comes from the login form on login_form.html. Uses the login and
passwd CGI parameters.

=cut

sub Login {
    my ($self) = @_;
    my $passwd  = $self->param('passwd');

    my $user = eval { $self->param_obj('User', 'username') };
    unless ($user and crypt($passwd, $user->password) eq $user->password) {
        return $self->Main({error => 'invalid login/password'});
    }
    $self->set_login_cookies($user);
    my $from = $self->param('from');
    $self->redirect($from =~ /logout/ ? '/' : $from);
    return;
    #$self->Main({message => "welcome, you have logged in!"});
}

=item $obj->Logout

lib/AnnoCPAN/DBI.pm  view on Meta::CPAN

        $note->update;
    }
}

=head2 AnnoCPAN::DBI::User

Represents an AnnoCPAN user. Columns:

    id
    username
    password
    name
    email
    profile 
    reputation
    member_since
    last_visit
    privs

Note that some of these columns are unused, but they exist for historical
reasons.

Other Methods:

=over

=cut

package AnnoCPAN::DBI::User;
use base 'AnnoCPAN::DBI';
__PACKAGE__->table('user');
__PACKAGE__->columns(Essential => qw(id username password name email profile 
    reputation member_since last_visit privs));

=item $user->can_delete($note)

Return true if the user has the authority to delete $note (an
AnnoCPAN::DBI::Note object).

=cut

sub can_delete {

tables.tt.sql  view on Meta::CPAN

    content     text,
    type        smallint
    -- html       text,  -- for "micro-caching"
    -- version     varchar(255)
);
create index podver_index on section(podver);

create table user (
    [% id %],
    username    varchar(255),
    password    varchar(255),
    name        varchar(255),
    email       varchar(255),
    profile     text,
    reputation  integer,
    member_since    integer,
    last_visit  integer,
    privs       integer
);
create index username_index on [% db == 'mysql' ? '`user`' : 'user' %](username);

tt/login_form.html  view on Meta::CPAN

<div id="login_form">
[% IF user %]
    <i>Logged in as <b>[% link_user(user) %]</b></i>
[% ELSE %]
<form action="./" method="post" class="float">
    <input type="hidden" name="mode" value="login">
    <input type="hidden" name="from" value="[% request_uri | html %]">
    <label for="login">login</label>
    <input type="text" name="user" id="login" class="text" size="8"><br>
    <label for="passwd">password</label>
    <input type="password" name="passwd" id="passwd" size="8" class="text">
    <input type="submit" value="login">
</form>
[% END %]
</div>

tt/new_user.html  view on Meta::CPAN

<table>
<tr>
    <td>login</td>
    <td><input type="text" name="login" value="[% login | html %]"></td>
</tr>
<tr>
    <td>email (optional)</td>
    <td><input type="text" name="email" value="[% email | html %]"></td>
</tr>
<tr>
    <td>password</td>
    <td><input type="password" name="passwd"></td>
</tr>
<tr>
    <td>verify password</td>
    <td><input type="password" name="passwd2"></td>
</tr>
<tr>
    <td></td>
    <td><input type="submit" value="create account"></td>
</tr>
</table>
</form>

[% PROCESS footer.html %]



( run in 0.687 second using v1.01-cache-2.11-cpan-49f99fa48dc )