Beispiel #1
0
def static_add(request):
        
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    static_list = vyos.get_route_static(hostname_default)
    is_superuser = perms.get_is_superuser(request.user)


    error_message = None
    if 'subnet' in request.POST and 'nexthop' in request.POST:
        return1 = vyos.set_route_static(hostname_default, request.POST['subnet'], request.POST['nexthop'])
        if return1 == False: 
            error_message = 'Cannot add static route.'
        else:
           return redirect('static:static-list')


    ippath = vyos.ip_route(hostname_default)

    template = loader.get_template('static/add.html')
    context = { 
        'instances': all_instances,
        'hostname_default': hostname_default,
        'static_list' : static_list,
        'error_message' : error_message,
        'username': request.user,
        'is_superuser' : is_superuser,     
    }   
    return HttpResponse(template.render(context, request))
Beispiel #2
0
def firewall_portgroup_add(request):
    hostname_default = vyos.get_hostname_prefered(request)
    all_instances = vyos.instance_getall_by_group(request)
    is_superuser = perms.get_is_superuser(request.user)
    netservices = network.get_services()

    if request.POST.get('name', None) != None and request.POST.get('portgroup_ports_hidden', None) != None and request.POST.get('portgroup_ports_hidden') != '':

        try:
            ports = json.loads(request.POST.get('portgroup_ports_hidden'))
        except ValueError:
            return redirect('firewall:firewall-portgroup-list')

        for port in ports:
            vyos.set_firewall_portgroup_add(hostname_default, request.POST.get('name'), port)

        if request.POST.get('description', None) != None:
            vyos.set_firewall_portgroup_description(hostname_default, request.POST.get('name'), request.POST.get('description'))

        return redirect('firewall:firewall-portgroup-list')



    template = loader.get_template('firewall/portgroup-add.html')
    context = { 
        'hostname_default': hostname_default,
        'username': request.user,        
        'instances': all_instances,
        'is_superuser' : is_superuser,
        'services_common' : netservices['common'],
        'services' : netservices['services'],
    }   
    return HttpResponse(template.render(context, request))
Beispiel #3
0
def xeditrule(request, firewall_name, rulenumber):
     #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    is_superuser = perms.get_is_superuser(request.user)
    firewall = vyos.get_firewall(hostname_default, firewall_name)  # remove
    firewall_networkgroup = vyos.get_firewall_networkgroup(hostname_default)
    firewall_addressgroup = vyos.get_firewall_addressgroup(hostname_default)
    firewall_networkgroup_js = json.dumps(firewall_networkgroup['network-group'])
    firewall_addressgroup_js = json.dumps(firewall_addressgroup['address-group'])
    netservices = network.get_services()
    netservices_js = json.dumps(netservices)
    portgroups = vyos.get_firewall_portgroup(hostname_default)
    
    template = loader.get_template('firewall/editrule.html')
    context = { 
        #'interfaces': interfaces,
        'instances':                        all_instances,
        'hostname_default':                 hostname_default,
        'firewall_name':                    firewall_name,
        'firewall_name':                    firewall_name,
        'username':                         request.user,
        'is_superuser' :                    is_superuser,
        'services' :                        netservices['services'],
        'services_common' :                 netservices['common'],
        'firewall_networkgroup':            firewall_networkgroup['network-group'],
        'firewall_addressgroup':            firewall_addressgroup['address-group'],
        'firewall_networkgroup_js':         firewall_networkgroup_js,
        'firewall_addressgroup_js':         firewall_addressgroup_js,
        'netservices_js' :                  netservices_js,
    }
Beispiel #4
0
def create(request):
        
    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    is_superuser = perms.get_is_superuser(request.user)

    if 'name' in request.POST:
        cmd = {"op": "set", "path": ["firewall", "name", request.POST['name']]}
        result1 = vyos.set_config(hostname_default, cmd)
        print(result1)

        if 'description' in request.POST:
            cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "description", request.POST['description']]}
            result2 = vyos.set_config(hostname_default, cmd)
            print(result2)

        if 'action' in request.POST:
            cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "default-action", request.POST['action']]}
            result3 = vyos.set_config(hostname_default, cmd)
            print(result3)

        return redirect('firewall:firewall-list')

    template = loader.get_template('firewall/create.html')
    context = { 
        #'interfaces': interfaces,
        'instances': all_instances,
        'hostname_default': hostname_default,
        'username': request.user,
        'is_superuser' : is_superuser,
    }   
    return HttpResponse(template.render(context, request))
