Ejemplo n.º 1
0
def server_client_connect_post(server_id):
    org_id = bson.ObjectId(flask.request.json['org_id'])
    user_id = bson.ObjectId(flask.request.json['user_id'])

    svr = server.get_by_id(server_id,
        fields=['_id', 'name', 'network', 'links', 'organizations'])
    if not svr:
        return utils.jsonify({
            'error': SERVER_INVALID,
            'error_msg': SERVER_INVALID_MSG,
        }, 401)

    org = svr.get_org(org_id, fields=['_id'])
    if not org:
        return utils.jsonify({
            'error': ORG_INVALID,
            'error_msg': ORG_INVALID_MSG,
        }, 401)

    user = org.get_user(user_id, fields=['_id', 'name', 'disabled'])
    if not user:
        return utils.jsonify({
            'error': USER_INVALID,
            'error_msg': USER_INVALID_MSG,
        }, 401)

    client_conf = ''

    link_svr_id = None
    for link_doc in svr.links:
        if link_doc['user_id'] == user.id:
            link_svr_id = link_doc['server_id']
            break

    if link_svr_id:
        link_svr = server.get_by_id(link_svr_id,
            fields=['_id', 'network', 'local_networks'])
        client_conf += 'iroute %s %s\n' % utils.parse_network(
            link_svr.network)
        for local_network in link_svr.local_networks:
            push += 'iroute %s %s\n' % utils.parse_network(
                local_network)
    remote_ip_addr = svr.get_ip_addr(org.id, user_id)
    if remote_ip_addr:
        client_conf += 'ifconfig-push %s %s\n' % utils.parse_network(
            remote_ip_addr)

    return utils.jsonify({
        'client_conf': client_conf,
    })
Ejemplo n.º 2
0
def server_delete(server_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id,
                           fields=('_id', 'name', 'organizations', 'links'))

    try:
        link_ids = svr.remove()
    except ServerLinkOnlineError:
        return utils.jsonify(
            {
                'error': SERVER_NOT_OFFLINE,
                'error_msg': SERVER_NOT_OFFLINE_UNLINK_SERVER_MSG,
            }, 400)

    logger.LogEntry(message='Deleted server "%s".' % svr.name)

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_LINKS_UPDATED, resource_id=server_id)
    for link_id in link_ids:
        event.Event(type=SERVER_LINKS_UPDATED, resource_id=link_id)

    for org in svr.iter_orgs():
        event.Event(type=USERS_UPDATED, resource_id=org.id)
    return utils.jsonify({})
Ejemplo n.º 3
0
def server_operation_put(server_id, operation):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id, fields=server.operation_fields)

    try:
        if operation == START:
            svr.start()
            logger.LogEntry(message='Started server "%s".' % svr.name)
        if operation == STOP:
            svr.stop()
            logger.LogEntry(message='Stopped server "%s".' % svr.name)
        elif operation == RESTART:
            svr.restart()
            logger.LogEntry(message='Restarted server "%s".' % svr.name)
    except:
        event.Event(type=SERVERS_UPDATED)
        raise

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)
    for org in svr.iter_orgs():
        event.Event(type=USERS_UPDATED, resource_id=org.id)
    svr.send_link_events()

    return utils.jsonify(svr.dict())
Ejemplo n.º 4
0
def server_host_put(server_id, host_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id, fields=('_id', 'hosts', 'links'))
    hst = host.get_by_id(host_id, fields=('_id', 'name',
        'public_address', 'auto_public_address'))

    try:
        svr.add_host(hst.id)
    except ServerLinkCommonHostError:
        return utils.jsonify({
            'error': SERVER_LINK_COMMON_HOST,
            'error_msg': SERVER_LINK_COMMON_HOST_MSG,
        }, 400)

    svr.commit('hosts')
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({
        'id': hst.id,
        'server': svr.id,
        'status': OFFLINE,
        'name': hst.name,
        'address': hst.public_addr,
    })
Ejemplo n.º 5
0
def server_host_get(server_id):
    hosts = []
    svr = server.get_by_id(server_id, fields=('_id', 'status',
        'replica_count', 'hosts', 'instances'))
    active_hosts = set([x['host_id'] for x in svr.instances])
    hosts_offline = svr.replica_count - len(active_hosts) > 0

    for hst in svr.iter_hosts(fields=('_id', 'name',
            'public_address', 'auto_public_address',
            'public_address6', 'auto_public_address6')):
        if svr.status == ONLINE and hst.id in active_hosts:
            status = ONLINE
        elif svr.status == ONLINE and hosts_offline:
            status = OFFLINE
        else:
            status = None

        hosts.append({
            'id': hst.id,
            'server': svr.id,
            'status': status,
            'name': hst.name,
            'address': hst.public_addr,
            'address6': hst.public_addr6,
        })

    return utils.jsonify(hosts)
Ejemplo n.º 6
0
def server_operation_put(server_id, operation):
    fields = server.dict_fields + ['hosts', 'links', 'replica_count',
        'tls_auth_key', 'ca_certificate']

    svr = server.get_by_id(server_id, fields=fields)

    try:
        if operation == START:
            svr.start()
            logger.LogEntry(message='Started server "%s".' % svr.name)
        if operation == STOP:
            svr.stop()
            logger.LogEntry(message='Stopped server "%s".' % svr.name)
        elif operation == RESTART:
            svr.restart()
            logger.LogEntry(message='Restarted server "%s".' % svr.name)
    except:
        event.Event(type=SERVERS_UPDATED)
        raise

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)
    svr.send_link_events()

    return utils.jsonify(svr.dict())
Ejemplo n.º 7
0
def server_link_get(server_id):
    links = []
    svr = server.get_by_id(server_id, fields=['_id', 'status', 'links',
        'replica_count', 'instances'])
    hosts_offline = svr.replica_count - len(svr.instances) > 0

    if svr.links:
        spec = {
            '_id': {'$in': [x['server_id'] for x in svr.links]},
        }
        for link_svr in server.iter_servers(spec=spec, fields=[
                '_id', 'status', 'name', 'replica_count', 'instances']):
            link_hosts_offline = link_svr.replica_count - len(
                link_svr.instances) > 0
            if svr.status == ONLINE:
                if hosts_offline or link_hosts_offline:
                    status = OFFLINE
                elif link_svr.status == ONLINE:
                    status = ONLINE
                else:
                    status = OFFLINE
            else:
                status = None
            links.append({
                'id': link_svr.id,
                'server': svr.id,
                'status': status,
                'name': link_svr.name,
                'address': None,
            })

    return utils.jsonify(links)
