Deleted modules, add modules wsdl_server.

master3.3
Самоукин Алексей 14 years ago
parent 56357e3f4a
commit bef6717dfb

@ -1,35 +0,0 @@
# -*- coding: utf-8 -*-
import httplib
WORK_HTTPS = httplib.HTTPS
CERT_FILE = 'client.crt'
KEY_FILE = 'client.key'
#CERT_FILE = None
#KEY_FILE = None
class MOD_HTTPS(httplib.HTTPS):
def __init__(self, host='', port=None, key_file=KEY_FILE,
cert_file=CERT_FILE,
strict=None):
WORK_HTTPS.__init__(self, host=host, port=port,
key_file=key_file, cert_file=cert_file,
strict=strict)
httplib.HTTPS = MOD_HTTPS
import SOAPpy
server = SOAPpy.SOAPProxy("https://10.0.0.53:8080/")
#print server.push("ten")
print server.getApiAttrLib('calculate_ldap.updateVars')
print server.getApiAttrLib('calculate_ldap.var.ld_temp_hash')
print server.getApiAttrLib('calculate_ldap.updateVars')
print server.getApiAttrLib('calculate_ldap.var.ld_temp_hash')
print server.getApiAttrLib('calculate_ldap.scheme')
print
print server.getApiAttrLib('calculate_ldap.scheme')

