| @ -0,0 +1,158 @@ | |||
| """ | |||
| 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() | |||