Exemple #1
0
def configure_template_for_endpoint(request):
    required_fields = set(["input_form_name", "group_id", "endpoint_id"])
    if not required_fields.issubset(request.POST):
        return render(request, "error.html", {"error": "Invalid Parameters in POST"})

    input_form_name = request.POST["input_form_name"]
    group_id = request.POST["group_id"]
    endpoint_id = request.POST["endpoint_id"]

    print endpoint_id

    provider_instance = endpoint_provider.get_provider_instance_from_group(group_id)
    endpoint = provider_instance.get_endpoint_by_id(endpoint_id)

    input_form = InputForm.objects.get(name=input_form_name)

    print input_form.json
    json_object = json.loads(input_form.json)

    config_template = input_form.script
    action_options = json.loads(config_template.action_provider_options)

    context = {"input_form": input_form, "json_object": json_object, "endpoint": endpoint, "group_id": group_id,
               'action_options' : action_options
               }
    return render(request, "input_forms/configure_per_endpoint_template.html", context)
Exemple #2
0
def search_ip(request):
    """
    used for UI autocomplete searches. Will search all configured endpoint groups! Be careful with nmap based
    groups as this will take a long time!
    :param request: term
    :return: json list of dicts of type {'value': 'provider.id:endpoint.ip', 'label': 'group_name/endpoint_name'}
    """
    logger.info("__ input_forms search_ip __")

    term = request.GET["term"]
    results = []

    provider_list = EndpointGroup.objects.all().order_by("name")
    for provider in provider_list:

        provider_instance = endpoint_provider.get_provider_instance_from_group(
            provider.id)
        if "Ansible" in str(provider_instance):
            print("Ansible Instance, skipping")
            continue
        provider_instance.apply_filter("Name", term)
        endpoints_list = provider_instance.get_page(0, 128)

        for endpoint in endpoints_list:
            r = dict()
            print "ENDPOINT IS: " + str(endpoint)
            r["value"] = str(provider.id) + ":" + str(
                endpoint.get('ip', '0.0.0.0'))
            r["label"] = provider.name + "/" + endpoint.get('name', 'unknown')
            results.append(r)

    return HttpResponse(json.dumps(results), content_type="application/json")
Exemple #3
0
def add_endpoints_to_queue(request):
    """
    takes a list of selected endpoints and adds them to the user session under a key named
    "endpoint_queue". Also adds another list of "endpoint_queue_names" to avoid limitations with django template
    language stuff to show already selected items in the queue

    """
    logger.info("__ endpoints add_endpoints_to_queue __")
    required_fields = set(["endpoints", "group_id"])
    if not required_fields.issubset(request.POST):
        logger.error("not all required fields found in request")
        return render(request, "error.html", {"error": "Invalid Parameters in POST"})

    group_id = request.POST["group_id"]
    provider_instance = endpoint_provider.get_provider_instance_from_group(group_id)

    endpoint_queue = []
    endpoint_queue_names = []

    if "endpoint_queue" in request.session:
        endpoint_queue = request.session["endpoint_queue"]

    if "endpoint_queue_names" in request.session:
        endpoint_queue_names = request.session["endpoint_queue_names"]

    for e in request.POST.getlist("endpoints"):
        endpoint = provider_instance.get_endpoint_by_id(e)
        if endpoint not in endpoint_queue:
            endpoint_queue.append(endpoint)
            endpoint_queue_names.append(endpoint["name"])

    request.session["endpoint_queue"] = endpoint_queue
    request.session["endpoint_queue_names"] = endpoint_queue_names

    return HttpResponseRedirect("/endpoints/list/%s" % group_id)
Exemple #4
0
def configure_template_for_endpoint(request):
    required_fields = set(["input_form_name", "group_id", "endpoint_id"])
    if not required_fields.issubset(request.POST):
        return render(request, "error.html", {"error": "Invalid Parameters in POST"})

    input_form_name = request.POST["input_form_name"]
    group_id = request.POST["group_id"]
    endpoint_id = request.POST["endpoint_id"]

    print endpoint_id

    provider_instance = endpoint_provider.get_provider_instance_from_group(group_id)
    endpoint = provider_instance.get_endpoint_by_id(endpoint_id)

    input_form = InputForm.objects.get(name=input_form_name)

    print input_form.json
    json_object = json.loads(input_form.json)

    config_template = input_form.script
    action_options = json.loads(config_template.action_provider_options)

    context = {"input_form": input_form, "json_object": json_object, "endpoint": endpoint, "group_id": group_id,
               'action_options' : action_options
               }
    return render(request, "input_forms/configure_per_endpoint_template.html", context)