Ejemplo n.º 8
0
def server_org_delete(server_id, org_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id,
        fields=('_id', 'status', 'network', 'network_start',
            'network_end', 'primary_organization',
            'primary_user', 'organizations', 'routes', 'ipv6'))
    org = organization.get_by_id(org_id, fields=('_id'))

    if svr.status == ONLINE:
        return utils.jsonify({
            'error': SERVER_NOT_OFFLINE,
            'error_msg': SERVER_NOT_OFFLINE_DETACH_ORG_MSG,
        }, 400)

    svr.remove_org(org)
    svr.commit(svr.changed)

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    event.Event(type=SERVER_ORGS_UPDATED, resource_id=svr.id)
    event.Event(type=USERS_UPDATED, resource_id=org.id)

    return utils.jsonify({})
Ejemplo n.º 9
0
def server_route_delete(server_id, route_network):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id)
    route_network = route_network.decode('hex')

    try:
        route = svr.remove_route(route_network)
    except ServerOnlineError:
        return utils.jsonify({
            'error': SERVER_ROUTE_ONLINE,
            'error_msg': SERVER_ROUTE_ONLINE_MSG,
        }, 400)

    err, err_msg = svr.validate_conf()
    if err:
        return utils.jsonify({
            'error': err,
            'error_msg': err_msg,
        }, 400)

    svr.commit('routes')

    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    for svr_link in svr.links:
        event.Event(type=SERVER_ROUTES_UPDATED,
            resource_id=svr_link['server_id'])

    return utils.jsonify(route)
Ejemplo n.º 10
0
def server_operation_put(server_id, operation):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id, fields=server.operation_fields)

    try:
        if operation == START:
            svr.start()
            logger.LogEntry(message='Started server "%s".' % svr.name)
        if operation == STOP:
            svr.stop()
            logger.LogEntry(message='Stopped server "%s".' % svr.name)
        elif operation == RESTART:
            svr.restart()
            logger.LogEntry(message='Restarted server "%s".' % svr.name)
    except:
        event.Event(type=SERVERS_UPDATED)
        raise

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)
    for org in svr.iter_orgs():
        event.Event(type=USERS_UPDATED, resource_id=org.id)
    svr.send_link_events()

    return utils.jsonify(svr.dict())
Ejemplo n.º 11
0
def server_link_get(server_id):
    links = []
    svr = server.get_by_id(server_id, fields=['_id', 'status', 'links',
        'replica_count', 'instances'])
    hosts_offline = svr.replica_count - len(svr.instances) > 0

    if svr.links:
        spec = {
            '_id': {'$in': [x['server_id'] for x in svr.links]},
        }
        for link_svr in server.iter_servers(spec=spec, fields=[
                '_id', 'status', 'name', 'replica_count', 'instances']):
            link_hosts_offline = link_svr.replica_count - len(
                link_svr.instances) > 0
            if svr.status == ONLINE:
                if hosts_offline or link_hosts_offline:
                    status = OFFLINE
                elif link_svr.status == ONLINE:
                    status = ONLINE
                else:
                    status = OFFLINE
            else:
                status = None
            links.append({
                'id': link_svr.id,
                'server': svr.id,
                'status': status,
                'name': link_svr.name,
                'address': None,
            })

    return utils.jsonify(links)
Ejemplo n.º 12
0
def server_route_delete(server_id, route_network):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id, fields=('_id', 'network', 'links',
        'network_start', 'network_end', 'routes', 'organizations', 'status',
        'ipv6'))
    route_network = route_network.decode('hex')

    try:
        route = svr.remove_route(route_network)
    except ServerOnlineError:
        return utils.jsonify({
            'error': SERVER_ROUTE_ONLINE,
            'error_msg': SERVER_ROUTE_ONLINE_MSG,
        }, 400)

    svr.commit('routes')

    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    for svr_link in svr.links:
        event.Event(type=SERVER_ROUTES_UPDATED,
            resource_id=svr_link['server_id'])

    return utils.jsonify(route)
Ejemplo n.º 13
0
def server_route_delete(server_id, route_network):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id,
                           fields=('_id', 'network', 'links', 'network_start',
                                   'network_end', 'routes', 'organizations',
                                   'status'))
    route_network = route_network.decode('hex')

    try:
        route = svr.remove_route(route_network)
    except ServerOnlineError:
        return utils.jsonify(
            {
                'error': SERVER_ROUTE_ONLINE,
                'error_msg': SERVER_ROUTE_ONLINE_MSG,
            }, 400)

    svr.commit('routes')

    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    for svr_link in svr.links:
        event.Event(type=SERVER_ROUTES_UPDATED,
                    resource_id=svr_link['server_id'])

    return utils.jsonify(route)
Ejemplo n.º 14
0
def server_host_get(server_id):
    if settings.app.demo_mode:
        resp = utils.demo_get_cache()
        if resp:
            return utils.jsonify(resp)

    hosts = []
    svr = server.get_by_id(server_id, fields=('_id', 'status',
        'replica_count', 'hosts', 'instances'))
    active_hosts = set([x['host_id'] for x in svr.instances])
    hosts_offline = svr.replica_count - len(active_hosts) > 0

    for hst in svr.iter_hosts(fields=('_id', 'name',
            'public_address', 'auto_public_address',
            'public_address6', 'auto_public_address6')):
        if svr.status == ONLINE and hst.id in active_hosts:
            status = ONLINE
        elif svr.status == ONLINE and hosts_offline:
            status = OFFLINE
        else:
            status = None

        hosts.append({
            'id': hst.id,
            'server': svr.id,
            'status': status,
            'name': hst.name,
            'address': hst.public_addr,
            'address6': hst.public_addr6,
        })

    if settings.app.demo_mode:
        utils.demo_set_cache(hosts)
    return utils.jsonify(hosts)
Ejemplo n.º 15
0
def server_org_put(server_id, org_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id,
                           fields=('_id', 'wg', 'status', 'network',
                                   'network_wg', 'network_start',
                                   'network_end', 'organizations', 'routes',
                                   'ipv6'))
    org = organization.get_by_id(org_id, fields=('_id', 'name'))
    if svr.status == ONLINE:
        return utils.jsonify(
            {
                'error': SERVER_NOT_OFFLINE,
                'error_msg': SERVER_NOT_OFFLINE_ATTACH_ORG_MSG,
            }, 400)
    svr.add_org(org)
    svr.commit(svr.changed)
    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    event.Event(type=SERVER_ORGS_UPDATED, resource_id=svr.id)
    event.Event(type=USERS_UPDATED, resource_id=org.id)
    return utils.jsonify({
        'id': org.id,
        'server': svr.id,
        'name': org.name,
    })
