aboutsummaryrefslogtreecommitdiffstats
path: root/src/python-sshmgr/sshmgr/manager.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/python-sshmgr/sshmgr/manager.py')
-rwxr-xr-xsrc/python-sshmgr/sshmgr/manager.py100
1 files changed, 100 insertions, 0 deletions
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()