Exemple #5
0
def add_endpoints_to_queue(request):
    """
    takes a list of selected endpoints and adds them to the user session under a key named
    "endpoint_queue". Also adds another list of "endpoint_queue_names" to avoid limitations with django template
    language stuff to show already selected items in the queue

    """
    required_fields = set(["endpoints", "group_id"])
    if not required_fields.issubset(request.POST):
        return render(request, "error.html",
                      {"error": "Invalid Parameters in POST"})

    group_id = request.POST["group_id"]
    provider_instance = endpoint_provider.get_provider_instance_from_group(
        group_id)

    endpoint_queue = []
    endpoint_queue_names = []

    if "endpoint_queue" in request.session:
        endpoint_queue = request.session["endpoint_queue"]

    if "endpoint_queue_names" in request.session:
        endpoint_queue_names = request.session["endpoint_queue_names"]

    for e in request.POST.getlist("endpoints"):
        endpoint = provider_instance.get_endpoint_by_id(e)
        if endpoint not in endpoint_queue:
            endpoint_queue.append(endpoint)
            endpoint_queue_names.append(endpoint["name"])

    request.session["endpoint_queue"] = endpoint_queue
    request.session["endpoint_queue_names"] = endpoint_queue_names

    return HttpResponseRedirect("/endpoints/list/%s" % group_id)
Exemple #6
0
def endpoint_details(request, group_id, endpoint_id):
    logger.info("__ endpoints endpoints_details __")
    # get the right provider instance
    provider_instance = endpoint_provider.get_provider_instance_from_group(group_id)

    endpoint = provider_instance.get_endpoint_by_id(endpoint_id)

    context = {"endpoint": endpoint, "group_id": group_id}
    return render(request, "endpoints/details.html", context)
Exemple #7
0
def endpoint_details(request, group_id, endpoint_id):
    logger.info("__ endpoints endpoints_details __")
    # get the right provider instance
    provider_instance = endpoint_provider.get_provider_instance_from_group(
        group_id)

    endpoint = provider_instance.get_endpoint_by_id(endpoint_id)

    context = {"endpoint": endpoint, "group_id": group_id}
    return render(request, "endpoints/details.html", context)
Exemple #8
0
def endpoint_list(request, group_id):
    logger.info("__ endpoints endpoint_list __")
    group = get_object_or_404(EndpointGroup, pk=group_id)
    provider_instance = endpoint_provider.get_provider_instance_from_group(
        group_id)

    page_size = int(settings.DEVICE_LIST_PAGING_SIZE)
    offset = 0
    prev = -1
    next_offset = offset + page_size
    filter_name = ""
    argument = ""

    if "o" in request.GET:
        offset = int(request.GET["o"])

    if offset > 0:
        prev = offset - page_size

    if "filter" in request.GET and "argument" in request.GET:
        filter_name = request.GET["filter"]
        argument = request.GET["argument"]
        provider_instance.apply_filter(filter_name, argument)

    endpoint_array = provider_instance.get_page(offset, page_size)

    if len(endpoint_array) < page_size:
        next_offset = -1

    filters = provider_instance.available_filters()

    endpoint_queue = []
    endpoint_queue_names = []

    if "endpoint_queue" in request.session:
        endpoint_queue = request.session["endpoint_queue"]

    if "endpoint_queue_names" in request.session:
        endpoint_queue_names = request.session["endpoint_queue_names"]

    context = {
        "endpoint_list": endpoint_array,
        "endpoint_group": group,
        "provider": group.provider_class,
        "provider_instance": provider_instance,
        "prev": prev,
        "next": next_offset,
        "filters": filters,
        "filter": filter_name,
        "argument": argument,
        "endpoint_queue": endpoint_queue,
        "endpoint_queue_names": endpoint_queue_names
    }
    return render(request, "endpoints/list.html", context)
