Mercurial > pub > Impl
comparison Lib/IMPL/Web/Security.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 | 6d8092d8ce1b |
comparison
equal
deleted
inserted
replaced
193:8e8401c0aea4 | 194:4d0e1962161c |
---|---|
8 use IMPL::Security::Auth qw(:Const); | 8 use IMPL::Security::Auth qw(:Const); |
9 | 9 |
10 __PACKAGE__->PassThroughArgs; | 10 __PACKAGE__->PassThroughArgs; |
11 | 11 |
12 BEGIN { | 12 BEGIN { |
13 public property sourceUser => prop_all; | 13 public property sourceUser => prop_all; |
14 public property sourceSession => prop_all; | 14 public property sourceSession => prop_all; |
15 } | 15 } |
16 | 16 |
17 sub CTOR { | 17 sub CTOR { |
18 my ($this) = @_; | 18 my ($this) = @_; |
19 | 19 |
20 die new IMPL::InvalidArgumentException("An argument is required",'sourceUser') unless $this->sourceUser; | 20 die new IMPL::InvalidArgumentException("An argument is required",'sourceUser') unless $this->sourceUser; |
21 die new IMPL::InvalidArgumentException("An argument is required",'sourceSession') unless $this->sourceSession; | 21 die new IMPL::InvalidArgumentException("An argument is required",'sourceSession') unless $this->sourceSession; |
22 } | 22 } |
23 | 23 |
24 sub AuthUser { | 24 sub AuthUser { |
25 my ($this,$name,$package,$challenge) = @_; | 25 my ($this,$name,$package,$challenge) = @_; |
26 | 26 |
27 my $user = $this->sourceUser->find({name => $name}) or return { status => AUTH_FAIL, answer => "Can't find a user '$name'" }; | 27 my $user = $this->sourceUser->find({name => $name}) or return { status => AUTH_FAIL, answer => "Can't find a user '$name'" }; |
28 | 28 |
29 my $auth; | 29 my $auth; |
30 if ( my $secData = $user->secData($package) ) { | 30 if ( my $secData = $user->secData($package) ) { |
31 $auth = $package->new($secData); | 31 $auth = $package->new($secData); |
32 } else { | 32 } else { |
33 die new IMPL::SecurityException("Authentication failed","A sec data for the $package isn't found"); | 33 die new IMPL::SecurityException("Authentication failed","A sec data for the $package isn't found"); |
34 } | 34 } |
35 | 35 |
36 my ($status,$answer) = $auth->DoAuth($challenge); | 36 my ($status,$answer) = $auth->DoAuth($challenge); |
37 | 37 |
38 return { | 38 return { |
39 status => $status, | 39 status => $status, |
40 answer => $answer, | 40 answer => $answer, |
41 context => $this->MakeContext( $user, [$user->roles], $auth ) | 41 context => $this->MakeContext( $user, [$user->roles], $auth ) |
42 } | 42 } |
43 } | 43 } |
44 | 44 |
45 sub MakeContext { | 45 sub MakeContext { |
46 my ($this,$principal,$roles,$auth) = @_; | 46 my ($this,$principal,$roles,$auth) = @_; |
47 | 47 |
48 return $this->sourceSession->create( | 48 return $this->sourceSession->create( |
49 { | 49 { |
50 principal => $principal, | 50 principal => $principal, |
51 rolesAssigned => $roles, | 51 rolesAssigned => $roles, |
52 auth => $auth | 52 auth => $auth |
53 } | 53 } |
54 ); | 54 ); |
55 } | 55 } |
56 | 56 |
57 1; | 57 1; |
58 | 58 |
59 __END__ | 59 __END__ |
67 =head1 SINOPSYS | 67 =head1 SINOPSYS |
68 | 68 |
69 =begin code xml | 69 =begin code xml |
70 | 70 |
71 <security type='IMPL::Config::Activator'> | 71 <security type='IMPL::Config::Activator'> |
72 <factory>IMPL::Web::Security</factory> | 72 <factory>IMPL::Web::Security</factory> |
73 <parameters type='HASH'> | 73 <parameters type='HASH'> |
74 <sessionFactory type='IMPL::Object::Factory'> | 74 <sessionFactory type='IMPL::Object::Factory'> |
75 <factory type='IMPL::Object::Factory'>App::Data::Session</factory> | 75 <factory type='IMPL::Object::Factory'>App::Data::Session</factory> |
76 <method>insert</method> | 76 <method>insert</method> |
77 </sessionFactory> | 77 </sessionFactory> |
78 </parameters> | 78 </parameters> |
79 </security> | 79 </security> |
80 | 80 |
81 =end code xml | 81 =end code xml |
82 | 82 |
83 =head1 DESCRIPTION | 83 =head1 DESCRIPTION |