@ -31,35 +31,13 @@ import xml.dom.minidom
import xml.dom.ext
import cStringIO
#print sys.modules.keys()
#print filter(lambda x: "SOAPpy" in x ,sys.modules.keys())
#from M2Crypto import SSL
#ssl_context = SSL.Context('sslv3')
#ssl_context.load_verify_locations(cafile='CA.crt')
#ssl_context.load_cert(certfile='server.crt',
#keyfile="server.key")
#ssl_context.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert,
#depth=9)
#from M2Crypto import SSL
#ssl_context = SSL.Context('sslv3')
#ssl_context.load_verify_locations(cafile='CA.crt')
#ssl_context.load_cert(certfile='server.crt',
#keyfile="server.key")
#ssl_context.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert,
#depth=9)
from M2Crypto import SSL
class WSDLRequestHandler(SOAPRequestHandler):
def do_POST(self):
data = self.rfile.read(int(self.headers["Content-length"]))
#print "TYPE2", type(data)
doc = xml.dom.minidom.parseString(data)
for node in doc.documentElement.firstChild.childNodes:
if node.nodeType == node.ELEMENT_NODE:
@ -78,6 +56,21 @@ class WSDLRequestHandler(SOAPRequestHandler):
first namespace in the server. That's because I don't know how
WSDL deals with multiple namespaces."""
def getTypesArg(text, funcName=""):
resSearch = \
re.search(\
"##wsdl:(([^: \t]+:[^: \t,]+)(\s*,\s*[^: \t]+:[^: \t,]+)+)",
" ".join(filter(lambda x: x, re.compile("[\t ]").split(\
text.replace("\n"," ")))))
if resSearch:
return re.compile("\s?,\s?").split(resSearch.groups(0)[0])
else:
if funcName:
raise Exception("Wrong ##wdsl options in function '%s'"\
%funcName)
else:
raise Exception("Wrong ##wdsl options in function")
logger = logging.getLogger("do_GET")
WSDL = "http://schemas.xmlsoap.org/wsdl/"
@ -111,12 +104,12 @@ class WSDLRequestHandler(SOAPRequestHandler):
if funcArg and funcArg[0] == 'self':
funcArg = funcArg[1:]
# Get the types from the programmer provided type spec
typesFunc = [spec.strip() for spec in
re.findall("##wsdl:(.*)\n", func.__doc__)[0].split(",")]
funcName = func.__name__
typesFunc = getTypesArg(func.__doc__, funcName)
argTypes = typesFunc[0:-1]
returnType = typesFunc[-1:][0]
assert len(funcArg) == len(argTypes)
dataList.append((callName, func.__name__, funcArg, argTypes,
dataList.append((callName, funcName, funcArg, argTypes,
returnType))
# Types
typesNode =\
@ -238,15 +231,12 @@ class WSDLRequestHandler(SOAPRequestHandler):
soapAddressNode =\
servPortNode.appendChild(wsdlDoc.createElement("soap:address"))
soapAddressNode.setAttribute("location", "http://%s:%d"\
soapAddressNode.setAttribute("location", "https://%s:%d"\
%self.server.server_address)
except Exception, e:
# Any kind of error then send a 500
logger.error(e)
print traceback.format_tb(sys.exc_info()[2])
## TODO: spit the stack trace into the page.
self.send_response(500)
self.send_header("content-type", "text/html")
self.end_headers()
@ -271,27 +261,15 @@ class WSDLRequestHandler(SOAPRequestHandler):
return None
#def make_vm(name, owner_email, owner_sshkey, ostype, memory, timeout):
#"""Dummy to make a vm.
###wsdl:xsd:string, xsd:string, xsd:string, xsd:string, xsd:string, xsd:integer, xsd:string
#"""
#return "made it"
class mySOAPServer(SOAPServer):
_REQUEST_AUTH_DATA = ""
class clSOAPServer(SOAPServer):
def get_request(self):
obj.SRV = None
sock, addr = SOAPServer.get_request(self)
if self.ssl_context:
subjectDict = {}
subjectDict.update(map(lambda x: x.split("="), str(sock.get_peer_cert().get_subject()).split("/")[1:]))
obj._setRequestService(subjectDict["OU"])
subjectDict.update(map(lambda x: x.split("="),
str(sock.get_peer_cert().get_subject()).split("/")[1:]))
globals()['_REQUEST_AUTH_DATA'] = subjectDict["OU"]
return sock, addr
@ -359,67 +337,57 @@ class unicodeWrapper:
setattr(self, name, func)
_DICT_METHODS = {}
class auth:
def _auth(self, *arg, **kwarg):
if '_SOAPContext' in kwarg:
_SOAPContext = kwarg['_SOAPContext']
if _SOAPContext:
#print _SOAPContext.attrs
#print "method", _SOAPContext.body._keys()[0]
if self._requestService != self.service:
methodName = _SOAPContext.body._keys()[0]
if not methodName in _DICT_METHODS.keys():
return False
obj = _DICT_METHODS[methodName]
return obj.auth(_REQUEST_AUTH_DATA)
return True
def _setRequestService(self, service):
self._requestService = service
_LIST_OBJ = []
def registerApiObject(apiObj):
_LIST_OBJ.append((apiObj,unicodeWrapper(apiObj)))
class ttt(auth):
service = "SSL"
_CA_FILE = ""
_CERT_FILE = ""
_KEY_FILE = ""
def make_vm(self, x,y):
"""Dummy to make a vm.
def setCertificates(cafile, certfile, keyfile):
globals()['_CA_FILE'] = cafile
globals()['_CERT_FILE'] = certfile
globals()['_KEY_FILE'] = keyfile
##wsdl:xsd:int, xsd:int, xsd:int
"""
return x+y
##wsdl:tns:ArrayOfString
def test(self, par):
"""Dummy to make a vm.
_ADDR = ()
_DEBUG = False
_LOG = 0
def setServerData(host="localhost", port=8080, debug=_DEBUG, log=_LOG):
globals()['_ADDR'] = (host, [port][0])
globals()['_DEBUG'] = debug
globals()['_LOG'] = log
##wsdl:xsd:string, xsd:string
"""
return par + "Строка"
def ms(self, msg):
"""
##wsdl:xsd:string, tns:ArrayOfString
"""
ret = [msg, "Строка", "Строка1"]
return ret
obj = unicodeWrapper(ttt())
def do_soap():
ssl_context = SSL.Context('sslv3')
ssl_context.load_verify_locations(cafile=_CA_FILE)
ssl_context.load_cert(certfile=_CERT_FILE, keyfile=_KEY_FILE)
ssl_context.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert,
depth=9)
server = clSOAPServer(RequestHandler = WSDLRequestHandler,
addr = _ADDR,
ssl_context = ssl_context,
config=SOAPConfig(authMethod="_auth", debug=_DEBUG), log=_LOG)
authObi = auth()
server.registerKWFunction(authObi._auth, "API")
for obj, wrapObj in _LIST_OBJ:
for nameMethod in filter(lambda x: not x.startswith("_"), dir(wrapObj)):
server.registerKWFunction(getattr(wrapObj, nameMethod), "API")
_DICT_METHODS[nameMethod] = obj
server.serve_forever()
def do_soap():
s = mySOAPServer(RequestHandler = WSDLRequestHandler,
addr = ("asamoukin.local.calculate.ru", 8080))
#log=2, config=SOAPConfig(debug=True))
#addr = ("asamoukin.local.calculate.ru", [8080][0]),ssl_context = ssl_context,
#config=SOAPConfig(authMethod="_auth"))
#
#log=2, config=SOAPConfig(debug=True))
s.registerKWFunction(getattr(obj,'make_vm'), "API")
s.registerKWFunction(getattr(obj,'test'), "API")
s.registerKWFunction(getattr(obj,'ms'), "API")
#s.registerKWFunction(getattr(obj,'_auth'), "API")
s.serve_forever()
if __name__ == "__main__":
logging.basicConfig()
#import pdb
#pdb.runcall(do_soap)
do_soap()
# End

