Mercurial > pub > Impl
diff Lib/IMPL/Web/QueryHandler/SecureCall.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 | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Web/QueryHandler/SecureCall.pm Tue May 04 04:04:37 2010 +0400 @@ -0,0 +1,37 @@ +package IMPL::Web::QueryHandler::SecureCall; +use strict; +use base qw(IMPL::Web::QueryHandler); + +use IMPL::Class::Property; +use IMPL::Exception; +use Carp; + +BEGIN { + public property namespace => prop_all; +} + +__PACKAGE__->PassThroughArgs; + +sub Process { + my ($this,$action,$nextHandler) = @_; + + my $namespace = $this->namespace || $action->application->type; + + my @target = grep $_, split /\//, ($ENV{PATH_INFO} || '') or die new IMPL::Exception("No target specified"); + + my $method = pop @target; + $method =~ s/\.\w+$//; + + my $module = join '::',$namespace,@target; + + eval "require $module; 1;"; + carp $@ if $@; + + if(UNIVERSAL::can($module,'InvokeAction')) { + $module->InvokeAction($method,$action); + } else { + die new IMPL::InvalidOperationException("Failed to invoke action",$ENV{PATH_INFO},$module,$method); + } +} + +1; \ No newline at end of file