Revision 195 (by ahitrov, 2012/03/15 18:26:13) |
Users plugin
|
package users::Keeper;
use strict;
use warnings 'all';
use base qw(Contenido::Keeper);
use Digest::MD5;
use Contenido::Globals;
use Data::Dumper;
# ----------------------------------------------------------------------------
# �������:
# ----------------------------------------------------------------------------
# check_login: ������� ������������ � �������
#
# login => login ������������
# email => email ������������
# ----------------------------------------------------------------------------
sub check_login {
my $self = shift;
my %opts = @_;
return if !$opts{login} && !$opts{email};
my $class = $self->state->profile_document_class;
my $res = $keeper->get_documents (
class => $class,
$opts{login} ? (login => $opts{login}) : (),
$opts{email} ? (email => lc($opts{email})) : (),
count => 1,
);
return int($res);
}
# ----------------------------------------------------------------------------
# login: ����������� ������������
#
# login => login ������������
# email => e-mail ������������
# passwd => ������ ������������
# ----------------------------------------------------------------------------
sub login {
my $self = shift;
my %opts = @_;
return if !($opts{login} || $opts{email}) && !$opts{passwd};
my $passmd5 = Digest::MD5::md5_hex($opts{passwd});
my $class = $self->state->profile_document_class;
my $res = $keeper->get_documents (
class => $class,
$opts{login} ? (login => $opts{login}) : (),
$opts{email} ? (email => lc($opts{email})) : (),
status => [1,2,3,4,5],
return_mode => 'array_ref',
);
$res = ref $res eq 'ARRAY' ? $res->[0] : undef;
return unless ref $res;
# warn "Password = ".$opts{passwd}."; Pass MD5 = $passmd5; user MD5 = ".$res->passwd."\n" if $DEBUG;
if ($res->passwd eq $passmd5 ) {
my $lastlogin = Contenido::DateTime->new ( postgres => $res->lastlogin );
my $now = Contenido::DateTime->new;
my $then = $now->clone;
$then->subtract( hours => 2 );
if ( DateTime->compare($then, $lastlogin) == 1 ) {
$res->lastlogin( $now->ymd('-').' '.$now->hms );
$res->passwd(undef);
$res->store;
$res->lastlogin( $lastlogin->ymd('-').' '.$lastlogin->hms );
}
return $res;
}else{
return;
}
}
# ----------------------------------------------------------------------------
# confirm: ������������� ��������������
#
# login => login ������������
# email => e-mail ������������
# md5 => MD5 ������ ������������
# ----------------------------------------------------------------------------
sub confirm {
my $self = shift;
my %opts = @_;
return if !($opts{login} || $opts{email}) && !$opts{md5};
my $class = $self->state->profile_document_class;
my $res = $keeper->get_documents (
class => $class,
$opts{login} ? (login => $opts{login}) : (),
$opts{email} ? (email => lc($opts{email})) : (),
return_mode => 'array_ref',
);
$res = ref $res eq 'ARRAY' && scalar @$res ? $res->[0] : undef;
return unless ref $res;
warn "MD5 = ".$opts{md5}."; user MD5 = ".$res->passwd."\n" if $DEBUG;
if ($res->passwd eq $opts{md5} ) {
my $now = localtime;
$res->lastlogin( $now );
$res->passwd(undef);
$res->status(1);
$res->store;
return $res;
}else{
return;
}
}
# ----------------------------------------------------------------------------
# get_profile: �������� ������� ������������
#
# id => �� ID
# login => �� login
# email => �� e-mail
# nickname=> �� ��������
# status => ������ �� �������
# ----------------------------------------------------------------------------
sub get_profile {
my $self = shift;
my %opts = @_;
return if !$opts{login} && !$opts{id} && !$opts{email} && !$opts{nickname};
my $class = $self->state->profile_document_class;
my $res = $keeper->get_documents (
class => $class,
%opts,
return_mode => 'array_ref',
);
$res = ref $res eq 'ARRAY' && scalar @$res ? $res->[0] : undef;
return $res;
}
1;