Beispiel #5
0
def static_add(request):
    msg = vmsg.msg()

    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    static_list = vyos.get_route_static(hostname_default)
    is_superuser = perms.get_is_superuser(request.user)

    if 'subnet' in request.POST and 'nexthop' in request.POST:
        v = vapi.set_route_static(hostname_default, request.POST['subnet'],
                                  request.POST['nexthop'])
        if v.success == False:
            msg.add_error("Static route add fail - " + v.reason)
        else:
            msg.add_success("Static route added")

    ippath = vyos.ip_route(hostname_default)

    template = loader.get_template('static/add.html')
    context = {
        'instances': all_instances,
        'hostname_default': hostname_default,
        'static_list': static_list,
        'username': request.user,
        'is_superuser': is_superuser,
        'msg': msg.get_all(),
    }
    return HttpResponse(template.render(context, request))
Beispiel #6
0
def instance_conntry(request, hostname):
    is_superuser = perms.get_is_superuser(request.user)

    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)

    if perms.user_has_hostname_access(request.user, hostname) == False:
        return redirect('config:instances')

    # permcheck
    instance = Instance.objects.get(hostname=hostname)
    connected = vyos.conntry(hostname)
    if connected == True:
        request.session['hostname'] = hostname

    template = loader.get_template('config/instance_conntry.html')
    context = {
        'instance': instance,
        "connected": connected,
        'instances': all_instances,
        'hostname_default': hostname_default,
        'username': request.user,
        'is_superuser': is_superuser,
    }
    return HttpResponse(template.render(context, request))
Beispiel #7
0
def group_add(request):
    is_superuser = perms.get_is_superuser(request.user)

    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)

    error_message = None

    if len(request.POST) > 0 and 'name' in request.POST:
        try:
            group_get = Group.objects.get(name=request.POST['name'])
            error_message = 'Group already exists'
        except Group.DoesNotExist:
            group_create = Group(name=request.POST['name'])
            group_create.save()
            return redirect('config:groups-list')
    else:
        instance_id = 0

    template = loader.get_template('config/group_add.html')
    context = {
        'hostname_default': hostname_default,
        'instance_id': instance_id,
        'instances': all_instances,
        'error_message': error_message,
        'username': request.user,
        'is_superuser': is_superuser,
    }
    return HttpResponse(template.render(context, request))
Beispiel #8
0
def instance_add(request):
    is_superuser = perms.get_is_superuser(request.user)

    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)

    if len(request.POST) > 0:
        instance = Instance()
        instance.alias = request.POST['alias']
        instance.hostname = request.POST['hostname']
        instance.port = request.POST['port']
        instance.key = request.POST['key']
        if 'https' in request.POST:
            instance.https = request.POST['https']
        else:
            instance.https = False
        instance_id = instance.save()
        return redirect('config:instances')
    else:
        instance_id = 0

    template = loader.get_template('config/instance_add.html')
    context = {
        'hostname_default': hostname_default,
        'instance_id': instance_id,
        'instances': all_instances,
        'username': request.user,
        'is_superuser': is_superuser,
    }
    return HttpResponse(template.render(context, request))
Beispiel #9
0
def instances(request):
    is_superuser = perms.get_is_superuser(request.user)

    all_instances = perms.instance_getall_by_group(request)
    hostname_default = vyos.get_hostname_prefered(request)
    is_superuser = perms.get_is_superuser(request.user)

    print(all_instances)

    if hostname_default == None:
        if all_instances.count() > 0:
            for i in all_instances:
                pprint.pprint(i.hostname)
                instance_default(request, i.hostname)

        else:
            return redirect('config:instance-add')

    groups = Group.objects.all()

    template = loader.get_template('config/instances.html')
    context = {
        'instances': all_instances,
        'hostname_default': hostname_default,
        'groups': groups,
        'username': request.user,
        'is_superuser': is_superuser,
    }
    return HttpResponse(template.render(context, request))
Beispiel #10
0
def firewall_remove(request, firewall_name):
       
    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)

    firewall = vyos.delete_firewall(hostname_default, firewall_name)
    
    return redirect('firewall:firewall-list')
