comparison Lib/IMPL/Web/Handler/SecureCookie.pm @ 238:b8c724f6de36

DOM model refactoring TT view refactoring, controls are no longer derived from DOM nodes bugfixes
author sergey
date Tue, 16 Oct 2012 01:33:06 +0400
parents 3cebcf6fdb9b
children 23daf2fae33a
comparison
equal deleted inserted replaced
237:61db68166c37 238:b8c724f6de36
6 use IMPL::Const qw(:prop); 6 use IMPL::Const qw(:prop);
7 use IMPL::Security::Auth qw(:Const GenSSID); 7 use IMPL::Security::Auth qw(:Const GenSSID);
8 use IMPL::declare { 8 use IMPL::declare {
9 require => { 9 require => {
10 SecurityContext => 'IMPL::Security::Context', 10 SecurityContext => 'IMPL::Security::Context',
11 User => 'IMPL::Security::User', 11 User => 'IMPL::Security::Principal',
12 AuthSimple => 'IMPL::Security::Auth::Simple', 12 AuthSimple => 'IMPL::Security::Auth::Simple',
13 Exception => 'IMPL::Exception', 13 Exception => 'IMPL::Exception',
14 OperationException => '-IMPL::InvalidOperationException', 14 OperationException => '-IMPL::InvalidOperationException',
15 HttpResponse => '-IMPL::Web::HttpResponse' 15 HttpResponse => '-IMPL::Web::HttpResponse'
16 }, 16 },
19 'IMPL::Object::Autofill' => '@_', 19 'IMPL::Object::Autofill' => '@_',
20 'IMPL::Object::Serializable' => undef 20 'IMPL::Object::Serializable' => undef
21 }, 21 },
22 props => [ 22 props => [
23 salt => PROP_RO, 23 salt => PROP_RO,
24 manager => PROP_RO, 24 _manager => PROP_RO,
25 _cookies => PROP_RW 25 _cookies => PROP_RW
26 ] 26 ]
27 }; 27 };
28 28
29 sub CTOR { 29 sub CTOR {
36 my ($this,$action,$nextHandler) = @_; 36 my ($this,$action,$nextHandler) = @_;
37 37
38 return unless $nextHandler; 38 return unless $nextHandler;
39 39
40 my $context; 40 my $context;
41 $this->_manager($action->application->security);
41 42
42 43
43 my $sid = $action->cookie('sid',qr/(\w+)/); 44 my $sid = $action->cookie('sid',qr/(\w+)/);
44 my $cookie = $action->cookie('sdata',qr/(\w+)/); 45 my $cookie = $action->cookie('sdata',qr/(\w+)/);
45 my $sign = $action->cookie('sign',qw/(\w+)/); 46 my $sign = $action->cookie('sign',qw/(\w+)/);
54 $cookie, 55 $cookie,
55 $this->salt 56 $this->salt
56 ) 57 )
57 ) { 58 ) {
58 # TODO: add a DefferedProxy to deffer a request to a data source 59 # TODO: add a DefferedProxy to deffer a request to a data source
59 if ( $context = $this->manager->GetSession($sid) ) { 60 if ( $context = $this->_manager->GetSession($sid) ) {
60 61
61 if ( eval { $context->auth->isa(AuthSimple) } ) { 62 if ( eval { $context->auth->isa(AuthSimple) } ) {
62 my ($result,$challenge) = $context->auth->DoAuth($cookie); 63 my ($result,$challenge) = $context->auth->DoAuth($cookie);
63 64
64 $action->manager->SaveSession($context); 65 $action->_manager->SaveSession($context);
65 66
66 if ($result == AUTH_FAIL) { 67 if ($result == AUTH_FAIL) {
67 $context = undef; 68 $context = undef;
68 } 69 }
69 } 70 }
71 72
72 } 73 }
73 74
74 $context ||= SecurityContext->new(principal => User->nobody, authority => $this); 75 $context ||= SecurityContext->new(principal => User->nobody, authority => $this);
75 76
76 my $httpResponse = $context->Impersonate($nextHandler); 77 my $httpResponse = $context->Impersonate($nextHandler,$action);
77 78
78 die OperationException->new("A HttpResponse instance is expected") 79 die OperationException->new("A HttpResponse instance is expected")
79 unless ref $httpResponse && eval { $httpResponse->isa(HttpResponse) }; 80 unless ref $httpResponse && eval { $httpResponse->isa(HttpResponse) };
80 81
81 return $this->WriteResponse($httpResponse); 82 return $this->WriteResponse($httpResponse);
88 my $cookie = GenSSID(); 89 my $cookie = GenSSID();
89 90
90 $this->_cookies({ 91 $this->_cookies({
91 sid => $sid, 92 sid => $sid,
92 sdata => $cookie 93 sdata => $cookie
93 }) 94 });
94 95
95 my $context = $this->$manager->CreateSession( 96 my $context = $this->_manager->CreateSession(
96 sessionId => $sid, 97 sessionId => $sid,
97 principal => $user, 98 principal => $user,
98 auth => AuthSimple->Create(password => $cookie), 99 auth => AuthSimple->Create(password => $cookie),
99 authority => $this, 100 authority => $this,
100 assignedRoles => $roles 101 assignedRoles => $roles
106 } 107 }
107 108
108 sub WriteResponse { 109 sub WriteResponse {
109 my ($this,$response) = @_; 110 my ($this,$response) = @_;
110 111
111 if (my $data $this->_cookies) { 112 if (my $data = $this->_cookies) {
112 113
113 my $sign = md5_hex( 114 my $sign = md5_hex(
114 $this->salt, 115 $this->salt,
115 $data->{sid}, 116 $data->{sid},
116 $data->{sdata}, 117 $data->{sdata},
150 151
151 =head2 C<[get,set] salt> 152 =head2 C<[get,set] salt>
152 153
153 Скаляр, использующийся для подписи данных. 154 Скаляр, использующийся для подписи данных.
154 155
155 =head2 C<[get,set] manager>
156
157 Реализация менеджера безопасности, отвечающая за реализацию взаимодействия с
158 моделью безопасности.
159 156
160 =head2 C<InitSession($user,$auth,$roles)> 157 =head2 C<InitSession($user,$auth,$roles)>
161 158
162 =cut 159 =cut