Exemple #9
0
def endpoint_list(request, group_id):
    logger.info("__ endpoints endpoint_list __")
    group = get_object_or_404(EndpointGroup, pk=group_id)
    provider_instance = endpoint_provider.get_provider_instance_from_group(group_id)

    page_size = int(settings.DEVICE_LIST_PAGING_SIZE)
    offset = 0
    prev = -1
    next_offset = offset + page_size
    filter_name = ""
    argument = ""

    if "o" in request.GET:
        offset = int(request.GET["o"])

    if offset > 0:
        prev = offset - page_size

    if "filter" in request.GET and "argument" in request.GET:
        filter_name = request.GET["filter"]
        argument = request.GET["argument"]
        provider_instance.apply_filter(filter_name, argument)

    endpoint_array = provider_instance.get_page(offset, page_size)

    if len(endpoint_array) < page_size:
        next_offset = -1

    filters = provider_instance.available_filters()

    endpoint_queue = []
    endpoint_queue_names = []

    if "endpoint_queue" in request.session:
        endpoint_queue = request.session["endpoint_queue"]

    if "endpoint_queue_names" in request.session:
        endpoint_queue_names = request.session["endpoint_queue_names"]

    context = {"endpoint_list": endpoint_array,
               "endpoint_group": group,
               "provider": group.provider_class,
               "provider_instance": provider_instance,
               "prev": prev,
               "next": next_offset,
               "filters": filters,
               "filter": filter_name,
               "argument": argument,
               "endpoint_queue": endpoint_queue,
               "endpoint_queue_names": endpoint_queue_names
               }
    return render(request, "endpoints/list.html", context)
Exemple #10
0
def configure_template_for_endpoint(request):
    logger.info("__ input_forms confgure_template_for_endpoint __")
    required_fields = set(["input_form_name", "group_id", "endpoint_id"])
    if not required_fields.issubset(request.POST):
        return render(request, "error.html",
                      {"error": "Invalid Parameters in POST"})

    input_form_name = request.POST["input_form_name"]
    group_id = request.POST["group_id"]
    endpoint_id = request.POST["endpoint_id"]

    logger.debug("Configuring template for endpoint: %s" % endpoint_id)

    provider_instance = endpoint_provider.get_provider_instance_from_group(
        group_id)
    endpoint = provider_instance.get_endpoint_by_id(endpoint_id)

    input_form = InputForm.objects.get(name=input_form_name)

    logger.debug(input_form.json)
    json_object = json.loads(input_form.json)
    for jo in json_object:
        if "widget" in jo:
            _configure_widget_options(jo)
        else:
            jo["widget"] = "text_input"

    config_template = input_form.script
    action_options = json.loads(config_template.action_provider_options)

    context = {
        "input_form": input_form,
        "json_object": json_object,
        "endpoint": endpoint,
        "group_id": group_id,
        'action_options': action_options
    }
    return render(request, "input_forms/configure_per_endpoint_template.html",
                  context)
Exemple #11
0
def endpoint_list(request, group_id):
    logger.info("__ endpoints endpoint_list __")
    group = get_object_or_404(EndpointGroup, pk=group_id)
    provider_instance = endpoint_provider.get_provider_instance_from_group(
        group_id)
    if group.provider_class == "AnsibleInventory":
        try:
            with file(provider_instance.inv_name) as f:
                inv = f.read()
        except IOError as e:
            inv = "Could not read inventory file!\n" + str(e)

        endpoint = provider_instance.get_endpoint_by_id(1)  # dummy value

        context = {
            "endpoint_group": group,
            "endpoint": endpoint,
            "provider": group.provider_class,
            "provider_instance": provider_instance,
            "inventory": inv,
        }
        return render(request, "endpoints/list_ansible.html", context)

    page_size = int(settings.DEVICE_LIST_PAGING_SIZE)
    offset = 0
    prev = -1
    next_offset = offset + page_size
    filter_name = ""
    argument = ""

    if "o" in request.GET:
        offset = int(request.GET["o"])

    if offset > 0:
        prev = offset - page_size

    if "filter" in request.GET and "argument" in request.GET:
        filter_name = request.GET["filter"]
        argument = request.GET["argument"]
        provider_instance.apply_filter(filter_name, argument)

    endpoint_array = provider_instance.get_page()

    if len(endpoint_array) < page_size:
        next_offset = -1

    filters = provider_instance.available_filters()

    endpoint_queue = []
    endpoint_queue_names = []

    if "endpoint_queue" in request.session:
        endpoint_queue = request.session["endpoint_queue"]

    if "endpoint_queue_names" in request.session:
        endpoint_queue_names = request.session["endpoint_queue_names"]

    context = {
        "endpoint_list": endpoint_array,
        "endpoint_group": group,
        "provider": group.provider_class,
        "provider_instance": provider_instance,
        "prev": prev,
        "next": next_offset,
        "filters": filters,
        "filter": filter_name,
        "argument": argument,
        "endpoint_queue": endpoint_queue,
        "endpoint_queue_names": endpoint_queue_names
    }
    return render(request, "endpoints/list.html", context)
