AnnoCPAN
view release on metacpan or search on metacpan
lib/AnnoCPAN/Control.pm view on Meta::CPAN
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");
}
sub Author_rss {
my ($self, $vars) = @_;
$vars ||= {};
my $pause_id = $self->param('name');
return $self->Main unless $pause_id;
my @pods = AnnoCPAN::DBI::Pod->search_by_author($pause_id);
my @notes = map { $_->notes } @pods;
my $link = AnnoCPAN::Config->option('root_uri_abs') . "/~$pause_id";
my $rss = AnnoCPAN::Feed->note_rss(notes => \@notes, link => $link,
title => "AnnoCPAN Notes for PAUSE ID '$pause_id'");
({ %$vars, rss => $rss }, 'rss', 'text/xml');
}
sub Note_dump {
my @notes = AnnoCPAN::DBI::Note->retrieve_all;
({ notes => \@notes}, "note_dump.xml", "text/xml");
}
( run in 1.178 second using v1.01-cache-2.11-cpan-e1769b4cff6 )