Ejemplo n.º 16
0
def server_route_delete(server_id, route_network):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id)
    route_network = route_network.decode('hex')

    try:
        route = svr.remove_route(route_network)
    except ServerOnlineError:
        return utils.jsonify(
            {
                'error': SERVER_ROUTE_ONLINE,
                'error_msg': SERVER_ROUTE_ONLINE_MSG,
            }, 400)

    err, err_msg = svr.validate_conf()
    if err:
        return utils.jsonify({
            'error': err,
            'error_msg': err_msg,
        }, 400)

    svr.commit('routes')

    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    for svr_link in svr.links:
        event.Event(type=SERVER_ROUTES_UPDATED,
                    resource_id=svr_link['server_id'])

    return utils.jsonify(route)
Ejemplo n.º 17
0
def server_client_disconnect_post(server_id):
    org_id = bson.ObjectId(flask.request.json['org_id'])
    user_id = bson.ObjectId(flask.request.json['user_id'])

    svr = server.get_by_id(server_id, fields=['_id', 'organizations'])
    if not svr:
        return utils.jsonify({
            'error': SERVER_INVALID,
            'error_msg': SERVER_INVALID_MSG,
        }, 401)

    org = svr.get_org(org_id, fields=['_id'])
    if not org:
        return utils.jsonify({
            'error': ORG_INVALID,
            'error_msg': ORG_INVALID_MSG,
        }, 401)

    user = org.get_user(user_id, fields=['_id'])
    if not user:
        return utils.jsonify({
            'error': USER_INVALID,
            'error_msg': USER_INVALID_MSG,
        }, 401)

    return utils.jsonify({})
Ejemplo n.º 18
0
def server_client_disconnect_post(server_id):
    org_id = bson.ObjectId(flask.request.json['org_id'])
    user_id = bson.ObjectId(flask.request.json['user_id'])

    svr = server.get_by_id(server_id, fields=['_id', 'organizations'])
    if not svr:
        return utils.jsonify({
            'error': SERVER_INVALID,
            'error_msg': SERVER_INVALID_MSG,
        }, 401)

    org = svr.get_org(org_id, fields=['_id'])
    if not org:
        return utils.jsonify({
            'error': ORG_INVALID,
            'error_msg': ORG_INVALID_MSG,
        }, 401)

    user = org.get_user(user_id, fields=['_id'])
    if not user:
        return utils.jsonify({
            'error': USER_INVALID,
            'error_msg': USER_INVALID_MSG,
        }, 401)

    return utils.jsonify({})
Ejemplo n.º 19
0
def server_host_put(server_id, host_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id, fields=('_id', 'hosts', 'links'))
    hst = host.get_by_id(host_id, fields=('_id', 'name',
        'public_address', 'auto_public_address'))

    try:
        svr.add_host(hst.id)
    except ServerLinkCommonHostError:
        return utils.jsonify({
            'error': SERVER_LINK_COMMON_HOST,
            'error_msg': SERVER_LINK_COMMON_HOST_MSG,
        }, 400)

    svr.commit('hosts')
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({
        'id': hst.id,
        'server': svr.id,
        'status': OFFLINE,
        'name': hst.name,
        'address': hst.public_addr,
    })
Ejemplo n.º 20
0
def server_operation_put(server_id, operation):
    fields = server.dict_fields + [
        'hosts', 'links', 'replica_count', 'tls_auth_key', 'ca_certificate'
    ]

    svr = server.get_by_id(server_id, fields=fields)

    try:
        if operation == START:
            svr.start()
            logger.LogEntry(message='Started server "%s".' % svr.name)
        if operation == STOP:
            svr.stop()
            logger.LogEntry(message='Stopped server "%s".' % svr.name)
        elif operation == RESTART:
            svr.restart()
            logger.LogEntry(message='Restarted server "%s".' % svr.name)
    except:
        event.Event(type=SERVERS_UPDATED)
        raise

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)
    svr.send_link_events()

    return utils.jsonify(svr.dict())
Ejemplo n.º 21
0
def server_host_get(server_id):
    hosts = []
    svr = server.get_by_id(server_id, fields=['_id', 'status',
        'replica_count', 'hosts', 'instances'])
    active_hosts = set([x['host_id'] for x in svr.instances])
    hosts_offline = svr.replica_count - len(active_hosts) > 0

    for hst in svr.iter_hosts(fields=['_id', 'name',
            'public_address', 'auto_public_address']):
        if svr.status == ONLINE and hst.id in active_hosts:
            status = ONLINE
        elif svr.status == ONLINE and hosts_offline:
            status = OFFLINE
        else:
            status = None

        hosts.append({
            'id': hst.id,
            'server': svr.id,
            'status': status,
            'name': hst.name,
            'address': hst.public_addr,
        })

    return utils.jsonify(hosts)
Ejemplo n.º 22
0
def server_org_delete(server_id, org_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id,
                           fields=('_id', 'status', 'network', 'network_start',
                                   'network_end', 'primary_organization',
                                   'primary_user', 'organizations', 'routes',
                                   'ipv6'))
    org = organization.get_by_id(org_id, fields=('_id'))

    if svr.status == ONLINE:
        return utils.jsonify(
            {
                'error': SERVER_NOT_OFFLINE,
                'error_msg': SERVER_NOT_OFFLINE_DETACH_ORG_MSG,
            }, 400)

    svr.remove_org(org)
    svr.commit(svr.changed)

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_ORGS_UPDATED, resource_id=svr.id)
    event.Event(type=USERS_UPDATED, resource_id=org.id)

    return utils.jsonify({})
Ejemplo n.º 23
0
def server_delete(server_id):
    svr = server.get_by_id(server_id, fields=('_id', 'name', 'organizations'))
    svr.remove()
    logger.LogEntry(message='Deleted server "%s".' % svr.name)
    event.Event(type=SERVERS_UPDATED)
    for org in svr.iter_orgs():
        event.Event(type=USERS_UPDATED, resource_id=org.id)
    return utils.jsonify({})
Ejemplo n.º 24
0
def server_delete(server_id):
    svr = server.get_by_id(server_id, fields=['_id', 'name', 'organizations'])
    svr.remove()
    logger.LogEntry(message='Deleted server "%s".' % svr.name)
    event.Event(type=SERVERS_UPDATED)
    for org in svr.iter_orgs():
        event.Event(type=USERS_UPDATED, resource_id=org.id)
    return utils.jsonify({})
