def do_install(file_path):
    try:
        logger.info("Installing from %s" % file_path)
        validate_elixys_is_up()
        possible_username_passwords = copy.deepcopy(PASSCODES)
        possible_username_passwords = decrypt_passcodes(possible_username_passwords)
        updater = Updater(ELIXYS_HOST_IP, Port)
        logger.info("Authenticating into the CBOX")
        updater.get_elixys_connection(possible_username_passwords)
        logger.info("Successfully authenticated")
        try:
            updated = updater.copy_elixys_to_machine(file_path)
            if updated:
                logger.info("You may restart your Elixys machine now")
            else:
                logger.info("Install has been cancelled")
        except Exception as e:
            logger.error("Error: " + str(e))
            logger.error("Failed to update Elixys.\nPlease contact SofieBio Sciences to resolve the problem.")
        finally:
            updater.connection.close()
            updater.ssh_client.close()
    except socket.timeout:
        msg = "Could not validate Elixys connection.\n" + \
              "You are most likely not on the same network.\n" + \
              "Ensure you are connected to the Elixys router.\n" + \
              "If you are connected via WIFI, it might be worth connecting to it via Ethernet.\n" + \
              "If problems continue to persist please contact SofieBio Sciences."
        logger.error(msg)
    except socket.error:
        msg = "Could not validate Elixys connection.\n" + \
              "Is Elixys up and running?\n" + \
              "If you just turned Elixys on please give it time(2 minutes) to boot up before trying this again.\n" + \
              "You can validate the Elixys is up by opening the Elixys app and viewing the login screen.  Please try again once you can see the Elixys app.\n\n" + \
              "If problems continue to persist please contact SofieBio Sciences."
        logger.error(msg)
    except Exception as e:
        logger.error("Error: " + str(e))
        logger.error("Failed to authenticate Elixys.\nPlease contact SofieBio Sciences to resolve the problem")
def do_authentication(updater):
    possible_username_passwords = copy.deepcopy(PASSCODES)
    possible_username_passwords = decrypt_passcodes(possible_username_passwords)
    updater.get_elixys_connection(possible_username_passwords)