|
|
- """
- Author: Jason Cheung
- Date: 2/8/2020
-
- Description: This is a manager for easily performing SHH port forwards
- """
-
- import subprocess
- import collections
-
- from utils import module
- import configuration
-
- # INPUT_FILE = configuration.get_config()["portforwards"]
- INPUT_FILE = "./portforwards.txt"
- Computer = collections.namedtuple("Computer", ('user', 'user_num'))
- WELCOME_MESSAGE = "**************************************"
-
-
- def main():
- """
- This function inputs all the available hosts from a text file and
- prompts the user to connect to them
- :return:
- """
- file = module.input_file(INPUT_FILE)
-
- cmp = []
- count = 1
-
- for line in file:
- cmp.append(Computer(line, count))
- count += 1
- menu = []
-
- for c in cmp:
- menu.append(str(c.user_num) + ") " + "".join(c.user))
- menu.append("A) Exit")
- menu.append("B) Manager tools")
-
- module.print_menu("SSH forwarding manager V 1.0", menu)
-
- i = input("Enter Option:")
-
- if i == '' or i == 'A' or i == 'a':
- exit_program()
- elif i == 'B' or i == 'b':
- sub_menu()
- else:
- for c in cmp:
- if int(i) == c.user_num:
- subprocess.call(
- ["ssh", "-L", c.user.split(":")[2] + ":localhost:"
- + c.user.split(":")[2], c.user.split(":")[1]])
- exit_program()
-
-
- def print_sub_menu():
- """
- prints out a sub help menu for other options
- :return: None
- """
- module.print_menu("Options", ["1) Add Host",
- "2) Remove host name",
- "3) Return to ssh forwarding",
- "4) Manage Configuration and Bash",
- "5) Exit"])
-
-
- def sub_menu():
- """
- calls printSubMenu and then gets input from user to
- make appropriate function calls
- :return: None
- """
- print_sub_menu()
- i = input("Enter selection:")
-
- if i != '' and int(i) in {1, 2, 3, 4, 5}:
- options = {1: add_host,
- 2: remove_host,
- 3: main,
- 4: configuration.main,
- 5: exit_program
- }
- options[int(i)]()
- else:
- print("Invalid selection!")
-
- sub_menu()
-
-
- def print_red(prt): return "\033[91m {}\033[00m".format(prt)
-
-
- def exit_program():
- """
- Exits the program and clears the screen
- :return: None
- """
- subprocess.call(["clear"])
- exit()
-
-
- def add_host():
- """
- appends an inputted host name to servers.txt
- :return: None
- """
- host = input("Enter 'user@host' or -1 to exit:")
- if host != '-1':
- name = input("Name: ")
- port = input("Port: ")
- module.append_file(INPUT_FILE, name + ":" + host + ":" + port)
-
-
- def remove_host():
- """
- Removes a host name from servers.txt
- :return: None
- """
- padding_star = "*" * 5
- max_len = 0
- file = module.input_file(INPUT_FILE)
- for line in file:
- temp = len(line)
- if max_len < temp:
- max_len = temp
- TOP_BAR = padding_star + "*" * max_len + padding_star
- cmp = []
- count = 1
- print(print_red("*" * len(TOP_BAR) + "*"))
- for line in file:
- cmp.append(Computer(line, count))
- count += 1
- for c in cmp:
- space = " " * (len(TOP_BAR) - 3 -
- len(str(c.user_num) + ") " + c.user))
- print(print_red("*") + " " + str(c.user_num) + ") " +
- c.user + space + print_red("*"))
-
- print(print_red("*" * len(TOP_BAR) + '*'))
-
- host = input("Enter number of host -1 to exit:")
- if host != '-1':
- for c in cmp:
- if c.user_num == int(host):
- module.remove_line_from_file(INPUT_FILE, c.user)
-
-
- """
- Makes sure that other programs don't execute the main
- """
- if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- exit_program()
|