Mercurial > pub > Impl
comparison Lib/IMPL/Web/QueryHandler/SecureCookie.pm @ 194:4d0e1962161c
Replaced tabs with spaces
IMPL::Web::View - fixed document model, new features (control classes, document constructor parameters)
author | cin |
---|---|
date | Tue, 10 Apr 2012 20:08:29 +0400 |
parents | d1676be8afcc |
children |
comparison
equal
deleted
inserted
replaced
193:8e8401c0aea4 | 194:4d0e1962161c |
---|---|
7 use IMPL::Class::Property; | 7 use IMPL::Class::Property; |
8 use IMPL::Security::Auth qw(:Const); | 8 use IMPL::Security::Auth qw(:Const); |
9 use IMPL::Security; | 9 use IMPL::Security; |
10 | 10 |
11 BEGIN { | 11 BEGIN { |
12 public property salt => prop_all; | 12 public property salt => prop_all; |
13 } | 13 } |
14 | 14 |
15 sub CTOR { | 15 sub CTOR { |
16 my ($this) = @_; | 16 my ($this) = @_; |
17 | 17 |
18 $this->salt('DeadBeef') unless $this->salt; | 18 $this->salt('DeadBeef') unless $this->salt; |
19 } | 19 } |
20 | 20 |
21 sub Process { | 21 sub Process { |
22 my ($this,$action,$nextHandler) = @_; | 22 my ($this,$action,$nextHandler) = @_; |
23 | 23 |
24 return undef unless $nextHandler; | 24 return undef unless $nextHandler; |
25 | 25 |
26 local $IMPL::Security::authority = $this; | 26 local $IMPL::Security::authority = $this; |
27 | 27 |
28 my $method = $action->query->cookie('method') || 'simple'; | 28 my $method = $action->query->cookie('method') || 'simple'; |
29 | 29 |
30 if ($method eq 'simple') { | 30 if ($method eq 'simple') { |
31 | 31 |
32 my $sid = $action->query->cookie('sid'); | 32 my $sid = $action->query->cookie('sid'); |
33 my $cookie = $action->query->cookie('sdata'); | 33 my $cookie = $action->query->cookie('sdata'); |
34 my $sign = $action->query->cookie('sign'); | 34 my $sign = $action->query->cookie('sign'); |
35 | 35 |
36 if ( | 36 if ( |
37 $sid and | 37 $sid and |
38 $cookie and | 38 $cookie and |
39 $sign and | 39 $sign and |
40 $sign eq md5_hex( | 40 $sign eq md5_hex( |
41 $this->salt, | 41 $this->salt, |
42 $sid, | 42 $sid, |
43 $cookie, | 43 $cookie, |
44 $this->salt | 44 $this->salt |
45 ) | 45 ) |
46 ) { | 46 ) { |
47 # TODO: add a DefferedProxy to deffer a request to a data source | 47 # TODO: add a DefferedProxy to deffer a request to a data source |
48 my $context = $action->application->security->sourceSession->find( | 48 my $context = $action->application->security->sourceSession->find( |
49 { id => $sid } | 49 { id => $sid } |
50 ) or return $nextHandler->(); | 50 ) or return $nextHandler->(); |
51 | 51 |
52 my ($result,$challenge) = $context->auth->ValidateSession($cookie); | 52 my ($result,$challenge) = $context->auth->ValidateSession($cookie); |
53 | 53 |
54 if ($result == AUTH_SUCCESS) { | 54 if ($result == AUTH_SUCCESS) { |
55 $context->authority($this); | 55 $context->authority($this); |
56 return $context->Impersonate($nextHandler); | 56 return $context->Impersonate($nextHandler); |
57 } else { | 57 } else { |
58 return $nextHandler->(); | 58 return $nextHandler->(); |
59 } | 59 } |
60 } else { | 60 } else { |
61 return $nextHandler->(); | 61 return $nextHandler->(); |
62 } | 62 } |
63 } else { | 63 } else { |
64 return $nextHandler->(); | 64 return $nextHandler->(); |
65 } | 65 } |
66 } | 66 } |
67 | 67 |
68 sub WriteResponse { | 68 sub WriteResponse { |
69 my ($this,$response,$sid,$cookie,$method) = @_; | 69 my ($this,$response,$sid,$cookie,$method) = @_; |
70 | 70 |
71 my $sign = md5_hex( | 71 my $sign = md5_hex( |
72 $this->salt, | 72 $this->salt, |
73 $sid, | 73 $sid, |
74 $cookie, | 74 $cookie, |
75 $this->salt | 75 $this->salt |
76 ); | 76 ); |
77 | 77 |
78 $response->setCookie(sid => $sid); | 78 $response->setCookie(sid => $sid); |
79 $response->setCookie(sdata => $cookie); | 79 $response->setCookie(sdata => $cookie); |
80 $response->setCookie(sign => $sign); | 80 $response->setCookie(sign => $sign); |
81 $response->setCookie(method => $method) if $method; | 81 $response->setCookie(method => $method) if $method; |
82 } | 82 } |
83 | 83 |
84 1; | 84 1; |
85 | 85 |
86 __END__ | 86 __END__ |