""" Jeffery Russell 4-27-18 """ import subprocess import sys from utils import module import configuration """ The mounts.txt file is a sequence of three strings user@remote.server.address /remote/mount/point /local/mount/point """ MOUNT_FILE = configuration.get_config()["mounts"] def mount_drive(remote_connection, remote_mount_point, local_mount_point): """ Calls sshfs to mount a remote connection on a local mount point over ssh """ runCode = subprocess.call(["sshfs", "-o", "allow_other", remote_connection + ":" + remote_mount_point, local_mount_point]) if runCode == 0: print("Mounted " + remote_connection + ":" + remote_mount_point + " to " + local_mount_point) else: print("Failed to mount " + remote_connection + ":" + remote_mount_point) def mount_drives(): """ Mounts all the ssh drives in the configuration file """ file = module.input_file(MOUNT_FILE) if len(file) == 0: print(MOUNT_FILE + " is empty") else: for i in range(0, len(file), 3): mount_drive(file[i], file[i + 1], file[i + 2]) def unmount_drive(local_mount_point): """ UnMounts a drive from a computer """ runCode = subprocess.call(["fusermount", "-u", local_mount_point]) if runCode == 0: print("Un-Mounted " + local_mount_point) else: print("Failed to Un-Mount " + local_mount_point) def unmount_all_drives(): """ UnMounts the ssh drives from the computer """ file = module.input_file(MOUNT_FILE) for i in range(0, len(file), 3): unmount_drive(file[i + 2]) def forcefully_unmount_drive(local_mount_point): """ Forcefully un-mounts a ssh drive :param local_mount_point: :return: """ runCode = subprocess.call(["sudo","umount", "-l", local_mount_point]) if runCode == 0: print("Un-Mounted " + local_mount_point) else: print("Failed to Un-Mount " + local_mount_point) def forcefully_unmount_drives(): """ Forcefully un-mounts all drives from the system :return: """ file = module.input_file(MOUNT_FILE) for i in range(0, len(file), 3): forcefully_unmount_drive(file[i + 2]) def remove_drive(): """ Prompts the user and removes a drive from MOUNT_FILE """ options = [] file = module.input_file(MOUNT_FILE) for i in range(0, len(file), 3): options.append(str(len(options) + 1) + ") " + file[i]) options.append("A) Exit") module.print_menu("Remove SSH Drive", options) i = input("Enter Option:") if i.lower() != 'a' and int(i) <= len(file)/3 and int(i) > 0: index = (int(i) - 1) * 3 f = open(MOUNT_FILE, "w") for x in range(0, len(file), 3): if index != x: f.write(file[x] + "\n") f.write(file[x + 1] + "\n") f.write(file[x + 2] + "\n") f.close() def add_drive_to_config(remote_connection, remote_mount_point, local_mount_point): """ Adds a new network drive to the default mount config file """ module.append_file(MOUNT_FILE, remote_connection) module.append_file(MOUNT_FILE, remote_mount_point) module.append_file(MOUNT_FILE, local_mount_point) def add_drive(): """ Prompts the user to enter information to add ssh mount drive to config """ ssh_acct = input("Enter your ssh account:") remote_mount = input("Enter the remote mount point:") local_mount = input("Enter the local mount point:") add_drive_to_config(ssh_acct, remote_mount, local_mount) def view_drives(): """ Views the current drives to the user """ drives = [] file = module.input_file(MOUNT_FILE) for i in range(0, len(file), 3): drives.append(str(int(int(i)/3 + 1)) + ") " + file[i]) drives.append(" " + file[i + 1]) drives.append(" " + file[i + 2]) module.print_menu("SSH Drives", drives) def print_mount_menu(): """ Displays box which has mount menu options """ module.print_menu("SSH Drive Manager ", ["1) Mount SSH Drives", "2) Un-Mount SSH Drives", "3) Remove Remote Drive", "4) Add Drive to Mount", "5) View Drives", "6) Usage", "7) Manage Config", "8) Forcefully Un-Mount SSH Drives", "9) Exit"]) def manage_mount_file(): """ Method which prompts user which action to take with mounts file """ print_mount_menu() i = input("Enter Option:") while i != '9': if i == '4': add_drive() elif i == '3': remove_drive() elif i == '5': view_drives() elif i == '1': mount_drives() elif i == '2': unmount_all_drives() elif i == '8': forcefully_unmount_drives() elif i == '6': print_usage() elif i == '7': configuration.main() else: print("Invalid Option") if i != '1' and i != '2': print_mount_menu() i = input("Enter Option:") else: break def print_usage(): """ Prints the usage message to the terminal """ print("Usage:") print("\t-m mounts drives to computer") print("\t-u unmounts drives from the computer") def main(): """ Parses cmd line input and calls appropriate functions """ if len(sys.argv) > 1: if sys.argv[1].lower() == "-m": mount_drives() elif sys.argv[1].lower() == "-u": unmount_all_drives() else: print("Invalid Command") print_usage() else: manage_mount_file() """ Makes sure that other programs don't execute the main """ if __name__ == '__main__': try: main() except KeyboardInterrupt: exit()