Mercurial > pub > Impl
comparison Lib/IMPL/Web/QueryHandler/SecureCookie.pm @ 95:67eb8eaec3d4
Added a security authority property to the Context and Security classes
Added a WriteResponse method to the SecureCookie class
Added a setCookie method to the Response class
author | wizard |
---|---|
date | Thu, 29 Apr 2010 02:21:27 +0400 |
parents | 3d1f584aea60 |
children | 964587c5183c |
comparison
equal
deleted
inserted
replaced
94:79bf75223afe | 95:67eb8eaec3d4 |
---|---|
1 package IMPL::Web::QueryHandler::SecureCookie; | 1 package IMPL::Web::QueryHandler::SecureCookie; |
2 use strict; | |
2 | 3 |
3 use base qw(IMPL::Web::QueryHandler); | 4 use base qw(IMPL::Web::QueryHandler); |
4 use Digest::MD5 qw(md5_hex); | 5 use Digest::MD5 qw(md5_hex); |
5 | 6 |
6 use IMPL::Class::Property; | 7 use IMPL::Class::Property; |
7 use IMPL::Security::Auth qw(:Const); | 8 use IMPL::Security::Auth qw(:Const); |
9 use IMPL::Security; | |
8 | 10 |
9 BEGIN { | 11 BEGIN { |
10 public property salt => prop_all; | 12 public property salt => prop_all; |
11 } | 13 } |
12 | 14 |
38 $sid, | 40 $sid, |
39 $cookie, | 41 $cookie, |
40 $this->salt | 42 $this->salt |
41 ) | 43 ) |
42 ) { | 44 ) { |
45 local $IMPL::Security::authority = $this; | |
43 | 46 |
44 my $context = $action->application->security->sourceSession->find( | 47 my $context = $action->application->security->sourceSession->find( |
45 { id => $sid } | 48 { id => $sid } |
46 ) or return $nextHandler->(); | 49 ) or return $nextHandler->(); |
47 | 50 |
48 my ($result,$challenge) = $context->auth->ValidateSession($cookie); | 51 my ($result,$challenge) = $context->auth->ValidateSession($cookie); |
49 | 52 |
50 if ($result == AUTH_SUCCESS) { | 53 if ($result == AUTH_SUCCESS) { |
54 $context->authority($this); | |
51 return $context->Impersonate($nextHandler); | 55 return $context->Impersonate($nextHandler); |
52 } else { | 56 } else { |
53 return $nextHandler->(); | 57 return $nextHandler->(); |
54 } | 58 } |
55 } | 59 } |
56 } else { | 60 } else { |
57 die new IMPL::Exception("Unknown auth method",$method); | 61 die new IMPL::Exception("Unknown auth method",$method); |
58 } | 62 } |
63 } | |
64 | |
65 sub WriteResponse { | |
66 my ($this,$response,$sid,$cookie,$method) = @_; | |
67 | |
68 my $sign = md5_hex( | |
69 $this->salt, | |
70 $sid, | |
71 $cookie, | |
72 $this->salt | |
73 ); | |
74 | |
75 $this->setCookie(sid => $sid); | |
76 $this->setCookie(sdata => $cookie); | |
77 $this->setCookie(sign => $sign); | |
78 $this->setCookie(method => $method) if $method; | |
59 } | 79 } |
60 | 80 |
61 1; | 81 1; |
62 | 82 |
63 __END__ | 83 __END__ |