Beispiel #11
0
def index(request):
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)

    template = loader.get_template('wanlb/list.html')
    context = {
        'instances': all_instances,
        'hostname_default': hostname_default,
    }
    return HttpResponse(template.render(context, request))
Beispiel #12
0
def user_add(request):
    is_superuser = perms.get_is_superuser(request.user)

    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)

    error_message = None

    count = 0
    name = ''
    if 'name' in request.POST:
        name = request.POST['name']
        count += 1

    username = ''
    if 'username' in request.POST:
        username = request.POST['username']
        count += 1

    password = ''
    if 'password' in request.POST:
        password = request.POST['password']
        count += 1

    email = ''
    if 'email' in request.POST:
        email = request.POST['email']
        count += 1

    if count >= 4:
        try:
            user = User.objects.get(username=username)
            error_message = 'Username already exists'
        except User.DoesNotExist:
            user_create = User(username=username,
                               email=email,
                               password=password,
                               last_name=name)
            user_create.save()
            return redirect('config:users-list')

    template = loader.get_template('config/user_add.html')
    context = {
        'hostname_default': hostname_default,
        'instances': all_instances,
        'error_message': error_message,
        'name': name,
        'username': username,
        'password': password,
        'email': email,
        'username': request.user,
        'is_superuser': is_superuser,
    }
    return HttpResponse(template.render(context, request))
Beispiel #13
0
def firewall_removerule(request, firewall_name, firewall_rulenumber):
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)

    firewall = vyos.get_firewall(hostname_default, firewall_name)
    firewall_rule = vyos.get_firewall_rule(hostname_default, firewall_name, firewall_rulenumber)

    if firewall_rule and firewall:
        vyos.delete_route_rule(hostname_default, firewall_name, firewall_rulenumber)

    return redirect('firewall:show', firewall_name)
Beispiel #14
0
    def wrapper_perm(*args, **kwargs):
        request = args[0]
        if not request.user.is_authenticated:
           return redirect('%s?next=%s' % (reverse('registration-login'), request.path))
           #return redirect('registration-login')

        hostname_default = vyos.get_hostname_prefered(request)


        value = func(*args, **kwargs)
        return value
Beispiel #15
0
def firewall_addressgroup_add(request):
    hostname_default = vyos.get_hostname_prefered(request)
    all_instances = vyos.instance_getall_by_group(request)
    is_superuser = perms.get_is_superuser(request.user)

    if (    request.POST.get('name', None) != None 
        and request.POST.get('addressgroup_json', None) != None):

        group =         request.POST.get('name', None)
        description =   request.POST.get('description', None)
        try:
            networks = json.loads(request.POST.get('addressgroup_json'))
        except ValueError:
            networks = {}


        changed = False

        vyos2.log('networks', networks)

        for network in networks:
            v = vyos2.api (
                hostname =  hostname_default,
                api =       "post",
                op =        "set",
                cmd =       ["firewall", "group", "address-group", group, "address", network],
                description = "add address-group network",
            )
            if v.success and changed == False:
                changed = True
            
        # set network description if it was created
        if changed == True:
            if description != None:
                v = vyos2.api (
                    hostname=   hostname_default,
                    api =       "post",
                    op =        "set",
                    cmd =       ["firewall", "group", "address-group", group, "description", description],
                    description = "set address-group description",
                )

            return redirect('firewall:firewall-addressgroup-list')


    template = loader.get_template('firewall/addressgroup-add.html')
    context = { 
        'hostname_default': hostname_default,
        'username': request.user,        
        'instances': all_instances,
        'is_superuser' : is_superuser,
    }   
    return HttpResponse(template.render(context, request))
Beispiel #16
0
def index(request):
    if not request.user.is_authenticated:
        return redirect('%s?next=%s' % (reverse('registration-login'), request.path))
        
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)

    template = loader.get_template('ipsec/list.html')
    context = { 
        'instances': all_instances,
        'hostname_default': hostname_default,
    }   
    return HttpResponse(template.render(context, request))
Beispiel #17
0
def instance_remove(request, hostname):

    all_instances = vyos.instance_getall()

    # permcheck
    instance = Instance.objects.get(hostname=hostname)

    hostname_default = vyos.get_hostname_prefered(request)

    #if hostname_default != hostname:
    instance.delete()

    return redirect('config:instances')