Exemple #12
0
def apply_template(request):
    """

    :param request: HTTPRequest from the input form
    :return: results of the template execution

    """

    required_fields = set(["input_form_id", "endpoint_id", "group_id"])
    if not required_fields.issubset(request.POST):
        return render(request, "error.html", {"error": "Invalid Parameters in POST"})

    input_form_id = request.POST["input_form_id"]
    endpoint_id = request.POST["endpoint_id"]
    group_id = request.POST["group_id"]

    provider_instance = endpoint_provider.get_provider_instance_from_group(group_id)
    endpoint = provider_instance.get_endpoint_by_id(endpoint_id)

    if "username" not in endpoint or endpoint["username"] == "":
        if "global_username" in request.POST:
            endpoint["username"] = request.POST["global_username"]
        else:
            raise Exception("Authentication is required!")

    if "password" not in endpoint or endpoint["password"] == "":
        if "global_password" in request.POST:
            endpoint["password"] = request.POST["global_password"]
        else:
            raise Exception("Authentication is required!")

    input_form = InputForm.objects.get(pk=input_form_id)

    print input_form.json
    json_object = json.loads(input_form.json)

    context = Context()
    for j in json_object:
        if '.' in j["name"]:
            # this is a json capable variable name
            j_dict = aframe_utils.generate_dict(j["name"], str(request.POST[j["name"]]))
            context.update(j_dict)
        else:
            print "setting context %s" % j["name"]
            context[j["name"]] = str(request.POST[j["name"]])

    context["af_endpoint_ip"] = endpoint["ip"]
    context["af_endpoint_username"] = endpoint["username"]
    context["af_endpoint_password"] = endpoint["password"]
    context["af_endpoint_type"] = endpoint["type"]

    print context

    config_template = input_form.script

    try:
        compiled_template = engines['django'].from_string(config_template.template)
        completed_template = str(compiled_template.render(context))
    except TemplateSyntaxError as e:
        print "Caught a template syntax error!"
        return render(request, "error.html", {"error": "Invalid Template Syntax: %s" % str(e)})

    print "TEMPLATE IS:"
    print completed_template
    action_name = config_template.action_provider
    action_options = json.loads(config_template.action_provider_options)

    print "action name is: " + action_name

    action = action_provider.get_provider_instance(action_name, action_options)
    action.set_endpoint(endpoint)
    results = action.execute_template(completed_template)
    context = {"results": results}
    return render(request, "input_forms/results.html", context)