Ejemplo n.º 25
0
def server_route_put(server_id, route_network):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id)
    route_network = route_network.decode('hex')
    comment = flask.request.json.get('comment') or None
    nat_route = True if flask.request.json.get('nat') else False
    nat_interface = flask.request.json.get('nat_interface') or None
    vpc_region = utils.filter_str(flask.request.json.get('vpc_region')) or None
    vpc_id = utils.filter_str(flask.request.json.get('vpc_id')) or None
    net_gateway = True if flask.request.json.get('net_gateway') else False

    try:
        route = svr.upsert_route(route_network, nat_route, nat_interface,
            vpc_region, vpc_id, net_gateway, comment)
    except ServerOnlineError:
        return utils.jsonify({
            'error': SERVER_ROUTE_ONLINE,
            'error_msg': SERVER_ROUTE_ONLINE_MSG,
        }, 400)
    except NetworkInvalid:
        return utils.jsonify({
            'error': SERVER_ROUTE_INVALID,
            'error_msg': SERVER_ROUTE_INVALID_MSG,
        }, 400)
    except ServerRouteNatVirtual:
        return utils.jsonify({
            'error': SERVER_ROUTE_VIRTUAL_NAT,
            'error_msg': SERVER_ROUTE_VIRTUAL_NAT_MSG,
        }, 400)
    except ServerRouteNatServerLink:
        return utils.jsonify({
            'error': SERVER_ROUTE_SERVER_LINK_NAT,
            'error_msg': SERVER_ROUTE_SERVER_LINK_NAT_MSG,
        }, 400)
    except ServerRouteNatNetworkLink:
        return utils.jsonify({
            'error': SERVER_ROUTE_NETWORK_LINK_NAT,
            'error_msg': SERVER_ROUTE_NETWORK_LINK_NAT_MSG,
        }, 400)

    err, err_msg = svr.validate_conf()
    if err:
        return utils.jsonify({
            'error': err,
            'error_msg': err_msg,
        }, 400)

    svr.commit('routes')

    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    for svr_link in svr.links:
        event.Event(type=SERVER_ROUTES_UPDATED,
            resource_id=svr_link['server_id'])

    return utils.jsonify(route)
Ejemplo n.º 26
0
def server_route_put(server_id, route_network):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id)
    route_network = route_network.decode('hex')
    comment = flask.request.json.get('comment') or None
    nat_route = True if flask.request.json.get('nat') else False
    nat_interface = flask.request.json.get('nat_interface') or None
    vpc_region = utils.filter_str(flask.request.json.get('vpc_region')) or None
    vpc_id = utils.filter_str(flask.request.json.get('vpc_id')) or None
    net_gateway = True if flask.request.json.get('net_gateway') else False

    try:
        route = svr.upsert_route(route_network, nat_route, nat_interface,
            vpc_region, vpc_id, net_gateway, comment)
    except ServerOnlineError:
        return utils.jsonify({
            'error': SERVER_ROUTE_ONLINE,
            'error_msg': SERVER_ROUTE_ONLINE_MSG,
        }, 400)
    except NetworkInvalid:
        return utils.jsonify({
            'error': SERVER_ROUTE_INVALID,
            'error_msg': SERVER_ROUTE_INVALID_MSG,
        }, 400)
    except ServerRouteNatVirtual:
        return utils.jsonify({
            'error': SERVER_ROUTE_VIRTUAL_NAT,
            'error_msg': SERVER_ROUTE_VIRTUAL_NAT_MSG,
        }, 400)
    except ServerRouteNatServerLink:
        return utils.jsonify({
            'error': SERVER_ROUTE_SERVER_LINK_NAT,
            'error_msg': SERVER_ROUTE_SERVER_LINK_NAT_MSG,
        }, 400)
    except ServerRouteNatNetworkLink:
        return utils.jsonify({
            'error': SERVER_ROUTE_NETWORK_LINK_NAT,
            'error_msg': SERVER_ROUTE_NETWORK_LINK_NAT_MSG,
        }, 400)

    err, err_msg = svr.validate_conf()
    if err:
        return utils.jsonify({
            'error': err,
            'error_msg': err_msg,
        }, 400)

    svr.commit('routes')

    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    for svr_link in svr.links:
        event.Event(type=SERVER_ROUTES_UPDATED,
            resource_id=svr_link['server_id'])

    return utils.jsonify(route)
Ejemplo n.º 27
0
def server_org_get(server_id):
    orgs = []
    svr = server.get_by_id(server_id, fields=['_id', 'organizations'])
    for org_doc in svr.get_org_fields(fields=['_id', 'name']):
        org_doc['id'] = org_doc.pop('_id')
        org_doc['server'] = svr.id
        orgs.append(org_doc)

    return utils.jsonify(orgs)
Ejemplo n.º 28
0
def server_org_get(server_id):
    orgs = []
    svr = server.get_by_id(server_id, fields=('_id', 'organizations'))
    for org_doc in svr.get_org_fields(fields=('_id', 'name')):
        org_doc['id'] = org_doc.pop('_id')
        org_doc['server'] = svr.id
        orgs.append(org_doc)

    return utils.jsonify(orgs)
Ejemplo n.º 29
0
def server_route_post(server_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id,
                           fields=('_id', 'network', 'links', 'network_start',
                                   'network_end', 'routes', 'organizations',
                                   'status', 'ipv6'))
    route_network = flask.request.json['network']
    nat_route = True if flask.request.json.get('nat') else False
    nat_interface = flask.request.json.get('nat_interface') or None
    vpc_region = utils.filter_str(flask.request.json.get('vpc_region')) or None
    vpc_id = utils.filter_str(flask.request.json.get('vpc_id')) or None

    try:
        route = svr.upsert_route(route_network, nat_route, nat_interface,
                                 vpc_region, vpc_id)
    except ServerOnlineError:
        return utils.jsonify(
            {
                'error': SERVER_ROUTE_ONLINE,
                'error_msg': SERVER_ROUTE_ONLINE_MSG,
            }, 400)
    except NetworkInvalid:
        return utils.jsonify(
            {
                'error': SERVER_ROUTE_INVALID,
                'error_msg': SERVER_ROUTE_INVALID_MSG,
            }, 400)
    except ServerRouteNatVirtual:
        return utils.jsonify(
            {
                'error': SERVER_ROUTE_VIRTUAL_NAT,
                'error_msg': SERVER_ROUTE_VIRTUAL_NAT_MSG,
            }, 400)
    except ServerRouteNatServerLink:
        return utils.jsonify(
            {
                'error': SERVER_ROUTE_SERVER_LINK_NAT,
                'error_msg': SERVER_ROUTE_SERVER_LINK_NAT_MSG,
            }, 400)
    except ServerRouteNatNetworkLink:
        return utils.jsonify(
            {
                'error': SERVER_ROUTE_NETWORK_LINK_NAT,
                'error_msg': SERVER_ROUTE_NETWORK_LINK_NAT_MSG,
            }, 400)

    svr.commit('routes')

    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    for svr_link in svr.links:
        event.Event(type=SERVER_ROUTES_UPDATED,
                    resource_id=svr_link['server_id'])

    return utils.jsonify(route)