Beispiel #18
0
def static_remove(request, route, nexthop):

    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    static_list = vyos.get_route_static(hostname_default)

    print(route)
    print(routeunpack(route))

    if route and nexthop:
        return1 = vyos.delete_route_static(hostname_default,
                                           routeunpack(route), nexthop)

    return redirect('static:static-list')
Beispiel #19
0
def firewall_addressgroup_list(request):
        
    hostname_default = vyos.get_hostname_prefered(request)
    firewall_addressgroup = vyos.get_firewall_addressgroup(hostname_default)
    all_instances = vyos.instance_getall_by_group(request)
    is_superuser = perms.get_is_superuser(request.user)

    template = loader.get_template('firewall/addressgroup-list.html')
    context = { 
        'firewall_addressgroup': firewall_addressgroup,
        'hostname_default': hostname_default,
        'username': request.user,        
        'instances': all_instances,
        'is_superuser' : is_superuser,
    }   
    return HttpResponse(template.render(context, request))
Beispiel #20
0
def groups_list(request):
    is_superuser = perms.get_is_superuser(request.user)

    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    groups = Group.objects.all()

    template = loader.get_template('config/groups_list.html')
    context = {
        #'interfaces': interfaces,
        'instances': all_instances,
        'hostname_default': hostname_default,
        'groups': groups,
        'username': request.user,
        'is_superuser': is_superuser,
    }
    return HttpResponse(template.render(context, request))
Beispiel #21
0
def firewall_global(request):
   
    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)

    if int(request.POST.get('allping', 0)) == 1:
        vyos.set_firewall_allping_enable(hostname_default)
    else:
        vyos.set_firewall_allping_disable(hostname_default)

    if int(request.POST.get('syncookies', 0)) == 1:
        vyos.set_firewall_syncookies_enable(hostname_default)
    else:
        vyos.set_firewall_syncookies_disable(hostname_default)

    
    return redirect('firewall:firewall-list')
Beispiel #22
0
def index(request):
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    is_superuser = perms.get_is_superuser(request.user)

    ntp_srv = vapi.get_ntp(hostname_default)
    ntp_servers = {}
    if ntp_srv.success:
        if ntp_srv.data['server'] != None:
            ntp_servers = ntp_srv.data['server']

    context = {
        'instances': all_instances,
        'hostname_default': hostname_default,
        'ntp_servers': ntp_servers,
        'is_superuser': is_superuser,
    }

    return render(request, 'ntp/list.html', context)
Beispiel #23
0
def firewall_config(request, firewall_name):  
    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    is_superuser = perms.get_is_superuser(request.user)
    
    firewall = vyos.get_firewall(hostname_default, firewall_name)
    

    template = loader.get_template('firewall/show.html')
    context = { 
        #'interfaces': interfaces,
        'instances': all_instances,
        'hostname_default': hostname_default,
        'firewall':  firewall,
        'firewall_name': firewall_name,
        'username': request.user,
        'is_superuser' : is_superuser,
    }   
    return HttpResponse(template.render(context, request))
Beispiel #24
0
def index(request):

    is_superuser = perms.get_is_superuser(request.user)

    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    for instance in all_instances:
        if group == None:
            all_instance[instance]['group'] = "admin"

    hostname_default = vyos.get_hostname_prefered(request)

    template = loader.get_template('config/instance.html')
    context = {
        #'interfaces': interfaces,
        'instances': all_instances,
        'hostname_default': hostname_default,
        'username': request.user,
        'is_superuser': is_superuser,
    }
    return HttpResponse(template.render(context, request))
Beispiel #25
0
def interfacefirewall(request, interface_type, interface_name):

    all_instances = vyos.instance_getall()
    is_superuser = perms.get_is_superuser(request.user)

    hostname_default = vyos.get_hostname_prefered(request)

    interface = vyos.get_interface(interface_type,
                                   interface_name,
                                   hostname=hostname_default)

    template = loader.get_template('interface/show.html')
    context = {
        'interface': interface,
        'instances': all_instances,
        'hostname_default': hostname_default,
        'interface_type': interface_type,
        'interface_name': interface_name,
        'username': request.user,
        'is_superuser': is_superuser,
    }
    return HttpResponse(template.render(context, request))
