Esempio n. 1
0
def grace_close_timeout(agent_id, user, timeout=120):

    try:

        time.sleep(timeout)
        res, session = ra.session_exist(agent_id)

        if res:

            status = session[0]
            if status == ra.Status.Timeout:

                ra.db.edit_connection(agent_id=agent_id,
                                      status=ra.Status.Closing)

                remove_session(agent_id, user)

            else:

                logger.info('Session found for agent %s' % agent_id)
                logger.info("No longer under 'timeout' status. Nothing to do.")

        else:

            logger.info('No session found for agent %s' % agent_id)
            logger.info('Nothing to do.')

    except Exception as e:

        logger.error('Unable to close session from timeout thread.')
        logger.exception(e)
Esempio n. 2
0
def grace_close_timeout(agent_id, user, timeout=120):

    try:

        time.sleep(timeout)
        res, session = ra.session_exist(agent_id)

        if res:

            status = session[0]
            if status == ra.Status.Timeout:

                ra.db.edit_connection(agent_id=agent_id, status=ra.Status.Closing)

                remove_session(agent_id, user)

            else:

                logger.info("Session found for agent %s" % agent_id)
                logger.info("No longer under 'timeout' status. Nothing to do.")

        else:

            logger.info("No session found for agent %s" % agent_id)
            logger.info("Nothing to do.")

    except Exception as e:

        logger.error("Unable to close session from timeout thread.")
        logger.exception(e)
Esempio n. 3
0
def terminate_rd_session(agent_id=None,
                         user=Default.User,
                         customer=Default.Customer):

    if not agent_id:
        return {'pass': False, 'message': 'No agent id was provided.'}

    res, session = ra.session_exist(agent_id)
    if res:

        status, web_port = session

        if status == ra.Status.Waiting:
            return {
                'pass': False,
                'message': ('Session still waiting for agent to respond.'),
                ra.RaKey.Status: status
            }

        if status == ra.Status.Timeout:
            return {
                'pass': False,
                'message': ('Session already in the process to be closed.'),
                ra.RaKey.Status: status,
            }

        return set_session_to_timeout(agent_id, user)

    else:

        message = "Could not find session for agent %s." % agent_id
        logger.error(message)

        return {
            'pass': False,
            'message': message,
            'error': "Session not found."
        }
Esempio n. 4
0
def terminate_rd_session(agent_id=None, user=Default.User, customer=Default.Customer):

    if not agent_id:
        return {"pass": False, "message": "No agent id was provided."}

    res, session = ra.session_exist(agent_id)
    if res:

        status, web_port = session

        if status == ra.Status.Waiting:
            return {"pass": False, "message": ("Session still waiting for agent to respond."), ra.RaKey.Status: status}

        if status == ra.Status.Timeout:
            return {"pass": False, "message": ("Session already in the process to be closed."), ra.RaKey.Status: status}

        return set_session_to_timeout(agent_id, user)

    else:

        message = "Could not find session for agent %s." % agent_id
        logger.error(message)

        return {"pass": False, "message": message, "error": "Session not found."}