Ejemplo n.º 30
0
def server_link_get(server_id):
    if settings.app.demo_mode:
        resp = utils.demo_get_cache()
        if resp:
            return utils.jsonify(resp)

    links = []
    svr = server.get_by_id(server_id,
                           fields=('_id', 'status', 'links', 'replica_count',
                                   'instances'))
    if not svr:
        return flask.abort(404)
    hosts_offline = svr.replica_count - len(svr.instances) > 0

    if svr.links:
        link_use_local = {}
        link_server_ids = []

        for link in svr.links:
            link_server_id = link['server_id']
            link_use_local[link_server_id] = link['use_local_address']
            link_server_ids.append(link_server_id)

        spec = {
            '_id': {
                '$in': link_server_ids
            },
        }
        for link_svr in server.iter_servers(spec=spec,
                                            fields=('_id', 'status', 'name',
                                                    'replica_count',
                                                    'instances')):
            link_hosts_offline = link_svr.replica_count - len(
                link_svr.instances) > 0
            if svr.status == ONLINE:
                if hosts_offline or link_hosts_offline:
                    status = OFFLINE
                elif link_svr.status == ONLINE:
                    status = ONLINE
                else:
                    status = OFFLINE
            else:
                status = None
            links.append({
                'id': link_svr.id,
                'server': svr.id,
                'status': status,
                'name': link_svr.name,
                'address': None,
                'use_local_address': link_use_local[link_svr.id],
            })

    if settings.app.demo_mode:
        utils.demo_set_cache(links)
    return utils.jsonify(links)
Ejemplo n.º 31
0
def server_host_delete(server_id, host_id):
    svr = server.get_by_id(server_id, fields=['_id', 'hosts'])
    hst = host.get_by_id(host_id, fields=['_id', 'name'])

    svr.remove_host(hst.id)
    svr.commit('hosts')

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({})
Ejemplo n.º 32
0
def server_host_delete(server_id, host_id):
    svr = server.get_by_id(server_id, fields=('_id', 'hosts', 'replica_count'))
    hst = host.get_by_id(host_id, fields=('_id', 'name'))

    svr.remove_host(hst.id)
    svr.commit('hosts')

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({})
Ejemplo n.º 33
0
    def task(self):
        try:
            timestamp_spec = utils.now() - datetime.timedelta(
                seconds=settings.vpn.route_ping_ttl)

            docs = self.routes_collection.find({
                'timestamp': {
                    '$lt': timestamp_spec
                },
            })

            yield

            for doc in docs:
                server_id = doc['server_id']
                vpc_region = doc['vpc_region']
                vpc_id = doc['vpc_id']
                network = doc['network']

                svr = server.get_by_id(server_id)
                if not svr:
                    self.routes_collection.remove({
                        '_id': doc['_id'],
                    })
                    continue

                match = False
                for route in svr.get_routes(include_server_links=True):
                    route_advertise = route['advertise'] or \
                        (route['vpc_region'] and route['vpc_id'])

                    route_network = route['network']
                    netmap = route.get('nat_netmap')
                    if netmap:
                        route_network = netmap

                    if route_advertise and network == route_network:
                        match = True

                if not match:
                    self.routes_collection.remove({
                        '_id': doc['_id'],
                    })
                    continue

                messenger.publish('instance', [
                    'route_advertisement', server_id, vpc_region, vpc_id,
                    network
                ])
        except GeneratorExit:
            raise
        except:
            logger.exception('Error checking route states', 'tasks')
Ejemplo n.º 34
0
def server_route_get(server_id):
    if settings.app.demo_mode:
        resp = utils.demo_get_cache()
        if resp:
            return utils.jsonify(resp)

    svr = server.get_by_id(server_id, fields=('_id', 'network', 'links',
        'network_start', 'network_end', 'routes', 'organizations', 'ipv6'))

    resp = svr.get_routes(include_server_links=True)
    if settings.app.demo_mode:
        utils.demo_set_cache(resp)
    return utils.jsonify(resp)
Ejemplo n.º 35
0
def server_route_get(server_id):
    if settings.app.demo_mode:
        resp = utils.demo_get_cache()
        if resp:
            return utils.jsonify(resp)

    svr = server.get_by_id(server_id, fields=('_id', 'network', 'links',
        'network_start', 'network_end', 'routes', 'organizations', 'ipv6'))

    resp = svr.get_routes(include_server_links=True)
    if settings.app.demo_mode:
        utils.demo_set_cache(resp)
    return utils.jsonify(resp)
Ejemplo n.º 36
0
def server_route_post(server_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id, fields=('_id', 'network', 'links',
        'network_start', 'network_end', 'routes', 'organizations', 'status',
        'ipv6'))
    route_network = flask.request.json['network']
    nat_route = True if flask.request.json.get('nat') else False
    nat_interface = flask.request.json.get('nat_interface') or None
    vpc_region = utils.filter_str(flask.request.json.get('vpc_region')) or None
    vpc_id = utils.filter_str(flask.request.json.get('vpc_id')) or None

    try:
        route = svr.upsert_route(route_network, nat_route, nat_interface,
            vpc_region, vpc_id)
    except ServerOnlineError:
        return utils.jsonify({
            'error': SERVER_ROUTE_ONLINE,
            'error_msg': SERVER_ROUTE_ONLINE_MSG,
        }, 400)
    except NetworkInvalid:
        return utils.jsonify({
            'error': SERVER_ROUTE_INVALID,
            'error_msg': SERVER_ROUTE_INVALID_MSG,
        }, 400)
    except ServerRouteNatVirtual:
        return utils.jsonify({
            'error': SERVER_ROUTE_VIRTUAL_NAT,
            'error_msg': SERVER_ROUTE_VIRTUAL_NAT_MSG,
        }, 400)
    except ServerRouteNatServerLink:
        return utils.jsonify({
            'error': SERVER_ROUTE_SERVER_LINK_NAT,
            'error_msg': SERVER_ROUTE_SERVER_LINK_NAT_MSG,
        }, 400)
    except ServerRouteNatNetworkLink:
        return utils.jsonify({
            'error': SERVER_ROUTE_NETWORK_LINK_NAT,
            'error_msg': SERVER_ROUTE_NETWORK_LINK_NAT_MSG,
        }, 400)

    svr.commit('routes')

    event.Event(type=SERVER_ROUTES_UPDATED, resource_id=svr.id)
    for svr_link in svr.links:
        event.Event(type=SERVER_ROUTES_UPDATED,
            resource_id=svr_link['server_id'])

    return utils.jsonify(route)