Beispiel #26
0
def static_list(request):
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    static_dict = vyos.get_route_static(hostname_default)
    is_superuser = perms.get_is_superuser(request.user)

    static_list = []
    for s in static_dict['route']:
        static_list.append({
            'route': s,
            'nexthop': static_dict['route'][s]['next-hop'],
        })

    template = loader.get_template('static/list.html')
    context = { 
        'instances': all_instances,
        'hostname_default': hostname_default,
        'static_list' : static_list,
        'username': request.user,
        'is_superuser' : is_superuser,     
    }   
    return HttpResponse(template.render(context, request))
Beispiel #27
0
def index(request):
    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall_by_group(request)
    hostname_default = vyos.get_hostname_prefered(request)


    firewall2 = vyos2.api(
        hostname =      hostname_default,
        api =           'get',
        op =            'showConfig',
        cmd =           {"op": "showConfig", "path": ["firewall"]},
        description =   "get all firewall",
    )



    is_superuser = perms.get_is_superuser(request.user)



    firewall_all = vyos.get_firewall_all(hostname_default)
    if firewall_all == False:
        return redirect('firewall:firewall-create')

    for xitem in firewall_all['name']:
        if 'default-action' in firewall_all['name'][xitem]:
            firewall_all['name'][xitem]['default_action'] = firewall_all['name'][xitem]['default-action']
            del firewall_all['name'][xitem]['default-action']

    template = loader.get_template('firewall/list.html')
    context = { 
        #'interfaces': interfaces,
        'instances': all_instances,
        'hostname_default': hostname_default,
        'firewall_all':  firewall_all,
        'username': request.user,
        'is_superuser' : is_superuser,
    }   
    return HttpResponse(template.render(context, request))
Beispiel #28
0
def firewall_edit(request, firewall_name):
   
    #interfaces = vyos.get_interfaces()
    all_instances = vyos.instance_getall()
    hostname_default = vyos.get_hostname_prefered(request)
    firewall = vyos.get_firewall(hostname_default, firewall_name)
    firewall['defaultaction'] = firewall['default-action']
    is_superuser = perms.get_is_superuser(request.user)

    changed = False
    if 'description' in request.POST:
        cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "description", request.POST['description']]}
        result2 = vyos.set_config(hostname_default, cmd)
        print(result2)
        changed = True

    if 'action' in request.POST:
        cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "default-action", request.POST['action']]}
        result3 = vyos.set_config(hostname_default, cmd)
        print(result3)
        changed = True

    if changed == True:
        return redirect('firewall:firewall-list')

    template = loader.get_template('firewall/edit.html')
    context = { 
        #'interfaces': interfaces,
        'instances': all_instances,
        'hostname_default': hostname_default,
        'firewall_name': firewall_name,
        'firewall': firewall,
        'username': request.user,
        'is_superuser' : is_superuser,
    }   
    return HttpResponse(template.render(context, request))
