[wiaflos-devel] awit-perl-toolkit external COMMIT - r12 - trunk/SOAP/Transport

svn at linuxrulz.org svn at linuxrulz.org
Fri Mar 12 07:34:55 GMT 2010


Author: nkukard
Date: 2010-03-12 07:34:54 +0000 (Fri, 12 Mar 2010)
New Revision: 12

Modified:
   trunk/SOAP/Transport/HTTPng.pm
Log:
* Support interception of faults
- Intercept SOAP faults and display a generic message
- Display the real message in the SOAP server logs 


Modified: trunk/SOAP/Transport/HTTPng.pm
===================================================================
--- trunk/SOAP/Transport/HTTPng.pm	2009-12-10 10:06:32 UTC (rev 11)
+++ trunk/SOAP/Transport/HTTPng.pm	2010-03-12 07:34:54 UTC (rev 12)
@@ -1,6 +1,6 @@
-# Copyright 2008-2009, AllWorldIT
-# Copyright 2005-2007, LinuxRulz
-# Copyright 2005, Nigel Kukard <nkukard at lbsd.net>
+# Copyright (C) 2008-2010, AllWorldIT
+# Copyright (C) 2005-2007, LinuxRulz
+# Copyright (C) 2005, Nigel Kukard <nkukard at lbsd.net>
 # Copyright 1996-2003, Gisle Aas
 #
 # This library is free software; you can redistribute it and/or
@@ -13,7 +13,43 @@
 use warnings;
 
 
-# Threadded implementation of a SOAP HTTP transport
+# Overrided server so we can intercept sensitive info
+package SOAP::Transport::HTTPng::Server;
+
+use SOAP::Transport::HTTP;
+
+use base qw(SOAP::Transport::HTTP::Server);
+
+# Setup a logging function
+sub set_logger {
+	my ($self,$logobj) = @_;
+
+	$self->{'logobj'} = $logobj;
+}
+
+# We want to override the make_fault function to catch sensitive information
+# being sent out when code b0rkage occurs.
+sub make_fault {
+	my ($self, $code, $string, $detail, $actor) = @_;
+
+
+	# Check if this is a string?
+	if (ref($code) eq "") {
+		# If its a server fault, just output something nice
+		if ($code eq "Server") {
+			# If we have a logging element in ourselves, use it
+			if (defined($self->{'logobj'})) {
+				$self->{'logobj'}->log(0,"[SOAP::Server] $string");
+			}
+			$string = "An error occured while processing the request. Please try again later.";
+		}
+	}
+	return $self->SUPER::make_fault($code,$string,$detail,$actor);
+}
+
+
+
+# PreForked implementation of a SOAP HTTP transport
 package SOAP::Transport::HTTPng::Daemon;
 use base qw(Net::Server::PreFork);
 
@@ -70,7 +106,7 @@
 	my $soapcfg = $self->{'soap_config'};
 
 
-	$self->{'_soap_engine'} = SOAP::Transport::HTTP::Server->new;
+	$self->{'_soap_engine'} = SOAP::Transport::HTTPng::Server->new;
 	# Mappings
 	if (defined($soapcfg->{'dispatch_to'}) && @{$soapcfg->{'dispatch_to'}} > 0) {
 		$self->{'_soap_engine'}->dispatch_to(@{$soapcfg->{'dispatch_to'}});
@@ -85,6 +121,8 @@
 	if (defined($soapcfg->{'on_dispatch'})) {
 		$self->{'_soap_engine'}->on_dispatch($soapcfg->{'on_dispatch'});
 	}
+	
+	$self->{'_soap_engine'}->set_logger($self);
 }
 
 sub process_request
@@ -100,8 +138,14 @@
 	$c->send_response($soap->response);
 }
 
+sub log
+{
+	my $self = shift;
 
+	return $self->SUPER::log(@_);
+}
 
+
 package SOAP::Transport::HTTPng::Daemon::Client;
 
 require Exporter;



More information about the wiaflos-devel mailing list