changeset 68:739f1288ca84

Auth in progress
author wizard
date Tue, 23 Mar 2010 16:55:25 +0300
parents 9f5795a10939
children 8c7b88bdb663
files Lib/IMPL/Security/Auth.pm Lib/IMPL/Security/Auth/Simple.pm Lib/IMPL/Security/Context.pm Lib/IMPL/Web/QueryHandler/AuthCookie.pm
diffstat 4 files changed, 45 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/Security/Auth.pm	Fri Mar 19 20:06:12 2010 +0300
+++ b/Lib/IMPL/Security/Auth.pm	Tue Mar 23 16:55:25 2010 +0300
@@ -28,21 +28,11 @@
 
 =head1 DESCRIPTION
 
-Базовыйы модуль для авторизации пользователей.
-
-Процесс авторизации состоит зи следующих шагов
+Базовыйы объект для авторизации.
 
-1. Клиент отправляет на сервер запрос для авторизации с начальными параметрами.
-2. Сервер получает запрос, находит данные аутентификации для клиента,
-производит аутентификацию
-3. Модуль аутентификации возвращает результат, на основе которого
-либо формируется контекст безопасности, либо продолжается процесс аутентификации
+В процессе авторизации клиент и сервер обмениеваются данными безопасности C<$challenge>.
 
-Полученный контекст безопасности содержит объект для доступа к сессии аутентификации,
-в которм содержится уникальные свойства сессии, например идентификатор, сеансовые ключи
-и т.д. 
-
-Пакет аутентификации должен иметь следующий интерфейс
+При этом
 
 =over
 
--- a/Lib/IMPL/Security/Auth/Simple.pm	Fri Mar 19 20:06:12 2010 +0300
+++ b/Lib/IMPL/Security/Auth/Simple.pm	Tue Mar 23 16:55:25 2010 +0300
@@ -2,7 +2,6 @@
 
 use base qw(IMPL::Security::Auth);
 use Digest::MD5;
-import IMPL::Security::Auth qw(:Const GenSSID);
 
 use IMPL::Class::Property;
 
@@ -21,7 +20,7 @@
 	my ($this,$challenge) = @_;
 
 	if (Digest::MD5::md5_hex($challenge) eq $this->_passwordImage) {
-		return (SUCCESS,$this->_sessionCookie(GenSSID));
+		return (SUCCESS,$this->_sessionCookie($this->GenSSID));
 	} elsee {
 		return (FAIL,undef);
 	}
--- a/Lib/IMPL/Security/Context.pm	Fri Mar 19 20:06:12 2010 +0300
+++ b/Lib/IMPL/Security/Context.pm	Tue Mar 23 16:55:25 2010 +0300
@@ -12,9 +12,9 @@
 my $nobody;
 
 BEGIN {
-    public property Principal => prop_get;
-    public property AssignedRoles => prop_all | prop_list;
-    public property AuthSession => prop_all;
+    public property principal => prop_get;
+    public property rolesAssigned => prop_all | prop_list;
+    public property auth => prop_all;
 }
 
 sub Impersonate {
@@ -36,7 +36,7 @@
 
 sub contextNobody {
     my ($self) = @_;
-    $nobody = $self->new(Principal => IMPL::Security::Principal->nobody, AssignedRoles => undef) unless $nobody;
+    $nobody = $self->new(principal => IMPL::Security::Principal->nobody, rolesAssigned => undef) unless $nobody;
     $nobody;
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/Web/QueryHandler/AuthCookie.pm	Tue Mar 23 16:55:25 2010 +0300
@@ -0,0 +1,37 @@
+package IMPL::Web::QueryHandler::AuthCookie;
+
+use base qw(IMPL::Web::QueryHandler);
+use Digest::MD5 qw(md5_hex);
+
+use IMPL::Class::Property;
+
+BEGIN {
+	public property salt => prop_all;
+}
+
+sub Process {
+	my ($this,$action,$nextHandler) = @_;
+	
+	my $method = $action->query->cookie('method') || 'simple';
+	
+	if ($method eq 'simple') {
+		
+		if ($action->query->cookie('sign') eq md5_hex(
+			$this->salt,
+			$action->query->cookie('sid'),
+			$this->salt
+		) ) {
+			
+			my $context = $action->application->security->Session($action->query->cookie('sid'));
+			
+			$context->auth->
+			
+		}
+				
+	} else {
+		die new IMPL::Exception("Unknown auth method",$method);
+	}
+}
+
+
+1;
\ No newline at end of file