Ejemplo n.º 37
0
def server_host_delete(server_id, host_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id, fields=('_id', 'hosts', 'replica_count'))
    hst = host.get_by_id(host_id, fields=('_id', 'name'))

    svr.remove_host(hst.id)
    svr.commit('hosts')

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({})
Ejemplo n.º 38
0
def server_host_put(server_id, host_id):
    svr = server.get_by_id(server_id, fields=['_id', 'hosts'])
    hst = host.get_by_id(host_id, fields=['_id', 'name', 'public_address'])
    svr.add_host(hst.id)
    svr.commit('hosts')
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({
        'id': hst.id,
        'server': svr.id,
        'status': OFFLINE,
        'name': hst.name,
        'address': hst.public_addr,
    })
Ejemplo n.º 39
0
def server_link_get(server_id):
    if settings.app.demo_mode:
        resp = utils.demo_get_cache()
        if resp:
            return utils.jsonify(resp)

    links = []
    svr = server.get_by_id(server_id, fields=('_id', 'status', 'links',
        'replica_count', 'instances'))
    if not svr:
        return flask.abort(404)
    hosts_offline = svr.replica_count - len(svr.instances) > 0

    if svr.links:
        link_use_local = {}
        link_server_ids = []

        for link in svr.links:
            link_server_id = link['server_id']
            link_use_local[link_server_id] = link['use_local_address']
            link_server_ids.append(link_server_id)

        spec = {
            '_id': {'$in': link_server_ids},
        }
        for link_svr in server.iter_servers(spec=spec, fields=(
                '_id', 'status', 'name', 'replica_count', 'instances')):
            link_hosts_offline = link_svr.replica_count - len(
                link_svr.instances) > 0
            if svr.status == ONLINE:
                if hosts_offline or link_hosts_offline:
                    status = OFFLINE
                elif link_svr.status == ONLINE:
                    status = ONLINE
                else:
                    status = OFFLINE
            else:
                status = None
            links.append({
                'id': link_svr.id,
                'server': svr.id,
                'status': status,
                'name': link_svr.name,
                'address': None,
                'use_local_address': link_use_local[link_svr.id],
            })

    if settings.app.demo_mode:
        utils.demo_set_cache(links)
    return utils.jsonify(links)
Ejemplo n.º 40
0
def server_host_put(server_id, host_id):
    svr = server.get_by_id(server_id, fields=['_id', 'hosts'])
    hst = host.get_by_id(host_id, fields=['_id', 'name', 'public_address'])
    svr.add_host(hst.id)
    svr.commit('hosts')
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({
        'id': hst.id,
        'server': svr.id,
        'status': OFFLINE,
        'name': hst.name,
        'address': hst.public_addr,
    })
Ejemplo n.º 41
0
    def task(self):
        try:
            timestamp_spec = utils.now() - datetime.timedelta(
                seconds=settings.vpn.route_ping_ttl)

            docs = self.routes_collection.find({
                'timestamp': {'$lt': timestamp_spec},
            })

            yield

            for doc in docs:
                server_id = doc['server_id']
                vpc_region = doc['vpc_region']
                vpc_id = doc['vpc_id']
                network = doc['network']

                svr = server.get_by_id(server_id)
                if not svr:
                    self.routes_collection.remove({
                        '_id': doc['_id'],
                    })
                    continue

                match = False
                for route in svr.get_routes(include_server_links=True):
                    route_advertise = route['advertise'] or \
                        (route['vpc_region'] and route['vpc_id'])

                    route_network = route['network']
                    netmap = route.get('nat_netmap')
                    if netmap:
                        route_network = netmap

                    if route_advertise and network == route_network:
                        match = True

                if not match:
                    self.routes_collection.remove({
                        '_id': doc['_id'],
                    })
                    continue

                messenger.publish('instance', ['route_advertisement',
                    server_id, vpc_region, vpc_id, network])
        except GeneratorExit:
            raise
        except:
            logger.exception('Error checking route states', 'tasks')
Ejemplo n.º 42
0
def server_org_get(server_id):
    if settings.app.demo_mode:
        resp = utils.demo_get_cache()
        if resp:
            return utils.jsonify(resp)

    orgs = []
    svr = server.get_by_id(server_id, fields=('_id', 'organizations'))
    for org_doc in svr.get_org_fields(fields=('_id', 'name')):
        org_doc['id'] = org_doc.pop('_id')
        org_doc['server'] = svr.id
        orgs.append(org_doc)

    if settings.app.demo_mode:
        utils.demo_set_cache(orgs)
    return utils.jsonify(orgs)
Ejemplo n.º 43
0
def server_org_get(server_id):
    if settings.app.demo_mode:
        resp = utils.demo_get_cache()
        if resp:
            return utils.jsonify(resp)

    orgs = []
    svr = server.get_by_id(server_id, fields=('_id', 'organizations'))
    for org_doc in svr.get_org_fields(fields=('_id', 'name')):
        org_doc['id'] = org_doc.pop('_id')
        org_doc['server'] = svr.id
        orgs.append(org_doc)

    if settings.app.demo_mode:
        utils.demo_set_cache(orgs)
    return utils.jsonify(orgs)
Ejemplo n.º 44
0
def server_otp_verify_post(server_id):
    org_id = bson.ObjectId(flask.request.json['org_id'])
    user_id = bson.ObjectId(flask.request.json['user_id'])
    otp_code = flask.request.json['otp_code']
    remote_ip = flask.request.json.get('remote_ip')

    svr = server.get_by_id(server_id,
        fields=['_id', 'name', 'organizations'])
    if not svr:
        return utils.jsonify({
            'error': SERVER_INVALID,
            'error_msg': SERVER_INVALID_MSG,
        }, 401)

    org = svr.get_org(org_id, fields=['_id'])
    if not org:
        logger.LogEntry(message='User failed authentication, ' +
            'invalid organization on server "%s".' % svr.name)
        return utils.jsonify({
            'error': ORG_INVALID,
            'error_msg': ORG_INVALID_MSG,
        }, 401)

    user = org.get_user(user_id, fields=['_id', 'name', 'type' ,'otp_secret'])
    if not user:
        logger.LogEntry(message='User failed authentication, ' +
            'invalid user on server "%s".' % svr.name)
        return utils.jsonify({
            'error': USER_INVALID,
            'error_msg': USER_INVALID_MSG,
        }, 401)

    if user.type == CERT_CLIENT and \
            not user.verify_otp_code(otp_code, remote_ip):
        logger.LogEntry(message='User failed two-step authentication "%s".' % (
            user.name))
        return utils.jsonify({
            'error': OTP_CODE_INVALID,
            'error_msg': OTP_CODE_INVALID_MSG,
        }, 401)

    return utils.jsonify({
        'authenticated': True,
    })
