Mercurial > pub > Impl
comparison Lib/IMPL/Security/Auth/Simple.pm @ 81:077357224bec
IMPL::Web::Security alpha version
IMPL::Security improovements
| author | Sergey |
|---|---|
| date | Wed, 07 Apr 2010 14:45:34 +0400 |
| parents | 2f31ecabe9ea |
| children | 6d3bca490556 |
comparison
equal
deleted
inserted
replaced
| 80:f017c0d7527c | 81:077357224bec |
|---|---|
| 1 package IMPL::Security::Auth::Simple; | 1 package IMPL::Security::Auth::Simple; |
| 2 use strict; | 2 use strict; |
| 3 | 3 |
| 4 use base qw(IMPL::Security::Auth); | 4 use base qw(IMPL::Object IMPL::Security::Auth); |
| 5 use Digest::MD5; | 5 use Digest::MD5; |
| 6 | 6 |
| 7 use IMPL::Class::Property; | 7 use IMPL::Class::Property; |
| 8 use IMPL::Security::Auth qw(:Const); | |
| 8 | 9 |
| 9 BEGIN { | 10 BEGIN { |
| 10 private property _passwordImage => prop_all; | 11 private property _passwordImage => prop_all; |
| 11 private property _sessionCookie => prop_all; | 12 private property _sessionCookie => prop_all; |
| 12 } | 13 } |
| 13 | 14 |
| 14 sub CTOR { | 15 sub CTOR { |
| 15 my ($this,$secData) = @_; | 16 my ($this,$secData) = @_; |
| 16 | 17 |
| 17 $this->_passwordImage($secData); | 18 my ($passImg,$cookie) = split /|/,$secData; |
| 19 | |
| 20 $this->_passwordImage($passImg); | |
| 21 $this->_sessionCookie($cookie); | |
| 22 } | |
| 23 | |
| 24 sub secData { | |
| 25 my ($this) = @_; | |
| 26 | |
| 27 if ($this->_sessionCookie) { | |
| 28 return join ('|',$this->_passwordImage, $this->_sessionCookie ); | |
| 29 } else { | |
| 30 return $this->_passwordImage; | |
| 31 } | |
| 32 } | |
| 33 | |
| 34 sub isTrusted { | |
| 35 my ($this) = @_; | |
| 36 | |
| 37 $this->_sessionCookie ? 1 : 0; | |
| 18 } | 38 } |
| 19 | 39 |
| 20 sub DoAuth { | 40 sub DoAuth { |
| 21 my ($this,$challenge) = @_; | 41 my ($this,$challenge) = @_; |
| 22 | 42 |
| 23 if (Digest::MD5::md5_hex($challenge) eq $this->_passwordImage) { | 43 if (Digest::MD5::md5_hex($challenge) eq $this->_passwordImage) { |
| 24 return (AUTH_SUCCESS,$this->_sessionCookie($this->GenSSID)); | 44 return (AUTH_SUCCESS,$this->_sessionCookie($this->GenSSID)); |
| 25 } elsee { | 45 } elsee { |
| 26 return (AUTH_FAIL,undef); | 46 return (AUTH_FAIL,$this->_sessionCookie(undef)); |
| 27 } | 47 } |
| 28 } | 48 } |
| 29 | 49 |
| 30 sub ValidateSession { | 50 sub ValidateSession { |
| 31 my ($this,$cookie) = @_; | 51 my ($this,$cookie) = @_; |
| 52 | |
| 53 die new IMPL::InvalidOperationException("The context is untrusted") unless $this->_sessionCookie; | |
| 32 | 54 |
| 33 if ($cookie eq $this->_sessionCookie) { | 55 if ($cookie eq $this->_sessionCookie) { |
| 34 return (AUTH_SUCCESS,undef); | 56 return (AUTH_SUCCESS,undef); |
| 35 } else { | 57 } else { |
| 36 return (AUTH_FAIL,undef); | 58 return (AUTH_FAIL,undef); |
| 64 Использует алгоритм MD5 для хранения образа пароля. | 86 Использует алгоритм MD5 для хранения образа пароля. |
| 65 | 87 |
| 66 =head1 MEMBERS | 88 =head1 MEMBERS |
| 67 | 89 |
| 68 =over | 90 =over |
| 91 | |
| 92 =item C<CTOR($secData)> | |
| 93 | |
| 94 Создает объект аутентификации, передавая ему данные для инициализации. | |
| 95 | |
| 96 =item C<[get]secData> | |
| 97 | |
| 98 Возвращает данные безопасности, которые можно использовать для восстановления | |
| 99 состояния объекта. | |
| 100 | |
| 101 =item C<[get]isTrusted> | |
| 102 | |
| 103 Является ли объект доверенным для аутентификации сессии (тоесть хранит данные | |
| 104 для аутентификации сессии). | |
| 69 | 105 |
| 70 =item C<DoAuth($challenge)> | 106 =item C<DoAuth($challenge)> |
| 71 | 107 |
| 72 Аутентифицирует пользователя. Используется один этап. C<$challenge> | 108 Аутентифицирует пользователя. Используется один этап. C<$challenge> |
| 73 открытый пароль пользователя. | 109 открытый пароль пользователя. |
