]> git.nothing2do.fr Git - get-hack-src.git/commitdiff
Added auto install and uninstall of entities and machines during install-package...
authorallfro <ndouba@gmail.com>
Sat, 8 Dec 2012 04:05:30 +0000 (23:05 -0500)
committerallfro <ndouba@gmail.com>
Sat, 8 Dec 2012 04:05:30 +0000 (23:05 -0500)
src/canari/commands/common.py
src/canari/commands/create_package.py
src/canari/commands/install_package.py
src/canari/commands/uninstall_package.py
src/canari/resources/template/setup.plate

index 2fcb2ad16a39cce4b90f48a26e5696366f5158a1..5c7931ab52bc90c8e76b15bad64d6cc5aad95943 100644 (file)
@@ -47,7 +47,7 @@ def _detect_settings_dir(d):
             print('Multiple versions of Maltego detected: ')
             for i, v in enumerate(vs):
                 print('[%d] Maltego %s' % (i, v))
-            r = raw_input('Please select which version you wish to install the transforms in [0]: ')
+            r = raw_input('Please select which version you wish to use [0]: ')
             try:
                 if not r:
                     return sep.join([d, vs[0]])
index 101ba7b65a0c7f5dd5e92d536fadc6ef6d97e944..8b2c9f752373d6e9d971f7bec92f15f6755f8284 100644 (file)
@@ -47,7 +47,7 @@ def write_root(base, init):
 def write_resources(package_name, resources, init, values):
     write_template(
         sep.join([resources, '__init__.py']),
-        init + generate_all('etc', 'images')
+        init + generate_all('etc', 'images', 'maltego')
     )
 
     write_template(
@@ -60,6 +60,11 @@ def write_resources(package_name, resources, init, values):
         init
     )
 
+    write_template(
+        sep.join([resources, 'maltego', '__init__.py']),
+        init
+    )
+
     write_template(
         sep.join([resources, 'etc', '%s.conf' % package_name]),
         read_template('conf', values)
@@ -168,7 +173,8 @@ def run(args):
             [transforms, 'common'],
             resources,
             [resources, 'etc'],
-            [resources, 'images']
+            [resources, 'images'],
+            [resources, 'maltego']
         )
     else:
         print('A directory with the name %s already exists... exiting' % package_name)
index e8576624b8fb9e976445d16375531a96b2e6e682..3141acd70ebfad34b9fbf616f3e23db717a18423 100644 (file)
@@ -5,14 +5,16 @@ from ..maltego.configuration import  (MaltegoTransform, CmdCwdTransformProperty,
                                TransformSettings, CmdCwdTransformPropertySetting, CmdDbgTransformPropertySetting,
                                CmdLineTransformPropertySetting, CmdParmTransformPropertySetting)
 from common import detect_settings_dir, cmd_name, fix_pypath, get_bin_dir, import_transform, import_package
-from ..maltego.message import  ElementTree
+from ..maltego.message import ElementTree
 
+from pkg_resources import resource_filename, resource_listdir
+from xml.etree.cElementTree import XML, Element, SubElement
 from os import sep, path, mkdir, chdir, getcwd, name
-from pkg_resources import resource_filename
 from argparse import ArgumentParser
+from re import findall, sub
+from zipfile import ZipFile
 from string import Template
 from sys import stderr
-from re import sub
 
 
 
@@ -190,6 +192,79 @@ def installconf(opts, args):
         writeconf(src, sep.join([opts.working_dir, '%s.conf' % opts.package]), sub=False)
         updateconf('%s.conf' % opts.package, sep.join([opts.working_dir, 'canari.conf']))
 