Ejemplo n.º 45
0
def server_otp_verify_post(server_id):
    org_id = bson.ObjectId(flask.request.json['org_id'])
    user_id = bson.ObjectId(flask.request.json['user_id'])
    otp_code = flask.request.json['otp_code']
    remote_ip = flask.request.json.get('remote_ip')

    svr = server.get_by_id(server_id,
        fields=['_id', 'name', 'organizations'])
    if not svr:
        return utils.jsonify({
            'error': SERVER_INVALID,
            'error_msg': SERVER_INVALID_MSG,
        }, 401)

    org = svr.get_org(org_id, fields=['_id'])
    if not org:
        logger.LogEntry(message='User failed authentication, ' +
            'invalid organization on server "%s".' % svr.name)
        return utils.jsonify({
            'error': ORG_INVALID,
            'error_msg': ORG_INVALID_MSG,
        }, 401)

    user = org.get_user(user_id, fields=['_id', 'name', 'type' ,'otp_secret'])
    if not user:
        logger.LogEntry(message='User failed authentication, ' +
            'invalid user on server "%s".' % svr.name)
        return utils.jsonify({
            'error': USER_INVALID,
            'error_msg': USER_INVALID_MSG,
        }, 401)

    if user.type == CERT_CLIENT and \
            not user.verify_otp_code(otp_code, remote_ip):
        logger.LogEntry(message='User failed two-step authentication "%s".' % (
            user.name))
        return utils.jsonify({
            'error': OTP_CODE_INVALID,
            'error_msg': OTP_CODE_INVALID_MSG,
        }, 401)

    return utils.jsonify({
        'authenticated': True,
    })
Ejemplo n.º 46
0
def server_org_put(server_id, org_id):
    svr = server.get_by_id(server_id,
        fields=['_id', 'status', 'network', 'organizations'])
    org = organization.get_by_id(org_id, fields=['_id', 'name'])
    if svr.status == ONLINE:
        return utils.jsonify({
            'error': SERVER_NOT_OFFLINE,
            'error_msg': SERVER_NOT_OFFLINE_ATTACH_ORG_MSG,
        }, 400)
    svr.add_org(org)
    svr.commit(svr.changed)
    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_ORGS_UPDATED, resource_id=svr.id)
    event.Event(type=USERS_UPDATED, resource_id=org.id)
    return utils.jsonify({
        'id': org.id,
        'server': svr.id,
        'name': org.name,
    })
Ejemplo n.º 47
0
def server_host_delete(server_id, host_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id, fields=(
        '_id', 'hosts', 'replica_count'))
    if not svr:
        return flask.abort(404)
    hst = host.get_by_id(host_id, fields=('_id', 'name'))
    if not hst:
        return flask.abort(404)

    svr.remove_host(hst.id)
    svr.commit('hosts')

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({})
Ejemplo n.º 48
0
def server_org_put(server_id, org_id):
    svr = server.get_by_id(server_id,
        fields=('_id', 'status', 'network', 'organizations'))
    org = organization.get_by_id(org_id, fields=('_id', 'name'))
    if svr.status == ONLINE:
        return utils.jsonify({
            'error': SERVER_NOT_OFFLINE,
            'error_msg': SERVER_NOT_OFFLINE_ATTACH_ORG_MSG,
        }, 400)
    svr.add_org(org)
    svr.commit(svr.changed)
    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_ORGS_UPDATED, resource_id=svr.id)
    event.Event(type=USERS_UPDATED, resource_id=org.id)
    return utils.jsonify({
        'id': org.id,
        'server': svr.id,
        'name': org.name,
    })
Ejemplo n.º 49
0
    def task(self):
        svr = server.get_by_id(self.server_id)
        if not svr:
            return

        for _ in xrange(5):
            if svr.network_lock:
                time.sleep(2)
                svr.load()
            else:
                break

        if svr.network_lock:
            raise ServerNetworkLocked('Server network is locked', {
                'server_id': svr.id,
                'queue_id': self.id,
                'queue_type': self.type,
            })

        svr.ip_pool.assign_ip_addr(self.org_id, self.user_id)
Ejemplo n.º 50
0
def server_org_delete(server_id, org_id):
    svr = server.get_by_id(server_id,
        fields=['_id', 'status', 'network', 'primary_organization',
            'primary_user', 'organizations'])
    org = organization.get_by_id(org_id, fields=['_id'])

    if svr.status == ONLINE:
        return utils.jsonify({
            'error': SERVER_NOT_OFFLINE,
            'error_msg': SERVER_NOT_OFFLINE_DETACH_ORG_MSG,
        }, 400)

    svr.remove_org(org)
    svr.commit(svr.changed)

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_ORGS_UPDATED, resource_id=svr.id)
    event.Event(type=USERS_UPDATED, resource_id=org.id)

    return utils.jsonify({})
Ejemplo n.º 51
0
def server_org_delete(server_id, org_id):
    svr = server.get_by_id(server_id,
        fields=['_id', 'status', 'network', 'primary_organization',
            'primary_user', 'organizations'])
    org = organization.get_by_id(org_id, fields=['_id'])

    if svr.status == ONLINE:
        return utils.jsonify({
            'error': SERVER_NOT_OFFLINE,
            'error_msg': SERVER_NOT_OFFLINE_DETACH_ORG_MSG,
        }, 400)

    svr.remove_org(org)
    svr.commit(svr.changed)

    event.Event(type=SERVERS_UPDATED)
    event.Event(type=SERVER_ORGS_UPDATED, resource_id=svr.id)
    event.Event(type=USERS_UPDATED, resource_id=org.id)

    return utils.jsonify({})
Ejemplo n.º 52
0
def server_host_put(server_id, host_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id)
    if not svr:
        return flask.abort(404)
    hst = host.get_by_id(host_id,
                         fields=('_id', 'name', 'public_address',
                                 'auto_public_address', 'auto_public_host',
                                 'public_address6', 'auto_public_address6',
                                 'auto_public_host6'))
    if not svr:
        return flask.abort(404)

    try:
        svr.add_host(hst.id)
    except ServerLinkCommonHostError:
        return utils.jsonify(
            {
                'error': SERVER_LINK_COMMON_HOST,
                'error_msg': SERVER_LINK_COMMON_HOST_MSG,
            }, 400)

    err, err_msg = svr.validate_conf(allow_online=True)
    if err:
        return utils.jsonify({
            'error': err,
            'error_msg': err_msg,
        }, 400)

    svr.commit('hosts')
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({
        'id': hst.id,
        'server': svr.id,
        'status': OFFLINE,
        'name': hst.name,
        'address': hst.public_addr,
    })
