| 51 | 1 package IMPL::Security::Auth::Simple; | 
| 71 | 2 use strict; | 
| 51 | 3 | 
| 166 | 4 use parent qw(IMPL::Object IMPL::Security::Auth); | 
| 51 | 5 use Digest::MD5; | 
| 52 | 6 | 
|  | 7 use IMPL::Class::Property; | 
| 81 | 8 use IMPL::Security::Auth qw(:Const); | 
| 52 | 9 | 
| 194 | 10 BEGIN { | 
|  | 11     private property _passwordImage => prop_all; | 
|  | 12     private property _sessionCookie => prop_all; | 
| 52 | 13 } | 
|  | 14 | 
|  | 15 sub CTOR { | 
| 194 | 16     my ($this,$secData) = @_; | 
|  | 17 | 
|  | 18     my ($passImg,$cookie) = split /\|/,$secData; | 
|  | 19 | 
|  | 20     $this->_passwordImage($passImg); | 
|  | 21     $this->_sessionCookie($cookie); | 
| 81 | 22 } | 
|  | 23 | 
|  | 24 sub secData { | 
| 194 | 25     my ($this) = @_; | 
|  | 26 | 
|  | 27     if ($this->_sessionCookie) { | 
|  | 28         return join ('|',$this->_passwordImage, $this->_sessionCookie ); | 
|  | 29     } else { | 
|  | 30         return $this->_passwordImage; | 
|  | 31     } | 
| 81 | 32 } | 
|  | 33 | 
|  | 34 sub isTrusted { | 
| 194 | 35     my ($this) = @_; | 
|  | 36 | 
|  | 37     $this->_sessionCookie ? 1 : 0; | 
| 52 | 38 } | 
| 51 | 39 | 
|  | 40 sub DoAuth { | 
| 194 | 41     my ($this,$challenge) = @_; | 
| 51 | 42 | 
| 194 | 43     if (Digest::MD5::md5_hex($challenge) eq $this->_passwordImage) { | 
|  | 44         return (AUTH_SUCCESS,$this->_sessionCookie($this->GenSSID)); | 
|  | 45     } elsee { | 
|  | 46         return (AUTH_FAIL,$this->_sessionCookie(undef)); | 
|  | 47     } | 
| 52 | 48 } | 
|  | 49 | 
|  | 50 sub ValidateSession { | 
| 194 | 51     my ($this,$cookie) = @_; | 
|  | 52 | 
|  | 53     die new IMPL::InvalidOperationException("The context is untrusted") unless $this->_sessionCookie; | 
|  | 54 | 
|  | 55     if ($cookie eq $this->_sessionCookie) { | 
|  | 56         return (AUTH_SUCCESS,undef); | 
|  | 57     } else { | 
|  | 58         return (AUTH_FAIL,undef); | 
|  | 59     } | 
| 51 | 60 } | 
|  | 61 | 
| 71 | 62 sub CreateSecData { | 
| 194 | 63     my ($self,%args) = @_; | 
|  | 64 | 
|  | 65     die new IMPL::InvalidArgumentException("The parameter is required",'password') unless $args{password}; | 
|  | 66 | 
|  | 67     return Digest::MD5::md5_hex($args{password}); | 
| 71 | 68 } | 
|  | 69 | 
|  | 70 sub SecDataArgs { | 
| 194 | 71     password => 'SCALAR' | 
| 71 | 72 } | 
|  | 73 | 
| 51 | 74 1; | 
|  | 75 | 
|  | 76 __END__ | 
|  | 77 | 
|  | 78 =pod | 
|  | 79 | 
| 71 | 80 =head1 NAME | 
|  | 81 | 
| 180 | 82 C<IMPL::Security::Auth::Simple> Модуль простой авторизации. | 
| 71 | 83 | 
| 51 | 84 =head1 DESCRIPTION | 
|  | 85 | 
| 180 | 86 Использует алгоритм MD5 для хранения образа пароля. | 
| 71 | 87 | 
| 72 | 88 =head1 MEMBERS | 
| 71 | 89 | 
| 72 | 90 =over | 
|  | 91 | 
| 81 | 92 =item C<CTOR($secData)> | 
|  | 93 | 
| 180 | 94 Создает объект аутентификации, передавая ему данные для инициализации. | 
| 81 | 95 | 
|  | 96 =item C<[get]secData> | 
|  | 97 | 
| 180 | 98 Возвращает данные безопасности, которые можно использовать для восстановления | 
|  | 99 состояния объекта. | 
| 81 | 100 | 
|  | 101 =item C<[get]isTrusted> | 
|  | 102 | 
| 180 | 103 Является ли объект доверенным для аутентификации сессии (тоесть хранит данные | 
|  | 104 для аутентификации сессии). | 
| 81 | 105 | 
| 72 | 106 =item C<DoAuth($challenge)> | 
|  | 107 | 
| 180 | 108 Аутентифицирует пользователя. Используется один этап. C<$challenge> | 
|  | 109 открытый пароль пользователя. | 
| 72 | 110 | 
| 180 | 111 Возвращает C<($status,$challenge)> | 
| 72 | 112 | 
|  | 113 =over | 
|  | 114 | 
|  | 115 =item C<$status> | 
|  | 116 | 
| 180 | 117 Результат либо C<AUTH_SUCCESS>, либо C<AUTH_FAIL> | 
| 72 | 118 | 
| 73 | 119 =item C<$challenge> | 
|  | 120 | 
| 180 | 121 В случае успеха возвращает cookie (уникальный номер) сессии | 
| 73 | 122 | 
|  | 123 =back | 
|  | 124 | 
|  | 125 =item C<ValidateSession($challenge)> | 
|  | 126 | 
| 180 | 127 Проверяет аутентичность сессии. Использует один этап. C<$challenge> cookie | 
|  | 128 сессии, полученный при выполнении метода C<DoAuth>. | 
| 73 | 129 | 
| 180 | 130 Возвращает C<($status,$challenge)> | 
| 73 | 131 | 
|  | 132 =over | 
|  | 133 | 
|  | 134 =item C<$status> | 
|  | 135 | 
| 180 | 136 Результат либо C<AUTH_SUCCESS>, либо C<AUTH_FAIL> | 
| 73 | 137 | 
|  | 138 =item C<$challenge> | 
|  | 139 | 
| 180 | 140 Всегда C<undef> | 
| 72 | 141 | 
|  | 142 =back | 
|  | 143 | 
|  | 144 =back | 
| 51 | 145 | 
| 180 | 146 =cut |