From: allfro Date: Mon, 8 Apr 2013 01:25:07 +0000 (-0400) Subject: Added support for V2 transform spec for WSGI compatibility X-Git-Url: https://git.nothing2do.fr/?a=commitdiff_plain;h=57a4cd1befe87ac2c4423e798fcd0ec25bd7fa3d;p=get-hack-src.git Added support for V2 transform spec for WSGI compatibility --- diff --git a/src/canari/commands/common.py b/src/canari/commands/common.py index 0127041..aab1fcf 100644 --- a/src/canari/commands/common.py +++ b/src/canari/commands/common.py @@ -8,6 +8,7 @@ from string import Template import unicodedata import subprocess import threading +import inspect import sys import os @@ -20,7 +21,7 @@ __copyright__ = 'Copyright 2012, Canari Project' __credits__ = [] __license__ = 'GPL' -__version__ = '0.3' +__version__ = '0.4' __maintainer__ = 'Nadeem Douba' __email__ = 'ndouba@gmail.com' __status__ = 'Development' @@ -37,6 +38,16 @@ def synchronized(func): return synced_func +def get_transform_version(transform): + spec = inspect.getargspec(transform) + if spec.varargs is not None: + return 3 + n = len(spec.args) + if 2 <= n <= 3: + return n + raise Exception('Could not determine transform version.') + + def fix_etree(): try: from xml.etree.cElementTree import XML @@ -45,6 +56,7 @@ def fix_etree(): except SyntaxError: import canari.xmltools.fixetree + def get_bin_dir(): d = install(Distribution()) d.finalize_options() @@ -227,14 +239,11 @@ def init_pkg(): def project_root(): - marker = '.canari' - for i in range(0, 5): if os.path.exists(marker): return os.path.dirname(os.path.realpath(marker)) marker = '..%s%s' % (os.sep, marker) - print 'Unable to determine project root.' exit(-1) diff --git a/src/canari/commands/debug_transform.py b/src/canari/commands/debug_transform.py index db6aa7e..8143c9f 100644 --- a/src/canari/commands/debug_transform.py +++ b/src/canari/commands/debug_transform.py @@ -6,8 +6,9 @@ import sys from argparse import ArgumentParser from traceback import format_exc -from canari.maltego.message import MaltegoException, MaltegoTransformResponseMessage, UIMessage -from common import croak, import_transform, cmd_name, console_message, fix_binpath, sudo +from common import croak, import_transform, cmd_name, console_message, fix_binpath, sudo, get_transform_version +from canari.maltego.message import (MaltegoException, MaltegoTransformResponseMessage, UIMessage, + MaltegoTransformRequestMessage) from canari.maltego.utils import onterminate, parseargs from canari.config import config @@ -17,7 +18,7 @@ __copyright__ = 'Copyright 2012, Canari Project' __credits__ = [] __license__ = 'GPL' -__version__ = '0.3' +__version__ = '0.4' __maintainer__ = 'Nadeem Douba' __email__ = 'ndouba@gmail.com' __status__ = 'Development' @@ -86,16 +87,12 @@ def run(args): m.__setattr__('onterminate', lambda *args: exit(-1)) msg = m.dotransform( - type( - 'MaltegoTransformRequestMessage', - (object,), - { - 'value' : value, - 'fields' : fields, - 'params' : params - } - )(), + MaltegoTransformRequestMessage(value, fields, params), MaltegoTransformResponseMessage() + ) if get_transform_version(m.dotransform) == 2 else m.dotransform( + MaltegoTransformRequestMessage(value, fields, params), + MaltegoTransformResponseMessage(), + config ) if isinstance(msg, MaltegoTransformResponseMessage): diff --git a/src/canari/commands/run_server.py b/src/canari/commands/run_server.py index 6915284..55b853f 100755 --- a/src/canari/commands/run_server.py +++ b/src/canari/commands/run_server.py @@ -14,9 +14,9 @@ from urlparse import urlsplit from re import sub, findall from hashlib import md5 -from canari.maltego.message import (MaltegoTransformResponseMessage, MaltegoException, +from canari.maltego.message import (MaltegoTransformResponseMessage, MaltegoException, MaltegoTransformRequestMessage, MaltegoTransformExceptionMessage, MaltegoMessage, Message) -from common import cmd_name, import_transform, fix_binpath, fix_pypath, import_package +from common import cmd_name, import_transform, fix_binpath, fix_pypath, import_package, get_transform_version from canari.config import config @@ -25,7 +25,7 @@ __copyright__ = 'Copyright 2012, Canari Project' __credits__ = [] __license__ = 'GPL' -__version__ = '0.5' +__version__ = '0.6' __maintainer__ = 'Nadeem Douba' __email__ = 'ndouba@gmail.com' __status__ = 'Development' @@ -187,22 +187,15 @@ class MaltegoTransformRequestHandler(BaseHTTPRequestHandler): config['default/%s' % k] = i limits = xml.find('Limits').attrib - msg = t[0]( - type( - 'MaltegoTransformRequestMessage', - (object,), - { - 'value' : value, - 'fields' : fields, - 'params' : params, - 'limits' : limits - } - )(), + MaltegoTransformRequestMessage(value, fields, params, limits), request_str if hasattr(t[0], 'cmd') and callable(t[0].cmd) else MaltegoTransformResponseMessage() + ) if get_transform_version(t[0]) == 2 else t[0]( + MaltegoTransformRequestMessage(value, fields, params, limits), + request_str if hasattr(t[0], 'cmd') and callable(t[0].cmd) else MaltegoTransformResponseMessage(), + config ) - if isinstance(msg, MaltegoTransformResponseMessage) or isinstance(msg, basestring): message(msg, self) return diff --git a/src/canari/commands/run_transform.py b/src/canari/commands/run_transform.py index d063b37..1845ff2 100644 --- a/src/canari/commands/run_transform.py +++ b/src/canari/commands/run_transform.py @@ -6,9 +6,10 @@ from traceback import format_exc from argparse import ArgumentParser -from canari.maltego.message import MaltegoException, MaltegoTransformResponseMessage, UIMessage -from common import cmd_name, import_transform, fix_binpath, sudo +from canari.maltego.message import (MaltegoException, MaltegoTransformResponseMessage, UIMessage, + MaltegoTransformRequestMessage) from canari.maltego.utils import onterminate, parseargs, croak, message +from common import cmd_name, import_transform, fix_binpath, sudo, get_transform_version from canari.config import config @@ -17,7 +18,7 @@ __copyright__ = 'Copyright 2012, Canari Project' __credits__ = [] __license__ = 'GPL' -__version__ = '0.3' +__version__ = '0.4' __maintainer__ = 'Nadeem Douba' __email__ = 'ndouba@gmail.com' __status__ = 'Development' @@ -87,16 +88,12 @@ def run(args): m.__setattr__('onterminate', lambda *args: exit(-1)) msg = m.dotransform( - type( - 'MaltegoTransformRequestMessage', - (object,), - { - 'value' : value, - 'fields' : fields, - 'params' : params - } - )(), + MaltegoTransformRequestMessage(value, fields, params), MaltegoTransformResponseMessage() + ) if get_transform_version(m.dotransform) == 2 else m.dotransform( + MaltegoTransformRequestMessage(value, fields, params), + MaltegoTransformResponseMessage(), + config ) if isinstance(msg, MaltegoTransformResponseMessage):