@ -1,43 +0,0 @@
# -*- coding: utf-8 -*-
import SOAPpy
from M2Crypto import SSL
ssl_context = SSL.Context('sslv3')
ssl_context.load_verify_locations(cafile='CA.crt')
ssl_context.load_cert(certfile='server.crt',
keyfile="server.key")
ssl_context.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert,
depth=9)
import sys, os
sys.path.insert(0,os.path.abspath('/usr/lib/calculate-2.2/calculate-lib/pym'))
from cl_api import packagesAPI, APIError
APIObj = packagesAPI()
def getApiAttrLib(attr):
try:
value = eval('APIObj.%s'%attr)
except APIError, e:
#self.flagError = True
#self.printERROR(str(e))
return False
except Exception, e:
#self.flagError = True
#self.printERROR(str(e))
return False
return value
#print "1", getApiAttrLib('calculate_ldapf.get_prioritet')
#print "2", getApiAttrLib('calculate_ldap.var.ur_login')
#print "3", getApiAttrLib('all.get_prioritet')
#exit(1)
def hello(arg):
return arg + " " + "Hello World"
server = SOAPpy.SOAPServer(("10.0.0.53", [8080][0]),ssl_context = ssl_context)
server.registerFunction(getApiAttrLib)
#server.registerObject(st())
while(1):
try:
server.serve_forever()
except SSL.SSLError:
pass

@ -1,54 +0,0 @@
# -*- coding: utf-8 -*-
import warnings
warnings.simplefilter("ignore",DeprecationWarning)
#import httplib
#WORK_HTTPS = httplib.HTTPS
#CERT_FILE = 'client.crt'
#KEY_FILE = 'client.key'
##CERT_FILE = None
##KEY_FILE = None
#class MOD_HTTPS(httplib.HTTPS):
#def __init__(self, host='', port=None, key_file=KEY_FILE,
#cert_file=CERT_FILE,
#strict=None):
#WORK_HTTPS.__init__(self, host=host, port=port,
#key_file=key_file, cert_file=cert_file,
#strict=strict)
#httplib.HTTPS = MOD_HTTPS
#import urllib
#class AppURLopener(urllib.FancyURLopener):
#def __init__(self, *args, **kwargs):
#urllib.FancyURLopener.__init__(self, *args, key_file=KEY_FILE,
#cert_file=CERT_FILE, **kwargs)
#open_https = urllib.FancyURLopener.open_https
#urllib._urlopener = AppURLopener()
from SOAPpy import WSDL
#wsdl = WSDL.Proxy("http://soap.direct.yandex.ru/wsdl/v1")
wsdl = WSDL.Proxy("http://asamoukin.local.calculate.ru:8080")
#print wsdl.methods.keys()
callInfo = wsdl.methods['ms']
for par in callInfo.inparams:
print "IN", par.type, par.name
for par in callInfo.outparams:
print "OUT", par.type, par.name
#wsdl.soapproxy.config.dumpSOAPOut = 1
#wsdl.soapproxy.config.dumpSOAPIn = 1
mass = wsdl.test(u" Тест ")
d = wsdl.ms("One")
print d[0]
print mass
Loading…
Cancel
Save