Line # Revision Author
1 195 ahitrov package users::Keeper;
2
3 use strict;
4 use warnings 'all';
5 use base qw(Contenido::Keeper);
6
7 use Digest::MD5;
8 use Contenido::Globals;
9 use Data::Dumper;
10
11 # ----------------------------------------------------------------------------
12 # �������:
13 # ----------------------------------------------------------------------------
14 # check_login: ������� ������������ � �������
15 #
16 # login => login ������������
17 # email => email ������������
18 # ----------------------------------------------------------------------------
19 sub check_login {
20
21 my $self = shift;
22 my %opts = @_;
23
24 return if !$opts{login} && !$opts{email};
25 my $class = $self->state->profile_document_class;
26 my $res = $keeper->get_documents (
27 class => $class,
28 $opts{login} ? (login => $opts{login}) : (),
29 $opts{email} ? (email => lc($opts{email})) : (),
30 count => 1,
31 );
32 return int($res);
33 }
34
35
36
37 # ----------------------------------------------------------------------------
38 # login: ����������� ������������
39 #
40 # login => login ������������
41 # email => e-mail ������������
42 # passwd => ������ ������������
43 # ----------------------------------------------------------------------------
44 sub login {
45
46 my $self = shift;
47 my %opts = @_;
48
49 return if !($opts{login} || $opts{email}) && !$opts{passwd};
50 my $passmd5 = Digest::MD5::md5_hex($opts{passwd});
51 my $class = $self->state->profile_document_class;
52 my $res = $keeper->get_documents (
53 class => $class,
54 $opts{login} ? (login => $opts{login}) : (),
55 $opts{email} ? (email => lc($opts{email})) : (),
56 status => [1,2,3,4,5],
57 return_mode => 'array_ref',
58 );
59 $res = ref $res eq 'ARRAY' ? $res->[0] : undef;
60 return unless ref $res;
61 # warn "Password = ".$opts{passwd}."; Pass MD5 = $passmd5; user MD5 = ".$res->passwd."\n" if $DEBUG;
62 if ($res->passwd eq $passmd5 ) {
63 my $lastlogin = Contenido::DateTime->new ( postgres => $res->lastlogin );
64 my $now = Contenido::DateTime->new;
65 my $then = $now->clone;
66 $then->subtract( hours => 2 );
67 if ( DateTime->compare($then, $lastlogin) == 1 ) {
68 $res->lastlogin( $now->ymd('-').' '.$now->hms );
69 $res->passwd(undef);
70 $res->store;
71 $res->lastlogin( $lastlogin->ymd('-').' '.$lastlogin->hms );
72 }
73 return $res;
74 }else{
75 return;
76 }
77
78 }
79
80
81
82 # ----------------------------------------------------------------------------
83 # confirm: ������������� ��������������
84 #
85 # login => login ������������
86 # email => e-mail ������������
87 # md5 => MD5 ������ ������������
88 # ----------------------------------------------------------------------------
89 sub confirm {
90
91 my $self = shift;
92 my %opts = @_;
93
94 return if !($opts{login} || $opts{email}) && !$opts{md5};
95 my $class = $self->state->profile_document_class;
96 my $res = $keeper->get_documents (
97 class => $class,
98 $opts{login} ? (login => $opts{login}) : (),
99 $opts{email} ? (email => lc($opts{email})) : (),
100 return_mode => 'array_ref',
101 );
102 $res = ref $res eq 'ARRAY' && scalar @$res ? $res->[0] : undef;
103 return unless ref $res;
104 warn "MD5 = ".$opts{md5}."; user MD5 = ".$res->passwd."\n" if $DEBUG;
105 if ($res->passwd eq $opts{md5} ) {
106 my $now = localtime;
107 $res->lastlogin( $now );
108 $res->passwd(undef);
109 $res->status(1);
110 $res->store;
111 return $res;
112 }else{
113 return;
114 }
115
116 }
117
118
119
120 # ----------------------------------------------------------------------------
121 # get_profile: �������� ������� ������������
122 #
123 # id => �� ID
124 # login => �� login
125 # email => �� e-mail
126 # nickname=> �� ��������
127 # status => ������ �� �������
128 # ----------------------------------------------------------------------------
129 sub get_profile {
130
131 my $self = shift;
132 my %opts = @_;
133
134 return if !$opts{login} && !$opts{id} && !$opts{email} && !$opts{nickname};
135 my $class = $self->state->profile_document_class;
136 my $res = $keeper->get_documents (
137 class => $class,
138 %opts,
139 return_mode => 'array_ref',
140 );
141 $res = ref $res eq 'ARRAY' && scalar @$res ? $res->[0] : undef;
142 return $res;
143 }
144
145 1;