comparison lib/IMPL/Security/Auth/Simple.pm @ 407:c6e90e02dd17 ref20150831

renamed Lib->lib
author cin
date Fri, 04 Sep 2015 19:40:23 +0300
parents
children
comparison
equal deleted inserted replaced
406:f23fcb19d3c1 407:c6e90e02dd17
1 package IMPL::Security::Auth::Simple;
2 use strict;
3
4 use Digest::MD5 qw(md5_hex);
5 use Encode qw(encode);
6
7 use IMPL::Security::Auth qw(:Const);
8
9 use IMPL::Const qw(:prop);
10 use IMPL::declare {
11 require => {
12 Exception => 'IMPL::Exception',
13 WrongDataException => '-IMPL::WrongDataException'
14 },
15 base => [
16 'IMPL::Security::Auth' => undef,
17 'IMPL::Object' => undef
18 ],
19 props => [
20 _stage => PROP_ALL,
21 _salt => PROP_ALL,
22 _image => PROP_ALL
23 ]
24 };
25
26 use constant {
27 STAGE_INIT => 1,
28 STAGE_DONE => 2
29 };
30
31 sub CTOR {
32 my ($this,$secData) = @_;
33
34 my ($stage,$salt,$img) = split /\|/,$secData;
35
36 die WrongDataException->new() unless grep $_ == $stage, (STAGE_INIT, STAGE_DONE);
37
38 $this->_stage($stage);
39 $this->_salt($salt);
40 $this->_image($img);
41
42 }
43
44 sub secData {
45 my ($this) = @_;
46
47 return join ('|',$this->_stage, $this->_salt , $this->_image );
48 }
49
50 sub isTrusted {
51 my ($this) = @_;
52
53 $this->_stage == STAGE_DONE ? 1 : 0;
54 }
55
56 sub DoAuth {
57 my ($this,$challenge) = @_;
58
59 my $salt = $this->_salt;
60
61 if (md5_hex($salt,encode('utf-8', $challenge), $salt) eq $this->_image) {
62 if ($this->_stage == STAGE_INIT) {
63 $this->_stage(STAGE_DONE);
64 }
65 return (AUTH_SUCCESS, undef);
66 } else {
67 return (AUTH_FAIL, undef);
68 }
69 }
70
71 sub CreateSecData {
72 my ($self,%args) = @_;
73
74 die new IMPL::InvalidArgumentException("The parameter is required",'password') unless $args{password};
75
76 my $salt = $self->GenSSID();
77 return return join ('|',STAGE_INIT, $salt, md5_hex($salt,encode('utf-8', $args{password}),$salt));
78 }
79
80 sub SecDataArgs {
81 password => 'SCALAR'
82 }
83
84 1;
85
86 __END__
87
88 =pod
89
90 =head1 NAME
91
92 C<IMPL::Security::Auth::Simple> Модуль простой авторизации.
93
94 =head1 DESCRIPTION
95
96 Использует алгоритм MD5 для хранения образа пароля.
97
98 =head1 MEMBERS
99
100 =head2 C<CTOR($secData)>
101
102 Создает объект аутентификации, передавая ему данные для инициализации.
103
104 =head2 C<[get]secData>
105
106 Возвращает данные безопасности, которые можно использовать для восстановления
107 состояния объекта.
108
109 =head2 C<[get]isTrusted>
110
111 Является ли объект доверенным для аутентификации сессии (тоесть хранит данные
112 для аутентификации сессии).
113
114 =head2 C<DoAuth($challenge)>
115
116 Аутентифицирует пользователя. Используется один этап. C<$challenge>
117 открытый пароль пользователя или cookie сессии.
118
119 Возвращает C<($status,$challenge)>
120
121 =over
122
123 =item C<$status>
124
125 Результат либо C<AUTH_SUCCESS>, либо C<AUTH_FAIL>
126
127 =item C<$challenge>
128
129 В случае успеха возвращает cookie (уникальный номер) сессии, либо C<undef>
130
131 =back
132
133 =cut