Mercurial > pub > Impl
diff 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 |
line wrap: on
line diff
--- a/Lib/IMPL/Security/Auth/Simple.pm Wed Apr 07 01:05:02 2010 +0400 +++ b/Lib/IMPL/Security/Auth/Simple.pm Wed Apr 07 14:45:34 2010 +0400 @@ -1,12 +1,13 @@ package IMPL::Security::Auth::Simple; use strict; -use base qw(IMPL::Security::Auth); +use base qw(IMPL::Object IMPL::Security::Auth); use Digest::MD5; use IMPL::Class::Property; +use IMPL::Security::Auth qw(:Const); -BEGIN { +BEGIN { private property _passwordImage => prop_all; private property _sessionCookie => prop_all; } @@ -14,7 +15,26 @@ sub CTOR { my ($this,$secData) = @_; - $this->_passwordImage($secData); + my ($passImg,$cookie) = split /|/,$secData; + + $this->_passwordImage($passImg); + $this->_sessionCookie($cookie); +} + +sub secData { + my ($this) = @_; + + if ($this->_sessionCookie) { + return join ('|',$this->_passwordImage, $this->_sessionCookie ); + } else { + return $this->_passwordImage; + } +} + +sub isTrusted { + my ($this) = @_; + + $this->_sessionCookie ? 1 : 0; } sub DoAuth { @@ -23,13 +43,15 @@ if (Digest::MD5::md5_hex($challenge) eq $this->_passwordImage) { return (AUTH_SUCCESS,$this->_sessionCookie($this->GenSSID)); } elsee { - return (AUTH_FAIL,undef); + return (AUTH_FAIL,$this->_sessionCookie(undef)); } } sub ValidateSession { my ($this,$cookie) = @_; + die new IMPL::InvalidOperationException("The context is untrusted") unless $this->_sessionCookie; + if ($cookie eq $this->_sessionCookie) { return (AUTH_SUCCESS,undef); } else { @@ -67,6 +89,20 @@ =over +=item C<CTOR($secData)> + +Создает объект аутентификации, передавая ему данные для инициализации. + +=item C<[get]secData> + +Возвращает данные безопасности, которые можно использовать для восстановления +состояния объекта. + +=item C<[get]isTrusted> + +Является ли объект доверенным для аутентификации сессии (тоесть хранит данные +для аутентификации сессии). + =item C<DoAuth($challenge)> Аутентифицирует пользователя. Используется один этап. C<$challenge>