/usr/local/CPAN/xmlwww/WWWXML/Modules/Login.pm
use strict;
package WWWXML::Modules::Login;
sub logout {
my ($class) = @_;
$::session->delete;
WWWXML::Output->redirect('?action=login');
return;
}
sub login {
my ($class) = @_;
if(defined $::query->get_param('submit_action')) {
return $class->_process;
}
return $class->_form;
}
sub _form {
my ($class) = @_;
my $form = WWWXML::Output->new_form(name => 'login');
$form->field(
name => 'login',
type => 'text',
);
$form->field(
name => 'pass',
type => 'password',
);
return $form;
}
sub _process {
my ($class) = @_;
$::t->simplify([keyattr => [], forcearray => [qw/number card/]]);
my $u = $::t->xquery(q{for $x in input()/clientz/client[@id='%s'][pass='%s'] return $x}, $::query->get_param('login'), $::query->get_param('pass')) or die "X-Error: ".$::t->error;
if($u->{client} && $u->{client}->{id}) {
$::session->param(uid => $u->{client}->{id});
WWWXML::Output->redirect('?action=home');
return;
}
my $form = $class->_form;
$form->error('Login/pass mismatch');
return $form;
}
1;