Exemple #13
0
def apply_template(request):
    """

    :param request: HTTPRequest from the input form
    :return: results of the template execution

    """
    print "APPLY TEMPLATE"

    required_fields = set(["input_form_id", "endpoint_id", "group_id"])
    if not required_fields.issubset(request.POST):
        return render(request, "error.html", {"error": "Invalid Parameters in POST"})

    input_form_id = request.POST["input_form_id"]
    endpoint_id = request.POST["endpoint_id"]
    group_id = request.POST["group_id"]

    provider_instance = endpoint_provider.get_provider_instance_from_group(group_id)
    endpoint = provider_instance.get_endpoint_by_id(endpoint_id)

    if "username" not in endpoint or endpoint["username"] == "":
        if "global_username" in request.POST:
            endpoint["username"] = request.POST["global_username"]
        else:
            raise Exception("Authentication is required!")

    if "password" not in endpoint or endpoint["password"] == "":
        if "global_password" in request.POST:
            endpoint["password"] = request.POST["global_password"]
        else:
            raise Exception("Authentication is required!")

    input_form = InputForm.objects.get(pk=input_form_id)

    print input_form.json
    json_object = json.loads(input_form.json)

    context = Context()
    for j in json_object:
        print "setting context %s" % j["name"]
        context[j["name"]] = str(request.POST[j["name"]])

    context["af_endpoint_ip"] = endpoint["ip"]
    context["af_endpoint_username"] = endpoint["username"]
    context["af_endpoint_password"] = endpoint["password"]
    context["af_endpoint_type"] = endpoint["type"]

    print context

    config_template = input_form.script

    try:
        compiled_template = engines['django'].from_string(config_template.template)
        completed_template = str(compiled_template.render(context))
    except TemplateSyntaxError as e:
        print "Caught a template syntax error!"
        return render(request, "error.html", {"error": "Invalid Template Syntax: %s" % str(e)})

    print "TEMPLATE IS:"
    print completed_template
    action_name = config_template.action_provider
    action_options = json.loads(config_template.action_provider_options)

    print "action name is: " + action_name

    action = action_provider.get_provider_instance(action_name, action_options)
    action.set_endpoint(endpoint)
    results = action.execute_template(completed_template)
    context = {"results": results}
    return render(request, "input_forms/results.html", context)
Exemple #14
0
def apply_per_endpoint_template(request):
    """

    :param request: HTTPRequest from the input form
    :return: results of the template execution

    """
    logger.info("__ input_forms apply_per_endpoint_template __")

    required_fields = set(["input_form_id", "endpoint_id", "group_id"])
    if not required_fields.issubset(request.POST):
        logger.error("Did no find all required fields in request")
        return render(request, "error.html",
                      {"error": "Invalid Parameters in POST"})

    input_form_id = request.POST["input_form_id"]
    endpoint_id = request.POST["endpoint_id"]
    group_id = request.POST["group_id"]

    provider_instance = endpoint_provider.get_provider_instance_from_group(
        group_id)
    endpoint = provider_instance.get_endpoint_by_id(endpoint_id)

    if "username" not in endpoint or endpoint["username"] == "":
        if "global_username" in request.POST:
            endpoint["username"] = request.POST["global_username"]
        else:
            raise Exception("Authentication is required!")

    if "password" not in endpoint or endpoint["password"] == "":
        if "global_password" in request.POST:
            endpoint["password"] = request.POST["global_password"]
        else:
            raise Exception("Authentication is required!")

    input_form = InputForm.objects.get(pk=input_form_id)

    logger.debug(input_form.json)
    json_object = json.loads(input_form.json)

    context = dict()
    for j in json_object:
        if '.' in j["name"]:
            # this is a json capable variable name
            j_dict = aframe_utils.generate_dict(
                j["name"], str(request.POST.get(j["name"], '')))
            context.update(j_dict)
        else:
            logger.debug("setting context %s" % j["name"])
            # don't worry about null values here
            context[j["name"]] = str(request.POST.get(j['name'], ''))

    context["af_endpoint_ip"] = endpoint["ip"]
    context["af_endpoint_id"] = endpoint["id"]
    context["af_endpoint_name"] = endpoint["name"]
    context["af_endpoint_username"] = endpoint["username"]
    context["af_endpoint_password"] = endpoint["password"]
    context["af_endpoint_type"] = endpoint["type"]

    logger.debug(context)

    config_template = input_form.script

    try:
        compiled_template = engines['django'].from_string(
            config_template.template)
        completed_template = str(compiled_template.render(context))
    except TemplateSyntaxError as e:
        logger.error("Caught a template syntax error!")
        return render(request, "error.html",
                      {"error": "Invalid Template Syntax: %s" % str(e)})

    logger.debug(completed_template)
    action_name = config_template.action_provider

    action_options = json.loads(config_template.action_provider_options)
    logger.debug(action_options)

    for ao in action_options:
        if "action_options_" + str(ao) in request.POST:
            logger.debug("Found a customized action option!")
            new_val = request.POST["action_options_" + str(ao)]
            current_value = action_options[ao]["value"]
            action_options[ao]["value"] = re.sub("{{.*}}", new_val,
                                                 current_value)
            logger.debug(action_options[ao]["value"])

    logger.debug("action name is: " + action_name)

    # let's load any secrets if necessary
    provider_options = action_provider.get_options_for_provider(action_name)
    for opt in provider_options:
        print opt
        if opt['type'] == 'secret':
            opt_name = opt['name']
            pw_lookup_key = action_options[opt_name]['value']
            pw_lookup_value = aframe_utils.lookup_secret(pw_lookup_key)
            action_options[opt_name]['value'] = pw_lookup_value

    action = action_provider.get_provider_instance(action_name, action_options)
    action.set_endpoint(endpoint)
    results = action.execute_template(completed_template)
    context = {"results": results}

    if "inline" in request.POST and request.POST["inline"] == 'yes_please':
        print "returning INLINE"
        context["input_form_name"] = input_form.name
        context["input_form_id"] = input_form_id
        return render(request, "overlay_results.html", context)

    return render(request, "input_forms/results.html", context)