Esempio n. 5
0
def new_rd_session(agent_id=None,
                   user=Default.User,
                   customer=Default.Customer):

    if not agent_id:
        return {'pass': False, 'message': 'No agent id was provided.'}

    res, session = ra.session_exist(agent_id)
    if res:

        status, web_port = session

        if status == ra.Status.Waiting:
            return {
                'pass': False,
                'message':
                ('Session exist for this agent. Waiting for response.'),
                ra.RaKey.Status: status
            }

        host = ra.get_hostname()
        uri = ra.create_vnc_uri(host, web_port)

        if status == ra.Status.Ready:
            return {
                'pass': False,
                'message': ('Session exist for this agent. Using session.'),
                ra.RaKey.Status: status,
                ra.RaKey.WebPort: web_port,
                ra.RaKey.Hostname: host,
                ra.RaKey.Uri: uri
            }

        if status == ra.Status.Timeout:

            ra.db.edit_connection(agent_id=agent_id, status=ra.Status.Ready)

            return {
                'pass': False,
                'message': ('Session exist for this agent. Reusing.'),
                ra.RaKey.Status: status,
                ra.RaKey.WebPort: web_port,
                ra.RaKey.Hostname: host,
                ra.RaKey.Uri: uri
            }

        if status == ra.Status.Closing:

            return {
                'pass':
                False,
                'message': ('Session exist but is being closed.'
                            'Please try again in a few seconds.'),
                ra.RaKey.Status:
                status,
            }

    operation = RaOperation(ra.RaValue.RemoteDesktop,
                            agent_id,
                            username=user,
                            customer=customer,
                            uri=ra.RaUri.StartRemoteDesktop % agent_id,
                            method='POST')

    port = None
    tunnel_needed = True

    if tunnel_needed:

        params = None
        port_range = list(ra.PortRange)
        for p in ra.PortRange:

            params = reverse_tunnel_params(port_range)
            if ra.db.port_available(port=params[TunnelKey.HostPort]):
                break

            port_range.remove(p)
            params = None

        if params:

            port = params[TunnelKey.HostPort]
            ssh_port = params[TunnelKey.SSHPort]
            operation.set_tunnel(host_port=port, ssh_port=ssh_port)

        else:

            return {
                'pass': False,
                'message': "Could not resolve host port for tunnel."
            }

    operation_id = save_operation(operation)
    if operation_id:

        result, msg = ra.db.save_connection(agent_id=agent_id,
                                            host_port=port,
                                            status=ra.Status.Waiting)

        if result:

            operation.operation_id = operation_id
            ra.add_feedback(agent_id, ra.Status.Waiting)
            store_in_agent_queue(operation)

            return {
                'pass': True,
                'message': 'Remote desktop created. Waiting...'
            }

        else:

            return {'pass': False, 'message': msg}

    else:

        return {
            'pass': False,
            'message': "Unable to save operation. Invalid operation ID."
        }
Esempio n. 6
0
def new_rd_session(agent_id=None, user=Default.User, customer=Default.Customer):

    if not agent_id:
        return {"pass": False, "message": "No agent id was provided."}

    res, session = ra.session_exist(agent_id)
    if res:

        status, web_port = session

        if status == ra.Status.Waiting:
            return {
                "pass": False,
                "message": ("Session exist for this agent. Waiting for response."),
                ra.RaKey.Status: status,
            }

        host = ra.get_hostname()
        uri = ra.create_vnc_uri(host, web_port)

        if status == ra.Status.Ready:
            return {
                "pass": False,
                "message": ("Session exist for this agent. Using session."),
                ra.RaKey.Status: status,
                ra.RaKey.WebPort: web_port,
                ra.RaKey.Hostname: host,
                ra.RaKey.Uri: uri,
            }

        if status == ra.Status.Timeout:

            ra.db.edit_connection(agent_id=agent_id, status=ra.Status.Ready)

            return {
                "pass": False,
                "message": ("Session exist for this agent. Reusing."),
                ra.RaKey.Status: status,
                ra.RaKey.WebPort: web_port,
                ra.RaKey.Hostname: host,
                ra.RaKey.Uri: uri,
            }

        if status == ra.Status.Closing:

            return {
                "pass": False,
                "message": ("Session exist but is being closed." "Please try again in a few seconds."),
                ra.RaKey.Status: status,
            }

    operation = RaOperation(
        ra.RaValue.RemoteDesktop,
        agent_id,
        username=user,
        customer=customer,
        uri=ra.RaUri.StartRemoteDesktop % agent_id,
        method="POST",
    )

    port = None
    tunnel_needed = True

    if tunnel_needed:

        params = None
        port_range = list(ra.PortRange)
        for p in ra.PortRange:

            params = reverse_tunnel_params(port_range)
            if ra.db.port_available(port=params[TunnelKey.HostPort]):
                break

            port_range.remove(p)
            params = None

        if params:

            port = params[TunnelKey.HostPort]
            ssh_port = params[TunnelKey.SSHPort]
            operation.set_tunnel(host_port=port, ssh_port=ssh_port)

        else:

            return {"pass": False, "message": "Could not resolve host port for tunnel."}

    operation_id = save_operation(operation)
    if operation_id:

        result, msg = ra.db.save_connection(agent_id=agent_id, host_port=port, status=ra.Status.Waiting)

        if result:

            operation.operation_id = operation_id
            ra.add_feedback(agent_id, ra.Status.Waiting)
            store_in_agent_queue(operation)

            return {"pass": True, "message": "Remote desktop created. Waiting..."}

        else:

            return {"pass": False, "message": msg}

    else:

        return {"pass": False, "message": "Unable to save operation. Invalid operation ID."}