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 )