Mercurial > pub > Impl
comparison Lib/IMPL/Web/Application.pm @ 97:964587c5183c
Added SecureCall to Web QueryHandlers stack
many bug fixes to Security and Web Application modules
author | wizard |
---|---|
date | Tue, 04 May 2010 04:04:37 +0400 |
parents | 2f31ecabe9ea |
children | 6dd659f6f66c |
comparison
equal
deleted
inserted
replaced
96:4c55aed00ff2 | 97:964587c5183c |
---|---|
17 public property actionFactory => prop_all; | 17 public property actionFactory => prop_all; |
18 public property handlersQuery => prop_all | prop_list; | 18 public property handlersQuery => prop_all | prop_list; |
19 public property responseCharset => prop_all; | 19 public property responseCharset => prop_all; |
20 public property security => prop_all; | 20 public property security => prop_all; |
21 public property options => prop_all; | 21 public property options => prop_all; |
22 public property fetchRequestMethod => prop_all; | |
22 } | 23 } |
23 | 24 |
24 sub CTOR { | 25 sub CTOR { |
25 my ($this) = @_; | 26 my ($this) = @_; |
26 | 27 |
27 $this->actionFactory('IMPL::Web::Application::Action') unless $this->actionFactory; | 28 $this->actionFactory('IMPL::Web::Application::Action') unless $this->actionFactory; |
28 $this->responseCharset('utf-8') unless $this->responseCharset; | 29 $this->responseCharset('utf-8') unless $this->responseCharset; |
30 $this->fetchRequestMethod(\&defaultFetchRequest) unless $this->fetchRequestMethod; | |
31 $this->handlerError(\&defaultHandlerError) unless $this->handlerError; | |
29 } | 32 } |
30 | 33 |
31 sub Run { | 34 sub Run { |
32 my ($this) = @_; | 35 my ($this) = @_; |
33 | 36 |
36 my $action = $this->actionFactory->new( | 39 my $action = $this->actionFactory->new( |
37 query => $query, | 40 query => $query, |
38 application => $this, | 41 application => $this, |
39 ); | 42 ); |
40 | 43 |
41 $action->response->charset($this->responseCharset); | 44 eval { |
42 | 45 $action->response->charset($this->responseCharset); |
43 $action->ChainHandler($_) foreach $this->handlersQuery; | 46 |
44 | 47 $action->ChainHandler($_) foreach $this->handlersQuery; |
45 $action->Invoke(); | 48 |
46 | 49 $action->Invoke(); |
47 $action->response->Complete; | 50 |
51 $action->response->Complete; | |
52 }; | |
53 if ($@) { | |
54 my $e = $@; | |
55 eval { $this->handlerError()->($this,$action,$e); 1;} or warn "Error in handlerError: ",$@; | |
56 } | |
48 } | 57 } |
58 } | |
59 | |
60 sub FetchRequest { | |
61 my ($this) = @_; | |
62 | |
63 if( ref $this->fetchRequestMethod eq 'CODE' ) { | |
64 return $this->fetchRequestMethod->($this); | |
65 } else { | |
66 die new IMPL::Exception("Unknown fetchRequestMethod type",ref $this->fetchRequestMethod); | |
67 } | |
49 } | 68 } |
50 | 69 |
51 { | 70 { |
52 my $hasFetched = 0; | 71 my $hasFetched = 0; |
53 | 72 |
54 sub FetchRequest { | 73 sub defaultFetchRequest { |
55 return undef if $hasFetched; | 74 return undef if $hasFetched; |
56 $hasFetched = 1; | 75 $hasFetched = 1; |
57 return CGI->new(); | 76 return CGI->new(); |
58 } | 77 } |
78 } | |
79 | |
80 sub defaultHandlerError { | |
81 my ($this,$action,$e) = @_; | |
82 warn $e; | |
83 if ( eval { $action->ReinitResponse(); 1; } ) { | |
84 $action->response->contentType('text/plain'); | |
85 $action->response->charset($this->responseCharset); | |
86 $action->response->status(500); | |
87 my $hout = $action->response->streamBody; | |
88 print $hout $e; | |
89 $action->response->Complete(); | |
90 } | |
59 } | 91 } |
60 | 92 |
61 1; | 93 1; |
62 | 94 |
63 __END__ | 95 __END__ |
197 application => $this, | 229 application => $this, |
198 ); | 230 ); |
199 | 231 |
200 =end code | 232 =end code |
201 | 233 |
234 =item C< [get,set] fetchRequestMethod > | |
235 | |
236 Метод получения CGI запроса. Возвращает C<CGI> объект следующего запроса, если | |
237 запросов больше нет, то возвращает C<undef>. По-умолчанию использует C<defaultFetchRequest>. | |
238 | |
239 Может быть как ссылкой на функцию, так и объектом типа C<IMPL::Web::Application::RequestFetcher>. | |
240 | |
202 =item C< [get,set,list] handlersQuery > | 241 =item C< [get,set,list] handlersQuery > |
203 | 242 |
204 Список обработчиков запросов, которые будут переданы созданному объекту-действию. | 243 Список обработчиков запросов, которые будут переданы созданному объекту-действию. |
205 | 244 |
206 =item C< [get,set] responseCharset> | 245 =item C< [get,set] responseCharset> |