AnnoCPAN
view release on metacpan or search on metacpan
lib/AnnoCPAN/Control.pm view on Meta::CPAN
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
Log out. Clears the authentication key.
=cut
sub Logout {
my ($self) = @_;
$self->delete_cookie('key');
$self->user(undef);
$self->redirect($self->param('from'));
return;
#$self->Main({message => "You have logged out"});
}
sub Prefs {
my ($self) = @_;
return $self->error("Can't edit prefs without logging in first!")
unless $self->user;
({}, 'prefs');
}
sub Save_prefs {
my ($self) = @_;
# XXX untaint
my $user = $self->user;
return $self->error("Can't edit prefs without logging in first!")
unless $user;
AnnoCPAN::DBI::Prefs->search(user => $user)->delete_all;
for my $name (@{AnnoCPAN::Config->option('prefs')}) {
AnnoCPAN::DBI::Prefs->create({user => $user, name => $name,
value => $self->param($name) || '' });
}
({ message => 'Preferences saved'}, 'prefs');
}
sub Delete {
my ($self) = @_;
return $self->_delete if $self->param('fast');
my ($vars) = $self->_delete;
return $self->Main($vars) if $vars->{error};
$self->Show($vars);
}
# global delete
sub _delete {
my ($self) = @_;
my $notepos = $self->param_obj('NotePos');
my $note = $notepos->note;
my $podver = $notepos->podver;
# get user, see if can delete
my $user = $self->user
or return $self->_error("not logged in; can't delete");
$user->can_delete($note)
or return $self->_error("deletion not authorized");
$note->delete;
$self->_message("note deleted", { podver => $podver });
}
sub Main_rss {
my ($self) = @_;
my ($vars) = $self->Main;
my $link = AnnoCPAN::Config->option('root_uri_abs');
my $rss = AnnoCPAN::Feed->note_rss(notes => $vars->{recent},
link => $link, title => 'AnnoCPAN Recent Notes');
({ %$vars, rss => $rss }, 'rss', 'text/xml');
}
sub Author_recent {
my ($self, $vars) = @_;
$vars ||= {};
my $pause_id = $self->param('pause_id');
my @recent = AnnoCPAN::DBI::Note->search_recent_by_author($pause_id);
({notes => \@recent, author => uc $pause_id, %$vars }, "show_author_recent");
}
( run in 1.698 second using v1.01-cache-2.11-cpan-39bf76dae61 )