aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Tuomi <jan-sebastian.tuomi@aalto.fi>2016-03-17 20:55:11 +0200
committerJan Tuomi <jan-sebastian.tuomi@aalto.fi>2016-03-17 23:02:34 +0200
commitb6dc3ba88e5ef0a7e4509c88665372cb04a36f06 (patch)
tree11649dec1e48377571a98edea0a9fdf0b2fcb377 /src
parentddbf8a86cf4ef071f289aceda1035818948d2292 (diff)
Arch packaging
Diffstat (limited to 'src')
-rw-r--r--src/python-sshmgr/setup.py16
-rw-r--r--src/python-sshmgr/sshmgr/__init__.py0
-rwxr-xr-xsrc/python-sshmgr/sshmgr/manager.py100
-rw-r--r--src/python-sshmgr/sshmgr/utils/__init__.py0
-rw-r--r--src/python-sshmgr/sshmgr/utils/getch.py40
5 files changed, 156 insertions, 0 deletions
diff --git a/src/python-sshmgr/setup.py b/src/python-sshmgr/setup.py
new file mode 100644
index 0000000..2889e9b
--- /dev/null
+++ b/src/python-sshmgr/setup.py
@@ -0,0 +1,16 @@
+#!/usr/bin/env python
+
+from setuptools import setup
+
+setup(name='sshmgr',
+ version='0.1',
+ description='',
+ author='Jan Tuomi',
+ author_email='jan-sebastian.tuomi@aalto.fi',
+ url='',
+ packages=['sshmgr', 'sshmgr.utils'],
+ entry_points= {'console_scripts': [
+ 'sshmgr = sshmgr.manager:start',
+ ],
+ },
+)
diff --git a/src/python-sshmgr/sshmgr/__init__.py b/src/python-sshmgr/sshmgr/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/python-sshmgr/sshmgr/__init__.py
diff --git a/src/python-sshmgr/sshmgr/manager.py b/src/python-sshmgr/sshmgr/manager.py
new file mode 100755
index 0000000..a55aa07
--- /dev/null
+++ b/src/python-sshmgr/sshmgr/manager.py
@@ -0,0 +1,100 @@
+#!/usr/bin/env python3
+from os import system
+from sshmgr.utils.getch import getch
+import os.path
+
+CONN_DB_PATH = os.path.join(os.path.expanduser("~"), ".sshmgr-db")
+
+class Manager:
+ def __init__(self):
+ pass
+
+ def load_conns(self):
+ conns = []
+ try:
+ with open(CONN_DB_PATH) as f:
+ conns = [l.strip() for l in f.readlines()]
+ except FileNotFoundError:
+ with open(CONN_DB_PATH, 'w') as f:
+ conns = []
+ except:
+ print("Could not load connections from file. ({:s})".format(CONN_DB_PATH))
+ getch()
+
+ return conns
+
+ def create_new(self, conns):
+ name = input("Name the new connection: ")
+ conns.append(name)
+
+ self.save_conns(conns)
+
+ def save_conns(self, conns):
+ with open(CONN_DB_PATH, 'w') as f:
+ for conn in conns:
+ f.write("{:s}\n".format(conn))
+
+ def get_connection(self, conns, c):
+ try:
+ num = int(c)
+ except ValueError:
+ print("Selection needs to be a number!")
+ return False
+
+ if num < 1 or num > len(conns):
+ print("Selection not in range!")
+ return False
+
+ selection = conns[num - 1]
+ return selection
+
+ def connect(self, connection):
+ system("screen ssh {}".format(connection))
+
+ def delete_conn(self, conns):
+ c = input("Which connection should be removed? ")
+ deleted = self.get_connection(conns, c)
+ if not deleted:
+ print("Nothing was deleted.")
+ getch()
+ return
+
+ conns = [conn for conn in conns if conn != deleted]
+ self.save_conns(conns)
+
+ def run(self):
+ running = True
+ while running:
+ conns = self.load_conns()
+ system("clear")
+
+ print("Select connection: ")
+ for i,conn in enumerate(conns):
+ print("({:d}) {:s}".format(i + 1, conn))
+ print("(n) New connection")
+ print("(d) Delete connection")
+ print("(q) Quit")
+
+ c = getch()
+
+ if (c == "q"):
+ return
+ elif (c == "d"):
+ self.delete_conn(conns)
+ elif (c == "n"):
+ self.create_new(conns)
+ else:
+ connection = self.get_connection(conns, c)
+ if not connection:
+ print("Select a valid connection.")
+ getch()
+ else:
+ self.connect(connection)
+ return
+
+def start():
+ s = Manager()
+ s.run()
+
+if __name__ == "__main__":
+ start()
diff --git a/src/python-sshmgr/sshmgr/utils/__init__.py b/src/python-sshmgr/sshmgr/utils/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/python-sshmgr/sshmgr/utils/__init__.py
diff --git a/src/python-sshmgr/sshmgr/utils/getch.py b/src/python-sshmgr/sshmgr/utils/getch.py
new file mode 100644
index 0000000..3ee4b25
--- /dev/null
+++ b/src/python-sshmgr/sshmgr/utils/getch.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+
+class _Getch:
+ """Gets a single character from standard input. Does not echo to the
+screen."""
+ def __init__(self):
+ try:
+ self.impl = _GetchWindows()
+ except ImportError:
+ self.impl = _GetchUnix()
+
+ def __call__(self): return self.impl()
+
+
+class _GetchUnix:
+ def __init__(self):
+ import tty, sys
+
+ def __call__(self):
+ import sys, tty, termios
+ fd = sys.stdin.fileno()
+ old_settings = termios.tcgetattr(fd)
+ try:
+ tty.setraw(sys.stdin.fileno())
+ ch = sys.stdin.read(1)
+ finally:
+ termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
+ return ch
+
+
+class _GetchWindows:
+ def __init__(self):
+ import msvcrt
+
+ def __call__(self):
+ import msvcrt
+ return msvcrt.getch()
+
+
+getch = _Getch()