Mercurial > pub > Impl
comparison Lib/IMPL/Web/Security.pm @ 239:23daf2fae33a
*security subsytem bugfixes
*HttpResponse: cookies which values are set to undefined will be deleted from browser
author | sergey |
---|---|
date | Tue, 16 Oct 2012 20:14:11 +0400 |
parents | 3cebcf6fdb9b |
children | 63709a4e6da0 |
comparison
equal
deleted
inserted
replaced
238:b8c724f6de36 | 239:23daf2fae33a |
---|---|
11 }; | 11 }; |
12 | 12 |
13 use constant { | 13 use constant { |
14 ERR_NO_SUCH_USER => -1, | 14 ERR_NO_SUCH_USER => -1, |
15 ERR_NO_SEC_DATA => -2, | 15 ERR_NO_SEC_DATA => -2, |
16 ERR_AUTH_FAIL => -3 | 16 ERR_NO_AUTHORITY => -3, |
17 ERR_NO_SEC_CONTEXT => -4, | |
18 ERR_AUTH_FAIL => -5 | |
17 }; | 19 }; |
18 | 20 |
19 sub AuthUser { | 21 sub AuthUser { |
20 my ($this,$name,$package,$challenge) = @_; | 22 my ($this,$name,$package,$challenge) = @_; |
21 | 23 |
22 my $user = $this->FindUserByName($name) | 24 my $user = $this->FindUserByName($name) |
23 or return { | 25 or return { |
24 status => AUTH_FAIL, | 26 status => AUTH_FAIL, |
25 code => ERR_NO_SUCH_USER | 27 code => ERR_NO_SUCH_USER |
26 }; | 28 }; |
27 | 29 |
28 my $auth; | 30 my $auth; |
29 if ( my $secData = $user->GetSecData($package) ) { | 31 if ( my $secData = $user->GetSecData($package) ) { |
30 $auth = $package->new($secData); | 32 $auth = $package->new($secData); |
31 } else { | 33 } else { |
32 return { | 34 return { |
34 code => ERR_NO_SEC_DATA, | 36 code => ERR_NO_SEC_DATA, |
35 user => $user | 37 user => $user |
36 }; | 38 }; |
37 } | 39 } |
38 | 40 |
41 return { | |
42 status => AUTH_FAIL, | |
43 code => ERR_NO_SEC_CONTEXT | |
44 } unless SecurityContext->current; | |
45 | |
46 return { | |
47 status => AUTH_FAIL, | |
48 code => ERR_NO_AUTHORITY | |
49 } unless SecurityContext->current->authority; | |
50 | |
39 my $status = SecurityContext->current->authority->InitSession( | 51 my $status = SecurityContext->current->authority->InitSession( |
40 $user, | 52 $user, |
53 [$user->roles], | |
41 $auth, | 54 $auth, |
42 [$user->roles] | 55 $challenge |
43 ); | 56 ); |
44 | 57 |
45 return { | 58 return { |
46 status => $status, | 59 status => $status, |
47 code => ($status == AUTH_FAIL ? ERR_AUTH_FAIL : 0), | 60 code => ($status == AUTH_FAIL ? ERR_AUTH_FAIL : 0), |
48 user => $user | 61 user => $user |
49 }; | 62 }; |
63 } | |
64 | |
65 sub Logout { | |
66 my ($this) = @_; | |
67 | |
68 my $session = SecurityContext->current; | |
69 if($session && $session->authority) { | |
70 $session->authority->CloseSession($session); | |
71 | |
72 $this->CloseSession($session); | |
73 } | |
50 } | 74 } |
51 | 75 |
52 sub FindUserByName { | 76 sub FindUserByName { |
53 die NotImplementedException->new(); | 77 die NotImplementedException->new(); |
54 } | 78 } |
61 die NotImplementedException->new(); | 85 die NotImplementedException->new(); |
62 } | 86 } |
63 | 87 |
64 sub SaveSession { | 88 sub SaveSession { |
65 die NotImplementedException->new(); | 89 die NotImplementedException->new(); |
90 } | |
91 | |
92 sub CloseSession { | |
93 die NotImplementedException->new(); | |
66 } | 94 } |
67 | 95 |
68 1; | 96 1; |
69 | 97 |
70 __END__ | 98 __END__ |