Exemple #15
0
def apply_template(request):
    """

    :param request: HTTPRequest from the input form
    :return: results of the template execution

    """
    logger.info("__ input_forms apply_template __")

    required_fields = set(["input_form_id", "endpoint_id", "group_id"])
    if not required_fields.issubset(request.POST):
        logger.error("Did no find all required fields in request")
        return render(request, "error.html", {"error": "Invalid Parameters in POST"})

    input_form_id = request.POST["input_form_id"]
    endpoint_id = request.POST["endpoint_id"]
    group_id = request.POST["group_id"]

    provider_instance = endpoint_provider.get_provider_instance_from_group(group_id)
    endpoint = provider_instance.get_endpoint_by_id(endpoint_id)

    if "username" not in endpoint or endpoint["username"] == "":
        if "global_username" in request.POST:
            endpoint["username"] = request.POST["global_username"]
        else:
            raise Exception("Authentication is required!")

    if "password" not in endpoint or endpoint["password"] == "":
        if "global_password" in request.POST:
            endpoint["password"] = request.POST["global_password"]
        else:
            raise Exception("Authentication is required!")

    input_form = InputForm.objects.get(pk=input_form_id)

    logger.debug(input_form.json)
    json_object = json.loads(input_form.json)

    context = Context()
    for j in json_object:
        if '.' in j["name"]:
            # this is a json capable variable name
            j_dict = aframe_utils.generate_dict(j["name"], str(request.POST[j["name"]]))
            context.update(j_dict)
        else:
            logger.debug("setting context %s" % j["name"])
            context[j["name"]] = str(request.POST[j["name"]])

    context["af_endpoint_ip"] = endpoint["ip"]
    context["af_endpoint_username"] = endpoint["username"]
    context["af_endpoint_password"] = endpoint["password"]
    context["af_endpoint_type"] = endpoint["type"]

    logger.debug(context)

    config_template = input_form.script

    try:
        compiled_template = engines['django'].from_string(config_template.template)
        completed_template = str(compiled_template.render(context))
    except TemplateSyntaxError as e:
        logger.error("Caught a template syntax error!")
        return render(request, "error.html", {"error": "Invalid Template Syntax: %s" % str(e)})

    logger.debug(completed_template)
    action_name = config_template.action_provider

    action_options = json.loads(config_template.action_provider_options)
    logger.debug(action_options)

    for ao in action_options:
        if "action_options_" + str(ao) in request.POST:
            logger.debug("Found a customized action option!")
            new_val = request.POST["action_options_" + str(ao)]
            current_value = action_options[ao]["value"]
            action_options[ao]["value"] = re.sub("{{ .* }}", new_val, current_value)
            logger.debug(action_options[ao]["value"])

    logger.debug("action name is: " + action_name)

    action = action_provider.get_provider_instance(action_name, action_options)
    action.set_endpoint(endpoint)
    results = action.execute_template(completed_template)
    context = {"results": results}
    return render(request, "input_forms/results.html", context)