Beispiel #29
0
def index(request):

    hostname_default = vyos.get_hostname_prefered(request)
    all_instances = vyos.instance_getall()
    firewall_all = vyos.get_firewall_all(hostname_default)
    interfaces = vyos.get_interfaces(hostname_default)
    is_superuser = perms.get_is_superuser(request.user)
    interfaces_all_names = vyos.get_interfaces_all_names(hostname_default)

    interface_firewall_in = {}
    interface_firewall_out = {}

    interface_address = {}
    firewall_names = []

    # set interface_alias in format eth0 if has not vif and eth0.vlan if has vlan
    for iname in interfaces_all_names:
        if 'vif' in iname:
            iname['interface_alias'] = "{interface_name}.{vif}".format(
                interface_name=iname['interface_name'], vif=iname['vif'])
        else:
            iname['interface_alias'] = iname['interface_name']

    # create firewall_in and firewall_out vars
    for interface_type in interfaces:
        for interface_name in interfaces[interface_type]:
            try:
                interface_firewall_in[interface_name] = interfaces[
                    interface_type][interface_name]['firewall']['in']['name']
            except:
                pass
            try:
                interface_firewall_out[interface_name] = interfaces[
                    interface_type][interface_name]['firewall']['out']['name']
            except:
                pass

            if interface_name not in interface_address:
                interface_address[interface_name] = []
            try:
                interface_address[interface_name].append(
                    interfaces[interface_type][interface_name]['address'])
            except:
                pass

            if 'vif' in interfaces[interface_type][interface_name]:
                for vif in interfaces[interface_type][interface_name]['vif']:
                    interface_name_full = "{interface_name}.{vif}".format(
                        interface_name=interface_name, vif=vif)
                    try:
                        interface_firewall_in[
                            interface_name_full] = interfaces[interface_type][
                                interface_name]['vif'][vif]['firewall']['in'][
                                    'name']
                    except:
                        pass
                    try:
                        interface_firewall_out[
                            interface_name_full] = interfaces[interface_type][
                                interface_name]['vif'][vif]['firewall']['out'][
                                    'name']
                    except:
                        pass

                    if interface_name_full not in interface_address:
                        interface_address[interface_name_full] = []
                    try:
                        interface_address[interface_name_full].append(
                            interfaces[interface_type][interface_name]['vif']
                            [vif]['address'])
                    except:
                        pass

    # put all information in a single var: interface_all_names
    for iname in interfaces_all_names:
        if 'vif' in iname:
            ialias = "{interface_name}.{vif}".format(
                interface_name=iname['interface_name'], vif=iname['vif'])
        else:
            ialias = iname['interface_name']

        if ialias in interface_firewall_out:
            iname['firewall_out'] = interface_firewall_out[ialias]

        if ialias in interface_firewall_in:
            iname['firewall_in'] = interface_firewall_in[ialias]

        if ialias in interface_address:
            iname['address'] = interface_address[ialias]

    if 'name' in firewall_all:
        for fname in firewall_all['name']:
            firewall_names.append(fname)

    # create a dict
    interfaces_all_names_dict = {}
    for iname in interfaces_all_names:
        if 'vif' in iname:
            ialias = "{interface_name}.{vif}".format(
                interface_name=iname['interface_name'], vif=iname['vif'])
        else:
            ialias = iname['interface_name']

        interfaces_all_names_dict[ialias] = iname

    fw_changed = False
    for el in request.POST:
        interface_vif = None

        if el.startswith('firewall-ipv4-in'):
            pos = el.split(".")

            interface_type = pos[1]
            interface_name = pos[2]

            if len(pos) >= 4:
                interface_vif = pos[3]
                ialias = "{interface_name}.{vif}".format(
                    interface_name=interface_name, vif=interface_vif)
            else:
                ialias = interface_name

            firewall_name = request.POST[el]
            if firewall_name == "--remove--":
                if 'firewall_in' in interfaces_all_names_dict[ialias]:
                    v = vapi.delete_interface_firewall_ipv4(
                        hostname_default, interface_type, interface_name, "in",
                        interface_vif)
                    #print("@@@@@@@@@@@@@@@@@ in delete", hostname_default, interface_type, interface_name, "in", firewall_name, interface_vif)
                else:
                    pass
                    #print("@@@@@ not 1", interfaces_all_names_dict[ialias], firewall_name)
            else:
                if 'firewall_in' not in interfaces_all_names_dict[
                        ialias] or interfaces_all_names_dict[ialias][
                            'firewall_in'] != firewall_name:
                    v = vapi.set_interface_firewall_ipv4(
                        hostname_default, interface_type, interface_name, "in",
                        firewall_name, interface_vif)
                    #print("@@@@@@@@@@@@@@@@@ in add", hostname_default, interface_type, interface_name, "in", firewall_name, interface_vif)
                else:
                    pass
                    #print("@@@@@ not 2", interfaces_all_names_dict[ialias], firewall_name )

            fw_changed = True
        elif el.startswith('firewall-ipv4-out'):

            pos = el.split(".")

            interface_type = pos[1]
            interface_name = pos[2]
            if len(pos) >= 4:
                interface_vif = pos[3]
                ialias = "{interface_name}.{vif}".format(
                    interface_name=interface_name, vif=interface_vif)
            else:
                ialias = interface_name

            firewall_name = request.POST[el]
            if firewall_name == "--remove--":
                if 'firewall_out' in interfaces_all_names_dict[ialias]:
                    v = vapi.delete_interface_firewall_ipv4(
                        hostname_default, interface_type, interface_name,
                        "out", interface_vif)
                    #print("@@@@@@@@@@@@@@@@@ out delete", hostname_default, interface_type, interface_name, "out", firewall_name, interface_vif)
                else:
                    #print("@@@@@ not 3", interfaces_all_names_dict[ialias], firewall_name)
                    pass
            else:
                if 'firewall_out' not in interfaces_all_names_dict[
                        ialias] or interfaces_all_names_dict[ialias][
                            'firewall_out'] != firewall_name:
                    v = vapi.set_interface_firewall_ipv4(
                        hostname_default, interface_type, interface_name,
                        "out", firewall_name, interface_vif)
                    #print("@@@@@@@@@@@@@@@@@ out add", hostname_default, interface_type, interface_name, "out", firewall_name, interface_vif)
                else:
                    #print("@@@@@ not 4", interfaces_all_names_dict[ialias], firewall_name)
                    pass

            fw_changed = True

    if fw_changed == True:
        return redirect('interface:interface-list')

    template = loader.get_template('interface/index.html')
    context = {
        'interfaces':
        interfaces,
        'interfaces_pretty':
        pprint.pformat(interfaces, indent=4, width=120),
        'interfaces_all_names':
        interfaces_all_names,
        'interfaces_all_names_pretty':
        pprint.pformat(interfaces_all_names, indent=4, width=120),
        'instances':
        all_instances,
        'hostname_default':
        hostname_default,
        'firewall_all':
        firewall_all,
        'firewall_names':
        firewall_names,
        'interface_firewall_in':
        interface_firewall_in,
        'interface_firewall_out':
        interface_firewall_out,
        'interface_firewall_in_pretty':
        pprint.pformat(interface_firewall_in, indent=4, width=120),
        'interface_firewall_out_pretty':
        pprint.pformat(interface_firewall_out, indent=4, width=120),
        'username':
        request.user,
        'is_superuser':
        is_superuser,
    }
    return HttpResponse(template.render(context, request))
