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>