summaryrefslogtreecommitdiffstats
path: root/sploit/util
diff options
context:
space:
mode:
Diffstat (limited to 'sploit/util')
-rw-r--r--sploit/util/__init__.py2
-rw-r--r--sploit/util/cmd.py26
-rw-r--r--sploit/util/log.py32
3 files changed, 60 insertions, 0 deletions
diff --git a/sploit/util/__init__.py b/sploit/util/__init__.py
new file mode 100644
index 0000000..32a079b
--- /dev/null
+++ b/sploit/util/__init__.py
@@ -0,0 +1,2 @@
+from .cmd import *
+from .log import *
diff --git a/sploit/util/cmd.py b/sploit/util/cmd.py
new file mode 100644
index 0000000..3a2b842
--- /dev/null
+++ b/sploit/util/cmd.py
@@ -0,0 +1,26 @@
+from os import path
+from subprocess import run
+
+def run_cmd(cmd,cwd=None):
+ return run(cmd,cwd=cwd,capture_output=True,text=True,check=True).stdout.split('\n')[:-1]
+
+__RUN_CACHE__ = {}
+def run_cmd_cached(cmd,cwd=None):
+ key = ''.join(cmd)
+ if key in __RUN_CACHE__:
+ return __RUN_CACHE__[key]
+ else:
+ result = run_cmd(cmd,cwd)
+ __RUN_CACHE__[key] = result
+ return result
+
+#try to get the version through git
+def git_version():
+ try:
+ cwd = path.dirname(path.realpath(__file__))
+ version = run_cmd(["git","describe","--always","--first-parent","--dirty"],cwd=cwd)[0]
+ #PEP440 compliance
+ version = version.replace('-','+',1).replace('-','.')
+ return version
+ except:
+ return "0+unknown.version"
diff --git a/sploit/util/log.py b/sploit/util/log.py
new file mode 100644
index 0000000..823b252
--- /dev/null
+++ b/sploit/util/log.py
@@ -0,0 +1,32 @@
+import codecs
+import sys
+
+# https://docs.python.org/3/library/codecs.html#standard-encodings
+ENCODING = None
+
+ERROR = 31
+WARNING = 33
+STATUS = 32
+NORMAL = 0
+ALT = 90
+
+def enc_value(value, enc):
+ if type(value) is bytes:
+ if enc is not None:
+ value = codecs.encode(value, enc)
+ elif ENCODING is not None:
+ value = codecs.encode(value, ENCODING)
+ value = str(value)[2:-1] # strip b''
+ return str(value)
+
+def generic_log(*values, sep, end, file, flush, enc, color):
+ string = sep.join([ enc_value(x, enc) for x in values ])
+ print(f'\033[{color}m{string}\033[0m', end=end, file=file, flush=flush)
+
+# For library internal use
+def ilog(*values, sep=' ', end='\n', file=sys.stderr, flush=True, enc=None, color=STATUS):
+ generic_log(*values, sep=sep, end=end, file=file, flush=flush, enc=enc, color=color)
+
+# For external use in user script (via print = elog)
+def elog(*values, sep=' ', end='\n', file=sys.stdout, flush=True, enc=None, color=ALT):
+ generic_log(*values, sep=sep, end=end, file=file, flush=flush, enc=enc, color=color)