Beispiel #30
0
def firewall_addressgroup_desc(request, groupname):
    hostname_default = vyos.get_hostname_prefered(request)
    all_instances = vyos.instance_getall_by_group(request)
    is_superuser = perms.get_is_superuser(request.user)

    v = vyos2.api (
        hostname=   hostname_default,
        api =       "get",
        op =        "showConfig",
        cmd =       ["firewall", "group", "address-group", groupname],
        description = "show address-group config",
    )
    groupinfo = v.data
    if 'address' not in groupinfo:
        networks_original = []
    else:
        networks_original = groupinfo['address']

        if type(networks_original) is str:
            vyos2.log("tipo", type(networks_original))
            networks_original = [groupinfo['address']]
        else:
            networks_original = groupinfo['address']

    vyos2.log("networks_original", networks_original)

    networks_json = json.dumps(networks_original)


    changed = False

    if v.success:
        if request.POST.get('description', None) != None:
            v = vyos2.api (
                hostname=   hostname_default,
                api =       "post",
                op =        "set",
                cmd =       ["firewall", "group", "address-group", groupname, "description", request.POST.get('description')],
                description = "set network-group description",
            )
            changed = True


        if request.POST.get('networkgroup_json', None) != None:
            try:
                networks_new = json.loads(request.POST.get('networkgroup_json'))
            except ValueError:
                networks_new = {}

            vyos2.log('networks new', networks_new)

            for network in networks_new:
                v = vyos2.api (
                    hostname=   hostname_default,
                    api =       "post",
                    op =        "set",
                    cmd =       ["firewall", "group", "address-group", groupname, "address", network],
                    description = "edit address-group network",
                )
                if v.success and changed == False:
                    changed = True
            
            vyos2.log('networks original', networks_original)

            for network in networks_original:
                if network not in networks_new:
                    v = vyos2.api (
                        hostname=   hostname_default,
                        api =       "post",
                        op =        "delete",
                        cmd =       ["firewall", "group", "address-group", groupname, "address", network],
                        description = "delete address-group network",
                    )
                    if v.success and changed == False:
                        changed = True

        if changed == True:
            return redirect('firewall:firewall-addressgroup-list')


        template = loader.get_template('firewall/addressgroup-desc.html')
        context = { 
            'groupinfo': groupinfo,
            'hostname_default': hostname_default,
            'username': request.user,        
            'instances': all_instances,
            'is_superuser' : is_superuser,
            'groupname': groupname,
            'networks_json' : networks_json,
        }   
        return HttpResponse(template.render(context, request))
    else:
        return redirect('firewall:firewall-addressgroup-list')