+
+def installmtz(package, prefix):
+    try:
+        src = resource_filename('%s.resources.maltego' % package, 'entities.mtz')
+        if not path.exists(src):
+            return
+        prefix = path.join(prefix, 'config', 'Maltego', 'Entities')
+        z = ZipFile(src)
+        entities = filter(lambda x: x.endswith('.entity'), z.namelist())
+
+        for e in entities:
+            data = z.open(e).read()
+            xml = XML(data)
+            category = xml.get('category')
+            catdir = path.join(prefix, category)
+            if not path.exists(catdir):
+                mkdir(catdir, mode=0755)
+            p = path.join(catdir, path.basename(e))
+            print 'Installing entity %s to %s...' % (e, p)
+            with open(p, 'wb') as f:
+                f.write(data)
+    except ImportError:
+        pass
+
+
+def installnbattr(xml, src, dst):
+    src = findall('machine\(([^\)]+)', src)[0]
+    if not src:
+        return
+    props = sub('\s*\n\s*|"', '', src).split(',')
+    e = None
+    for p in props:
+        if ':' not in p:
+            if xml.find('fileobject[@name="%s"]' % dst) is not None:
+                return
+            e = SubElement(xml, 'fileobject')
+            e.set('name', dst)
+        else:
+            n, v = p.split(':')
+            s = SubElement(e, 'attr')
+            s.set('name', n)
+            s.set('stringvalue', v)
+    s = SubElement(e, 'attr')
+    s.set('name', 'readonly')
+    s.set('boolvalue', 'false')
+    s = SubElement(e, 'attr')
+    s.set('name', 'enabled')
+    s.set('boolvalue', 'true')
+
+
+def installmachines(package, prefix):
+    try:
+        prefix = path.join(prefix, 'config', 'Maltego', 'Machines')
+        n = path.join(prefix, '.nbattrs')
+        e = XML('<attributes version="1.0"/>')
+        if path.exists(n):
+            e = XML(file(n).read())
+        if not path.exists(prefix):
+            mkdir(prefix, 0755)
+        package = '%s.resources.maltego' % package
+        for m in filter(lambda x: x.endswith('.machine'), resource_listdir(package, '')):
+            src = resource_filename(package, m)
+            dst = path.join(prefix, m)
+            print 'Installing machine %s to %s...' % (src, dst)
+            with open(dst, 'wb') as f:
+                data = file(src).read()
+                f.write(data)
+                installnbattr(e, data, m)
+        ElementTree(e).write(file(n, 'wb'))
+    except ImportError, e:
+        pass
+
+
 # Main
 def run(args):
 
@@ -227,6 +302,9 @@ def run(args):
                 opts.working_dir
             )
 
+    installmtz(opts.package, opts.settings_dir)
+    installmachines(opts.package, opts.settings_dir)
+
     if not transforms:
         print ('Error: no transforms found...')
         exit(-1)
index fa6fc449d4b06a0f489fed6d1d8ab1c7204def98..9ab1f609ddc93d8344ec1cacd22f8e2318bbdbf1 100644 (file)
@@ -2,6 +2,8 @@
 
 from common import detect_settings_dir, cmd_name, fix_pypath, import_package, import_transform
 
+from xml.etree.cElementTree import ElementTree, SubElement, XML
+from pkg_resources import resource_listdir, resource_filename
 from os import sep, path, mkdir, listdir, unlink, rmdir
 from argparse import ArgumentParser
 
@@ -45,6 +47,33 @@ def description():
     return parser.description
 
 
+def uninstallnbattr(machine, xml):
+    e = xml.find('fileobject[@name="%s"]' % machine)
+    if e is not None:
+        xml.remove(e)
+
+def uninstallmachines(package, prefix):
+    try:
+        prefix = path.join(prefix, 'config', 'Maltego', 'Machines')
+        n = path.join(prefix, '.nbattrs')
+        e = XML('<attributes version="1.0"/>')
+        if path.exists(n):
+            e = XML(file(n).read())
+        if not path.exists(prefix):
+            return
+        package = '%s.resources.maltego' % package
+        for m in filter(lambda x: x.endswith('.machine'), resource_listdir(package, '')):
+            print 'Uninstalling machine %s...' % m
+            try:
+                unlink(path.join(prefix, m))
+                uninstallnbattr(m, e)
+            except OSError:
+                pass
+        ElementTree(e).write(file(n, 'wb'))
+    except ImportError, e:
+        pass
+
+
 def uninstall_transform(module, spec, prefix):
 
     installdir = sep.join([prefix, 'config', 'Maltego', 'TransformRepositories', 'Local'])
@@ -86,15 +115,15 @@ def run(args):
 
     opts = parse_args(args)
 
-    if not opts.package.endswith('.transforms'):
-        opts.package = '%s.transforms' % opts.package
+    if opts.package.endswith('.transforms'):
+        opts.package = opts.package.replace('.transforms', '')
 
     fix_pypath()
 
-    m = import_package(opts.package)
+    m = import_package('%s.transforms' % opts.package)
 
     for t in m.__all__:
-        transform = '%s.%s' % (opts.package, t)
+        transform = '%s.transforms.%s' % (opts.package, t)
         m2 = import_transform(transform)
         if hasattr(m2, 'dotransform') and hasattr(m2.dotransform, 'label'):
             uninstall_transform(
@@ -102,3 +131,5 @@ def run(args):
                 m2.dotransform,
                 opts.settings_dir
             )
+
+    uninstallmachines(opts.package, opts.settings_dir)
index f8e35cfc06d28d1a9b929ea01ecbb6f15a61c7d0..e095f20808362c9a36dbd718fa9629f9110be401 100755 (executable)
@@ -11,7 +11,7 @@ setup(
     package_dir={ '' : 'src' },
     zip_safe=False,
     package_data={
-        '' : [ '*.gif', '*.png', '*.conf' ] # list of resources
+        '' : [ '*.gif', '*.png', '*.conf', '*.mtz', '*.machine' ] # list of resources
     },
     install_requires=[
         # Name of packages required for easy_install