--- XMLRpcTools/XMLRpcTools.py 2007/03/21 18:26:55 1.5 +++ XMLRpcTools/XMLRpcTools.py 2007/10/23 17:40:23 1.8 @@ -12,6 +12,8 @@ class XMLRpcServerProxy(SimpleItem): meta_type="XMLRpcServerProxy" + rpc_arg_expr='[^A-z0-9]' + manage_options= ( {'label':'Main Config','action':'mainConfigHTML'}, )+ SimpleItem.manage_options @@ -38,16 +40,17 @@ class XMLRpcServerProxy(SimpleItem): def eval(self,method,argument): """do proxy request""" - sr=self.ServerProxy() + server=self.ServerProxy() if self.use_xmlrpc: - # for XML-RPC only letters are allowed - method=re.sub('[^A-z0-9]','',method) - argument=re.sub('[^A-z0-9]','',argument) + # for XML-RPC methods only letters are allowed + method=re.sub('[^A-z0-9_]','',method) + # clean argument + argument=re.sub(self.rpc_arg_expr,'',argument) - mtstr="""sr.%s('%s')"""%(method,argument) + cmd="""server.%s('%s')"""%(method,argument) - return eval(mtstr) + return eval(cmd) else: # HTTP # TODO: check arguments @@ -56,8 +59,37 @@ class XMLRpcServerProxy(SimpleItem): uri += '?' + argument #print "GET: ", uri - sr.request("GET", uri) - resp = sr.getresponse() + server.request("GET", uri) + resp = server.getresponse() + data = resp.read() + #print "GOT: ", resp.status, ", ", resp.reason, " = ", data + + return data.decode('UTF-8') + + def eval2(self,method,argument1,argument2): + """do proxy request""" + server=self.ServerProxy() + + if self.use_xmlrpc: + # for XML-RPC methods only letters are allowed + method=re.sub('[^A-z0-9_]','',method) + # clean argument + argument1=re.sub(self.rpc_arg_expr,'',argument1) + argument2=re.sub(self.rpc_arg_expr,'',argument2) + + cmd="""server.%s('%s')"""%(method,argument1,argument2) + + return eval(cmd) + else: + # HTTP + # TODO: check arguments + uri = method + if argument1: + uri += '?' + argument1 + argument2 + + #print "GET: ", uri + server.request("GET", uri) + resp = server.getresponse() data = resp.read() #print "GOT: ", resp.status, ", ", resp.reason, " = ", data @@ -69,7 +101,7 @@ class XMLRpcServerProxy(SimpleItem): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','manageXMLRpcServerProxy.zpt')).__of__(self) return pt() - def mainConfig(self,serverUrl,use_xmlrpc=True,RESPONSE=None): + def mainConfig(self,serverUrl,use_xmlrpc=True,rpc_arg_expr=None,RESPONSE=None): """main config""" self.serverUrl=serverUrl @@ -81,6 +113,9 @@ class XMLRpcServerProxy(SimpleItem): self.use_xmlrpc=use_xmlrpc + if rpc_arg_expr is not None: + self.rpc_arg_expr = rpc_arg_expr + if RESPONSE: RESPONSE.redirect("/manage_main") @@ -90,13 +125,16 @@ def manage_addXMLRpcServerProxyForm(self pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addXMLRpcServerProxy.zpt')).__of__(self) return pt() -def manage_addXMLRpcServerProxy(self,id,serverUrl,use_xmlrpc=True,RESPONSE=None): +def manage_addXMLRpcServerProxy(self,id,serverUrl,use_xmlrpc=True,rpc_arg_expr=None,RESPONSE=None): """add the basket""" if use_xmlrpc and use_xmlrpc != "no": use_xmlrpc = True else: use_xmlrpc = False + if rpc_arg_expr is not None: + self.rpc_arg_expr = rpc_arg_expr + ob=XMLRpcServerProxy(id,serverUrl,use_xmlrpc) self._setObject(id, ob)