Ejemplo n.º 53
0
def _on_msg(msg):
    if msg['message'] != 'start':
        return

    try:
        svr = server.get_by_id(msg['server_id'])
        if settings.local.host_id not in svr.hosts:
            return

        for instance in svr.instances:
            if instance['host_id'] == settings.local.host_id:
                return

        prefered_hosts = msg.get('prefered_hosts')

        if prefered_hosts and settings.local.host_id not in prefered_hosts:
            time.sleep(0.1)

        svr.run(send_events=msg.get('send_events'))
    except:
        logger.exception('Failed to run server', 'runners')
Ejemplo n.º 54
0
def _on_msg(msg):
    if msg['message'] != 'start':
        return

    try:
        svr = server.get_by_id(msg['server_id'])
        if settings.local.host_id not in svr.hosts:
            return

        for instance in svr.instances:
            if instance['host_id'] == settings.local.host_id:
                return

        prefered_hosts = msg.get('prefered_hosts')

        if prefered_hosts and settings.local.host_id not in prefered_hosts:
            time.sleep(0.1)

        svr.run(send_events=msg.get('send_events'))
    except:
        logger.exception('Failed to run server', 'runners')
Ejemplo n.º 55
0
def server_tls_verify_post(server_id):
    org_id = bson.ObjectId(flask.request.json['org_id'])
    user_id = bson.ObjectId(flask.request.json['user_id'])

    svr = server.get_by_id(server_id, fields=['_id', 'name', 'organizations'])
    if not svr:
        return utils.jsonify({
            'error': SERVER_INVALID,
            'error_msg': SERVER_INVALID_MSG,
        }, 401)

    org = svr.get_org(org_id, fields=['_id'])
    if not org:
        logger.LogEntry(message='User failed authentication, ' +
            'invalid organization "%s" on server "%s".' % (org_id, svr.name))
        return utils.jsonify({
            'error': ORG_INVALID,
            'error_msg': ORG_INVALID_MSG,
        }, 401)

    user = org.get_user(user_id, fields=['_id', 'name', 'disabled'])
    if not user:
        logger.LogEntry(message='User failed authentication, ' +
            'invalid user "%s" on server "%s".' % (user_id, svr.name))
        return utils.jsonify({
            'error': USER_INVALID,
            'error_msg': USER_INVALID_MSG,
        }, 401)

    if user.disabled:
        logger.LogEntry(message='User failed authentication, ' +
            'disabled user "%s" on server "%s".' % (user.name, svr.name))
        return utils.jsonify({
            'error': USER_INVALID,
            'error_msg': USER_INVALID_MSG,
        }, 401)

    return utils.jsonify({
        'authenticated': True,
    })
Ejemplo n.º 56
0
def server_tls_verify_post(server_id):
    org_id = bson.ObjectId(flask.request.json['org_id'])
    user_id = bson.ObjectId(flask.request.json['user_id'])

    svr = server.get_by_id(server_id, fields=['_id', 'name', 'organizations'])
    if not svr:
        return utils.jsonify({
            'error': SERVER_INVALID,
            'error_msg': SERVER_INVALID_MSG,
        }, 401)

    org = svr.get_org(org_id, fields=['_id'])
    if not org:
        logger.LogEntry(message='User failed authentication, ' +
            'invalid organization "%s" on server "%s".' % (org_id, svr.name))
        return utils.jsonify({
            'error': ORG_INVALID,
            'error_msg': ORG_INVALID_MSG,
        }, 401)

    user = org.get_user(user_id, fields=['_id', 'name', 'disabled'])
    if not user:
        logger.LogEntry(message='User failed authentication, ' +
            'invalid user "%s" on server "%s".' % (user_id, svr.name))
        return utils.jsonify({
            'error': USER_INVALID,
            'error_msg': USER_INVALID_MSG,
        }, 401)

    if user.disabled:
        logger.LogEntry(message='User failed authentication, ' +
            'disabled user "%s" on server "%s".' % (user.name, svr.name))
        return utils.jsonify({
            'error': USER_INVALID,
            'error_msg': USER_INVALID_MSG,
        }, 401)

    return utils.jsonify({
        'authenticated': True,
    })
Ejemplo n.º 57
0
def server_host_put(server_id, host_id):
    if settings.app.demo_mode:
        return utils.demo_blocked()

    svr = server.get_by_id(server_id)
    if not svr:
        return flask.abort(404)
    hst = host.get_by_id(host_id, fields=('_id', 'name',
        'public_address', 'auto_public_address', 'auto_public_host',
        'public_address6', 'auto_public_address6', 'auto_public_host6'))
    if not svr:
        return flask.abort(404)

    try:
        svr.add_host(hst.id)
    except ServerLinkCommonHostError:
        return utils.jsonify({
            'error': SERVER_LINK_COMMON_HOST,
            'error_msg': SERVER_LINK_COMMON_HOST_MSG,
        }, 400)

    err, err_msg = svr.validate_conf(allow_online=True)
    if err:
        return utils.jsonify({
            'error': err,
            'error_msg': err_msg,
        }, 400)

    svr.commit('hosts')
    event.Event(type=SERVER_HOSTS_UPDATED, resource_id=svr.id)

    return utils.jsonify({
        'id': hst.id,
        'server': svr.id,
        'status': OFFLINE,
        'name': hst.name,
        'address': hst.public_addr,
    })
Ejemplo n.º 58
0
    def task(self):
        svr = server.get_by_id(self.server_id)
        if not svr:
            logger.warning(
                "Tried to run assign_ip_addr queue " + "but server is no longer available",
                "queues",
                server_id=self.server_id,
            )
            return

        for _ in xrange(5):
            if svr.network_lock:
                time.sleep(2)
                svr.load()
            else:
                break

        if svr.network_lock:
            raise ServerNetworkLocked(
                "Server network is locked", {"server_id": svr.id, "queue_id": self.id, "queue_type": self.type}
            )

        svr.ip_pool.assign_ip_addr(self.org_id, self.user_id)
Ejemplo n.º 59
0
    def task(self):
        svr = server.get_by_id(self.server_id)
        if not svr:
            logger.warning('Tried to run assign_ip_addr queue ' +
                'but server is no longer available', 'queues',
                server_id=self.server_id,
            )
            return

        for _ in xrange(5):
            if svr.network_lock:
                time.sleep(2)
                svr.load()
            else:
                break

        if svr.network_lock:
            raise ServerNetworkLocked('Server network is locked', {
                'server_id': svr.id,
                'queue_id': self.id,
                'queue_type': self.type,
            })

        svr.ip_pool.assign_ip_addr(self.org_id, self.user_id)
Ejemplo n.º 60
0
 def get_by_id(self, server_id):
     from pritunl import server
     svr = server.get_by_id(server_id)
     if svr and self.id in svr.organizations:
         return svr