From d4530c296aabbbe355c6734982177b2b6bd9d948 Mon Sep 17 00:00:00 2001 From: Andrey Didenko Date: Thu, 4 Jan 2024 23:50:16 +0300 Subject: [PATCH 1/5] DHCP added, command for DHCP and checkbox for client added --- README.md | 6 +- back/{dotenv-back-example => .env} | 2 +- back/Dockerfile | 5 + back/ENTRYPOINT.sh | 4 +- back/Vagrantfile | 27 +- back/debian-autonfs | 6 - back/docker-compose.staging.yml | 16 - back/docker-compose.yml | 17 +- back/install_docker.sh | 29 - back/macos-autosmb | 7 - back/src/celery_app.py | 18 +- back/src/jobs.py | 38 + back/src/net_utils/vlan.py | 61 - back/src/network.py | 13 +- back/src/pkt_parser.py | 66 +- back/src/simulate.py | 42 +- back/src/tasks.py | 20 +- back/src/test_json/vlan_access_answer.json | 1 - back/src/test_json/vlan_access_network.json | 214 ---- back/src/test_json/vlan_trunk_answer.json | 1 - back/src/test_json/vlan_trunk_network.json | 261 ---- .../vlan_with_access_switches_answer.json | 1 - .../vlan_with_access_switches_network.json | 276 ----- back/src/test_json/vlan_with_stp_answer.json | 1 - back/src/test_json/vlan_with_stp_network.json | 253 ---- back/src/test_miminet_example_works.py | 4 - front/.dockerignore | 3 +- front/{dotenv-front-example => .env} | 2 +- front/docker-compose.staging.yml | 42 - front/docker-compose.yml | 9 +- front/requirements.txt | 10 +- front/src/celery_app.py | 5 + front/src/miminet_auth.py | 10 +- front/src/miminet_host.py | 1079 ++++++++--------- front/src/miminet_model.py | 2 +- front/src/miminet_simulation.py | 61 +- front/src/static/config.js | 417 ++++--- front/src/static/config_host.html | 32 +- front/src/static/config_switch.html | 2 +- front/src/static/config_vlan.html | 50 - front/src/static/config_vlan.js | 207 ---- .../0757614576ac6560abf01a573dd0c11f.png | Bin 0 -> 18650 bytes .../28971ab5300dd2c86f51136e13f07b97.png | Bin 0 -> 12383 bytes .../2e3e94529465677725879dd9bb27ff26.png | Bin 0 -> 18719 bytes .../377de4a107c9a13a12ab58f24faefc14.png | Bin 0 -> 9682 bytes .../381a7c8a66d032f313d7a23f7ef1ff9b.png | Bin 0 -> 3283 bytes .../3921e242c3dd4fdd05b2919ff4f48f35.png | Bin 0 -> 15047 bytes .../392b828a784a0a82829f9b992e92ebcf.png | Bin 0 -> 10935 bytes .../3ce7118bb8e4d00ff5a2f7f742394a23.png | Bin 0 -> 11496 bytes .../40733625b12892b15af4bd3fc3bd7053.png | Bin 0 -> 14838 bytes .../463aeffda3959afbd2f6c35f5d592769.png | Bin 0 -> 9537 bytes .../5398197bcfc985efaed44ad99bb36099.png | Bin 0 -> 11017 bytes .../54d9508c83e456116858eeb979d7590d.png | Bin 0 -> 12206 bytes .../5f001cd07997c5e90e5787701a1bd39e.png | Bin 0 -> 11244 bytes .../6761459b948be3876d4823d5afb1fcfe.png | Bin 0 -> 11592 bytes .../696ba869a3229373157ef8579259c7d8.png | Bin 0 -> 11664 bytes .../6ce9900cd7fb8677d6e4092b301dd9d8.png | Bin 0 -> 9555 bytes .../6d96b38b2ceac1ac4993e306abee9c69.png | Bin 0 -> 11382 bytes .../7263d4f87f520c43794c5fec1dfb6f93.png | Bin 0 -> 6464 bytes .../7c659bb5c4d01dedd1e9e3e2b37397b1.png | Bin 0 -> 12958 bytes .../8763d45b85ce4f2bb68625e38781e43b.png | Bin 0 -> 14321 bytes .../8a1005c8f71d9c84eb0370157ba6dff1.png | Bin 0 -> 14551 bytes .../98608cf64b29d1903e2dcf14d75738a9.png | Bin 0 -> 9379 bytes .../a5fd134dc4e05dc7adaba17a14594261.png | Bin 0 -> 13363 bytes .../afc89f7718f229c2adf310fefe93183c.png | Bin 0 -> 19217 bytes .../c546190c0c4e9437035e66383741b39b.png | Bin 0 -> 15133 bytes .../c675db70df6894cca03a0ae94c458781.png | Bin 0 -> 14175 bytes .../d446032ca5cf29036c9ea724eddf19a9.png | Bin 0 -> 13136 bytes .../d5e1fb6ec3865f68b04a18df44e06af7.png | Bin 0 -> 3719 bytes .../e07b021491778459a7f107d2a5691297.png | Bin 0 -> 9695 bytes .../eafc3340a67b9eb3c675513f1fe4cafc.png | Bin 0 -> 11654 bytes .../f7e166fd006fac2187a7ece21e46e17f.png | Bin 0 -> 15780 bytes front/src/static/netfront_f.js | 1040 ++++++++-------- front/src/templates/auth/login.html | 2 +- front/src/templates/base.html | 2 - front/src/templates/network.html | 1 - front/src/templates/network_shared.html | 1 - front/src/uwsgi.ini | 4 +- front/src/vk_auth.json | 1 + 79 files changed, 1569 insertions(+), 2802 deletions(-) rename back/{dotenv-back-example => .env} (83%) delete mode 100644 back/debian-autonfs delete mode 100644 back/docker-compose.staging.yml delete mode 100644 back/install_docker.sh delete mode 100644 back/macos-autosmb delete mode 100644 back/src/net_utils/vlan.py delete mode 100644 back/src/test_json/vlan_access_answer.json delete mode 100644 back/src/test_json/vlan_access_network.json delete mode 100644 back/src/test_json/vlan_trunk_answer.json delete mode 100644 back/src/test_json/vlan_trunk_network.json delete mode 100644 back/src/test_json/vlan_with_access_switches_answer.json delete mode 100644 back/src/test_json/vlan_with_access_switches_network.json delete mode 100644 back/src/test_json/vlan_with_stp_answer.json delete mode 100644 back/src/test_json/vlan_with_stp_network.json rename front/{dotenv-front-example => .env} (63%) delete mode 100644 front/docker-compose.staging.yml delete mode 100644 front/src/static/config_vlan.html delete mode 100644 front/src/static/config_vlan.js create mode 100644 front/src/static/images/preview/0757614576ac6560abf01a573dd0c11f.png create mode 100644 front/src/static/images/preview/28971ab5300dd2c86f51136e13f07b97.png create mode 100644 front/src/static/images/preview/2e3e94529465677725879dd9bb27ff26.png create mode 100644 front/src/static/images/preview/377de4a107c9a13a12ab58f24faefc14.png create mode 100644 front/src/static/images/preview/381a7c8a66d032f313d7a23f7ef1ff9b.png create mode 100644 front/src/static/images/preview/3921e242c3dd4fdd05b2919ff4f48f35.png create mode 100644 front/src/static/images/preview/392b828a784a0a82829f9b992e92ebcf.png create mode 100644 front/src/static/images/preview/3ce7118bb8e4d00ff5a2f7f742394a23.png create mode 100644 front/src/static/images/preview/40733625b12892b15af4bd3fc3bd7053.png create mode 100644 front/src/static/images/preview/463aeffda3959afbd2f6c35f5d592769.png create mode 100644 front/src/static/images/preview/5398197bcfc985efaed44ad99bb36099.png create mode 100644 front/src/static/images/preview/54d9508c83e456116858eeb979d7590d.png create mode 100644 front/src/static/images/preview/5f001cd07997c5e90e5787701a1bd39e.png create mode 100644 front/src/static/images/preview/6761459b948be3876d4823d5afb1fcfe.png create mode 100644 front/src/static/images/preview/696ba869a3229373157ef8579259c7d8.png create mode 100644 front/src/static/images/preview/6ce9900cd7fb8677d6e4092b301dd9d8.png create mode 100644 front/src/static/images/preview/6d96b38b2ceac1ac4993e306abee9c69.png create mode 100644 front/src/static/images/preview/7263d4f87f520c43794c5fec1dfb6f93.png create mode 100644 front/src/static/images/preview/7c659bb5c4d01dedd1e9e3e2b37397b1.png create mode 100644 front/src/static/images/preview/8763d45b85ce4f2bb68625e38781e43b.png create mode 100644 front/src/static/images/preview/8a1005c8f71d9c84eb0370157ba6dff1.png create mode 100644 front/src/static/images/preview/98608cf64b29d1903e2dcf14d75738a9.png create mode 100644 front/src/static/images/preview/a5fd134dc4e05dc7adaba17a14594261.png create mode 100644 front/src/static/images/preview/afc89f7718f229c2adf310fefe93183c.png create mode 100644 front/src/static/images/preview/c546190c0c4e9437035e66383741b39b.png create mode 100644 front/src/static/images/preview/c675db70df6894cca03a0ae94c458781.png create mode 100644 front/src/static/images/preview/d446032ca5cf29036c9ea724eddf19a9.png create mode 100644 front/src/static/images/preview/d5e1fb6ec3865f68b04a18df44e06af7.png create mode 100644 front/src/static/images/preview/e07b021491778459a7f107d2a5691297.png create mode 100644 front/src/static/images/preview/eafc3340a67b9eb3c675513f1fe4cafc.png create mode 100644 front/src/static/images/preview/f7e166fd006fac2187a7ece21e46e17f.png create mode 100644 front/src/vk_auth.json diff --git a/README.md b/README.md index 1254d179..9d56a750 100644 --- a/README.md +++ b/README.md @@ -15,15 +15,13 @@ ### Docker ``` -cd back -COMPOSE_PROFILES=celery,rabbitmq,redis docker compose up -d --build +cd back && docker compose up -d --build ``` Celery, Rabbitmq и Redis будут доступны после этого шага. В завимости от того, где разворачивается Rabbitmq и Redis, вам потребуется указать имена сервисов. Например, если у Вас уже развернуты Rabbitmq и Redis на другом сервере и нужен только ipmininet worker: ``` -cd back -COMPOSE_PROFILES=celery docker compose up -d --build +cd back && docker compose up -d --build celery ``` ### Vagrant diff --git a/back/dotenv-back-example b/back/.env similarity index 83% rename from back/dotenv-back-example rename to back/.env index 652a13c3..a6ab334b 100644 --- a/back/dotenv-back-example +++ b/back/.env @@ -1,4 +1,4 @@ -amqp_urls=amqp://user:password@rabbitmq/ +amqp_urls=amqp://guest:guest@rabbitmq/ backend_urls=redis://:password@redis/1 celery_concurrency=1 queue_names=queue1,queue2,queue3 diff --git a/back/Dockerfile b/back/Dockerfile index 679fa300..75668c46 100644 --- a/back/Dockerfile +++ b/back/Dockerfile @@ -17,10 +17,15 @@ RUN apt-get update \ tcpdump \ git\ python3-pip \ + dnsmasq\ + isc-dhcp-client\ python3-setuptools \ && rm -rf /var/lib/apt/lists/* \ && touch /etc/network/interfaces \ && mkdir /opt/mininet_dependencies + + + WORKDIR /app diff --git a/back/ENTRYPOINT.sh b/back/ENTRYPOINT.sh index 65c97578..fabfb706 100755 --- a/back/ENTRYPOINT.sh +++ b/back/ENTRYPOINT.sh @@ -1,3 +1,3 @@ -#!/bin/bash +#!/usr/bin/env bash -exec python3 -m celery -A celery_app worker --loglevel=info --concurrency=${celery_concurrency} -Q ${queue_names} +python3 -m celery -A celery_app worker --loglevel=info --concurrency=${celery_concurrency} -Q ${queue_names} diff --git a/back/Vagrantfile b/back/Vagrantfile index 0c645d6b..373b9378 100644 --- a/back/Vagrantfile +++ b/back/Vagrantfile @@ -12,11 +12,11 @@ Vagrant.configure("2") do |config| # box.vm.network "forwarded_port", guest: 5000, host: 8000 # Shared folder - текущая, для гостевой ---/vagrant - unless os == :linux + if os == :windows box.vm.synced_folder ".", "/vagrant", type: "smb" else - # в стандартах RFC для NFSv4 не советуется использовать UDP + # в стандартах RFC для NFSv4 не советуется использовать UDP box.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_version: 4, @@ -24,31 +24,28 @@ Vagrant.configure("2") do |config| end # Используем ansible - # box.vm.provision "ansible_local" do |ansible| - # ansible.playbook = "vagrant/playbook.yml" - # end - # box.vm.provision :docker - # box.vm.provision :docker_compose, yml: "/vagrant/back/docker-compose.yml", run: "always" - box.vm.provision "shell", path: "install_docker.sh" + box.vm.provision "ansible_local" do |ansible| + ansible.playbook = "vagrant/playbook.yml" + end end - + N = ENV["numberOfBoxes"].to_i (1..N).each do |id| config.vm.define "vbox#{id}", autostart: false do |vbox| - if os == :linux + unless os == :windows # Приватная сеть для использования NFS в virtualbox - # NFS используем так как vboxfs нормально не поддерживает shared folder + # NFS используем так как vboxfs нормально не поддерживает shared folder # (с dhcp автоматически найдется свободный ip для гостевой машины, # но вы можете задать его сами) - vbox.vm.network "private_network", type: "dhcp" + vbox.vm.network "private_network", type: "dhcp" end vbox.vm.provider "virtualbox" do |v, override| - + # Оперативная память, пока что подобрал от балды, но при 1024 точно был system is deadlocked on memory v.customize ["modifyvm", :id, "--memory", 2048] v.customize ["modifyvm", :id, "--name", "miminet#{id}"] - + # Для диагностики гостевой машины через COM1 с Raw File v.customize ["modifyvm", :id, "--uart1", "0x3F8", "4"] v.customize ["modifyvm", :id, "--uartmode1", "file", File::NULL] @@ -67,4 +64,4 @@ Vagrant.configure("2") do |config| end end end -end \ No newline at end of file +end diff --git a/back/debian-autonfs b/back/debian-autonfs deleted file mode 100644 index 6b1b3759..00000000 --- a/back/debian-autonfs +++ /dev/null @@ -1,6 +0,0 @@ -Cmnd_Alias VAGRANT_EXPORTS_CHOWN = /bin/chown 0\:0 /tmp/vagrant-exports -Cmnd_Alias VAGRANT_EXPORTS_MV = /bin/mv -f /tmp/vagrant-exports /etc/exports -Cmnd_Alias VAGRANT_NFSD_CHECK = /etc/init.d/nfs-kernel-server status -Cmnd_Alias VAGRANT_NFSD_START = /etc/init.d/nfs-kernel-server start -Cmnd_Alias VAGRANT_NFSD_APPLY = /usr/sbin/exportfs -ar -%sudo ALL=(root) NOPASSWD: VAGRANT_EXPORTS_CHOWN, VAGRANT_EXPORTS_MV, VAGRANT_NFSD_CHECK, VAGRANT_NFSD_START, VAGRANT_NFSD_APPLY \ No newline at end of file diff --git a/back/docker-compose.staging.yml b/back/docker-compose.staging.yml deleted file mode 100644 index c5602a74..00000000 --- a/back/docker-compose.staging.yml +++ /dev/null @@ -1,16 +0,0 @@ -version: "3.9" - -services: - miminet: - build: - context: . - dockerfile: ./Dockerfile - container_name: celery - network_mode: "host" - restart: always - env_file: - - .env - environment: - - celery_concurrency=${celery_concurrency} - - queue_names=${queue_names} - privileged: true \ No newline at end of file diff --git a/back/docker-compose.yml b/back/docker-compose.yml index 6aea0a32..74c3ab13 100644 --- a/back/docker-compose.yml +++ b/back/docker-compose.yml @@ -9,11 +9,8 @@ services: depends_on: redis: condition: service_healthy - required: false rabbitmq: condition: service_healthy - required: false - profiles: ["celery"] restart: always networks: - rabbitmq_network @@ -24,7 +21,7 @@ services: - celery_concurrency=${celery_concurrency} - queue_names=${queue_names} privileged: true - + rabbitmq: image: rabbitmq:latest hostname: rabbitmq @@ -32,7 +29,6 @@ services: restart: always networks: - rabbitmq_network - profiles: ["rabbitmq"] environment: - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER} - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS} @@ -42,11 +38,11 @@ services: - ./rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf - ./rabbitmq/metrics_collector.conf:/etc/rabbitmq/conf.d/20-management_agent.disable_metrics_collector.conf ports: - - "15672:15672" - - "5672:5672" - - "4369:4369" - - "25672:25672" - - "35197:35197" + - 15672:15672 + - 5672:5672 + - 4369:4369 + - 25672:25672 + - 35197:35197 healthcheck: test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"] interval: 10s @@ -58,7 +54,6 @@ services: image: redis:latest container_name: redis hostname: redis - profiles: ["redis"] restart: always ports: - "6379:6379" diff --git a/back/install_docker.sh b/back/install_docker.sh deleted file mode 100644 index 72ba484f..00000000 --- a/back/install_docker.sh +++ /dev/null @@ -1,29 +0,0 @@ -sudo apt-get update -sudo apt-get install -y ca-certificates curl gnupg -sudo install -m 0755 -d /etc/apt/keyrings - -if [ ! -f /etc/apt/keyrings/docker.gpg ]; then - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg - sudo chmod a+r /etc/apt/keyrings/docker.gpg -fi - -if [ ! -f /etc/apt/sources.list.d/docker.list ]; then - echo \ - "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ - $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ - sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -fi - -sudo apt-get update -sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - -sudo usermod -aG docker $USER -newgrp docker - -sudo sysctl -w net.bridge.bridge-nf-call-iptables=0 -sudo sysctl -w net.bridge.bridge-nf-call-arptables=0 -sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=0 - -cd /vagrant/ - -docker compose -f docker-compose.staging.yml up -d --build diff --git a/back/macos-autosmb b/back/macos-autosmb deleted file mode 100644 index 9484df94..00000000 --- a/back/macos-autosmb +++ /dev/null @@ -1,7 +0,0 @@ -Cmnd_Alias VAGRANT_SMB_ADD = /usr/sbin/sharing -a * -S * -s * -g * -n * -Cmnd_Alias VAGRANT_SMB_REMOVE = /usr/sbin/sharing -r * -Cmnd_Alias VAGRANT_SMB_LIST = /usr/sbin/sharing -l -Cmnd_Alias VAGRANT_SMB_PLOAD = /bin/launchctl load -w /System/Library/LaunchDaemons/com.apple.smb.preferences.plist -Cmnd_Alias VAGRANT_SMB_DLOAD = /bin/launchctl load -w /System/Library/LaunchDaemons/com.apple.smbd.plist -Cmnd_Alias VAGRANT_SMB_DSTART = /bin/launchctl start com.apple.smbd -%admin ALL=(root) NOPASSWD: VAGRANT_SMB_ADD, VAGRANT_SMB_REMOVE, VAGRANT_SMB_LIST, VAGRANT_SMB_PLOAD, VAGRANT_SMB_DLOAD, VAGRANT_SMB_DSTART \ No newline at end of file diff --git a/back/src/celery_app.py b/back/src/celery_app.py index 0392ecea..dedee34e 100644 --- a/back/src/celery_app.py +++ b/back/src/celery_app.py @@ -1,3 +1,4 @@ +# default retry policy: # 'max_retries': 3, # 'interval_start': 0, # 'interval_step': 0.2, @@ -30,11 +31,18 @@ DEFAULT_APP_EXCHANGE = Exchange(EXCHANGE_NAME, type=EXCHANGE_TYPE) -QUEUES = ( - Queue(name, exchange=DEFAULT_APP_EXCHANGE, routing_key=ROUTING_KEY) - for name in QUEUES_NAMES -) +QUEUES = (Queue(name) for name in QUEUES_NAMES) -app.conf.task_default_exchange = DEFAULT_APP_EXCHANGE +app.conf.task_default_exchange = "default" app.conf.task_queues = QUEUES app.config_from_object(celeryconfig) + +with app.connection() as conn: + # Create queues and exchange + ch = conn.channel() + DEFAULT_APP_EXCHANGE.declare(channel=ch) + for queue in QUEUES: + queue.declare(channel=ch) + queue.bind_to( + channel=ch, exchange=DEFAULT_APP_EXCHANGE, routing_key=ROUTING_KEY + ) diff --git a/back/src/jobs.py b/back/src/jobs.py index 1b5f2602..bc19f8bf 100644 --- a/back/src/jobs.py +++ b/back/src/jobs.py @@ -153,6 +153,42 @@ def arp_handler(job: Job, job_host): job_host.cmd("arp -s " + str(arg_ip) + " " + str(arg_mac)) +def dhcp_server(job: Job, job_host): + job_host.cmd('service dnsmasq stop') + ip_range = job.arg_1 + mask = job.arg_2 + gw = job.arg_3 + mask = mask_to_byte(mask) + job_host.cmd(f"dnsmasq --dhcp-range={ip_range},{mask} --dhcp-option=3,{gw}") + +def dhcp_client(job: Job, job_host): + job_host.cmd(f'ifconfig {job_host.intf().name} 0') + job_host.cmd(f'timeout -k 0 30 dhclient -v -4 {job_host.intf().name}') + ip, netmask, gateway = parse_ip_route_show_output(job_host.cmd('ip route show')) + job_host.setIP(f'{ip}/{netmask}') + job_host.cmd(f'route add default gw {gateway}') + +def parse_ip_route_show_output(output): + ip_match = re.search(r'src (\d+\.\d+\.\d+\.\d+)', output) + netmask_match = re.search(r'(\d+\.\d+\.\d+\.\d+)/(\d+)', output) + gateway_match = re.search(r'default via (\d+\.\d+\.\d+\.\d+)', output) + + ip = ip_match.group(1) if ip_match else None + netmask = netmask_match.group(2) if netmask_match else None + gateway = gateway_match.group(1) if gateway_match else None + + return ip, netmask, gateway + +def mask_to_byte(cidr): + try: + cidr = int(cidr) + if 0 <= cidr <= 32: + netmask = (0xFFFFFFFF << (32 - cidr)) & 0xFFFFFFFF + return f"{(netmask >> 24) & 0xFF}.{(netmask >> 16) & 0xFF}.{(netmask >> 8) & 0xFF}.{netmask & 0xFF}" + else: + return "Invalid CIDR" + except ValueError: + return "Invalid CIDR" class Jobs: """Class for representing various commands for working with miminet network""" @@ -170,6 +206,8 @@ def __init__(self, job, job_host, **kwargs): 101: iptables_handler, 102: ip_route_add_handler, 103: arp_handler, + 104: dhcp_server, + 105: dhcp_client, 200: open_udp_server_handler, 201: open_tcp_server_handler, 202: block_tcp_udp_port, diff --git a/back/src/net_utils/vlan.py b/back/src/net_utils/vlan.py deleted file mode 100644 index f0a7b658..00000000 --- a/back/src/net_utils/vlan.py +++ /dev/null @@ -1,61 +0,0 @@ -from ipmininet.ipnet import IPNet -from ipmininet.ipswitch import IPSwitch - -from network import Node - - -def setup_vlans(net: IPNet, nodes: list[Node]) -> None: - """Function to configure VLANs on the presented network - - Args: - net (IPNet): network - nodes (list[Node]): nodes on the network - - """ - - for node in nodes: - if node.config.type == "l2_switch": - switch = net.get(node.data.id) - add_bridge(switch) - - for iface in node.interface: - vlan = iface.vlan - type_connection = iface.type_connection - if vlan is not None: - if type_connection == 0: # Access link - configure_access(switch, iface.name, vlan) - elif type_connection == 1: # Trunk link - configure_trunk(switch, iface.name, sorted(vlan)) - - -def clean_bridges(net: IPNet) -> None: - """Function to clear bridges that were supplied during VLAN configuration - - Args: - net (IPNet): network - - """ - - for switch in net.switches: - switch.cmd(f'ip link set {f"br-{switch.name}"} down') - switch.cmd(f'brctl delbr {f"br-{switch.name}"}') - - -def configure_access(switch: IPSwitch, intf: str, vlan: int) -> None: - switch.cmd(f'ip link set {intf} master {f"br-{switch.name}"}') - switch.cmd(f"bridge vlan del dev {intf} vid 1") - switch.cmd(f"bridge vlan add dev {intf} vid {vlan} pvid untagged") - - -def configure_trunk(switch: IPSwitch, intf: str, vlans: list[int]) -> None: - switch.cmd(f'ip link set {intf} master {f"br-{switch.name}"}') - switch.cmd(f"bridge vlan del dev {intf} vid 1") - - for vlan in vlans: - switch.cmd(f"bridge vlan add dev {intf} vid {vlan}") - - -def add_bridge(switch: IPSwitch) -> None: - switch.cmd(f'ip link add name {f"br-{switch.name}"} type bridge') - switch.cmd(f'ip link set dev {f"br-{switch.name}"} up') - switch.cmd(f'ip link set dev {f"br-{switch.name}"} type bridge vlan_filtering 1') diff --git a/back/src/network.py b/back/src/network.py index e463fff8..4bedc416 100644 --- a/back/src/network.py +++ b/back/src/network.py @@ -2,7 +2,6 @@ # Classes for deserialize miminet network from dataclasses import dataclass -from typing import Union, Optional @dataclass @@ -28,6 +27,8 @@ class NodeConfig: type (str): node type (for example, l2_switch) stp (int): 1 if need stp default_gw (str): default gateway + checkbox (bool): if true give ip + dhcp (int) if host is dhcp server 1 """ @@ -35,6 +36,8 @@ class NodeConfig: type: str = "" stp: int = 0 default_gw: str = "" + checkbox: int = 0 + dhcp: int = 0 @dataclass @@ -47,8 +50,6 @@ class NodeInterface: name (str): interface name (for example, l2sw1_1) ip (str): ip (for example, 10.0.0.1) netmask (str): netmask - vlan (Union[int, List[int], None]): VLAN ID or list of VLAN - type_connection (Optional[int]): Connection type (0 - Access, 1 - Trunk) """ @@ -57,8 +58,6 @@ class NodeInterface: name: str = "" ip: str = "" netmask: int = 0 - vlan: Union[int, list[int], None] = None - type_connection: Optional[int] = None @dataclass @@ -142,7 +141,7 @@ class Job: job_id: int host_id: str print_cmd: str - arg_1: str | int = "" + arg_1: str | int | tuple = "" arg_2: str | int = "" arg_3: str | int = "" @@ -181,5 +180,5 @@ class Network: edges: list[Edge] jobs: list[Job] config: NetworkConfig - pcap: list[str] | None + pcap: list[str] packets: str = "" diff --git a/back/src/pkt_parser.py b/back/src/pkt_parser.py index 4736f92a..2b41dc89 100644 --- a/back/src/pkt_parser.py +++ b/back/src/pkt_parser.py @@ -112,18 +112,16 @@ def packet_parser(pcap1: Reader, edge_id: str, e_source: str, e_target: str): ts = ts.replace(".", "").ljust(16, "0") pkt_type = arp_packet_type(eth) - pkts.append( - { - "data": {"id": packet_uuid(), "label": pkt_type, "type": "packet"}, - "config": { - "type": pkt_type, - "path": edge_id, - "source": e_source, - "target": e_target, - }, - "timestamp": ts, - } - ) + pkts.append({ + "data": {"id": packet_uuid(), "label": pkt_type, "type": "packet"}, + "config": { + "type": pkt_type, + "path": edge_id, + "source": e_source, + "target": e_target, + }, + "timestamp": ts, + }) if isinstance(eth.data, dpkt.llc.LLC): llc = eth.data @@ -136,18 +134,16 @@ def packet_parser(pcap1: Reader, edge_id: str, e_source: str, e_target: str): if llc.dsap == 0x42: llc_label = "STP" - pkts.append( - { - "data": {"id": packet_uuid(), "label": llc_label, "type": "packet"}, - "config": { - "type": llc_label, - "path": edge_id, - "source": e_source, - "target": e_target, - }, - "timestamp": ts, - } - ) + pkts.append({ + "data": {"id": packet_uuid(), "label": llc_label, "type": "packet"}, + "config": { + "type": llc_label, + "path": edge_id, + "source": e_source, + "target": e_target, + }, + "timestamp": ts, + }) # Skip IPv6 if isinstance(eth.data, dpkt.ip6.IP6): @@ -169,18 +165,16 @@ def packet_parser(pcap1: Reader, edge_id: str, e_source: str, e_target: str): pkt_type + "\n" + inet_to_str(ip.src) + " > " + inet_to_str(ip.dst) ) - pkts.append( - { - "data": {"id": packet_uuid(), "label": pkt_type, "type": "packet"}, - "config": { - "type": pkt_type, - "path": edge_id, - "source": e_source, - "target": e_target, - }, - "timestamp": ts, - } - ) + pkts.append({ + "data": {"id": packet_uuid(), "label": pkt_type, "type": "packet"}, + "config": { + "type": pkt_type, + "path": edge_id, + "source": e_source, + "target": e_target, + }, + "timestamp": ts, + }) return pkts diff --git a/back/src/simulate.py b/back/src/simulate.py index 2c7aaea7..8866ad4a 100644 --- a/back/src/simulate.py +++ b/back/src/simulate.py @@ -7,11 +7,18 @@ from ipmininet.ipnet import IPNet from ipmininet.ipswitch import IPSwitch from ipmininet.iptopo import IPTopo -from ipmininet.router.config import RouterConfig -from jobs import Jobs +from ipmininet.router.config import RouterConfig +from ipmininet.cli import IPCLI +from jobs import Jobs, parse_ip_route_show_output from network import Job, Network, Node, NodeConfig, NodeData, NodeInterface from pkt_parser import create_pkt_animation, is_ipv4_address -from net_utils.vlan import setup_vlans, clean_bridges +import pdb +from mininet.log import setLogLevel +import ipaddress +from ipaddress import IPv4Address, IPv4Network +from operator import attrgetter + +setLogLevel('info') class MyTopology(IPTopo): @@ -211,6 +218,7 @@ def addLink( ), super().addLink(s, h_target, intfName2=interface_name_2, **opts2) def post_build(self, net: IPNet): + for node in self._id_node_map.values(): config = node.config if config.type == "router": @@ -312,10 +320,20 @@ def do_job(job: Job, net: IPNet) -> None: current_job = Jobs(job, job_host) current_job.handler() +def get_host_ip_dict(net: IPNet) -> dict: + host_ip_dict = {} + for host in net.hosts: + output = parse_ip_route_show_output(host.cmd('ip route show')) + host_ip_dict[host.name] = output + return host_ip_dict + +def sort_jobs_by_level(jobs): + sorted_jobs = sorted(jobs, key=attrgetter('level')) + return sorted_jobs def run_mininet( network: Network, -) -> tuple[list[list] | list, list | list[tuple[bytes, str]]]: +) -> tuple[list[list] | list, list | list[tuple[bytes, str]], dict]: """Function for start mininet emulation Args: @@ -332,12 +350,12 @@ def run_mininet( net = IPNet(topo=topo, use_v6=False, autoSetMacs=True, allocate_IPs=False) net.start() - - setup_vlans(net, network.nodes) + # pdb.set_trace() time.sleep(topo.time_to_wait_before_emulation) # Don only 100+ jobs - for job in network.jobs: + print(sort_jobs_by_level(network.jobs)) + for job in sort_jobs_by_level(network.jobs): job_id = job.job_id if int(job_id) < 100: @@ -359,8 +377,12 @@ def run_mininet( do_job(job, net) except Exception: continue - - clean_bridges(net) + + for host in net.hosts: + host.cmd('service dnsmasq stop') + + # IPCLI(net) + host_ip = get_host_ip_dict(net) time.sleep(2) net.stop() @@ -404,4 +426,4 @@ def run_mininet( os.system("ps -C nc -o pid=|xargs kill -9") # Return animation - return animation, pcap_list + return animation, pcap_list, host_ip diff --git a/back/src/tasks.py b/back/src/tasks.py index 30321b04..c306574c 100644 --- a/back/src/tasks.py +++ b/back/src/tasks.py @@ -1,15 +1,13 @@ import json -import os -import signal import typing import marshmallow_dataclass -import redis from celery import shared_task -from mininet.log import setLogLevel - from network import Network from simulate import run_mininet +from mininet.log import setLogLevel + +import redis @shared_task( @@ -28,24 +26,22 @@ def mininet_worker( tuple: Tuple (json emulation results, List[pcap, pcap name]) """ - setLogLevel("info") - - if os.name == "posix": - print("Set default handler to SIGCHLD") - signal.signal(signal.SIGCHLD, signal.SIG_IGN) + setLogLevel('info') jnet = json.loads(network) + print(network) network_schema = marshmallow_dataclass.class_schema(Network)() animation = "" pcaps = [] + host_ip = {} for i in range(3): try: - animation, pcaps = run_mininet(network_schema.load(jnet)) + animation, pcaps, host_ip = run_mininet(network_schema.load(jnet)) except ValueError: continue except Exception: break else: break - return json.dumps(animation), pcaps + return json.dumps(animation), pcaps, host_ip diff --git a/back/src/test_json/vlan_access_answer.json b/back/src/test_json/vlan_access_answer.json deleted file mode 100644 index c4e37188..00000000 --- a/back/src/test_json/vlan_access_answer.json +++ /dev/null @@ -1 +0,0 @@ -[[{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjv9qpsbe3ms3ol0nc", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjv9t0l562eo0wd8xp", "source": "l2sw1", "target": "host_2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjv9t0l562eo0wd8xp", "source": "host_2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjv9qpsbe3ms3ol0nc", "source": "l2sw1", "target": "host_1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.2", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.2", "path": "edge_lpjv9qpsbe3ms3ol0nc", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.2", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.2", "path": "edge_lpjv9t0l562eo0wd8xp", "source": "l2sw1", "target": "host_2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.2 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.2 > 192.168.1.1", "path": "edge_lpjv9t0l562eo0wd8xp", "source": "host_2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.2 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.2 > 192.168.1.1", "path": "edge_lpjv9qpsbe3ms3ol0nc", "source": "l2sw1", "target": "host_1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjv9qpsbe3ms3ol0nc", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjv9t0l562eo0wd8xp", "source": "l2sw1", "target": "host_2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjv9qpsbe3ms3ol0nc", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjv9t0l562eo0wd8xp", "source": "l2sw1", "target": "host_2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjv9qpsbe3ms3ol0nc", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjv9t0l562eo0wd8xp", "source": "l2sw1", "target": "host_2"}, "timestamp": ""}]] diff --git a/back/src/test_json/vlan_access_network.json b/back/src/test_json/vlan_access_network.json deleted file mode 100644 index bde5e482..00000000 --- a/back/src/test_json/vlan_access_network.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "nodes": [ - { - "classes": [ - "l2_switch" - ], - "config": { - "label": "l2sw1", - "stp": 0, - "type": "l2_switch" - }, - "data": { - "id": "l2sw1", - "label": "l2sw1" - }, - "interface": [ - { - "connect": "edge_lpjv9qpsbe3ms3ol0nc", - "id": "l2sw1_1", - "name": "l2sw1_1", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpjv9t0l562eo0wd8xp", - "id": "l2sw1_2", - "name": "l2sw1_2", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpjv9tt1menkapg8yt", - "id": "l2sw1_3", - "name": "l2sw1_3", - "type_connection": 0, - "vlan": 20 - }, - { - "connect": "edge_lpjv9upbo33dp67a0ar", - "id": "l2sw1_4", - "name": "l2sw1_4", - "type_connection": 0, - "vlan": 20 - } - ], - "position": { - "x": 207.54225158691406, - "y": 131 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_1", - "type": "host" - }, - "data": { - "id": "host_1", - "label": "host_1" - }, - "interface": [ - { - "connect": "edge_lpjv9qpsbe3ms3ol0nc", - "id": "iface_00504230", - "ip": "192.168.1.1", - "name": "iface_00504230", - "netmask": 24 - } - ], - "position": { - "x": 146.54225158691406, - "y": 63.5 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_2", - "type": "host" - }, - "data": { - "id": "host_2", - "label": "host_2" - }, - "interface": [ - { - "connect": "edge_lpjv9t0l562eo0wd8xp", - "id": "iface_20885386", - "ip": "192.168.1.2", - "name": "iface_20885386", - "netmask": 24 - } - ], - "position": { - "x": 271.0417993300333, - "y": 70.99853016513762 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_3", - "type": "host" - }, - "data": { - "id": "host_3", - "label": "host_3" - }, - "interface": [ - { - "connect": "edge_lpjv9tt1menkapg8yt", - "id": "iface_50008648", - "ip": "192.168.1.3", - "name": "iface_50008648", - "netmask": 24 - } - ], - "position": { - "x": 148.54225158691406, - "y": 177 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_4", - "type": "host" - }, - "data": { - "id": "host_4", - "label": "host_4" - }, - "interface": [ - { - "connect": "edge_lpjv9upbo33dp67a0ar", - "id": "iface_74775612", - "ip": "192.168.1.4", - "name": "iface_74775612", - "netmask": 24 - } - ], - "position": { - "x": 267.04225158691406, - "y": 175 - } - } - ], - "edges": [ - { - "data": { - "id": "edge_lpjv9qpsbe3ms3ol0nc", - "source": "host_1", - "target": "l2sw1" - } - }, - { - "data": { - "id": "edge_lpjv9t0l562eo0wd8xp", - "source": "host_2", - "target": "l2sw1" - } - }, - { - "data": { - "id": "edge_lpjv9tt1menkapg8yt", - "source": "host_3", - "target": "l2sw1" - } - }, - { - "data": { - "id": "edge_lpjv9upbo33dp67a0ar", - "source": "host_4", - "target": "l2sw1" - } - } - ], - "jobs": [ - { - "arg_1": "192.168.1.2", - "host_id": "host_1", - "id": "2f2a7e151e754995b86585f58c9c0fa8", - "job_id": 1, - "level": 0, - "print_cmd": "ping -c 1 192.168.1.2" - }, - { - "arg_1": "192.168.1.3", - "host_id": "host_1", - "id": "cc989ed9bc2a473fb2c8624369b47245", - "job_id": 1, - "level": 1, - "print_cmd": "ping -c 1 192.168.1.3" - } - ], - "config": { - "zoom": 2, - "pan_x": 0, - "pan_y": 0 - }, - "pcap": [] -} \ No newline at end of file diff --git a/back/src/test_json/vlan_trunk_answer.json b/back/src/test_json/vlan_trunk_answer.json deleted file mode 100644 index f7f18694..00000000 --- a/back/src/test_json/vlan_trunk_answer.json +++ /dev/null @@ -1 +0,0 @@ -[[{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyynqdtnj124ie5p", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "l2sw2", "target": "host_3"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyynqdtnj124ie5p", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "l2sw2", "target": "host_3"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyynqdtnj124ie5p", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "l2sw2", "target": "host_3"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyynqdtnj124ie5p", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "l2sw2", "target": "host_3"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "host_3", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjyynqdtnj124ie5p", "source": "l2sw1", "target": "host_1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "path": "edge_lpjyynqdtnj124ie5p", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "l2sw2", "target": "host_3"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "host_3", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "path": "edge_lpjyynqdtnj124ie5p", "source": "l2sw1", "target": "host_1"}, "timestamp": ""}]] diff --git a/back/src/test_json/vlan_trunk_network.json b/back/src/test_json/vlan_trunk_network.json deleted file mode 100644 index e82f1077..00000000 --- a/back/src/test_json/vlan_trunk_network.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "nodes": [ - { - "classes": [ - "l2_switch" - ], - "config": { - "label": "l2sw1", - "stp": 0, - "type": "l2_switch" - }, - "data": { - "id": "l2sw1", - "label": "l2sw1" - }, - "interface": [ - { - "connect": "edge_lpjyyea3x4lvycgkjpr", - "id": "l2sw1_1", - "name": "l2sw1_1", - "type_connection": 1, - "vlan": [ - 10, - 20 - ] - }, - { - "connect": "edge_lpjyynqdtnj124ie5p", - "id": "l2sw1_2", - "name": "l2sw1_2", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpjyyooj2fsdasz4acv", - "id": "l2sw1_3", - "name": "l2sw1_3", - "type_connection": 0, - "vlan": 20 - } - ], - "position": { - "x": 138.04225158691406, - "y": 135 - } - }, - { - "classes": [ - "l2_switch" - ], - "config": { - "label": "l2sw2", - "stp": 0, - "type": "l2_switch" - }, - "data": { - "id": "l2sw2", - "label": "l2sw2" - }, - "interface": [ - { - "connect": "edge_lpjyyea3x4lvycgkjpr", - "id": "l2sw2_1", - "name": "l2sw2_1", - "type_connection": 1, - "vlan": [ - 20, - 10 - ] - }, - { - "connect": "edge_lpjyyjvhz88ynwh5vn", - "id": "l2sw2_2", - "name": "l2sw2_2", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpjyym3q7fdprgccdwr", - "id": "l2sw2_3", - "name": "l2sw2_3", - "type_connection": 0, - "vlan": 20 - } - ], - "position": { - "x": 273.54225158691406, - "y": 138 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_1", - "type": "host" - }, - "data": { - "id": "host_1", - "label": "host_1" - }, - "interface": [ - { - "connect": "edge_lpjyynqdtnj124ie5p", - "id": "iface_10536533", - "ip": "192.168.1.1", - "name": "iface_10536533", - "netmask": 24 - } - ], - "position": { - "x": 81.04225158691406, - "y": 89 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_2", - "type": "host" - }, - "data": { - "id": "host_2", - "label": "host_2" - }, - "interface": [ - { - "connect": "edge_lpjyyooj2fsdasz4acv", - "id": "iface_37516226", - "ip": "192.168.1.2", - "name": "iface_37516226", - "netmask": 24 - } - ], - "position": { - "x": 77.54225158691406, - "y": 180.5 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_3", - "type": "host" - }, - "data": { - "id": "host_3", - "label": "host_3" - }, - "interface": [ - { - "connect": "edge_lpjyyjvhz88ynwh5vn", - "id": "iface_15216711", - "ip": "192.168.1.3", - "name": "iface_15216711", - "netmask": 24 - } - ], - "position": { - "x": 328.04225158691406, - "y": 77 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_4", - "type": "host" - }, - "data": { - "id": "host_4", - "label": "host_4" - }, - "interface": [ - { - "connect": "edge_lpjyym3q7fdprgccdwr", - "id": "iface_26582157", - "ip": "192.168.1.4", - "name": "iface_26582157", - "netmask": 24 - } - ], - "position": { - "x": 322.0433822291159, - "y": 197.00022612844037 - } - } - ], - "edges": [ - { - "data": { - "id": "edge_lpjyyea3x4lvycgkjpr", - "source": "l2sw1", - "target": "l2sw2" - } - }, - { - "data": { - "id": "edge_lpjyyjvhz88ynwh5vn", - "source": "host_3", - "target": "l2sw2" - } - }, - { - "data": { - "id": "edge_lpjyym3q7fdprgccdwr", - "source": "host_4", - "target": "l2sw2" - } - }, - { - "data": { - "id": "edge_lpjyynqdtnj124ie5p", - "source": "host_1", - "target": "l2sw1" - } - }, - { - "data": { - "id": "edge_lpjyyooj2fsdasz4acv", - "source": "host_2", - "target": "l2sw1" - } - } - ], - "jobs": [ - { - "arg_1": "192.168.1.2", - "host_id": "host_1", - "id": "6acd11aee7b34d18861e64eada40a65a", - "job_id": 1, - "level": 0, - "print_cmd": "ping -c 1 192.168.1.2" - }, - { - "arg_1": "192.168.1.3", - "host_id": "host_1", - "id": "4bc3522f2e824ba89a923d23dae9988b", - "job_id": 1, - "level": 1, - "print_cmd": "ping -c 1 192.168.1.3" - } - ], - "config": { - "zoom": 2, - "pan_x": 0, - "pan_y": 0 - }, - "pcap": [] -} \ No newline at end of file diff --git a/back/src/test_json/vlan_with_access_switches_answer.json b/back/src/test_json/vlan_with_access_switches_answer.json deleted file mode 100644 index 7b69b929..00000000 --- a/back/src/test_json/vlan_with_access_switches_answer.json +++ /dev/null @@ -1 +0,0 @@ -[[{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyynqdtnj124ie5p", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpk0dpzbwtrfo3g4h5c", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpk0e8949rb63oqovgl", "source": "l2sw2", "target": "host_3"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpk0e8949rb63oqovgl", "source": "host_3", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpk0dpzbwtrfo3g4h5c", "source": "l2sw2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjyynqdtnj124ie5p", "source": "l2sw1", "target": "host_1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "path": "edge_lpjyynqdtnj124ie5p", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "path": "edge_lpk0dpzbwtrfo3g4h5c", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "path": "edge_lpk0e8949rb63oqovgl", "source": "l2sw2", "target": "host_3"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "path": "edge_lpk0e8949rb63oqovgl", "source": "host_3", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "path": "edge_lpk0dpzbwtrfo3g4h5c", "source": "l2sw2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "path": "edge_lpjyynqdtnj124ie5p", "source": "l2sw1", "target": "host_1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyooj2fsdasz4acv", "source": "host_2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpk0huy40a64r6xzldhe", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpk0liymi9s2yesado", "source": "l2sw2", "target": "host_4"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpk0liymi9s2yesado", "source": "host_4", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpk0huy40a64r6xzldhe", "source": "l2sw2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjyyooj2fsdasz4acv", "source": "l2sw1", "target": "host_2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.2 > 192.168.1.4", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.2 > 192.168.1.4", "path": "edge_lpjyyooj2fsdasz4acv", "source": "host_2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.2 > 192.168.1.4", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.2 > 192.168.1.4", "path": "edge_lpk0huy40a64r6xzldhe", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.2 > 192.168.1.4", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.2 > 192.168.1.4", "path": "edge_lpk0liymi9s2yesado", "source": "l2sw2", "target": "host_4"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.4 > 192.168.1.2", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.4 > 192.168.1.2", "path": "edge_lpk0liymi9s2yesado", "source": "host_4", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.4 > 192.168.1.2", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.4 > 192.168.1.2", "path": "edge_lpk0huy40a64r6xzldhe", "source": "l2sw2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.4 > 192.168.1.2", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.4 > 192.168.1.2", "path": "edge_lpjyyooj2fsdasz4acv", "source": "l2sw1", "target": "host_2"}, "timestamp": ""}]] diff --git a/back/src/test_json/vlan_with_access_switches_network.json b/back/src/test_json/vlan_with_access_switches_network.json deleted file mode 100644 index c29f57f8..00000000 --- a/back/src/test_json/vlan_with_access_switches_network.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "nodes": [ - { - "classes": [ - "l2_switch" - ], - "config": { - "label": "l2sw1", - "stp": 0, - "type": "l2_switch" - }, - "data": { - "id": "l2sw1", - "label": "l2sw1" - }, - "interface": [ - { - "connect": "edge_lpjyynqdtnj124ie5p", - "id": "l2sw1_2", - "name": "l2sw1_2", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpjyyooj2fsdasz4acv", - "id": "l2sw1_3", - "name": "l2sw1_3", - "type_connection": 0, - "vlan": 20 - }, - { - "connect": "edge_lpk0dpzbwtrfo3g4h5c", - "id": "l2sw1_1", - "name": "l2sw1_1", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpk0huy40a64r6xzldhe", - "id": "l2sw1_4", - "name": "l2sw1_4", - "type_connection": 0, - "vlan": 20 - } - ], - "position": { - "x": 138.04225158691406, - "y": 135 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_1", - "type": "host" - }, - "data": { - "id": "host_1", - "label": "host_1" - }, - "interface": [ - { - "connect": "edge_lpjyynqdtnj124ie5p", - "id": "iface_10536533", - "ip": "192.168.1.1", - "name": "iface_10536533", - "netmask": 24 - } - ], - "position": { - "x": 81.04225158691406, - "y": 89 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_2", - "type": "host" - }, - "data": { - "id": "host_2", - "label": "host_2" - }, - "interface": [ - { - "connect": "edge_lpjyyooj2fsdasz4acv", - "id": "iface_37516226", - "ip": "192.168.1.2", - "name": "iface_37516226", - "netmask": 24 - } - ], - "position": { - "x": 80.04168626581315, - "y": 190.49773871559634 - } - }, - { - "classes": [ - "l2_switch" - ], - "config": { - "label": "l2sw2", - "stp": 0, - "type": "l2_switch" - }, - "data": { - "id": "l2sw2", - "label": "l2sw2" - }, - "interface": [ - { - "connect": "edge_lpk0dpzbwtrfo3g4h5c", - "id": "l2sw2_1", - "name": "l2sw2_1", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpk0e8949rb63oqovgl", - "id": "l2sw2_3", - "name": "l2sw2_3", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpk0huy40a64r6xzldhe", - "id": "l2sw2_2", - "name": "l2sw2_2", - "type_connection": 0, - "vlan": 20 - }, - { - "connect": "edge_lpk0liymi9s2yesado", - "id": "l2sw2_4", - "name": "l2sw2_4", - "type_connection": 0, - "vlan": 20 - } - ], - "position": { - "x": 241.54225158691406, - "y": 131.5 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_3", - "type": "host" - }, - "data": { - "id": "host_3", - "label": "host_3" - }, - "interface": [ - { - "connect": "edge_lpk0e8949rb63oqovgl", - "id": "iface_50484464", - "ip": "192.168.1.3", - "name": "iface_50484464", - "netmask": 24 - } - ], - "position": { - "x": 261.04225158691406, - "y": 60 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_4", - "type": "host" - }, - "data": { - "id": "host_4", - "label": "host_4" - }, - "interface": [ - { - "connect": "edge_lpk0liymi9s2yesado", - "id": "iface_63674220", - "ip": "192.168.1.4", - "name": "iface_63674220", - "netmask": 24 - } - ], - "position": { - "x": 295.54225158691406, - "y": 182 - } - } - ], - "edges": [ - { - "data": { - "id": "edge_lpjyynqdtnj124ie5p", - "source": "host_1", - "target": "l2sw1" - } - }, - { - "data": { - "id": "edge_lpjyyooj2fsdasz4acv", - "source": "host_2", - "target": "l2sw1" - } - }, - { - "data": { - "id": "edge_lpk0dpzbwtrfo3g4h5c", - "source": "l2sw1", - "target": "l2sw2" - } - }, - { - "data": { - "id": "edge_lpk0e8949rb63oqovgl", - "source": "host_3", - "target": "l2sw2" - } - }, - { - "data": { - "id": "edge_lpk0huy40a64r6xzldhe", - "source": "l2sw1", - "target": "l2sw2" - } - }, - { - "data": { - "id": "edge_lpk0liymi9s2yesado", - "source": "host_4", - "target": "l2sw2" - } - } - ], - "jobs": [ - { - "arg_1": "192.168.1.3", - "host_id": "host_1", - "id": "4bc3522f2e824ba89a923d23dae9988b", - "job_id": 1, - "level": 1, - "print_cmd": "ping -c 1 192.168.1.3" - }, - { - "arg_1": "192.168.1.4", - "host_id": "host_2", - "id": "9f601f78bced41d78ef964901cc43120", - "job_id": 1, - "level": 1, - "print_cmd": "ping -c 1 192.168.1.4" - } - ], - "config": { - "zoom": 2, - "pan_x": 0, - "pan_y": 0 - }, - "pcap": [] -} \ No newline at end of file diff --git a/back/src/test_json/vlan_with_stp_answer.json b/back/src/test_json/vlan_with_stp_answer.json deleted file mode 100644 index 9f1a4a68..00000000 --- a/back/src/test_json/vlan_with_stp_answer.json +++ /dev/null @@ -1 +0,0 @@ -[[{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyynqdtnj124ie5p", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-request", "type": "packet"}, "config": {"type": "ARP-request", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "l2sw2", "target": "host_3"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "host_3", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ARP-response", "type": "packet"}, "config": {"type": "ARP-response", "path": "edge_lpjyynqdtnj124ie5p", "source": "l2sw1", "target": "host_1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "path": "edge_lpjyynqdtnj124ie5p", "source": "host_1", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw1", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "type": "packet"}, "config": {"type": "ICMP echo-request\n192.168.1.1 > 192.168.1.3", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "l2sw2", "target": "host_3"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "path": "edge_lpjyyjvhz88ynwh5vn", "source": "host_3", "target": "l2sw2"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "path": "edge_lpjyyea3x4lvycgkjpr", "source": "l2sw2", "target": "l2sw1"}, "timestamp": ""}], [{"data": {"id": "", "label": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "type": "packet"}, "config": {"type": "ICMP echo-reply\n192.168.1.3 > 192.168.1.1", "path": "edge_lpjyynqdtnj124ie5p", "source": "l2sw1", "target": "host_1"}, "timestamp": ""}]] diff --git a/back/src/test_json/vlan_with_stp_network.json b/back/src/test_json/vlan_with_stp_network.json deleted file mode 100644 index 48145e1e..00000000 --- a/back/src/test_json/vlan_with_stp_network.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "nodes": [ - { - "classes": [ - "l2_switch" - ], - "config": { - "label": "l2sw1", - "stp": 1, - "type": "l2_switch" - }, - "data": { - "id": "l2sw1", - "label": "l2sw1" - }, - "interface": [ - { - "connect": "edge_lpjyyea3x4lvycgkjpr", - "id": "l2sw1_1", - "name": "l2sw1_1", - "type_connection": 1, - "vlan": [ - 10, - 20 - ] - }, - { - "connect": "edge_lpjyynqdtnj124ie5p", - "id": "l2sw1_2", - "name": "l2sw1_2", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpjyyooj2fsdasz4acv", - "id": "l2sw1_3", - "name": "l2sw1_3", - "type_connection": 0, - "vlan": 20 - } - ], - "position": { - "x": 138.04225158691406, - "y": 135 - } - }, - { - "classes": [ - "l2_switch" - ], - "config": { - "label": "l2sw2", - "stp": 1, - "type": "l2_switch" - }, - "data": { - "id": "l2sw2", - "label": "l2sw2" - }, - "interface": [ - { - "connect": "edge_lpjyyea3x4lvycgkjpr", - "id": "l2sw2_1", - "name": "l2sw2_1", - "type_connection": 1, - "vlan": [ - 20, - 10 - ] - }, - { - "connect": "edge_lpjyyjvhz88ynwh5vn", - "id": "l2sw2_2", - "name": "l2sw2_2", - "type_connection": 0, - "vlan": 10 - }, - { - "connect": "edge_lpjyym3q7fdprgccdwr", - "id": "l2sw2_3", - "name": "l2sw2_3", - "type_connection": 0, - "vlan": 20 - } - ], - "position": { - "x": 273.54225158691406, - "y": 138 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_1", - "type": "host" - }, - "data": { - "id": "host_1", - "label": "host_1" - }, - "interface": [ - { - "connect": "edge_lpjyynqdtnj124ie5p", - "id": "iface_10536533", - "ip": "192.168.1.1", - "name": "iface_10536533", - "netmask": 24 - } - ], - "position": { - "x": 81.04225158691406, - "y": 89 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_2", - "type": "host" - }, - "data": { - "id": "host_2", - "label": "host_2" - }, - "interface": [ - { - "connect": "edge_lpjyyooj2fsdasz4acv", - "id": "iface_37516226", - "ip": "192.168.1.2", - "name": "iface_37516226", - "netmask": 24 - } - ], - "position": { - "x": 80.04168626581315, - "y": 190.49773871559634 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_3", - "type": "host" - }, - "data": { - "id": "host_3", - "label": "host_3" - }, - "interface": [ - { - "connect": "edge_lpjyyjvhz88ynwh5vn", - "id": "iface_15216711", - "ip": "192.168.1.3", - "name": "iface_15216711", - "netmask": 24 - } - ], - "position": { - "x": 328.04225158691406, - "y": 77 - } - }, - { - "classes": [ - "host" - ], - "config": { - "default_gw": "", - "label": "host_4", - "type": "host" - }, - "data": { - "id": "host_4", - "label": "host_4" - }, - "interface": [ - { - "connect": "edge_lpjyym3q7fdprgccdwr", - "id": "iface_26582157", - "ip": "192.168.1.4", - "name": "iface_26582157", - "netmask": 24 - } - ], - "position": { - "x": 322.0433822291159, - "y": 197.00022612844037 - } - } - ], - "edges": [ - { - "data": { - "id": "edge_lpjyyea3x4lvycgkjpr", - "source": "l2sw1", - "target": "l2sw2" - } - }, - { - "data": { - "id": "edge_lpjyyjvhz88ynwh5vn", - "source": "host_3", - "target": "l2sw2" - } - }, - { - "data": { - "id": "edge_lpjyym3q7fdprgccdwr", - "source": "host_4", - "target": "l2sw2" - } - }, - { - "data": { - "id": "edge_lpjyynqdtnj124ie5p", - "source": "host_1", - "target": "l2sw1" - } - }, - { - "data": { - "id": "edge_lpjyyooj2fsdasz4acv", - "source": "host_2", - "target": "l2sw1" - } - } - ], - "jobs": [ - { - "arg_1": "192.168.1.3", - "host_id": "host_1", - "id": "4bc3522f2e824ba89a923d23dae9988b", - "job_id": 1, - "level": 1, - "print_cmd": "ping -c 1 192.168.1.3" - } - ], - "config": { - "zoom": 2, - "pan_x": 0, - "pan_y": 0 - }, - "pcap": [] -} \ No newline at end of file diff --git a/back/src/test_miminet_example_works.py b/back/src/test_miminet_example_works.py index 10c69a7a..0fcda4a8 100644 --- a/back/src/test_miminet_example_works.py +++ b/back/src/test_miminet_example_works.py @@ -28,10 +28,6 @@ def read_files(network_filename: str, answer_filename: str): ("switch_and_hub_network.json", "switch_and_hub_answer.json"), ("router_network.json", "router_answer.json"), ("first_and_last_ip_address_network.json", "first_and_last_ip_address_answer.json"), - ("vlan_access_network.json", "vlan_access_answer.json"), - ("vlan_trunk_network.json", "vlan_trunk_answer.json"), - ("vlan_with_stp_network.json", "vlan_with_stp_answer.json"), - ("vlan_with_access_switches_network.json", "vlan_with_access_switches_answer.json"), ] DINAMYC_PORT_FILE_NAMES = [ diff --git a/front/.dockerignore b/front/.dockerignore index a581dfe0..00bbcbb6 100644 --- a/front/.dockerignore +++ b/front/.dockerignore @@ -1,7 +1,6 @@ instance src/static/images -src/static/svg +src/static:/svg src/static/video src/static/pcaps src/static/assets -src/static/avatar diff --git a/front/dotenv-front-example b/front/.env similarity index 63% rename from front/dotenv-front-example rename to front/.env index ed0f5ded..e778db3c 100644 --- a/front/dotenv-front-example +++ b/front/.env @@ -1,3 +1,3 @@ -amqp_urls=amqp://user:password@rabbitmq/ +amqp_urls=amqp://guest:guest@rabbitmq/ backend_urls=redis://:password@redis/1 exchange_name=default_exchange diff --git a/front/docker-compose.staging.yml b/front/docker-compose.staging.yml deleted file mode 100644 index 3ac7c1d4..00000000 --- a/front/docker-compose.staging.yml +++ /dev/null @@ -1,42 +0,0 @@ -version: "3.9" - -services: - miminet: - build: - context: . - dockerfile: ./Dockerfile - container_name: miminet - restart: always - networks: - - miminet_network - env_file: - - .env - expose: - - 80 - volumes: - - databases:/app/instance - - ./src/static/images:/app/static/images - - ./src/static/svg:/app/static/svg - - ./src/static/avatar:/app/static/avatar - - ./src/static/video:/app/static/video - - ./src/static/pcaps:/app/static/pcaps - - ./src/static/assets:/app/static/assets - nginx: - container_name: nginx - image: nginx - restart: always - volumes: - - ./default.conf.template:/etc/nginx/templates/default.conf.template - ports: - - "80:80" - - "443:443" - networks: - - miminet_network - -volumes: - databases: - -networks: - miminet_network: - driver: bridge - \ No newline at end of file diff --git a/front/docker-compose.yml b/front/docker-compose.yml index 924a2636..a084cc76 100644 --- a/front/docker-compose.yml +++ b/front/docker-compose.yml @@ -18,8 +18,7 @@ services: volumes: - databases:/app/instance - ./src/static/images:/app/static/images - - ./src/static/svg:/app/static/svg - - ./src/static/avatar:/app/static/avatar + - ./src/static:/svg:/app/static/svg - ./src/static/video:/app/static/video - ./src/static/pcaps:/app/static/pcaps - ./src/static/assets:/app/static/assets @@ -30,13 +29,13 @@ services: volumes: - ./default.conf.template:/etc/nginx/templates/default.conf.template ports: - - "80:80" + - 80:80 networks: - miminet_network - + volumes: databases: - + networks: miminet_network: driver: bridge diff --git a/front/requirements.txt b/front/requirements.txt index 9345441f..6b76d223 100644 --- a/front/requirements.txt +++ b/front/requirements.txt @@ -1,4 +1,4 @@ -alembic==1.13.1 +alembic==1.13.0 beautifulsoup4==4.12.2 cachetools==5.3.2 certifi==2023.11.17 @@ -12,10 +12,10 @@ Flask-Migrate==4.0.5 Flask-SQLAlchemy==3.1.1 google==3.0.0 google-auth==2.25.2 -google-auth-oauthlib==1.2.0 -greenlet==3.0.3 +google-auth-oauthlib==1.1.0 +greenlet==3.0.2 idna==3.6 -importlib-metadata==7.0.1 +importlib-metadata==7.0.0 importlib-resources==6.1.1 ipaddress==1.0.23 itsdangerous==2.1.2 @@ -37,6 +37,6 @@ uuid==1.30 Werkzeug==3.0.1 zipp==3.17.0 celery==5.3.6 -redis==4.6.0 +redis==5.0.1 kombu==5.3.4 python-dotenv==1.0.0 diff --git a/front/src/celery_app.py b/front/src/celery_app.py index e368e454..d68d2de2 100644 --- a/front/src/celery_app.py +++ b/front/src/celery_app.py @@ -23,3 +23,8 @@ DEFAULT_APP_EXCHANGE = Exchange(EXCHANGE_NAME, type=EXCHANGE_TYPE) app.config_from_object(celeryconfig) + +with app.connection() as conn: + # Create queues and exchange + ch = conn.channel() + DEFAULT_APP_EXCHANGE.declare(channel=ch) diff --git a/front/src/miminet_auth.py b/front/src/miminet_auth.py index f157805c..39695e31 100644 --- a/front/src/miminet_auth.py +++ b/front/src/miminet_auth.py @@ -292,11 +292,11 @@ def vk_callback(): avatar_uri = os.urandom(16).hex() avatar_uri = avatar_uri + ".jpg" - if "photo_100" in vk_user["response"][0]: - r = requests.get( - vk_user["response"][0]["photo_100"], allow_redirects=True - ) - open("static/avatar/" + avatar_uri, "wb").write(r.content) + # if "photo_100" in vk_user["response"][0]: + # r = requests.get( + # vk_user["response"][0]["photo_100"], allow_redirects=True + # ) + # open('static/avatar/' + avatar_uri, 'wb').write(r.content) new_user = User( nick=vk_user["response"][0]["first_name"] diff --git a/front/src/miminet_host.py b/front/src/miminet_host.py index b984047b..eadef042 100644 --- a/front/src/miminet_host.py +++ b/front/src/miminet_host.py @@ -8,6 +8,8 @@ from miminet_model import Network, Simulate, db + + def job_id_generator(): return uuid.uuid4().hex @@ -17,6 +19,7 @@ def delete_job(): user = current_user network_guid = request.form.get("guid", type=str) jid = request.form.get("id", type=str) + dhcp = request.args.get('dhcp') if request.method != "POST": ret = {"message": "Неверный запрос"} @@ -31,13 +34,17 @@ def delete_job(): .filter(Network.author_id == user.id) .first() ) - if not net: ret = {"message": "Такая сеть не найдена"} return make_response(jsonify(ret), 400) jnet = json.loads(net.network) + if(dhcp=='1' or dhcp==1): + for n in jnet["nodes"]: + n['config']['dhcp']=0 + + jobs = jnet["jobs"] jj = list(filter(lambda x: x["id"] != jid, jobs)) jnet["jobs"] = jj @@ -51,7 +58,7 @@ def delete_job(): db.session.commit() - ret = {"message": "Команда удалена", "jobs": jnet["jobs"]} + ret = {"message": "Команда удалена", "jobs": jnet["jobs"], "nodes": jnet["nodes"]} return make_response(jsonify(ret), 200) @@ -173,6 +180,7 @@ def save_switch_config(): @login_required def save_host_config(): + db.session.commit() user = current_user ret = {} @@ -213,11 +221,12 @@ def save_host_config(): # Add job? job_id = int(request.form.get("config_host_job_select_field")) + if job_id: if not jnet.get("jobs"): jnet["jobs"] = [] - job_level = len(jnet["jobs"]) + job_level = len(jnet["jobs"])+1 if job_level < 20: # ping -c 1 (1 param) @@ -225,16 +234,14 @@ def save_host_config(): job_1_arg_1 = request.form.get("config_host_ping_c_1_ip") if job_1_arg_1: - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_1_arg_1, - "print_cmd": "ping -c 1 " + job_1_arg_1, - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_1_arg_1, + "print_cmd": "ping -c 1 " + job_1_arg_1, + }) else: ret.update({"warning": "Не указан IP адрес для команды ping"}) @@ -252,42 +259,33 @@ def save_host_config(): job_2_arg_1 = re.sub(r"[^\x00-\x7F]", "", job_2_arg_1) if not job_2_arg_2: - ret.update( - { - "warning": ( - 'Не указан IP адрес для команды "ping (с опциями)"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес для команды "ping (с опциями)"' + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_2_arg_2) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_2_arg_1, - "arg_2": job_2_arg_2, - "print_cmd": ( - "ping -c 1 " - + str(job_2_arg_1) - + " " - + str(job_2_arg_2) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_2_arg_1, + "arg_2": job_2_arg_2, + "print_cmd": ( + "ping -c 1 " + str(job_2_arg_1) + " " + str(job_2_arg_2) + ), + }) except Exception: - ret.update( - { - "warning": ( - 'IP адрес для команды "ping (с опциями)" указан' - " неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "ping (с опциями)" указан' + " неверно." + ) + }) # send UDP data if job_id == 3: @@ -308,67 +306,57 @@ def save_host_config(): job_3_arg_1 = 1000 if not job_3_arg_2: - ret.update( - { - "warning": ( - 'Не указан IP адрес для команды "Отправить данные' - ' (UDP)"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес для команды "Отправить данные' + ' (UDP)"' + ) + }) return make_response(jsonify(ret), 200) if not job_3_arg_3: - ret.update( - { - "warning": ( - 'Не указан порт для команды "Отправить данные (UDP)"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан порт для команды "Отправить данные (UDP)"' + ) + }) return make_response(jsonify(ret), 200) if int(job_3_arg_3) < 0 or int(job_3_arg_3) > 65535: - ret.update( - { - "warning": ( - 'Неверно указан порт для команды "Отправить данные' - ' (UDP)"' - ) - } - ) + ret.update({ + "warning": ( + 'Неверно указан порт для команды "Отправить данные' + ' (UDP)"' + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_3_arg_2) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": int(job_3_arg_1), - "arg_2": job_3_arg_2, - "arg_3": int(job_3_arg_3), - "print_cmd": ( - "send -s " - + str(job_3_arg_1) - + " -p udp " - + str(job_3_arg_2) - + ":" - + str(job_3_arg_3) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": int(job_3_arg_1), + "arg_2": job_3_arg_2, + "arg_3": int(job_3_arg_3), + "print_cmd": ( + "send -s " + + str(job_3_arg_1) + + " -p udp " + + str(job_3_arg_2) + + ":" + + str(job_3_arg_3) + ), + }) except Exception: - ret.update( - { - "warning": ( - 'IP адрес для команды "Отправить данные (UDP)" указан' - " неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "Отправить данные (UDP)" указан' + " неверно." + ) + }) # send TCP data if job_id == 4: @@ -389,68 +377,58 @@ def save_host_config(): job_4_arg_1 = 1000 if not job_4_arg_2: - ret.update( - { - "warning": ( - 'Не указан IP адрес для команды "Отправить данные' - ' (TCP)"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес для команды "Отправить данные' + ' (TCP)"' + ) + }) return make_response(jsonify(ret), 200) if not job_4_arg_3: - ret.update( - { - "warning": ( - 'Не указан порт для команды "Отправить данные (TCP)"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан порт для команды "Отправить данные (TCP)"' + ) + }) return make_response(jsonify(ret), 200) if int(job_4_arg_3) < 0 or int(job_4_arg_3) > 65535: - ret.update( - { - "warning": ( - 'Неверно указан порт для команды "Отправить данные' - ' (TCP)"' - ) - } - ) + ret.update({ + "warning": ( + 'Неверно указан порт для команды "Отправить данные' + ' (TCP)"' + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_4_arg_2) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": int(job_4_arg_1), - "arg_2": job_4_arg_2, - "arg_3": int(job_4_arg_3), - "print_cmd": ( - "send -s " - + str(job_4_arg_1) - + " -p tcp " - + str(job_4_arg_2) - + ":" - + str(job_4_arg_3) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": int(job_4_arg_1), + "arg_2": job_4_arg_2, + "arg_3": int(job_4_arg_3), + "print_cmd": ( + "send -s " + + str(job_4_arg_1) + + " -p tcp " + + str(job_4_arg_2) + + ":" + + str(job_4_arg_3) + ), + }) except Exception as e: print(e) - ret.update( - { - "warning": ( - 'IP адрес для команды "Отправить данные (TCP)" указан' - " неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "Отправить данные (TCP)" указан' + " неверно." + ) + }) # traceroute -n (with options) if job_id == 5: @@ -466,43 +444,37 @@ def save_host_config(): job_5_arg_1 = re.sub(r"[^\x00-\x7F]", "", job_5_arg_1) if not job_5_arg_2: - ret.update( - { - "warning": ( - 'Не указан IP адрес для команды "traceroute -n (с' - ' опциями)"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес для команды "traceroute -n (с' + ' опциями)"' + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_5_arg_2) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_5_arg_1, - "arg_2": job_5_arg_2, - "print_cmd": ( - "traceroute -n " - + str(job_5_arg_1) - + " " - + str(job_5_arg_2) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_5_arg_1, + "arg_2": job_5_arg_2, + "print_cmd": ( + "traceroute -n " + + str(job_5_arg_1) + + " " + + str(job_5_arg_2) + ), + }) except Exception: - ret.update( - { - "warning": ( - 'IP адрес для команды "traceroute -n (с опциями)"' - " указан неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "traceroute -n (с опциями)"' + " указан неверно." + ) + }) # Add route if job_id == 102: @@ -517,69 +489,107 @@ def save_host_config(): ) if not job_102_arg_1: - ret.update( - { - "warning": ( - 'Не указан IP адрес для команды "Добавить маршрут"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес для команды "Добавить маршрут"' + ) + }) return make_response(jsonify(ret), 200) if job_102_arg_2 < 0 or job_102_arg_2 > 32: - ret.update( - { - "warning": ( - 'Маска для команды "Добавить маршрут" указана неверно.' - " Допустимые значения от 0 до 32." - ) - } - ) + ret.update({ + "warning": ( + 'Маска для команды "Добавить маршрут" указана неверно.' + " Допустимые значения от 0 до 32." + ) + }) return make_response(jsonify(ret), 200) if not job_102_arg_3: - ret.update( - { - "warning": ( - 'Не указан IP адрес шлюза для команды "Добавить' - ' маршрут"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес шлюза для команды "Добавить' + ' маршрут"' + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_102_arg_1) socket.inet_aton(job_102_arg_3) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_102_arg_1, - "arg_2": job_102_arg_2, - "arg_3": job_102_arg_3, - "print_cmd": ( - "ip route add " - + str(job_102_arg_1) - + "/" - + str(job_102_arg_2) - + " via " - + str(job_102_arg_3) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_102_arg_1, + "arg_2": job_102_arg_2, + "arg_3": job_102_arg_3, + "print_cmd": ( + "ip route add " + + str(job_102_arg_1) + + "/" + + str(job_102_arg_2) + + " via " + + str(job_102_arg_3) + ), + }) except Exception as e: print(e) - ret.update( - { - "warning": ( - 'IP адрес для команды "Добавить маршрут" указан' - " неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "Добавить маршрут" указан' + " неверно." + ) + }) + + + + # Add dhcp + if job_id == 104: + node["config"]['dhcp'] = 1 + for n in nodes: + if n["data"]["id"]!= node["data"]["id"]: + n["config"]['dhcp'] = 2 + + job_104_arg_1 = (request.form.get('config_host_add_dhcp_ip_range_1_input_field'), request.form.get('config_host_add_dhcp_ip_range_2_input_field')) + job_104_arg_2 = int(request.form.get('config_host_add_dhcp_mask_input_field')) + job_104_arg_3 = request.form.get('config_host_add_dhcp_gateway_input_field') + + if not job_104_arg_1: + ret.update({'warning': 'Не указан диапазон IP адресов для команды "Добавить DHCP сервер"'}) + return make_response(jsonify(ret), 200) + + if job_104_arg_1[0] > job_104_arg_1[1]: + ret.update({'warning': 'Неверный диапазон IP адресов для команды "Добавить DHCP сервер"'}) + return make_response(jsonify(ret), 200) + + if job_104_arg_2 < 0 or job_104_arg_2 > 32: + ret.update({ + 'warning': 'Маска для команды "Добавить DHCP сервер" указана неверно. Допустимые значения от 0 до 32.' + }) + return make_response(jsonify(ret), 200) + + # if not job_104_arg_3: + # ret.update({'warning': 'Не указан IP адрес шлюза для команды "Добавить DHCP сервер"'}) + # return make_response(jsonify(ret), 200) + + try: + socket.inet_aton(job_104_arg_1[0]) + socket.inet_aton(job_104_arg_1[1]) + socket.inet_aton(job_104_arg_3) + jnet['jobs'].append({'id': job_id_generator(), + 'level': 0, + 'job_id': job_id, + 'host_id': node['data']['id'], + 'arg_1': f'{job_104_arg_1[0]},{job_104_arg_1[1]}', + 'arg_2': job_104_arg_2, + 'arg_3': job_104_arg_3, + 'print_cmd': f'dhcp ip_range: {job_104_arg_1[0]},{job_104_arg_1[1]}/{job_104_arg_2} gw:{job_104_arg_3}'}) + except Exception as e: + print(e) + ret.update({'warning': 'IP адрес для команды "Добавить DHCP сервер" указан неверно.'}) + # arp -s ip hw_addr if job_id == 103: @@ -594,45 +604,39 @@ def save_host_config(): "[0-9a-f]{2}([-:]?)[0-9a-f]{2}(\\1[0-9a-f]{2}){4}$", job_103_arg_2.lower(), ): - ret.update( - { - "warning": ( - 'MAC адрес для команды "Добавить запись в ARP-cache"' - " указан неверно." - ) - } - ) + ret.update({ + "warning": ( + 'MAC адрес для команды "Добавить запись в ARP-cache"' + " указан неверно." + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_103_arg_1) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_103_arg_1, - "arg_2": job_103_arg_2, - "print_cmd": ( - "arp -s " - + str(job_103_arg_1) - + " " - + str(job_103_arg_2) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_103_arg_1, + "arg_2": job_103_arg_2, + "print_cmd": ( + "arp -s " + + str(job_103_arg_1) + + " " + + str(job_103_arg_2) + ), + }) except Exception as e: print(e) - ret.update( - { - "warning": ( - 'IP адрес для команды "Добавить запись в ARP-cache"' - " указан неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "Добавить запись в ARP-cache"' + " указан неверно." + ) + }) return make_response(jsonify(ret), 200) # Set IP adresses @@ -686,6 +690,36 @@ def save_host_config(): node["config"]["label"] = host_label node["data"]["label"] = node["config"]["label"] + + #Saving checkbox state + host_checkbox_value = request.form.get("auto-ip") + + if(host_checkbox_value=='1'): + node["config"]["checkbox"] = 1 + #ask for ip + existing_job_105 = next((job for job in jnet.get("jobs", []) if job.get('job_id') == 105 and job.get('host_id') == node['data']['id']), None) + + if(existing_job_105 == None): + if not jnet.get("jobs"): + jnet["jobs"] = [] + + job_level = len(jnet["jobs"]) + try: + jnet['jobs'].append({'id': job_id_generator(), + 'level': job_level, + 'job_id': 105, + 'host_id': node['data']['id'], + 'arg_1': '', + 'arg_2': '', + 'arg_3': '', + 'print_cmd': ''}) + except Exception as e: + print(e) + ret.update({'warning': 'Произошла непредвиденная ошибка.'}) + else: + node["config"]["checkbox"] = 0 + + default_gw = request.form.get("config_host_default_gw") if default_gw: @@ -694,24 +728,26 @@ def save_host_config(): # ip = ipaddress.ip_address(default_gw) node["config"]["default_gw"] = default_gw except ValueError: - ret.update( - {"warning": "IP адрес маршрута по умолчанию указан неверно."} - ) + ret.update({ + "warning": "IP адрес маршрута по умолчанию указан неверно." + }) return make_response(jsonify(ret), 200) else: node["config"]["default_gw"] = "" - # Remove all previous simulations - sims = Simulate.query.filter(Simulate.network_id == net.id).all() - for s in sims: - db.session.delete(s) + # Remove all previous simulations IF NEEDE + reset_needed = request.args.get('reset_needed') + if(reset_needed=='1' or reset_needed==1): + sims = Simulate.query.filter(Simulate.network_id == net.id).all() + for s in sims: + db.session.delete(s) net.network = json.dumps(jnet) db.session.commit() - ret.update( - {"message": "Конфигурация обновлена", "nodes": nodes, "jobs": jnet["jobs"]} - ) + ret.update({ + "message": "Конфигурация обновлена", "nodes": nodes, "jobs": jnet["jobs"] + }) return make_response(jsonify(ret), 200) ret.update({"message": "Неверный запрос"}) @@ -772,20 +808,18 @@ def save_router_config(): job_1_arg_1 = request.form.get("config_router_ping_c_1_ip") if job_1_arg_1: - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_1_arg_1, - "print_cmd": "ping -c 1 " + job_1_arg_1, - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_1_arg_1, + "print_cmd": "ping -c 1 " + job_1_arg_1, + }) else: - ret.update( - {"warning": "Не указан IP адрес для команды ping"} - ) + ret.update({ + "warning": "Не указан IP адрес для команды ping" + }) # add IP/mask if job_id == 100: @@ -797,37 +831,31 @@ def save_router_config(): ) if not job_100_arg_1: - ret.update( - { - "warning": ( - 'Не указан интерфейс адрес для команды "Добавить IP' - ' адрес"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан интерфейс адрес для команды "Добавить IP' + ' адрес"' + ) + }) return make_response(jsonify(ret), 200) if not job_100_arg_2: - ret.update( - { - "warning": ( - 'Не указан IP адрес для команды "Добавить IP адрес"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес для команды "Добавить IP адрес"' + ) + }) return make_response(jsonify(ret), 200) if ( "config_router_add_ip_mask_mask_input_field" not in request.form ): - ret.update( - { - "warning": ( - 'Не указана маска для команды "Добавить IP адрес"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указана маска для команды "Добавить IP адрес"' + ) + }) return make_response(jsonify(ret), 200) job_100_arg_3 = int( @@ -837,46 +865,40 @@ def save_router_config(): ) if job_100_arg_3 < 0 or job_100_arg_3 > 32: - ret.update( - { - "warning": ( - 'Маска для команды "Добавить IP адрес" указана' - " неверно. Допустимые значения от 0 до 32." - ) - } - ) + ret.update({ + "warning": ( + 'Маска для команды "Добавить IP адрес" указана' + " неверно. Допустимые значения от 0 до 32." + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_100_arg_2) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_100_arg_1, - "arg_2": job_100_arg_2, - "arg_3": job_100_arg_3, - "print_cmd": ( - "ip addess add " - + str(job_100_arg_2) - + "/" - + str(job_100_arg_3) - + " dev " - + str(job_100_arg_1) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_100_arg_1, + "arg_2": job_100_arg_2, + "arg_3": job_100_arg_3, + "print_cmd": ( + "ip addess add " + + str(job_100_arg_2) + + "/" + + str(job_100_arg_3) + + " dev " + + str(job_100_arg_1) + ), + }) except Exception: - ret.update( - { - "warning": ( - 'IP адрес для команды "Добавить IP адрес" указан' - " неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "Добавить IP адрес" указан' + " неверно." + ) + }) # add NAT masquerade to the interface if job_id == 101: @@ -885,28 +907,24 @@ def save_router_config(): ) if not job_101_arg_1 or job_101_arg_1 == "0": - ret.update( - { - "warning": ( - 'Не указан интерфейс для команды "Включить NAT' - ' masquerade"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан интерфейс для команды "Включить NAT' + ' masquerade"' + ) + }) return make_response(jsonify(ret), 200) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_101_arg_1, - "print_cmd": ( - "add nat -o " + str(job_101_arg_1) + " -j masquerad" - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_101_arg_1, + "print_cmd": ( + "add nat -o " + str(job_101_arg_1) + " -j masquerad" + ), + }) # Add route if job_id == 102: @@ -921,68 +939,58 @@ def save_router_config(): ) if not job_102_arg_1: - ret.update( - { - "warning": ( - 'Не указан IP адрес для команды "Добавить маршрут"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес для команды "Добавить маршрут"' + ) + }) return make_response(jsonify(ret), 200) if job_102_arg_2 < 0 or job_102_arg_2 > 32: - ret.update( - { - "warning": ( - 'Маска для команды "Добавить маршрут" указана' - " неверно. Допустимые значения от 0 до 32." - ) - } - ) + ret.update({ + "warning": ( + 'Маска для команды "Добавить маршрут" указана' + " неверно. Допустимые значения от 0 до 32." + ) + }) return make_response(jsonify(ret), 200) if not job_102_arg_3: - ret.update( - { - "warning": ( - 'Не указан IP адрес шлюза для команды "Добавить' - ' маршрут"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес шлюза для команды "Добавить' + ' маршрут"' + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_102_arg_1) socket.inet_aton(job_102_arg_3) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_102_arg_1, - "arg_2": job_102_arg_2, - "arg_3": job_102_arg_3, - "print_cmd": ( - "ip route add " - + str(job_102_arg_1) - + "/" - + str(job_102_arg_2) - + " via " - + str(job_102_arg_3) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_102_arg_1, + "arg_2": job_102_arg_2, + "arg_3": job_102_arg_3, + "print_cmd": ( + "ip route add " + + str(job_102_arg_1) + + "/" + + str(job_102_arg_2) + + " via " + + str(job_102_arg_3) + ), + }) except Exception: - ret.update( - { - "warning": ( - 'IP адрес для команды "Добавить маршрут" указан' - " неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "Добавить маршрут" указан' + " неверно." + ) + }) # Set IP adresses iface_ids = request.form.getlist("config_router_iface_ids[]") @@ -1044,9 +1052,9 @@ def save_router_config(): # ip = ipaddress.ip_address(default_gw) node["config"]["default_gw"] = default_gw except ValueError: - ret.update( - {"warning": "IP адрес маршрута по умолчанию указан неверно."} - ) + ret.update({ + "warning": "IP адрес маршрута по умолчанию указан неверно." + }) return make_response(jsonify(ret), 200) else: node["config"]["default_gw"] = "" @@ -1059,9 +1067,9 @@ def save_router_config(): net.network = json.dumps(jnet) db.session.commit() - ret.update( - {"message": "Конфигурация обновлена", "nodes": nodes, "jobs": jnet["jobs"]} - ) + ret.update({ + "message": "Конфигурация обновлена", "nodes": nodes, "jobs": jnet["jobs"] + }) return make_response(jsonify(ret), 200) ret.update({"message": "Неверный запрос"}) @@ -1122,16 +1130,14 @@ def save_server_config(): job_1_arg_1 = request.form.get("config_server_ping_c_1_ip") if job_1_arg_1: - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_1_arg_1, - "print_cmd": "ping -c 1 " + job_1_arg_1, - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_1_arg_1, + "print_cmd": "ping -c 1 " + job_1_arg_1, + }) else: ret.update({"warning": "Не указан IP адрес для команды ping"}) @@ -1145,63 +1151,53 @@ def save_server_config(): ) if not job_200_arg_1: - ret.update( - { - "warning": ( - 'Не указан IP адрес для команды "Запустисть UDP сервер"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес для команды "Запустисть UDP сервер"' + ) + }) return make_response(jsonify(ret), 200) if not job_200_arg_2: - ret.update( - { - "warning": ( - 'Не указан порт для команды "Запустисть UDP сервер"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан порт для команды "Запустисть UDP сервер"' + ) + }) return make_response(jsonify(ret), 200) if int(job_200_arg_2) < 0 or int(job_200_arg_2) > 65535: - ret.update( - { - "warning": ( - 'Неверно указан порт для команды "Запустить UDP сервер"' - ) - } - ) + ret.update({ + "warning": ( + 'Неверно указан порт для команды "Запустить UDP сервер"' + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_200_arg_1) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_200_arg_1, - "arg_2": int(job_200_arg_2), - "print_cmd": ( - "nc -u " - + str(job_200_arg_1) - + " -l " - + str(job_200_arg_2) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_200_arg_1, + "arg_2": int(job_200_arg_2), + "print_cmd": ( + "nc -u " + + str(job_200_arg_1) + + " -l " + + str(job_200_arg_2) + ), + }) except Exception as e: print(e) - ret.update( - { - "warning": ( - 'IP адрес для команды "Запустить UDP сервер" указан' - " неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "Запустить UDP сервер" указан' + " неверно." + ) + }) # Start TCP server if job_id == 201: @@ -1213,63 +1209,50 @@ def save_server_config(): ) if not job_201_arg_1: - ret.update( - { - "warning": ( - 'Не указан IP адрес для команды "Запустисть TCP сервер"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан IP адрес для команды "Запустисть TCP сервер"' + ) + }) return make_response(jsonify(ret), 200) if not job_201_arg_2: - ret.update( - { - "warning": ( - 'Не указан порт для команды "Запустисть TCP сервер"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан порт для команды "Запустисть TCP сервер"' + ) + }) return make_response(jsonify(ret), 200) if int(job_201_arg_2) < 0 or int(job_201_arg_2) > 65535: - ret.update( - { - "warning": ( - 'Неверно указан порт для команды "Запустить TCP сервер"' - ) - } - ) + ret.update({ + "warning": ( + 'Неверно указан порт для команды "Запустить TCP сервер"' + ) + }) return make_response(jsonify(ret), 200) try: socket.inet_aton(job_201_arg_1) - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_201_arg_1, - "arg_2": int(job_201_arg_2), - "print_cmd": ( - "nc " - + str(job_201_arg_1) - + " -l " - + str(job_201_arg_2) - ), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_201_arg_1, + "arg_2": int(job_201_arg_2), + "print_cmd": ( + "nc " + str(job_201_arg_1) + " -l " + str(job_201_arg_2) + ), + }) except Exception as e: print(e) - ret.update( - { - "warning": ( - 'IP адрес для команды "Запустить TCP сервер" указан' - " неверно." - ) - } - ) + ret.update({ + "warning": ( + 'IP адрес для команды "Запустить TCP сервер" указан' + " неверно." + ) + }) # Block TCP/UDP port if job_id == 202: @@ -1278,46 +1261,38 @@ def save_server_config(): ) if not job_202_arg_1: - ret.update( - { - "warning": ( - 'Не указан порт для команды "Блокировать TCP/UDP порт"' - ) - } - ) + ret.update({ + "warning": ( + 'Не указан порт для команды "Блокировать TCP/UDP порт"' + ) + }) return make_response(jsonify(ret), 200) if int(job_202_arg_1) < 0 or int(job_202_arg_1) > 65535: - ret.update( - { - "warning": ( - 'Неверно указан порт для команды "Блокировать TCP/UDP' - ' порт"' - ) - } - ) + ret.update({ + "warning": ( + 'Неверно указан порт для команды "Блокировать TCP/UDP' + ' порт"' + ) + }) return make_response(jsonify(ret), 200) try: - jnet["jobs"].append( - { - "id": job_id_generator(), - "level": job_level, - "job_id": job_id, - "host_id": node["data"]["id"], - "arg_1": job_202_arg_1, - "print_cmd": "drop tcp/udp port " + str(job_202_arg_1), - } - ) + jnet["jobs"].append({ + "id": job_id_generator(), + "level": job_level, + "job_id": job_id, + "host_id": node["data"]["id"], + "arg_1": job_202_arg_1, + "print_cmd": "drop tcp/udp port " + str(job_202_arg_1), + }) except Exception as e: print(e) - ret.update( - { - "warning": ( - 'Ошибка при добавлении job "Блокировать TCP/UDP порт' - ) - } - ) + ret.update({ + "warning": ( + 'Ошибка при добавлении job "Блокировать TCP/UDP порт' + ) + }) # Set IP adresses iface_ids = request.form.getlist("config_server_iface_ids[]") @@ -1378,9 +1353,9 @@ def save_server_config(): # ip = ipaddress.ip_address(default_gw) node["config"]["default_gw"] = default_gw except ValueError: - ret.update( - {"warning": "IP адрес маршрута по умолчанию указан неверно."} - ) + ret.update({ + "warning": "IP адрес маршрута по умолчанию указан неверно." + }) return make_response(jsonify(ret), 200) else: node["config"]["default_gw"] = "" @@ -1393,9 +1368,9 @@ def save_server_config(): net.network = json.dumps(jnet) db.session.commit() - ret.update( - {"message": "Конфигурация обновлена", "nodes": nodes, "jobs": jnet["jobs"]} - ) + ret.update({ + "message": "Конфигурация обновлена", "nodes": nodes, "jobs": jnet["jobs"] + }) return make_response(jsonify(ret), 200) ret.update({"message": "Неверный запрос"}) diff --git a/front/src/miminet_model.py b/front/src/miminet_model.py index 27896952..9dde51d9 100644 --- a/front/src/miminet_model.py +++ b/front/src/miminet_model.py @@ -56,7 +56,7 @@ class Network(db.Model): # type:ignore[name-defined] class Simulate(db.Model): # type:ignore[name-defined] id = db.Column(db.Integer, primary_key=True) network_id = db.Column(db.Integer, db.ForeignKey("network.id"), nullable=False) - task_guid = db.Column(db.String(512), nullable=True, default="") + task_guid = db.Column(db.String(512), nullable=False) # Do we finish? (False - new, True - simulation is finished) ready = db.Column(db.Boolean, default=False) packets = db.Column(db.UnicodeText, nullable=True, default="") diff --git a/front/src/miminet_simulation.py b/front/src/miminet_simulation.py index 9d3c8b67..6c83b78b 100644 --- a/front/src/miminet_simulation.py +++ b/front/src/miminet_simulation.py @@ -7,6 +7,7 @@ from flask import jsonify, make_response, redirect, request, url_for from flask_login import current_user, login_required from miminet_model import Network, Simulate, SimulateLog, db +from redis import RedisError @login_required @@ -40,11 +41,9 @@ def run_simulation(): db.session.commit() task_id = str(uuid.uuid4()) - simlog = SimulateLog( author_id=net.author_id, network=net.network, network_guid=net.guid ) - sim = Simulate(network_id=net.id, packets="", task_guid=task_id) db.session.add(sim) db.session.add(simlog) @@ -61,7 +60,7 @@ def run_simulation(): task_id=task_id, ) - ret = {"simulation_id": task_id} + ret = {"simulation_id": sim.id} return make_response(jsonify(ret), 201) return redirect(url_for("home")) @@ -69,22 +68,44 @@ def run_simulation(): @login_required def check_simulation(): - task_guid = request.args.get("simulation_id", type=str) + # user = current_user + simulation_id = request.args.get("simulation_id", type=int) network_guid = request.args.get("network_guid", type=str) - - if not task_guid: - ret = {"message": "Пропущен параметр task_id."} + if not simulation_id: + ret = {"message": "Пропущен параметр simulation_id."} return make_response(jsonify(ret), 400) if not network_guid: ret = {"message": "Пропущен параметр network_guid."} return make_response(jsonify(ret), 400) + sim = Simulate.query.filter(Simulate.id == simulation_id).first() + + if not sim: + ret = {"message": "Нет такой симуляции"} + return make_response(jsonify(ret), 400) + + # Check for a pcaps + pcap_dir = "static/pcaps/" + network_guid + + if sim.ready: + pcaps = [] + if os.path.exists(pcap_dir): + pcaps = [ + os.path.splitext(f)[0] + for f in os.listdir(pcap_dir) + if os.path.isfile(os.path.join(pcap_dir, f)) + ] + + ret = {"message": "Симуляция завершена", "packets": sim.packets, "pcaps": pcaps} + return make_response(jsonify(ret), 200) + try: - task_result = AsyncResult(task_guid) + task_id = sim.task_guid + task_result = AsyncResult(task_id) if task_result.status != "SUCCESS" and task_result.status != "FAILURE": return make_response(jsonify({"message": "Сеть в процессе симуляции"}), 210) - except Exception: + except RedisError: return make_response( jsonify({"message": "Ошибка при подключении к backend серверу"}), 400 ) @@ -96,26 +117,16 @@ def check_simulation(): jsonify({"message": "Ошибка на стороне ipmininet worker"}), 400 ) - packets, binary_pcaps = result + packets, binary_pcaps, host_ip = result + + # Костыль для того, чтобы при одновременной обработке + # одной и той же сети они не ждали результата при разных task_id, + # а обращались к готовому - # Add result main storage - sim = Simulate.query.filter(Simulate.task_guid == task_guid).first() - simlog = ( - SimulateLog.query.filter(SimulateLog.network_guid == network_guid) - .order_by(SimulateLog.id.desc()) - .first() - ) sim.packets = packets sim.ready = True - if simlog: - if not simlog.ready: - simlog.ready = True - db.session.commit() - # Check for a pcaps - pcap_dir = "static/pcaps/" + network_guid - if not os.path.exists(pcap_dir): os.makedirs(pcap_dir) else: @@ -128,6 +139,6 @@ def check_simulation(): with open(pcap_dir + "/" + name + ".pcap", "wb") as file: file.write(pcap) - ret = {"message": "Симуляция завершена", "packets": packets, "pcaps": pcaps} + ret = {"message": "Симуляция завершена", "packets": packets, "pcaps": pcaps, "host_ip": host_ip} return make_response(jsonify(ret), 200) diff --git a/front/src/static/config.js b/front/src/static/config.js index ad05e5e4..240aaa48 100644 --- a/front/src/static/config.js +++ b/front/src/static/config.js @@ -1,10 +1,9 @@ -$('#config_host').load( "config_host.html" ); -$('#config_hub').load( "config_hub.html" ); -$('#config_switch').load( "config_switch.html" ); -$('#config_edge').load( "config_edge.html" ); -$('#config_router').load( "config_router.html" ); -$('#config_server').load( "config_server.html" ); -$('#config_vlan').load( "config_vlan.html" ); +$('#config_host').load("config_host.html"); +$('#config_hub').load("config_hub.html"); +$('#config_switch').load("config_switch.html"); +$('#config_edge').load("config_edge.html"); +$('#config_router').load("config_router.html"); +$('#config_server').load("config_server.html"); const config_content_id = "#config_content"; const config_main_form_id = "#config_main_form"; @@ -14,12 +13,11 @@ const config_hub_main_form_id = "#config_hub_main_form"; const config_switch_main_form_id = "#config_switch_main_form"; const config_edge_main_form_id = "#config_edge_main_form"; -const ClearConfigForm = function(text){ +const ClearConfigForm = function (text) { let txt = '' - if (!text) - { + if (!text) { txt = 'Тут будут настройки устройств. Выделите любое на схеме.'; } @@ -28,23 +26,23 @@ const ClearConfigForm = function(text){ $(config_content_id).append('

' + txt + '

'); } -const HostWarningMsg = function(msg){ +const HostWarningMsg = function (msg) { let warning_msg = ''; + msg + ''; $(config_content_id).prepend(warning_msg); } -const ServerWarningMsg = function(msg){ +const ServerWarningMsg = function (msg) { let warning_msg = ''; + msg + ''; $(config_content_id).prepend(warning_msg); } -const ConfigHostForm = function(host_id){ +const ConfigHostForm = function (host_id) { let form = document.getElementById('config_main_form_script').innerHTML; // Clear all child @@ -54,10 +52,10 @@ const ConfigHostForm = function(host_id){ $(config_content_id).append(form); // Set host_id - $('#host_id').val( host_id ); - $('#net_guid').val( network_guid ); + $('#host_id').val(host_id); + $('#net_guid').val(network_guid); - $('#config_main_form_submit_button').click(function(event) { + $('#config_main_form_submit_button').click(function (event) { event.preventDefault(); let data = $('#config_main_form').serialize(); @@ -72,7 +70,8 @@ const ConfigHostForm = function(host_id){ }); } -const ConfigRouterForm = function(router_id){ + +const ConfigRouterForm = function (router_id) { let form = document.getElementById('config_router_main_form_script').innerHTML; // Clear all child @@ -82,10 +81,10 @@ const ConfigRouterForm = function(router_id){ $(config_content_id).append(form); // Set host_id - $('#router_id').val( router_id ); - $('#net_guid').val( network_guid ); + $('#router_id').val(router_id); + $('#net_guid').val(network_guid); - $('#config_router_main_form_submit_button').click(function(event) { + $('#config_router_main_form_submit_button').click(function (event) { event.preventDefault(); let data = $('#config_main_form').serialize(); @@ -100,7 +99,7 @@ const ConfigRouterForm = function(router_id){ }); } -const ConfigServerForm = function(server_id){ +const ConfigServerForm = function (server_id) { let form = document.getElementById('config_server_main_form_script').innerHTML; // Clear all child @@ -110,10 +109,10 @@ const ConfigServerForm = function(server_id){ $(config_content_id).append(form); // Set host_id - $('#server_id').val( server_id ); - $('#net_guid').val( network_guid ); + $('#server_id').val(server_id); + $('#net_guid').val(network_guid); - $('#config_server_main_form_submit_button').click(function(event) { + $('#config_server_main_form_submit_button').click(function (event) { event.preventDefault(); let data = $('#config_main_form').serialize(); @@ -128,7 +127,7 @@ const ConfigServerForm = function(server_id){ }); } -const ConfigHubForm = function(hub_id){ +const ConfigHubForm = function (hub_id) { var form = document.getElementById('config_hub_main_form_script').innerHTML; // Clear all child @@ -138,10 +137,10 @@ const ConfigHubForm = function(hub_id){ $(config_content_id).append(form); // Set host_id - $('#hub_id').val( hub_id ); - $('#net_guid').val( network_guid ); + $('#hub_id').val(hub_id); + $('#net_guid').val(network_guid); - $('#config_hub_main_form_submit_button').click(function(event) { + $('#config_hub_main_form_submit_button').click(function (event) { event.preventDefault(); let data = $('#config_hub_main_form').serialize(); @@ -156,7 +155,7 @@ const ConfigHubForm = function(hub_id){ }); } -const ConfigSwitchForm = function(switch_id){ +const ConfigSwitchForm = function (switch_id) { var form = document.getElementById('config_switch_main_form_script').innerHTML; // Clear all child @@ -170,10 +169,10 @@ const ConfigSwitchForm = function(switch_id){ // $(needhref).attr('href',url) // Set host_id - $('#switch_id').val( switch_id ); - $('#net_guid').val( network_guid ); + $('#switch_id').val(switch_id); + $('#net_guid').val(network_guid); - $('#config_switch_main_form_submit_button').click(function(event) { + $('#config_switch_main_form_submit_button').click(function (event) { event.preventDefault(); let data = $('#config_switch_main_form').serialize(); @@ -188,7 +187,7 @@ const ConfigSwitchForm = function(switch_id){ }); } -const ConfigHubName = function(hostname){ +const ConfigHubName = function (hostname) { var text = document.getElementById('config_hub_name_script').innerHTML; @@ -196,7 +195,7 @@ const ConfigHubName = function(hostname){ $('#config_hub_name').val(hostname); } -const ConfigEdgeForm = function(edge_id){ +const ConfigEdgeForm = function (edge_id) { var form = document.getElementById('config_edge_main_form_script').innerHTML; @@ -207,11 +206,11 @@ const ConfigEdgeForm = function(edge_id){ $(config_content_id).append(form); // Set host_id - $('#edge_id').val( edge_id ); - $('#net_guid').val( network_guid ); + $('#edge_id').val(edge_id); + $('#net_guid').val(network_guid); } -const ConfigEdgeEndpoints = function(edge_source, edge_target){ +const ConfigEdgeEndpoints = function (edge_source, edge_target) { var text = document.getElementById('config_edge_edpoint_script').innerHTML; @@ -220,7 +219,7 @@ const ConfigEdgeEndpoints = function(edge_source, edge_target){ $('#edge_target').val(edge_target); } -const ConfigSwitchName = function(hostname){ +const ConfigSwitchName = function (hostname) { var text = document.getElementById('config_switch_name_script').innerHTML; @@ -228,7 +227,7 @@ const ConfigSwitchName = function(hostname){ $('#config_switch_name').val(hostname); } -const ConfigSwtichSTP = function(stp){ +const ConfigSwtichSTP = function (stp) { var elem = document.getElementById('config_switch_checkbox_stp_script'); $(elem.innerHTML).insertBefore('#config_switch_main_form_submit_button'); @@ -238,16 +237,16 @@ const ConfigSwtichSTP = function(stp){ } var warning_text = document.getElementById('config_switch_warning_stp_script').innerHTML; - $('#config_switch_stp').on('click', function(){ - if ($(this).is(':checked')){ + $('#config_switch_stp').on('click', function () { + if ($(this).is(':checked')) { $(warning_text).insertBefore('#config_switch_main_form_submit_button'); } else { $('#config_warning_stp').remove(); } - }); + }); } -const SharedConfigHostForm = function(host_id){ +const SharedConfigHostForm = function (host_id) { var form = document.getElementById('config_main_form_script').innerHTML; // Clear all child @@ -257,12 +256,12 @@ const SharedConfigHostForm = function(host_id){ $(config_content_id).append(form); // Set host_id - $('#host_id').val( host_id ); - $('#net_guid').val( network_guid ); + $('#host_id').val(host_id); + $('#net_guid').val(network_guid); $('#config_main_form_submit_button').prop('disabled', true); } -const SharedConfigRouterForm = function(router_id){ +const SharedConfigRouterForm = function (router_id) { var form = document.getElementById('config_router_main_form_script').innerHTML; // Clear all child @@ -272,13 +271,13 @@ const SharedConfigRouterForm = function(router_id){ $(config_content_id).append(form); // Set host_id - $('#router_id').val( router_id ); - $('#net_guid').val( network_guid ); + $('#router_id').val(router_id); + $('#net_guid').val(network_guid); $('#config_router_main_form_submit_button').prop('disabled', true); } -const SharedConfigServerForm = function(router_id){ +const SharedConfigServerForm = function (router_id) { var form = document.getElementById('config_server_main_form_script').innerHTML; // Clear all child @@ -288,13 +287,13 @@ const SharedConfigServerForm = function(router_id){ $(config_content_id).append(form); // Set host_id - $('#router_id').val( router_id ); - $('#net_guid').val( network_guid ); + $('#router_id').val(router_id); + $('#net_guid').val(network_guid); $('#config_server_main_form_submit_button').prop('disabled', true); } -const SharedConfigHubForm = function(hub_id){ +const SharedConfigHubForm = function (hub_id) { var form = document.getElementById('config_hub_main_form_script').innerHTML; // Clear all child @@ -305,7 +304,7 @@ const SharedConfigHubForm = function(hub_id){ $('#config_hub_main_form_submit_button').prop('disabled', true); } -const SharedConfigSwitchForm = function(switch_id){ +const SharedConfigSwitchForm = function (switch_id) { var form = document.getElementById('config_switch_main_form_script').innerHTML; // Clear all child @@ -316,7 +315,7 @@ const SharedConfigSwitchForm = function(switch_id){ $('#config_switch_main_form_submit_button').prop('disabled', true); } -const ConfigHostName = function(hostname){ +const ConfigHostName = function (hostname) { var text = document.getElementById('config_host_name_script').innerHTML; @@ -324,7 +323,7 @@ const ConfigHostName = function(hostname){ $('#config_host_name').val(hostname); } -const ConfigRouterName = function(hostname){ +const ConfigRouterName = function (hostname) { var text = document.getElementById('config_router_name_script').innerHTML; @@ -332,7 +331,7 @@ const ConfigRouterName = function(hostname){ $('#config_router_name').val(hostname); } -const ConfigServerName = function(hostname){ +const ConfigServerName = function (hostname) { var text = document.getElementById('config_server_name_script').innerHTML; @@ -340,12 +339,41 @@ const ConfigServerName = function(hostname){ $('#config_server_name').val(hostname); } -const ConfigHostInterface = function(name, ip, netmask, connected_to){ +const ConfigHostCheckbox = function(name, checkbox) { + let elem = document.getElementById('config_host_checkbox_script').innerHTML; + $(elem).insertBefore('#config_host_ip_label_example'); + $(elem).insertBefore('#config_host_ip_label_' + name); + + $("#auto-ip").prop('checked', (checkbox == 1) ? true : false); + const disableInputs = [$('#config_host_ip_' + name), $('#config_host_mask_' + name), $('#config_host_default_gw')] + + $("#auto-ip").on("change", function () { + if ($(this).is(':checked')) { + $('#config_host_ip_example').removeAttr("hidden"); + $('#config_host_mask_example').removeAttr("hidden"); + $('#config_host_default_gw_holder').removeAttr("hidden"); + disableInputs.forEach(input => { + input.attr('hidden', 'true'); + }); + } + else { + disableInputs.forEach(input => { + input.removeAttr('hidden'); + }); + $('#config_host_default_gw_holder').attr("hidden", true); + $('#config_host_ip_example').attr("hidden", true); + $('#config_host_mask_example').attr("hidden", true); + } + + }); +} + +const ConfigHostInterface = function (name, ip, netmask, checkbox, connected_to) { let elem = document.getElementById('config_host_interface_script'); let eth = jQuery.extend({}, elem); - if (!name){ + if (!name) { return; } @@ -356,23 +384,62 @@ const ConfigHostInterface = function(name, ip, netmask, connected_to){ var text = eth.innerHTML; - $(text).insertBefore('#config_main_form_submit_button'); + $(text).insertBefore('#gw_div'); $('').insertBefore('#config_host_iface_name_' + name); $('#config_host_iface_name_' + name).attr("placeholder", connected_to); - $('#config_host_ip_' + name).val(ip); - $('#config_host_mask_' + name).val(netmask); - if (pcaps.includes(name)){ - $('#config_host_iface_name_label_' + name).html('Линк к (pcap)'); + const disableInputs = [$('#config_host_ip_' + name), $('#config_host_mask_' + name), $('#config_host_default_gw')] + + var ip_holder = $('', { + type: 'text', + class: 'form-control form-control-sm w-75', + id: 'config_host_ip_example', + name: 'config_host_ip_example', + placeholder: ip, + disabled: true + }); + + var mask_holder = $('', { + type: 'number', + class: 'px-2 form-control form-control-sm w-25', + id: 'config_host_mask_example', + name: 'config_host_mask_example', + placeholder: netmask, + disabled: true + }); + ip_holder.insertBefore($('#config_host_ip_' + name)); + mask_holder.insertBefore($('#config_host_mask_' + name)); + $('#config_host_ip_example').attr("hidden", true); + $('#config_host_mask_example').attr("hidden", true); + + if (checkbox == 1) { + $('#config_host_ip_' + name).val(ip); + $('#config_host_ip_' + name).attr('hidden', true); + $('#config_host_mask_' + name).val(netmask); + $('#config_host_mask_' + name).attr('hidden', true); + $('#config_host_ip_example').attr("placeholder", ip); + $('#config_host_mask_example').attr("placeholder", netmask); + $('#config_host_ip_example').removeAttr("hidden"); + $('#config_host_mask_example').removeAttr("hidden"); + } else { + $('#config_host_ip_example').attr("hidden", true); + $('#config_host_mask_example').attr("hidden", true); + $('#config_host_ip_' + name).val(ip).removeAttr('hidden'); + $('#config_host_mask_' + name).val(netmask).removeAttr('hidden'); } + + if (pcaps.includes(name)) { + $('#config_host_iface_name_label_' + name).html('Линк к (pcap)'); + } + } -const ConfigRouterInterface = function(name, ip, netmask, connected_to){ +const ConfigRouterInterface = function (name, ip, netmask, connected_to) { let elem = document.getElementById('config_router_interface_script'); let eth = jQuery.extend({}, elem); - if (!name){ + if (!name) { return; } @@ -390,12 +457,12 @@ const ConfigRouterInterface = function(name, ip, netmask, connected_to){ $('#config_router_mask_' + name).val(netmask); } -const ConfigServerInterface = function(name, ip, netmask, connected_to){ +const ConfigServerInterface = function (name, ip, netmask, connected_to) { let elem = document.getElementById('config_server_interface_script'); let eth = jQuery.extend({}, elem); - if (!name){ + if (!name) { return; } @@ -412,23 +479,22 @@ const ConfigServerInterface = function(name, ip, netmask, connected_to){ $('#config_server_ip_' + name).val(ip); $('#config_server_mask_' + name).val(netmask); - if (pcaps.includes(name)){ - $('#config_server_iface_name_label_' + name).html('Линк к (pcap)'); + if (pcaps.includes(name)) { + $('#config_server_iface_name_label_' + name).html('Линк к (pcap)'); } } -const ConfigHostJobOnChange = function(evnt){ +const ConfigHostJobOnChange = function (evnt) { let elem = null; let host_job_list = null; - switch(evnt.target.value) - { + switch (evnt.target.value) { case '1': elem = document.getElementById('config_host_ping_c_1_script').innerHTML; host_job_list = document.getElementById('config_host_job_list'); - if (!elem || !host_job_list){ + if (!elem || !host_job_list) { return; } @@ -440,7 +506,7 @@ const ConfigHostJobOnChange = function(evnt){ elem = document.getElementById('config_host_ping_with_options_script').innerHTML; host_job_list = document.getElementById('config_host_job_list'); - if (!elem || !host_job_list){ + if (!elem || !host_job_list) { return; } @@ -452,7 +518,7 @@ const ConfigHostJobOnChange = function(evnt){ elem = document.getElementById('config_host_send_udp_data_script').innerHTML; host_job_list = document.getElementById('config_host_job_list'); - if (!elem || !host_job_list){ + if (!elem || !host_job_list) { return; } @@ -464,7 +530,7 @@ const ConfigHostJobOnChange = function(evnt){ elem = document.getElementById('config_host_send_tcp_data_script').innerHTML; host_job_list = document.getElementById('config_host_job_list'); - if (!elem || !host_job_list){ + if (!elem || !host_job_list) { return; } @@ -476,7 +542,7 @@ const ConfigHostJobOnChange = function(evnt){ elem = document.getElementById('config_host_traceroute_with_options_script').innerHTML; host_job_list = document.getElementById('config_host_job_list'); - if (!elem || !host_job_list){ + if (!elem || !host_job_list) { return; } @@ -488,7 +554,7 @@ const ConfigHostJobOnChange = function(evnt){ elem = document.getElementById('config_host_add_route_script').innerHTML; host_job_list = document.getElementById('config_host_job_list'); - if (!elem || !host_job_list){ + if (!elem || !host_job_list) { return; } @@ -496,11 +562,28 @@ const ConfigHostJobOnChange = function(evnt){ $(elem).insertBefore(host_job_list); break; + case '104': + elem = document.getElementById('config_host_add_dhcp_script').innerHTML; + host_job_list = document.getElementById('config_host_job_list'); + + if (!elem || !host_job_list) { + return; + } + + $('div[name="config_host_select_input"]').remove(); + $(elem).insertBefore(host_job_list); + break; + + case '105': + $('div[name="config_host_select_input"]').remove(); + + break; + case '103': elem = document.getElementById('config_host_add_arp_cache_script').innerHTML; host_job_list = document.getElementById('config_host_job_list'); - if (!elem || !host_job_list){ + if (!elem || !host_job_list) { return; } @@ -518,13 +601,12 @@ const ConfigHostJobOnChange = function(evnt){ } -const ConfigHostJob = function(host_jobs, shared=0) -{ +const ConfigHostJob = function (host_jobs, shared = 0) { let elem = document.getElementById('config_host_job_script').innerHTML; let host_id = document.getElementById('host_id'); - if (!elem || !host_id){ + if (!elem || !host_id) { return; } @@ -534,58 +616,95 @@ const ConfigHostJob = function(host_jobs, shared=0) document.getElementById('config_host_job_select_field').addEventListener('change', ConfigHostJobOnChange); elem = document.getElementById('config_host_job_list_script').innerHTML; - if (!elem){ + if (!elem) { return; } $(elem).insertBefore(host_id); // Print jobs if we have - if (!host_jobs) - { + if (!host_jobs) { return; } $.each(host_jobs, function (i) { let jid = host_jobs[i].id; - if (i == 0){ + if (i == 0) { + if (host_jobs[i].print_cmd == '') { + return + } + $('#config_host_job_list').append(''); } elem = document.getElementById('config_host_job_list_elem_script'); - if (!elem){ + if (!elem) { return; } + if (host_jobs[i].print_cmd == '') { + return + } + + let job_elem = jQuery.extend({}, elem); job_elem.innerHTML = job_elem.innerHTML.replace(/config_host_job_delete/g, 'config_host_job_delete_' + jid); job_elem.innerHTML = job_elem.innerHTML.replace(/justify-content-between align-items-center\">/, 'justify-content-between align-items-center\">' + host_jobs[i].print_cmd + ''); let text = job_elem.innerHTML; //$(text).insertBefore(host_id); + $('#config_host_job_list').append(text); - $('#config_host_job_delete_' + jid).click(function(event) { + $('#config_host_job_delete_' + jid).click(function (event) { event.preventDefault(); - if (!shared){ - DeleteJobFromHost(host_id.value, jid, network_guid); + if (!shared) { + if (host_jobs[i].print_cmd.includes("dhcp")) { + DeleteJobFromHost(host_id.value, jid, network_guid, 1); + } + else{ + DeleteJobFromHost(host_id.value, jid, network_guid); + } } }); }); } -const ConfigHostGateway = function(gw){ - var text = document.getElementById('config_host_default_gw_script').innerHTML; +const ConfigHostGateway = function (gw, checkbox = 0) { + var text = document.getElementById('config_host_default_gw_script').innerHTML; $(text).insertBefore('#config_main_form_submit_button'); - $('#config_host_default_gw').val(gw); + + var gw_holder = $('', { + type: 'text', + class: 'form-control form-control-sm', + id: 'config_host_default_gw_holder', + name: 'config_host_default_gw_holder', + placeholder: gw, + disabled: true + }); + gw_holder.insertBefore($('#config_host_default_gw')); + $('#config_host_default_gw_holder').attr('hidden',true); + + if (checkbox == 1) { + $('#config_host_default_gw_holder').attr("placeholder", gw); + $('#config_host_default_gw_holder').removeAttr('hidden'); + $('#config_host_default_gw').val(gw); + $('#config_host_default_gw').attr('hidden',true); + } + else{ + $('#config_host_default_gw_holder').attr('hidden',true); + $('#config_host_default_gw').val(gw); + $('#config_host_default_gw').removeAttr('hidden'); + } + } -const ConfigRouterGateway = function(gw){ +const ConfigRouterGateway = function (gw) { var text = document.getElementById('config_router_default_gw_script').innerHTML; @@ -593,7 +712,7 @@ const ConfigRouterGateway = function(gw){ $('#config_router_default_gw').val(gw); } -const ConfigServerGateway = function(gw){ +const ConfigServerGateway = function (gw) { var text = document.getElementById('config_server_default_gw_script').innerHTML; @@ -601,15 +720,14 @@ const ConfigServerGateway = function(gw){ $('#config_server_default_gw').val(gw); } -const ConfigRouterJobOnChange = function(evnt){ +const ConfigRouterJobOnChange = function (evnt) { let elem = null; let router_job_list = null; let n = null; let router_id = null; - switch(evnt.target.value) - { + switch (evnt.target.value) { case '0': $('div[name="config_router_select_input"]').remove(); break; @@ -618,7 +736,7 @@ const ConfigRouterJobOnChange = function(evnt){ elem = document.getElementById('config_router_ping_c_1_script').innerHTML; router_job_list = document.getElementById('config_router_job_list'); - if (!elem || !router_job_list){ + if (!elem || !router_job_list) { return; } @@ -630,7 +748,7 @@ const ConfigRouterJobOnChange = function(evnt){ elem = document.getElementById('config_router_add_ip_mask_script').innerHTML; router_job_list = document.getElementById('config_router_job_list'); - if (!elem || !router_job_list){ + if (!elem || !router_job_list) { console.log("config_router_add_ip_mask_script или config_router_job_list не найден."); return; } @@ -639,7 +757,7 @@ const ConfigRouterJobOnChange = function(evnt){ $(elem).insertBefore(router_job_list); router_id = $('#router_id')[0].value; - if (!router_id){ + if (!router_id) { console.log("Не нашел router_id"); return } @@ -650,54 +768,54 @@ const ConfigRouterJobOnChange = function(evnt){ return; } - if(!n.interface.length){ + if (!n.interface.length) { console.log("Интерфейсов нет, нечего настраивать"); return; } - if(n.interface.length !== 1){ + if (n.interface.length !== 1) { $('#config_router_add_ip_mask_iface_select_field').append(''); } $.each(n.interface, function (i) { let iface_id = n.interface[i].id; - if (!iface_id){ + if (!iface_id) { return; } let connect_id = n.interface[i].connect; - if (!connect_id){ + if (!connect_id) { return; } let edge = edges.find(e => e.data.id === connect_id); - if (!edge){ + if (!edge) { return; } let source_host = edge.data.source; let target_host = edge.data.target; - if (!source_host || !target_host){ + if (!source_host || !target_host) { return; } let connected_to = target_host; - if (n.data.id === target_host){ + if (n.data.id === target_host) { connected_to = source_host; } let connected_to_host = nodes.find(n => n.data.id === connected_to); let connected_to_host_label = "Unknown"; - if (connected_to_host){ + if (connected_to_host) { connected_to_host_label = connected_to_host.data.label; } - $('#config_router_add_ip_mask_iface_select_field').append(''); + $('#config_router_add_ip_mask_iface_select_field').append(''); }); break; @@ -706,7 +824,7 @@ const ConfigRouterJobOnChange = function(evnt){ elem = document.getElementById('config_router_add_nat_masquerade_script').innerHTML; router_job_list = document.getElementById('config_router_job_list'); - if (!elem || !router_job_list){ + if (!elem || !router_job_list) { return; } @@ -714,7 +832,7 @@ const ConfigRouterJobOnChange = function(evnt){ $(elem).insertBefore(router_job_list); router_id = $('#router_id')[0].value; - if (!router_id){ + if (!router_id) { console.log("Не нашел router_id"); return } @@ -725,12 +843,12 @@ const ConfigRouterJobOnChange = function(evnt){ return; } - if(!n.interface.length){ + if (!n.interface.length) { console.log("Нет интерфейсов, нечего настраивать."); return; } - if(n.interface.length === 1){ + if (n.interface.length === 1) { $('#config_router_add_nat_masquerade_iface_select_field').append(''); return; } @@ -740,42 +858,42 @@ const ConfigRouterJobOnChange = function(evnt){ $.each(n.interface, function (i) { let iface_id = n.interface[i].id; - if (!iface_id){ + if (!iface_id) { return; } let connect_id = n.interface[i].connect; - if (!connect_id){ + if (!connect_id) { return; } let edge = edges.find(e => e.data.id === connect_id); - if (!edge){ + if (!edge) { return; } let source_host = edge.data.source; let target_host = edge.data.target; - if (!source_host || !target_host){ + if (!source_host || !target_host) { return; } let connected_to = target_host; - if (n.data.id === target_host){ + if (n.data.id === target_host) { connected_to = source_host; } let connected_to_host = nodes.find(n => n.data.id === connected_to); let connected_to_host_label = "Unknown"; - if (connected_to_host){ + if (connected_to_host) { connected_to_host_label = connected_to_host.data.label; } - $('#config_router_add_nat_masquerade_iface_select_field').append(''); + $('#config_router_add_nat_masquerade_iface_select_field').append(''); }); break; @@ -784,7 +902,7 @@ const ConfigRouterJobOnChange = function(evnt){ elem = document.getElementById('config_router_add_route_script').innerHTML; router_job_list = document.getElementById('config_router_job_list'); - if (!elem || !router_job_list){ + if (!elem || !router_job_list) { return; } @@ -798,13 +916,12 @@ const ConfigRouterJobOnChange = function(evnt){ } -const ConfigRouterJob = function(router_jobs, shared=0) -{ +const ConfigRouterJob = function (router_jobs, shared = 0) { let elem = document.getElementById('config_router_job_script').innerHTML; let router_id = document.getElementById('router_id'); - if (!elem || !router_id){ + if (!elem || !router_id) { return; } @@ -814,28 +931,27 @@ const ConfigRouterJob = function(router_jobs, shared=0) document.getElementById('config_router_job_select_field').addEventListener('change', ConfigRouterJobOnChange); elem = document.getElementById('config_router_job_list_script').innerHTML; - if (!elem){ + if (!elem) { return; } $(elem).insertBefore(router_id); // Print jobs if we have - if (!router_jobs) - { + if (!router_jobs) { return; } $.each(router_jobs, function (i) { let jid = router_jobs[i].id; - if (i == 0){ + if (i == 0) { $('#config_router_job_list').append(''); } elem = document.getElementById('config_router_job_list_elem_script'); - if (!elem){ + if (!elem) { return; } @@ -847,22 +963,21 @@ const ConfigRouterJob = function(router_jobs, shared=0) //$(text).insertBefore(host_id); $('#config_router_job_list').append(text); - $('#config_router_job_delete_' + jid).click(function(event) { + $('#config_router_job_delete_' + jid).click(function (event) { event.preventDefault(); - if (!shared){ + if (!shared) { DeleteJobFromRouter(router_id.value, jid, network_guid); } }); }); } -const ConfigServerJob = function(server_jobs, shared = 0) -{ +const ConfigServerJob = function (server_jobs, shared = 0) { let elem = document.getElementById('config_server_job_script').innerHTML; let server_id = document.getElementById('server_id'); - if (!elem || !server_id){ + if (!elem || !server_id) { return; } @@ -872,28 +987,27 @@ const ConfigServerJob = function(server_jobs, shared = 0) document.getElementById('config_server_job_select_field').addEventListener('change', ConfigServerJobOnChange); elem = document.getElementById('config_server_job_list_script').innerHTML; - if (!elem){ + if (!elem) { return; } $(elem).insertBefore(server_id); // Print jobs if we have - if (!server_jobs) - { + if (!server_jobs) { return; } $.each(server_jobs, function (i) { let jid = server_jobs[i].id; - if (i == 0){ + if (i == 0) { $('#config_server_job_list').append(''); } elem = document.getElementById('config_server_job_list_elem_script'); - if (!elem){ + if (!elem) { return; } @@ -905,10 +1019,10 @@ const ConfigServerJob = function(server_jobs, shared = 0) //$(text).insertBefore(host_id); $('#config_server_job_list').append(text); - $('#config_server_job_delete_' + jid).click(function(event) { + $('#config_server_job_delete_' + jid).click(function (event) { event.preventDefault(); - if (!shared){ + if (!shared) { DeleteJobFromServer(server_id.value, jid, network_guid); } @@ -916,15 +1030,14 @@ const ConfigServerJob = function(server_jobs, shared = 0) }); } -const ConfigServerJobOnChange = function(evnt){ +const ConfigServerJobOnChange = function (evnt) { let elem = null; let server_job_list = null; let n = null; let server_id = null; - switch(evnt.target.value) - { + switch (evnt.target.value) { case '0': $('div[name="config_server_select_input"]').remove(); break; @@ -933,7 +1046,7 @@ const ConfigServerJobOnChange = function(evnt){ elem = document.getElementById('config_server_ping_c_1_script').innerHTML; server_job_list = document.getElementById('config_server_job_list'); - if (!elem || !server_job_list){ + if (!elem || !server_job_list) { return; } @@ -945,7 +1058,7 @@ const ConfigServerJobOnChange = function(evnt){ elem = document.getElementById('config_server_start_udp_server_script').innerHTML; server_job_list = document.getElementById('config_server_job_list'); - if (!elem || !server_job_list){ + if (!elem || !server_job_list) { return; } @@ -957,7 +1070,7 @@ const ConfigServerJobOnChange = function(evnt){ elem = document.getElementById('config_server_start_tcp_server_script').innerHTML; server_job_list = document.getElementById('config_server_job_list'); - if (!elem || !server_job_list){ + if (!elem || !server_job_list) { return; } @@ -969,7 +1082,7 @@ const ConfigServerJobOnChange = function(evnt){ elem = document.getElementById('config_server_block_tcp_udp_port_script').innerHTML; server_job_list = document.getElementById('config_server_job_list'); - if (!elem || !server_job_list){ + if (!elem || !server_job_list) { return; } @@ -983,7 +1096,7 @@ const ConfigServerJobOnChange = function(evnt){ } -const DisableFormInputs = function(){ +const DisableFormInputs = function () { let s = config_content_id + ' :input'; $(s).prop("disabled", true); } \ No newline at end of file diff --git a/front/src/static/config_host.html b/front/src/static/config_host.html index 46b9c241..4c9da5e6 100644 --- a/front/src/static/config_host.html +++ b/front/src/static/config_host.html @@ -26,6 +26,7 @@ + @@ -79,6 +80,8 @@ + + + + + + + \ No newline at end of file + + diff --git a/front/src/static/config_switch.html b/front/src/static/config_switch.html index 12de70e7..dbb94349 100644 --- a/front/src/static/config_switch.html +++ b/front/src/static/config_switch.html @@ -7,7 +7,7 @@ - - - - \ No newline at end of file diff --git a/front/src/static/config_vlan.js b/front/src/static/config_vlan.js deleted file mode 100644 index 51dae8c1..00000000 --- a/front/src/static/config_vlan.js +++ /dev/null @@ -1,207 +0,0 @@ -const ConfigVLAN = function (currentDevice) { - var modalId = 'VlanModal_' + currentDevice.data.id; - var tableId = 'config_table_vlan_' + currentDevice.data.id; - - $('#' + modalId).remove(); - - var buttonHTML = document.getElementById('config_button_vlan_script').innerHTML; - var modalHTML = document.getElementById('config_modal_vlan_script').innerHTML; - var tableHTML = document.getElementById('config_table_vlan_script').innerHTML; - - modalHTML = modalHTML.replace('id="VlanModal"', 'id="' + modalId + '"'); - tableHTML = tableHTML.replace('id="config_table_vlan"', 'id="' + tableId + '"'); - - var buttonElem = $(buttonHTML).appendTo('#config_switch_name'); - buttonElem.attr('data-bs-target', '#' + modalId); - - var modalElem = $(modalHTML).appendTo('body'); - var tableElem = $(tableHTML).appendTo('#' + modalId + ' .modal-body').hide(); - - $(document).ready(function () { - $('[data-bs-toggle="tooltip"]').tooltip(); - setupEventHandlers(currentDevice, modalId, tableId); - }); -}; - -function setupEventHandlers(currentDevice, modalId, tableId) { - $('#' + modalId).find('#config_switch_vlan').off('click').on('click', function () { - if ($(this).is(':checked')) { - $('#' + tableId).show(); - generateTableContent(currentDevice, '#' + tableId); - } else { - $('#' + tableId).hide(); - } - }); - - $('#' + modalId).find('#vlanConfigrationCancelIcon, #vlanConfigrationCancel').on('click', function () { - restoreFormData(currentDevice, '#' + tableId); - $('#' + modalId).modal('hide'); - }); - - $('#' + modalId).find('#vlanConfigrationSubmit').on('click', function () { - if ($('#' + modalId).find('#config_switch_vlan').is(':checked')) { - saveCurrentFormData(currentDevice, '#' + tableId); - } else { - resetInterfaceFields(currentDevice); - } - $('#' + modalId).modal('hide'); - updateVlanButtonStyle(currentDevice); - - // Reset network state - SetNetworkPlayerState(-1); - DrawGraph(); - PostNodesEdges(); - }); - - $('#config_button_vlan').off('click').on('click', function () { - if (areInterfaceFieldsFilled(currentDevice)) { - $('#' + modalId).find('#config_switch_vlan').prop('checked', true); - $('#' + tableId).show(); - generateTableContent(currentDevice, '#' + tableId); - } else { - $('#' + modalId).find('#config_switch_vlan').prop('checked', false); - $('#' + tableId).hide(); - } - $('#' + modalId).modal('show'); - }); - - updateVlanButtonStyle(currentDevice); -} - - -function generateTableContent(currentDevice, tableSelector) { - // Clearing previous lines in tbody - $(tableSelector + ' tbody').empty(); - - var edgesMap = new Map(); - for (var i = 0; i < edges.length; i++) { - edgesMap.set(edges[i].data.id, edges[i]); - } - - for (var i = 0; i < currentDevice.interface.length; i++) { - var interface = currentDevice.interface[i]; - var connectedEdge = edgesMap.get(interface.connect); - - if (connectedEdge !== undefined) { - var targetDeviceId = connectedEdge.data.target; - - // Checking whether the current device is the source or not - if (connectedEdge.data.source === currentDevice.data.id) { - targetDeviceId = connectedEdge.data.target; - } else { - targetDeviceId = connectedEdge.data.source; - } - - var vlan = (interface.vlan !== null && interface.vlan !== undefined) ? interface.vlan : 1; - var type_connection = (interface.type_connection !== null && interface.type_connection !== undefined) ? interface.type_connection : 0; - - var selectedAccess = type_connection === 0 ? 'selected' : ''; - var selectedTrunk = type_connection === 1 ? 'selected' : ''; - - var row = '' + - '' + targetDeviceId + '' + - '' + - '' + - '' + - '' + - ''; - - $(tableSelector + ' tbody').append(row); - } - } - - $('.type-connection-select').change(function () { - var typeConnection = $(this).val(); - var vlanInput = $(this).closest('tr').find('.vlan-input'); - - // Number from 1 to 4094 - var vlanPattern = '^(?:[1-9]|[1-9]\\d{1,2}|[1-3]\\d{3}|40[0-9]{2}|409[0-4])'; - - // List of VLANs, separated by spaces or commas - var vlanListPattern = '^' + vlanPattern + '(\\s*(,|\\s)\\s*' + vlanPattern + ')*$'; - - if (typeConnection === 'Trunk') { - vlanInput.attr('pattern', vlanListPattern); - } else { - var currentVlanValues = vlanInput.val().split(/[\s,]+/).map(Number); - vlanInput.val(currentVlanValues[0] || 1).attr('pattern', vlanPattern); - } - }); -} - -function saveCurrentFormData(currentDevice, tableSelector) { - $(tableSelector + ' tbody tr').each(function (index, row) { - var row = $(row); - var interfaceId = row.data('id'); - var vlanInput = row.find('input').val(); - var type_connection = row.find('select').val() === 'Access' ? 0 : 1; - - var interface = currentDevice.interface.find(function (item) { - return item.id === interfaceId; - }); - - if (interface) { - var vlanSplit = /[\s,]+/; - var vlanValues = type_connection === 1 ? vlanInput.split(vlanSplit).map(Number) : [Number(vlanInput)]; - var validVlanValues = vlanValues.every(function (value) { - return value >= 1 && value <= 4094; - }); - - if (validVlanValues) { - interface.vlan = type_connection === 1 ? vlanValues : vlanValues[0]; - } - interface.type_connection = type_connection; - }; - }); -} - -function restoreFormData(currentDevice, tableSelector) { - $(tableSelector + ' tbody tr').each(function (index, row) { - var row = $(row); - var interfaceId = row.data('id'); - - var interface = currentDevice.interface.find(function (item) { - return item.id === interfaceId; - }); - if (interface) { - var vlanValue = interface.vlan; - if (Array.isArray(vlanValue)) { - vlanValue = vlanValue.join(', '); - } else if (vlanValue === null || vlanValue === undefined) { - vlanValue = 1; - } - - row.find('input').val(vlanValue); - row.find('select').val(interface.type_connection === 0 ? 'Access' : 'Trunk'); - } - }); -} - -function updateVlanButtonStyle(currentDevice) { - var isVlanEnabled = areInterfaceFieldsFilled(currentDevice); - - if (isVlanEnabled) { - $('#config_button_vlan').addClass('btn-outline-primary').removeClass('btn-outline-secondary'); - } else { - $('#config_button_vlan').removeClass('btn-outline-primary').addClass('btn-outline-secondary'); - } -} - -function areInterfaceFieldsFilled(device) { - return device.interface.some(interface => - interface.vlan !== null && - interface.vlan !== undefined && - interface.type_connection !== null && - interface.type_connection !== undefined - ); -} - -function resetInterfaceFields(device) { - device.interface.forEach(interface => { - interface.vlan = null; - interface.type_connection = null; - }); -} \ No newline at end of file diff --git a/front/src/static/images/preview/0757614576ac6560abf01a573dd0c11f.png b/front/src/static/images/preview/0757614576ac6560abf01a573dd0c11f.png new file mode 100644 index 0000000000000000000000000000000000000000..6a114d013f873cc20fcb243a25a5be9d2512c779 GIT binary patch literal 18650 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 G5C0D@CR=g< literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/28971ab5300dd2c86f51136e13f07b97.png b/front/src/static/images/preview/28971ab5300dd2c86f51136e13f07b97.png new file mode 100644 index 0000000000000000000000000000000000000000..7030fec1c489b1338912d63a447bc21fd770c704 GIT binary patch literal 12383 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 KG)vTNLjMnnQrwXM literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/2e3e94529465677725879dd9bb27ff26.png b/front/src/static/images/preview/2e3e94529465677725879dd9bb27ff26.png new file mode 100644 index 0000000000000000000000000000000000000000..1f06b3a7a304eba14d0e7e687844ece1bd8289eb GIT binary patch literal 18719 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 Vgg8wVIsp8qs-$(VRMG0`e*r9+3dsNf literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/377de4a107c9a13a12ab58f24faefc14.png b/front/src/static/images/preview/377de4a107c9a13a12ab58f24faefc14.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5a404903cdb9a3a0c50ca2ec44b78267c0c2ab GIT binary patch literal 9682 zcmeHtX;4#HxAq~-sGyBDw2X=^+74hlfFdM{g0_sUfCd7wQ9%$Qwu~_YYKsGd-727r zj>wP%g%BWyghoLH0b59v5Q3tB2_YaPfg~rn8{fCS`s&uLx_@rf{c-)1b8?2Y_g?E+ z>v`5rE(Q2`FECkZ0zuG%y?b{33PA{Ps?%&_01kF5bdw;+9@@KW$AOe^iNLt_NFu>; zf|U3MrR%llx0Cuq7naYz{PRWAOKV!IHyiD7^9tPforB-`BT z(;61pqsWjBA_2jwzqG(-?o`iclRjtf*QO;y8Jx% z?7{%3P!}BRQT72S9i#bz=U=~|bWWOrYh)-LrK4}}eA>bM>p1$Ht=|lPbH)E0DhTG; zYBRd@S`1vu4ULr?jIBg>JxrWLWXB$I9}c2tV>prS=K*S8BTP`I)t+`lf=a|uw~s|f=^6Q4BqN-c?Z|#%DW1ns zmZ|K5+h7L0I3)H8+MBnnifbN2z$*=5jZ7wZ^K39sCR_97{$Q&zZ3I2C3X1%zsbvKU zdrxmM`OnLdAIyfi`h)ei3{%kjnte`njWMgO{B{7AvFP2cnT|_V5 zzV1Hcqh1|}Lg*R%SPISmg`4EEqPhth3lMI<$F<{${DqUtWOS9HCdQq?O`?0C#jofd zn=pFeVG&v?*KIN6XbIB#d&g2}ZD-fr5l8UuY2=KeGV#-NOBapS*0YVm9i~$&WES+M z5bnJ*Cn9(BLXIBKZRiMuqjUaG>?CS z7ta33FNr(Xo+s<0DjGvW={%|c(={qfi|UeF3LQ~o)GadNYVOR!Vb=RrDqsnIfNhbC*+D+%A4YFM7OH@edW)lv|ygC7)*Ln!NGBWKo z{Wc>A(tJ5ra-ytoszILVjeNrTFhS_!h9>1LoS_vUobNbZY*~)Nu9ySJ#lw$He_K6| zvvq`2i6QPz#+34fofK&io|sH1ZG136kiOHX2it1f#!d;7%5DhSOlluMKHSu!OA&gx z!6==BX#dbP>G#({8BgQ_Nfqr(tRGcirg4|DJ@N7(MYKQhDb<8i*wcRrNO!#*!>ca%Y=E#@_9TCMoGi7fI_)@)I>W3lFi{MJTIgS$kLgrgB!iE&m= zh{EgppIhr0&EJ6~YMbwsp zg!eZ{eMwCt@+l9rK6c=UEdV)K=EBADYA?Y-o%+GQ_VG6kOlahiecInUGl2P z!to6NY@T1i77oCsGV;cepDiXwgc0JH;u^ogsQ|$|BZV+>ME=;*PB>lz<2q9c5zbLw z$t(UXT?pL{W;IY1ekE2>)W+umcDL3GL{p)K_6T9 zp7&&GOg`>UqOc}O6trR~*{!z(O0$|>xJ)0r#TS%1dr$`U_>oXG!a$w+nYKKJf}r_Z zj&~E5Nv5tEcBqUzCbOh;8_^welOCh}sc2@HY}Jd$KvY_pMmrhN^e($13Tj-V5p3#>P*hXu4!#av z%Z8uf8>NynGzmY-Pkn8-F5Uq9`urAPLJy>px%K#irE#7#otd17aDkupgG*n#zv`f> zH<2x0O7>ln4S#2k!lD7&{Is@#(>kEvjTu&mkx!~@;OrV6rcHPS$}1c&m`j`}kT{(O z#$7|w-%)kD;nmnHOA6>mtx~m`FvUhbtTx7OS@!=2peqI*eU{QFd)YBC*2Y@~qD&pN`nD1x3L> zL7x82rp5~`6T!55%$K$di504{u%u_S@u?RyQW?x{CpAgj`}(|lFV&5S>c$-Nn5CG($3A)n~#yUxK&$m1^3vYy7<+yPdLsT*!_cKe1oT1Um2kZZ8^ z2w98vV&4SP2d91pPJ?vc{h0*<0>Tequm32u+s3%ZOj{&YMU>NnVB4#7cf&wd83Adbsw(^6$U+TD_uYm%ilsUNc%mahbggA)zV zcekkPpfv_FQ^xZ{!b6GGIhA%AUhSuL#hA^h=g%S&CQSe0^y@brNEXD7Czm92vBX+J zL$D(E?E*pZL2XJHB`$_=k6Yq&5^3v&?F7>=EbmWs*1?g_7ChY{-UTg z@+sx~X2N;*DPb3-1o!k4^UbFZmzBy{H0f8dm3egZy+z*zKwhgd6SiO1950i+&Rr+g zoTI106WRcH0(r!G}9hK&EbD+)Iv>ju#77*US`~vSAoVfKed}`>U4?9@r zOdG#5O*dXLN*vV&QfPiOA&nN*Bl0*=v8EYUDJw@SsEI)oZK(JreZZZ-b`XhMi*-hy z*X0jzL@DNTY~LtE z8b8v^=|!W&p^^$&58A9s_5e-7#I~U$suI=KCLCRnhhU?zv_h79DCen-(b{w}qFV3b zrGoqfU{-rRO~h8^6k4V4{k~on3jqy3zRkjk(o3MJn&Ee70W+d8`RSQ5t}2$*#Jv)m z*kzzT;eaYBCy_d*BUirbKH;#U6v_;+96GgX<9ZpN^?0`1QvoKNu(vB={Z6c>eyM7m zR`P~Frr9-7g%*ereiexXN_(t3o7*0fNV7@lGmx_}Fh3`Ls)dcGpcG0S7lf{P0A%3h zcGId!aGzNAAW2FIhg)70au0w6$PWVvaH_`U`4L7#k5r^&k`#Zkd`t1|CluM~ zp~6N6RP4dXU|OW#2ZnMxPkmr)8v2zDYnURb#@k2TZ7^4G&ja2xUpn?{&Sr3rg86?r zy9@)NZ zHqWPVn%k_qAEZTfDh^+1()RR-lDNW@yjORY#bF~sGDMeH2{tz~{kd+@=^0!3-dB?f zSP_(QhLX*cc*HmK;1pTm(#iEQCTH>X6KC{IiSL`@DoB1}2CuG8?&K(vC6oI>DiUN1ZZ#a5C4p#hXidCwtN2fy^&21$b}UcNk%R7AluhvDpGtF&<;1|3Iu@u#y`VsAWn}i@14NL9u>S@RI{N zmJgGrTbGbuXS3Hp7Q9Ap3MD47#8LAWEy&0mLyLLzM*mfOMsSE8w@0}{QBsZ;L|y5U z&quky>2%xhSd32ntNTRS@%B9FJGYNl$1VGfJ{qrrQg0giRzaCbZ!tQf#Oh@B{ba^? z%brFv^Us=acGomJu>{3s1&rQ8w{iO(1S@8Tq?FBC#6-H;Y22i$CXqj`C<&!0rQzoW zz3lg+be?y(ABoY&)}CvU#6pdTZg<@Y3EGU>3y!^L!yaV`J$!%cAS2Z zgyIz)96Mg)ZdMvAoOEdmZlhjn zD9942+8VY2iP-G;9N#J;!=?|Dj}E5#1W`UT~C@ zv=eKs2f7^7)mvNj!OZ5Jw;F9R^^h0Gi5`^nc!+jxhm%cDM`-Dj!iR{7>wUswapG4} zt{)*taoaIo?=f)3nA-77nm%^1ZaDn`-fCc0wi+wQn4Yhwi}6iPegAum(BF1ETav{w zGO5}&+#Zw}(z7v=X$Fs)hD~L2EBB@1F6S(_RaPg}uLhy;z3svG;4L8!tOl8!9iGe! ziq)jnWvmsc;H2ZQA(eUkB!kw~tBv2UeVsabr|xsJ-pU<=oXGG4PS*)R@apkENe7RR z5bavByQ@HvT|Cr8(6Jo*BULF;1wrF9DD%UM!Tc>0&SZOE zMWx@v$duz0D>OU&=EjLocF6t6D`~^;-6S2?Y+WY=?{-uH`nvoYKr{bx?H9o7O*q{zBv(0qfn?q1b=>pZ62Ki| zW;JCEH1GGRRfv|wDbtHW>*7da2YS1=Qwjqf@a8+w+-nI+-w>x1E89KTbTB01y@AqM zA6xoliywBcUa-yY@vP7hvpj5Q!SFivzLSGnHVlBLRt=XynZNy%eTn0f9@N%D|2fSr zY*YIIepylCmo^KQjg`H#Kk!^J*0X_$a9(`OZCN!a)$UQdRYmJ^*QK~=C&lGSn$Y;L zi6Qr^oaJB%y9XDHfxe#;9hd)Aj)7jmYtjdNY*^B^3((A^IT^FT4@6^sg3lcN{VOsD z{<{aB#Ob(B{Ly7Sc34iUFwWdM+8t9 zV7t1F;R>cF@=2m9URr@T`LtURH@6*R@4N}DD!OOt?Q5O30oJ3yFEVqO+s@tq|CmRUe+|8 z$*nPPi#u5uUI51&h2@n>^(2iqlEXfHV6U|WAWEaPML?*W&MipVXGq<8`|{rjR<1_u z*SNkTV@1GI4y%FeII?!0>neS$PPFY#FxH$f7<-H)9^z~BRE$@-ac)E1D)^kJOW!aa zTUaT+nSS?}T6I8+{|fstuVl_w4;%q;{VUM)xThht;R&%6$9~9?sbs%s2LfeWw#&L0 zH`}lK`H_IQGeb|iuzhjH@$g-7+=a5W%@&IqcVPIocqxLRRK2SZarxLjTOosv|ksqg%fkbUj?1Ry_LB5Ic5=tWhWi!pUoB|wZoggB Io!GPg0Wv`J-~a#s literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/381a7c8a66d032f313d7a23f7ef1ff9b.png b/front/src/static/images/preview/381a7c8a66d032f313d7a23f7ef1ff9b.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1b35a5ae51ce1d605a287ba27704b3215020d9 GIT binary patch literal 3283 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 DzIrg^ literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/463aeffda3959afbd2f6c35f5d592769.png b/front/src/static/images/preview/463aeffda3959afbd2f6c35f5d592769.png new file mode 100644 index 0000000000000000000000000000000000000000..1277cbbbca6aaa3edca54f90485ed7227b314626 GIT binary patch literal 9537 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 XmwvDFlfB@lQPA!ke%qgK3%&4PGeVcB literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/5398197bcfc985efaed44ad99bb36099.png b/front/src/static/images/preview/5398197bcfc985efaed44ad99bb36099.png new file mode 100644 index 0000000000000000000000000000000000000000..fbcb6db4c346573ef71f66ad962e66cc861f9875 GIT binary patch literal 11017 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 LpDp;!>CXQEa?U{& literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/54d9508c83e456116858eeb979d7590d.png b/front/src/static/images/preview/54d9508c83e456116858eeb979d7590d.png new file mode 100644 index 0000000000000000000000000000000000000000..93ae2767da2394b0734ef2d57afe804dd9714ea3 GIT binary patch literal 12206 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 LVfgy2>#hF<&+>EN literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/696ba869a3229373157ef8579259c7d8.png b/front/src/static/images/preview/696ba869a3229373157ef8579259c7d8.png new file mode 100644 index 0000000000000000000000000000000000000000..16838729c184a3a42d1fe98e2d328564e4af1ef5 GIT binary patch literal 11664 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 literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/6d96b38b2ceac1ac4993e306abee9c69.png b/front/src/static/images/preview/6d96b38b2ceac1ac4993e306abee9c69.png new file mode 100644 index 0000000000000000000000000000000000000000..efe12f0ba37e47c1836a393211f163818417017d GIT binary patch literal 11382 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 Xe61c?a8(!pUl-1qpDp^!?e6~r6!*Qs literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/7263d4f87f520c43794c5fec1dfb6f93.png b/front/src/static/images/preview/7263d4f87f520c43794c5fec1dfb6f93.png new file mode 100644 index 0000000000000000000000000000000000000000..415bd7c177cd0a0ead78c7ed91d79b71ce59117f GIT binary patch literal 6464 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 Q0npFvgyr$lV;67y7nNb{K>z>% literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/7c659bb5c4d01dedd1e9e3e2b37397b1.png b/front/src/static/images/preview/7c659bb5c4d01dedd1e9e3e2b37397b1.png new file mode 100644 index 0000000000000000000000000000000000000000..9c02c7e80743505e20f4f29d38a44932816ab830 GIT binary patch literal 12958 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 H+J^iO3wMP( literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/8763d45b85ce4f2bb68625e38781e43b.png b/front/src/static/images/preview/8763d45b85ce4f2bb68625e38781e43b.png new file mode 100644 index 0000000000000000000000000000000000000000..668267eed88d93005bd3befa0cd3996988a359e8 GIT binary patch literal 14321 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
V;0Qh&&#Qa?8S(p3&2Oyr0Pyhe` literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/8a1005c8f71d9c84eb0370157ba6dff1.png b/front/src/static/images/preview/8a1005c8f71d9c84eb0370157ba6dff1.png new file mode 100644 index 0000000000000000000000000000000000000000..5e1bb461945efed26d838a4a8cc5481def740d26 GIT binary patch literal 14551 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 W*U!oYWxziy0#|j6ui!7=xc@(~skJ)* literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/98608cf64b29d1903e2dcf14d75738a9.png b/front/src/static/images/preview/98608cf64b29d1903e2dcf14d75738a9.png new file mode 100644 index 0000000000000000000000000000000000000000..ac03c8c418853615fe397db915a86c77b1fd18aa GIT binary patch literal 9379 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 P|L=&I#leF8gqZ&Tde)8# literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/a5fd134dc4e05dc7adaba17a14594261.png b/front/src/static/images/preview/a5fd134dc4e05dc7adaba17a14594261.png new file mode 100644 index 0000000000000000000000000000000000000000..53f644013918ed5602d0471dfa159c2fe617bb9d GIT binary patch literal 13363 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 E1t{Fa{{R30 literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/c546190c0c4e9437035e66383741b39b.png b/front/src/static/images/preview/c546190c0c4e9437035e66383741b39b.png new file mode 100644 index 0000000000000000000000000000000000000000..45317b2f087680a680710fe4eadfa7ac2e7ff158 GIT binary patch literal 15133 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 SN8<~Cf2t}P4@;EH0{#cHLFk+S literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/c675db70df6894cca03a0ae94c458781.png b/front/src/static/images/preview/c675db70df6894cca03a0ae94c458781.png new file mode 100644 index 0000000000000000000000000000000000000000..769771c852b1058894fee1078414b5684ec9ca30 GIT binary patch literal 14175 zcmeIZN-8IznS*Zz3P zpth&Mw}}73pDqc2=7z*qDgo;b9~tc>Wp%c>zWzd^aH%W%bEs?M)vuN=L*PgN>cxfy zN^?}$f#wXfJ*V7dku{WG?4(McacZ2Xg-h}CaDjf~bOw9Bwn@jnPiX=@dXepWlPxQQ zT+=#nG$$1yMjVdk%TPqqLtx0$JFJkJuWqjwTL(^u*Pf901#3JS*_1+e>&A-Mrr zyN|>9Z5sXY64D>m&BZXwa#GS?G%o?0QuMBVF4^C0>~iEB{Awq4#o~bF2ULG)K;}lA z6G6t30+`xRy876_ZTUY8Lk z5|sD<{rAYc0;2%b_L+Y?{-?&0r@!wAI+>)-O_dm~R=dyDHPsJB-~3AyGY`0|UXaUjT4Kdwqw2%1azW4D z{4cWgPa=b-CW_LvF*{YMlv>$K(0?f5!~)S%(u(F&mb{qw3@M{;fdv|h=DUamkEW_k zk5v=_=|RUX58?oe?LJ=_5xV@L`Yki2F+&c`u+KJltFON4OhQ26)uALcy@&6TNFhhf z@MAmouKi!*;yQxle|LEeaw2*}S#j|CdU)|66CB$mfSVpVk#aGA^z&!itX0ZdT!b@( z;;HYY;(5K%J59I#!6qAIf%-KTAiq${`Y#)XNI)zm^%FrTIMBbt|1t`O)SLo853vibP3}z9($l7yjpk z13h@LY8kD6S&F5^rq+QQYu=O>`JWfu)918JEfN1c-&5d2AsI7p?>jsO@}Czg(h2&Pgi(FY?onXdC)*(Z)~JKJum z?UjvnTTuj$!#XeR@qU+K{gSBp4;2&Vch};0u!U-DnCB2w&0?^d=*@C%@9gggHh&cG zg7zQBQ^8Yx8aT{#imx#djIQkry2 z!``n~`k9BLTdqb(Z_4u>;xw@FtlI4iBO~7}YiyL2N%e6}#G@P4%XFFl^ctBC02$g6 zEDryVV32_p---6$1LVKvANVg1K*awS2mfF2VC!)wfBC9m?S7xT@EUqAc`|y}vFL@< z8)`u@>GCn^+l)|(QaMoAPah&lm?>z(bb;Vr(bkXa?YCQnIz;AyG{)!?i5=QWptI(5vPA~)-)4hZ7(^o z&RMIBQYj3b9|<8B54s~jYL5R^jM@ja_qtcig)nW<&N?wtY&{13jAYZ762x1rlm2~m zoVKpDo9Sqez354rTA%)GF?#2{H3Pdlvw|U`XvZSI8*v541%POK>h}&z1UQA0mAN)Jc1&1 z2w`RxM<19bb;$6pkFkhTT;HdXP#jcVW?Rm6uh>jZ>|yZ-IP&$T~1ez9e-5==`rECytKuBimSLkjQ;p=EsrIo?yaPiOLq_q}hru}iEeectT zWwAL}XZ>(8b_Ue@_dw>w*no>%;qXLVTV!_>rD*SIg>++25$G zvSdC=p#J^fOBP)b5Q!h*O#tk>GBYp4b34=KwuQ$+yUa;VCO`pfyIf1U0G$LGSVsaE zzaHj7iuE_)71Z7EovZBd6}u+;bC2*fzRF<>vatYR!pO8>P8V!p$OsAkSEHWbEV5tv zyi3yO)8tbIysyX|-_tHEH^((k)UWv+V9@T~IrH`={vRbZu*boIf31gPO{M!K9iPxHx}Deze&_3^sx_7!}Juo-3y%9f2S{!MVA4*(pAqT zUW#b4a}o!5$GsP2HqwKb{Fo+#sil@jPiG_9dwL3eLMVA`-5svkr3!3i_*yWM>#^v7(x!w}Q}8jp7$9*vz{l4kS_J^0mZLX39wI_{|Z z&hcrRB03qlLKq)Tes(S#|qQWRuO@UuYaB z^C{$}gD@U1{8GzkVtvC%;*fDDAoxCK+Dy z=fW>gZ4O=MhQbgaG;;%xxm|EWR-n$PW|Jf(Nl8fvFu!#OYb=i=6(-iDLXbxxtw3eB z8k5tm22*zgWd&RZCX^p!(2c) zH%#Qjg(EMYuTM%#SQA6FWQ6Xh;M!cT?Vr9@dFyd=Z>6<_86X{A3WATNfU#ct$rlEw z5!X-};N)>-=3YkkrgPrI;}ECO7dx_>jvcXmo{=Ax4;2J!qW{QPta;Xa?<65%UvjXZxz2{d8UXuCT(uFWE zxpfubGpY94zq9Qxh5yxo2@U-ABmRVIvgdSG_RU#-TaB#+y7~3-yAr?3x0!Hk45c>& zK6W0_7e4@lo_wwZ9^h=dCu3tN&1ZHomau4CX=Y()w>OIkYFy5zjzu)oMo<8>Y)hbF zAge7|vYkfkSXyD1PI{vLB!ZYurek{MYB7`svJlRxi3u-!*ZLt67Bmwn&7t#_M^lsRu_3igq zFEFCXT?MgWq|!soqH6;^1Yz2CBC}r<8~Q!_b=yhDtxZ=40VsbFiVDD8nQ{2xm|^iu zi;Sr~H_7MrRghE}kW~DQL?Rd~$Izr8@C4g}mS3>T`Px*0#ugbWK^MA-{QYvAT`+=h zRP#$duEJ08Rz^J%x6bD>oX`F0?EoK(L<$f=Uh1=uVAF{F%@8%tTGxdaZs6u*5fa`@ zOd3t(-C!_Mf370QOsYu3nkl0bf$K7!`?Uk=Z7tOrMNz&0Nx1Rx=^d%ygE2#1+A%V! z8;SswLFf-F7~hg9Eu6{89FP3)VOp2o%v`j(a%s}y+3s{l+rnKdOh(J$Zb3Iwdv|vg z8ETLbokh6J*ZXPZH@~k{^UV}G$@RFvq-S?Pv-=pxr9|cq!(o+`9y$KqL>UCkmvU`+ zY`%6S8eQeMU**0vM>L~mGvnVXvtl#7y%mbHl5T2{Y;$(1-gW9+lce*sbomf{F<+4F z5TptYOaU;u7^G)6!^M`$2J^SxXp59alUBk;wMomihUGpkzhcR}ae`qc)Y1PlmY~-V zDh1inPYo6JL7Cu628$-Pb?OGip*OyM?)2Rskp5NtDXw-roE>zvc%hmQCFS&BW?g$| z7rt>5pPnA#Fu5yf;oiaY0_NN&)4XO?>Fuo#L(#f zaCdQeoeGhQM(6QdhtWlY3xs8=8J)1(`m9ZxsvJGS98H^ZO}WcmH2Xz}WgmivGynM6 zcl*nSUU5GEXLS^*o6Q*d3_8Sa7W-J3r~-2t2urm;H-AK78PhjgeSFq-L+!JEVab`x z#-8lKWW=03D;Sv?MP0*e33c$H<}iDG6{b_qkyV8NmINA5HVPlacq=f+B0V?TW@lq) zuS|C5Xoq5|WDaeT4RyOJ%w#O9txeLSZ=_TyW}LQu5U>gqxdcmGHR@q-1ZUq0di+M7 z`3fZHo_j;}&vY_%ChwP+Gio|W>c`91-3*|$n(#-IupHn1el~p-#=~H?v1bS*vmi*b z*EZ}27D)ngYsoPl3awvEVt(5ncU|PwbJn%V=BW0oVhi2IEtpHNEQ{yaa|dQ5skdmL z6w8kQDE22L>=9+n06}!^@}Ty$W5(m#AF|IREa!B~?86q;ClfUnEbslnr(czBd^=vQ zqZ!9|YOQFL+=I*|2e-vwwUa5hQ?O*GIrhJ-(>E?N`L_ja<{XWr7^eiav1dANlkJH^ zJWD23M*mp5<=eu9Xw}2_x$QGSt^IwSp(ptnHoV)?QL;``>3BNeSsLalmx; zT7coHcm_R_1H-()$|X5_xhpkX1cI?l!F6llw=2bQmirqx2hE_0pt1y?QF^akwkW|| zRWemDl*elS$yEnUK}+25_1earnh{=Kfzk~7J^Zb$Iy(Ye#rx6x4na<+_3LXZC)ENm zK@#K+v2QLrQ?hSgYd2i>Z$NHcx8Kg;?v=NuaDsuCa(62~6q5iPG)?lM%y~j0(z2hb zq(1DfnAN=Wxk^-;cXrZWhpEKJUCbai)3e1)vI~!os7^&QT!ai!ewTU~$j!j5lCP|D zHW$^W)nT|?^2x4)yqma7KbHB{#CInCtxcOSI>p>zaHrpsUZ_*JD&Pb^VMDczWF4~X z?J$96$yxivt5zsO4PKWjAUP_%;vvB&4$Vy`lRTaeyoCLuaPsL+duUQWOB6 z>;2HKQW^OWH85yU&Bt;3?9l-vKpb$#wOIEJ9c0L2i-z4XY4Qh33yi29_PMoBn$|WV zV1Ab)w2cO3*42wCV zs~mEDh>JYXatbDJ(o93eisS^>1RRb-O3Wz7Ww`r;oA>{g0n+$PN); zzL~gailL$7;g(zpb)px;3zl+Yl-gT%1~NqVnr$4j2x_!eWA76q(!^StWgiMk#8X!u z{noKnaA_8xxRXO1&L|0gl?nP8*iV!uP!)?V>(9$iC7xE3Tf~0T79R}`O&yC5wJkn; zh)$$OC*R=pyL5bfw{{K{*tXvI+tA#VctGOP`&Ae2L-AU!{<`m$q4SQ#PQiAF*^tTZ z_0&5!{v-RKBV1Bs6)s`>H1>jC5mDT)Zxh>VStRMA`Xd9+DMcm~%81Kj9Jf+LUzJx@ zOQ)ZT3^vKE@2vILWf`^HkJrJqJ*~J^^c)mjy2+L=6&d&1U9->DQ1AQ2uT{}!M}3qS ztVV~B4v6s=1ezaKpPtQ&OTX7-I2gY%zZPf?lnP*{_^NhtdJe2vP#mP6QZX7i)z!2n z3%A9{c=$GpP#t24!0;hapKpQHJ>%zqsnCaNpV;+4^X+-h?NhN-mEW$y{u{~z_*t~Kbf6~k{UR7={5M;!B`6{(dS2}JIIMZo>2 zgW1n#8?ME(kkzsG@h0!&V@b!GH12TsYousZ7mshp^j6y)y&=X5SWDk-d!VIr_RPW& z6OB3J6YUwSrlnf8otcvrV9->{{MF(<`>8mJeEj=RAbY(WammQ;^Qi(qVbx&X+?T~A zOQCq%=gVWNUCAiEQM_jUju?vcem%F!w?A1^M;(2;q4|WOKEmU`v6MUZpo*hVEYU3_ zht5llW^Awn;#6BCwZi<>QQq~lLYn4>mBLL3xj)J3W4Pt&CQCp!q%PmIE2+O0DSN;tK|EHeter$HBD_fA_-t2f12MS3;AInvsys?D!N zDwto(Jv8l~w@F@150HB^V8ceg?|0{A;LZ6C8q`Zh`o8q>_kUI~MIu+;BQ@5oz9$Q| z-I8#(bS=UOeG4W5h->v*Ny)~`?M*Vqe?3d(IY|62d-J|uUfM)js}twzvP}@DoIo8) z`JORBOhcXf+T%ba0J8ABmfCn+6OtHzabhNH)aNNAZdNPnBIGpZ zYi;V@*cib43kOXcbFxHto)Mz?QoU9s!tII;yP2zDv{JZ;)*XYGhs_TW=;T0+c(r6t3xJGy0 z3jpQ{BCyCuu!_-1PKJ4#caaBYly3%K8mX*DPS$cw()4jm9J;!wx)Qm2m7Cl*hj5O`>GONaIYh{%ce=cZ5NBQJ%9{&~2Me|>M9x6xs9ZlAEaQc|xH zl%58?q}&8lUVa)Es_r?eMc=eBTYbz-wb(q%Y_1z}7HsfMl)YRMJm7Pi1`!TdlARJrq$&@OxMIWz`VC{SwtwWOYFs;9(| z`}(*C{(AqRt9)q)?iFF{Nvke1KiYMi{N?EgUd>DN9gfXaKJTjJ&r6qg6Md}}@m$bc z)r(R+cA#gqeLr|LkL!A611?-fpm5Z#kBwpoR;aRFiQTL7A z-~|$Xc1!S=>A~=ugD+{8l;rh%D_DuOzue+BLFV6a7F{Sb_A$gI&-(g|dhFTQ#F%7~cwe<@$RX5@C;BC<^7l}E9nuIlvS&n0 ztlyo@C!BD0k%MMWa#R%p%}sEmUk?JadAG$cjO*PAL7R-6*^>bH=S=p+C9GtRT_i%e z0pEyGgJ2T;m-kv5?_R8I>8N&x9SxTLEnt`+{4|J(kuw1 z#5BCSrxzfPD|Y5TXS4qiFZF#!#^D;2?7m@#WO-PHwxR;4L<>_XR6El2j#tL3*xfi_ zs40y|PMU4~JgpxdwYq@s)u-y=@*@22>}d~mS|DTXFG-2tkv`#hl?!`aRm2r^y1889 zN5$=M;X>f(*~C>v63po!3!o6gc&Y?ESXz&M^(p|bljgjv2Sp0)4pXzR*>* zmD}Osg^_ux0(1USf!F4{r5$`BufWTD~Po^SWp!7X%IqdF5b_#Kq1P|E4{$3U|f7$d2F(yA<^0Q_U9IF6{Bz;Jb z@65AmnB5zm){(}K=1e)46hA#Uqgx%M)m3E!nj6B&pWjnuPL-;DW>I@LEMoUV#dGZc zrVw88ebsINxM`lMQ*v=!r9HMGT$^+S5SJbmVc1<1sYqjJa|`!LRB4t8`MS2ur-LF; ziuZmdYpg7Qi`LhUwQ?=zY{NW%4nTapltsHO*|2(LJTuf0ij)$RVOhIX`4pEJgE+EO zTf2lxZ?h{lT}}7t*Ditsl`|7HPVHC)W#XGtezpA#w>GdudrfX*rNvxVh0X@sf8`L= zT`e;1-t{J?8KF`7+}knnqK0l7+BLj#O^OFrH==+m>h&tKdp~wT%%A}n62uOK>p8P) zvT0IL({YR-=#-B}2@%<=KE&@vg2-s{&E>;)Lv#JKj@U8jr#Um!+usdheSznipS~LF{2||8C7597 zBA2m`6IX37j7FO$lm?iB88=@gZ#P$iUwmHW!&qGZV0T*1xVsvK>Sa)w-?MyK8t!7$ zfe7Ug2r)NQSgB_+9btXJX5$v0FKbMJyNgaowL;gq$;I(nYj)ZzHkzK}?J z$Jw>|m<(l85*I{+!NR}PN3IovI#ny1n>cbalUbhmyvmZ*;u!O=^02lq(xH2LK5%-5 z5oK;$kW2rvFav+T|MX+P6?dND-=xZS_;%Y&lj)QzGkr*37UbLg!r-L_bX%FC6DiO3zFWB8Ri>sXABw;QRtAaKGf zrI0`OqEsM356?cdacP|IvaMmXNuH`-Wc#&}zS8(3!t|)7&n!l(Yo^JfX<{Pn#wD1^ zq_}SE$IH4fSt{5)4KRg0FF{(Br+h0-%9+6m4bfFw9GXC2`0LewDE0EuY*!5J|4`E7 z`<1EiW0_wxa*g6=oiDzN=;Q7P&bK{r>Y=+lw{?bBIM9pwYreQ?S4) zhCjs__xB4Gp87b-{ZQIu-&~7fvLtB->7$G)dERqvM!`WVLNux6A zS*kNrjq#+*U`6(ux>7A2=GlI6H@^5O#=_7Oi$3v-6n<bei)NfWd`d=e`8GF`XJRR`+|qq> zvHihHQLIhyj+V0Z=t&2{pP@vLl>~SKIXs&Xj}@lMeODJ#{hiZk?S2Dr-7d#DHd!eG zq5jcys2%;$&!lCf$D=ZBNK&|7i#TrBSfgI$VRhDZ^TfPpKgaa40^_+Uk-UdL1HDb= z($K1uOJfb=19g#_ED7}#203MdF1_ZhZ|l=mjhxwA6rOK<&~q3e6kbhQfG*|O-#gRKGp#A07^X%7OO90;E$*LV@{5G)=|aY+XWCG!V;lg@ z9s5^l?#1SiibfxvcN60%x{=}%0s9Ujx@7=%k_(+X-G-h;3%~tpZeM^)an7Ied?702h;t%P?XCk zSH?=E7ZvFwT6LI~Hs1KSM?$$sbQO`NhQmo}l3>-@CTZzc1cNk6R@v+dcSBI9uviQeCzi8GS2DXiU3HGO8rOhqvK#F~l|7|i-JeV(xs(64kKe9WCO1W~zhxbX}&#PM5cXliq z=g;~VuiP1WxHF{q{@|>siYI3o?;c2pGpIPp0@+m{|18bfsxux%>Rds|Qk2!l&iSXV zvQUz9xY)07rL3`U4C2xqiC6=pxvMWI`rIO>6a|N0>3%ZjW6sNO`$@`N(2!J4rk11% zxPD;0Jdq@LxBHnUL>ENbJ=R&CK{p6i;ie0clMQEqmGv_uo&l#gxOX}7V1G5N+^X$ zQrDAsfL$w&=j&tgepgon`=l)Z)mu(1xmU|Ri5A)L7G5Mit!{SB33~YFfGgQos_86Q zgE%lDn$;}x$yl=B_=$wnruVFeD#bE07Wh0*;rrgOyNK(7jDvHuwT>$t*-)ajAS8Ei zJnWUhxL4p5E}`5yww%5)%34Axr>Pt)6#4pDnvQ^>@NyvCtMSo}pD!eMbIDb7Fq15P zKFVJcYo0F;k(sh6aj+X+=r3C>u0Fh11YR?@c{ZYQfHj*oCc60K4KY$+fXBB#^Z6wC zS9IfGzuZ~{TZ7yW8l3-5e~R3358vSATF6J6_6cqs)NDPYl1{+y=hw?424?ViKJOm< zZh~P=OR0@7GPREw;YL-TPh3#dblJVDa~cSFdbPrZRAudocy-ktuNPNWO-9;;?{b-q z5aSEsQOCongsHG%4sl+VZ!97eD;J+!Dslr27`rq+dYOMDtKFpMDnNRpQje14w<#Ar z*)7}zQE=noME8up-{u-;=$m=L1}($UTf>EUiB&ZxT+J`bv}WFwO$znJ6klGVI`61E z5uBW9A4wLFkvDq5&Mf}OVmYVk>tc_9Mn2p6kFq+1uE4-k_DK!9_?mB)m^v%b@5i_! z9__4-yH|IYs{g>g(J#7KISTAvTKtSdRC`xfONiO`QEih)=9O4Jm}*T)v7)_soaQ5- z-Ra=IeB)yCUXqe2UcYgo$$d}4JmtQ9gg}@^{S~jBcAGxFI9C(Ss+;s6Q3F{K+MYnW!+R`<~zjqAi?|B8@!}SYDmr)Ph3@zh%O}Y2m&`{?MX}5`}c3I#;$1u-1_&J+cgns#qsYxKC16CFd(P9q2Dsjm$sN%w`|m6lE0vr zb#z6>zUET;&z8f{iCO=Pjg}tvHT6~Tp1{ z^->wKk_6`SbGPxMWqJoe_xbjzs}*}yjuJ>cdthZ=?^D3ZXeQZes6CKBimaJ{7NxLTLHU};^f&hqUl>_TIv+jKF?^lQP6o1ttli{^N(86jM2 z*7B8_-VDFG&8VLH8LeI`y8095`)|y7S@M#fXg}Dzh+I=84`UG^?LB#gFEFP0~!5kQeBw>i2JU_v?_A{yFUF{&f--~gUlmLn3fBen22q) zO}E~63(yK2BF0--P`rFLE~-&A+XPy*0>kEncqEyFvDU{#GJ`8H zR76Oeq}N zNyH`PNn17s>!cRBZV#ChAw`K^Rx#nqXi9>{AL4!fBP+tV?L)b)k|F? z^uAN~aEw($o2Wf<9$I1Y)3UPmsX~iM5qkVt`_d}zf$csN_P=!N_`xD)y3z>A<+KB- z@^_MZ<_o=+2DS{|Fdn#Hy`}aW2Jz~zRmo?ROR85%K*p#>7jPGYw=s12g|=>4`K6GnR8bLw-_j&~VRHw+_1aN=p9I!|gsXOQS>eEyOifxTP}Sz@jhz=O@7gxG zk)5}x053H@MIkW?7DBI`!x-!hxJap7L9m;)JbqUR+BIZ^lOa?kyQ$XIHMEL%JVP$- zIM4_wd8X{d9k;posf-1h>lLh~CCM&a_XCP!3~pu>FZ)UVzyYHSYeU?CEWB)?ww`36 zo^LoE-G57L;7TteaIF}#QzJCBwJJ+eqPl(F;pGcpn5l9WR>{b(wX`Ee5GjL{J$Uk>~4e+ z%KqiTgL9krtv?Cz&>NGbSIfSC-XG2k1hfS-#RChK;N_8%%6*Mdbor zCh0jrl;9OT@uZIASG84*o%3pU?ph>eOgPGGlfW;9KlVEBFb;bJy0h#vVKj1DwyM1k zj`6E80fqW4Edd5ORR;*m^Hz3bAGq_q4dxgVXxO*+Elso*Df7ki1lJ6Uy6A5NsstZy zuqoRT`eU9y(ZW&vUk^LQ7TAv7dCUm_e;c8f7FzB!Gx6c}#Iw7Y1 zFhM^qMoPr&!L;Gssd&zjV7UhupVi4fGS4zxO3{{7zdbFfawE#^i~U}=u^o2|jUU8> z?#bB6AtGIUzMiDE{yEJ>S*LR-7q(hkm^yy$IR!Iyi&fr3EFhQ~JQ72q(0B-max+1H zAB;;@{rBHvNJtCu-`5htXvnQ(`n&{!T@VW)kPri0zJ1T%H~vEM|1}w~cI;O?_lo7$ z=Y_=gn|P&P&~jWL4kfw0&<$+p#|4j--C_sntg3>ARGs#6+Gbz_p^bOLdbSHes@a zy@g96IVm z897JYyw{J*lYX-+fB?FtBVa((+$fEWD0C-c;h2Cd1_o2vrF4j z^SxQQ(<4s#A<_tRH-q~bSioxtfp^%W1oq!3yCGm<|LoPTT@IW{L^)V{Xg4{l=-X@< zEE|4&%1>s{e1Xc2e?PzL2OEMNvkMKC;NCi76A@RupR%U#()IV}U@-NeL z4R=DMA8A5t-IG?nxae108~XA39A?0|eOAV|nSY?_I%7v*MA-Tq41*7s06xnW z@R@BPkE@r>?`$iA(`*0HwL47KDzPI<4ua2cxx8 zBg9ULDA|pN?G7@lrN&3^2$X_Xb8lB`eIa1?~B0I6Fs z_i5UWTUZFPbB!c_Futo-bv>%~!k*uApE$K}$c8Ulg*qkL;D7Zt%<_G5nBTSVPle`C%=rytj**Az_DI8@>hM67yB3SC03nk2<>CxI6neJ{SOK#}k@V6vMq{L33p>N5a$yYKF zzoT*!tA&VlLko4SFDdIVrfrR|(7EsS{k1T|495iyE+jVb*iAJgN*pAr_#qyBFQ<$w zh@59dXVLo=LVJp6wVMfWk*D09$~kHSBc51ex;DJUgEdX?Y6bUCi7;ukta;OSv zmM2WrhY$p?M#2l1OFlfpVM4zLPp5_G)h)@;s*4!a)gy}Y@{K#BG^^9-eNKB+kk~zE z>$ni?hj;~{LpIT+KJsQ)AzR{|&37+gf0g2}f%xG-n_j}5{S5WcWdfI|7EW%In`@yn zUmKBOv3GcTTOfIwct0=N@d!&o{ekwRrDxqtJJM8bZ(Cq5lV$3g5XClV+?f!ZJ`!@y zCY#9JAGQ){dpPkMFuw-T)CV|yCiJj+q`aHyTn+a zJnF-lGN1bsT6OiI=3kG#2JJM;gb?U^2F5GTW4Ix|;)sz2|BuxiD;wyNco`^YYUbJC zaM*5tRxD(uD(43(HVYt(6#rTDPmD*9)*VX`ezQGZ+ZNnz7Rh z3to0Z`dG+WzyOMR3ov==_#rNylmwMr@06!m4My{i@t#l=i&s|jh;mo}9MQ=M}rQLG0-)#J2RU|8f^$=4*8BcIbEYKz8E=vL36=p zWb*#j9UP~?udQNMag7jEqtL|IiET`Q5RG;Q;-=BaO+;gQX?p0_JCus(bl>YMj;EzI zmVLFV?|GOi*(F0}NB2l!p(q{ziNYnQhMIzngf_kv2~?%4+-NSk*lV_E2sp%In?sDM zL2M>COa@k$+3-%au%`~kqD>gzVrl|&BHae@NXz-IR8_0Tz-#&=CZqbB(?IQ2(PBv0 zxS3NBoAD9k1dkY=QY%mHF~&=2s@L=mhkcEwFR8q;Uap0I2-O4&IolYXgr;LesRj@t z76dld%H{k5Ptd9&UWCxA!Q^RF8PRfM_`@`sBXa$p}@0D@!!1gZERzC5|8 z0oh3U7jFtKhzt_?;MEUl0atZb`V}-M>-s3~gql)Ax*BTR51p312KZX=KqZ9882osR z^cHDHp?wjGygr8}xlwbPnx6XBK92Vx+wjTWdOsWwFRO-rc>BquQ;3Zly4ScQ188_Z zpkbR`oLx`w$i~mT!*+~huJntOjyG2pME!~$jiqtfsBaZ2Jkl%IcqFsw+T{^)I3>6v zdVhD*Qd)o0{b;H1^d%FkwG?9>$VvJLSz7z@gOOD^9;jWolPevd#;&jr3*|l6X1=_H zZdj=BRDPt=ao@GvAikO`oo78CaE1J=P>t5SADS~W3XN`SM+o`E11ZIdJ6Hvf3b0-1C*aysFXK;W@=j-L z<*{hGm<_#5DvKE(<{ptx;_5z;+RyOP5BlO_a8b)`Y#W4RAQ_<++_pNgM2b*Lr(4|@c9d51JAK8Nu8nN;ClQ1rS#DEL#%aqUl z-El5rlK|D`E7>sW=uWZ)IQj{YIA;M#9k{o50HvI9r^M-rUtIs$a%ufkrlzSSlc6ZU z8)$=Q`^n^5`>=CbaJvS!%Zgn_wkQs(9ZK8;*7?VCaYP($WpY9d196QLy-S_^C4j1k3OGi7s4b++nDKh(xiFP8aqCC3l2Qv+b9 zP4ypLe9OwU#E#Eg3Q%FuQS5L(L{Jxn#s5?)>d4c#yAzBM8VZvCJo0KMIVwbJ$K)DV z$uW(=W)Eu zHAOGxsx(7oO`2gzaK6baT&jWZ-g{V?UGVC5%OIB|)@&b+%i^5t-NJpC%@BbqdVg)% zAR4`GukR~^ul%fPX!yQEy2ci+OY9HmC9D3Ea@5n|WV3`k zNV!uW<({0}e?6tT42PS7q4JxUjRfQG+V3?QQ94EBXuOwtAj!@sMsDmB6txW0?Yl?I z%UEGh0v5qj@C(+-8vdMcgR!rA7suuAL~8r_;Els<$wmOihZ$@cYM|6I*uYe!Hu?-g zTAP_%=Cp!Kd^>!;*UJaL&v)kM6Z43OtTX!tjzs~JgOvLdZqbMhn1?M4_BOjpwN$X5lAfEDIcjQ_m`7U^szJ@X11a{cz^33dL2Gg@$oZD4=C^}9P+6yjON5B3y_4T= z;?1R!jQ1jmo9M@?VB;ToUQUkA{=SjG|0sH+45tp0(~Uh}5sQ)6@{eyi9b2W@upRws z?)ge?eHxCVKc>JF#Cpf+6Ia6sn)>v)nIAi3!kR*om z1c~`JKZQFjmOm!cbHlaEy5`@4|K|oKm0t%0xI3&2*W59X8u>tTyVmvrBmZ3RnQ^cw zmh01p>Xtv|*48cFpmZydt%!N*%+HeY{=E+V zoyM5LIB?iL&wQt5#V(jv0!Z^CM{^hrBqZ3C44ncWil8~Ai#)Ri5i?nl$q_8kRb25% zL!r$s0wmm-Y9qC6w~0S5E{3v~8v11L&WpaJjU_JTDl z!03l4>^~%;c(w%%Z<1)oP3y6*eEbQNchEX~E`p|~-lA;BaXn?XvgeTpZ(QGS3;DLa z;|c^`XBk+u?|$b6d{E;$(tcU2ej=TA@@3{9I$c3CX!^3mMy~8~NyZ^6-w)|1EXXV@ zIcVh}R@>V;o>1hFti>QXdcew=Crd`GFQ8sv*}Y7T^gRA<4-z1KQt{-+yf#tAqXO+|H7vNw+L^{kBn^U zVSUp0S+1ksYcWSWOo|BkOPcJIjEc`n4wxeaM8D6dZOteL0qJ^kji`?R`?S)mcF5QK zQZra@b2M`6+2eBIt02f@u^Am2cH`~3Cu9TodC6rpy_RHjy?k;nUBqu@i2X%=T9Ty`aNiU`5Y zZjRdsodF2#b8(YP<$k~6I8d!G0#Rn>)h@!}9663h7HtqA79hBVRKXvzQM*8-&hmYq z>=!kIY~Qr7)r-fE5H zP0{#}J+FLDLA%xZ2F6i#)tim4yB}f^g#WV+a{$VljSc@j+fyLEp7d|Zo!PJh?JCQS!+)c9eI;f1 z^M5TCTIL2y0=%Ph;sFA7nA(?^FSktu?hC44q-;=&Ckjk_%2S+9ZY~I$Cg$$}76!<< zJ7?SSv=wUgQYR+0Rz`I7TR(LDhyL>zj)@hN+a*ApOVSyy zJ9{Mv@DN?R{DtpO&54fZ2X{=&tMCr^0y!(@oK|RjbLhvb<9qSg8SwmUP50PceF+=s}elxhzBgxz8cI!;BY!BxF&0_@ zDNwsgzHvCC9AQ{hpdgDZI4l5}h@svBqyG5KW$Q47nUd0_3HP+l=e2!xqwTewjm4NB3Z&nm>*o?5#m&x1 zvGGS01IHT$R?jZl`sc9-1oCw%f3plnnuK{pzb5w_F1MA!-%I>ycV+S(_6&ITzKI`` zO@A(yd0p};BCX)?{Ysb((;qpf+&xk&H5wU`-vql|4BStjqJrMyB4F2Q47Y^+aC^t) zp~n^fAqH-Vu!8%^_EL>1LWA}`X~@Q3md202Z5QN!pFZ3aL|zI_C#7jIrZOx>9WuUr zy8Y+I>mHXy0k=QE44|&bgS5^)a2AVjey5>I@RW;>XUy=go{sHD%POBm(@HXO%byH& zz4Z3M?ye@w^Z9g~9^?HVzH&Eb-Apxj5BPwzA;12(m_ zTWMu5=<&rjY%nT#C8>=?Qwj{d*1(Ib;VH=;X4To@%J&tt4?Aoe^8@1wK2XF*%*F%G zmv*boRQDC`ZZ_~O`@)oH13JD}XY&}+6ZoCCMQ@@ev+l%_`ut=gI2P|xj?x6OM%~S@ z!C_{f3M}l4DhS2wbw2({d|-I0fCgP66!x>W>)-w(7N)@B5j0%j&#C7Y1vM4+8ql~-r`hM|Ww*ez=|T$5Ddq7rQ4tU1^!1LepU%m60Lm#oV zSk_aDT@`5z0;~7@o|7~?Gk&i!AxOj{$=YYNd>kZz1aMDo?-z%XLx%qx@eW$o!Szuf!p>DI`#d7TaHd_cd#m@DX|StXWc6sUSIfZWJeJAu?$#|@f7!1YNTnLu zY@dak1s?i9`PH+PiCT>9e&qMAfPmQ7v~fc{Zjwf$t^qq#{@jHs9h>#tgi~2t&ll#L#uv=h*3mW97{5D+FVkmBb~13oB0h zHrQZAuLTFhRhiGFbXkk;TUE|`_J)|S$AMgp6Mpl+Wp`0Koo&^9Xt1ewt(pr%pRX3$ zKg?Wn`NS`M{6>l1GpV;_u+`9fY=Xp2v%D2e|Fk1(vxG56op71ZFSj{Z0nC|dHpUI+ zOnaBCHA76DM7BunH|^R|lXbMx(r=ah?EAwZ1FO_{-3JyL; z8!B<3E%Bs*wn1ew2`2RKJ{Rb5 z2!&oO-EKX@Zwo-Ich_Xqag}Shyv=MUChiu~E25!^#pu1~#o}wz6DdC1I?}i%vV92F zchP>N)sO~HpH3WEjMjU7Ymmk8`)P%jKE^O*@po#o!Pwkq#r5lL`CQWD>%VS#z-4X2 zbS<3c2vw04gNGYNh%3LTh{Z$-^96*%HHLe^rmZkfBTjmpH0L)bgWtbKbuFKKv6t8b zH^}SU{=pvQwmtTA(9;W(g|=w#qw}RRCk19%hgxO3U}MmyhIci*ouvL5(f8S3Uev|P z>!FB14)Vh%aq#!mIU=>Pw@qs#bg&&qVdEeQbB`D8`0ckY^#)(L*Pzo?0fi<U>f+?m#0tWOeNx^3qs;j^j@ua1hbZlNjnR(px^D3wpSYAA!B8V z*5?~&`MJJEx?*b0Vpq#G8nrnfT$ZDaQzS{UYgV5%haj0QpWL4Ie$G932!e!ox4#Rp zJ^7vaSh7q-T;+#Cr&shW8TV7*gNdYXepUT&EA#XwFTHc*=#7#TTp^KEO8BDqZ`=E- zlJk7s>dz^^n;R~0-$<~_r8;$Brx3;`h@Mr~wM|INRf>D`J(56Qa2LoeN?T6WM-kdc z_ued1!L7Um*u!PGTSPci7ga}?#L*{63X5F9u(y{ZQD!evflB**e2#y8} zP@c!rMC9&F0u=c~7I?qMmw|bSi5<9?ze(hl*CfH@(NEDh_sXG1n5(~3H3P^Q%vG{D ztd1Z)=RL5onT{CFVnAtUHZ7B7kSJgW8hyzp(V^>9oKi__|6XanSu}tY3{KKP;3CwO zybPD(H6xqWW`i4)*-Sh7;VcnIRHXcb?lp@H-+*|=HCXDBYv*1wmSXxcX>Sp`xF+jY zYwdW>a;TvI2!Ap_N-Z;v6>+Q6*xul)%$)4#cg1+5tH)=%H@P1SmhREje(b=RAHDEA zvLmBq&_OLX`^k&rdmjG-HubdNi|x(>_ZoM0a?QD5TLu|A^lC0;6vOiCb+t#9zpIAS zt#M7QaI%y6WAHr;ORyKSJsVGhwOr^geIvR_FRz75`{ZF9=O|T4Qph{biKWj?FlAgT84r<`Vd;#gbO_H`5{-6@Jmh{8y=^gQ?0D( zvuejYTDYMJxhpNGAS*mXwmPgxl~o(tC%xr;sl7KOsB)-htK`LU0;O4EEO_jf59ZEb zZ)@#z>2j!%!2h-(dmoav1U_Dcf2XJ zCc3Q|zSQF=7urx8I4O`q7uOndR}!lv4+Sqhf4BavsYMRloS-D%?Q_jD0R6Y)<@c^Y(crdb1%nc3YjNQ3}aFzv4Ny4_}925e-3R6-K2XZu;D2a0;ML_d!DM%V{ z0B0D+U%9H0joW8ymk>r2UEsxi7Y@a}R)jPThBQ>vHp6FBU+@THxcvmw8A-6w7? z+z}gmO3v*Nh7(qFPKPc33 zm4RoA71oW+bSIdSvmS(V&L;wIoUvmYhfv<_I9~Do;dv0GtqKG=6>SQ?Ar#Z~FXmnlaTujk<*~-jHEZ+b74~Fm z=&px{*IeyH>GWO4o^WVdI=)cnms2cX*EyphIi^<~uOn6qA1AHQLTV0gAKrZd4~-Ei z{5&-`8(tMj^&w|>-B~pn=DIE5G9PD5=MR0?@Tq>!jgcVR<58t*e>Aj4epTIJEbLQM z&{PdGgrX=w$7`~#jHurU?$_ZE5m$4q zi~U2qHtcb7;3Axzt zEju_8zp2d!+_t&~@xOD6JPe`I{**{$ySU|^hO9h6%denD@obI1K{ z<5U2Qlb8GV!^%kPam&uiRymLPw}RwNk<9fgGII(YTgkLsf%_7B9xH=~*UWA%U2AIF zc)_Apc7+88hQ-r;HZE6E>N_Y=gx-)qsat%2Yq5=BDAnkHy+-~0q&l)@ZPZ#eCM#l1 z?bFw@r3Wj(aTe%;fJJmB$Ye{jK2d8}kQ|e}>T0lsLDOS>|6uBlvRzgL!w3l31B_0O z!p9q6?g1W)0)8HaKQH#5w@|jA9k3;!wx`J3=M%vGp`jxV+joJd1FCQ?+8YN>hPOv1 z|DK=y=Y#Qhbp#S$9-|7*skWbr1TjUTJ2}8ze?Raqq<@p4EbiwJI(j<; z^()HPU30rb220i8ZU28@hi#>FMyvt^v2*Lj~!CC z??IuEH~c90mho8Mk&CR6neN#))MA$w*EsyS4++IfKXEDC0?Uz#Q4|IX)1j1TL}v63 zqg#*y0*S&@Afc=DwO76E7-*|`zzgsr7KWh*%4_1Voq_`PK00+M>R>LC_JA4hT=z5DPKNT6op@unKfN*cwC19l}c`6UnX&oz4@w&|p=_2YY&( zyAqOqyNepgL+#Ihsc7tbmh+6%xv9F$gn<9hQK+BwH0o^jHv_<=gB~zc5lZY1Q&%z$ zI6pGFV2hh%rX{_2F-2^i=<(*hNqCUGbWkpM6bO>MyU(0ZGH#UKY&_>?y?Q_qCK4^@ zC~s$ez1Ui5JY&hq`{l1V?@{WC52Ecs?2D^gu)UEA3MFsvuq>vLtnEf?$p&c{eo&^P`YbWlTLoS zv{LEcd^gWDdGu1T5`9bf4K;nZBol~g;mBdp=!n@L=+C(#0`0I#%cJ}8?>|l57quis z*3W6ho!k2EV??dbHms@qUeW7cA7KnxuZW*8rDLrV_olxx)x5F;%^GB(&QQOJ284WK z2QqlYd{1x%;-%7h{e5RXk0$(axl?Z>t?15lxfhce5LfWpHk%d@Ck*F0L+UJZ z>W>Jdl>rut#_;Y6c4P3;C3cp~1E=p9&iiH_A3ytgS(iQ)c>dlnc}iPbp@Jyr&VW+P z*P|e^a(!bwdcWE}t4Cqx9K6));ldob`M>#iHiKp*cHm zL}e)RmY1RUTaKnrYZP@224Os>9>% zeyvRQaGzoD5V(?0?8ZVTR06VzBgh?rXe+sO?9gdDPf3e9N7=KLA{HMJ#64vv5g8}nteDq4 z3A3x8Dw=F>na`pHE)II|%(+(KAziZudBBSi;6=plAT`@&B)x}iK+I1#$Cy9RSV(HZ z@Y8Wa?aL<^B9ir}OZtcY@)~9!wY=bU+`kxOY{TEb#?CKBZ~?DWkPWJ5We ziJ6_HO&r_3>_S{5S&1(3Thdm6qJ%{@tF6z+Pbbz*3k2lu0-w}$EpS3q9Uzd?iov<$ zJ53`rXGR12u`$~Pcf4cy45O$0F`iBHz5T8sia7RLuFNFc#+t3e;_1eUDPc3q*$nax z=C^&LW90Zla!nC?K+?8otUbK{+oWZbt5pa z$x=+*w4kHSuU79_nk!?5Q5l;%&tuuPq@1bbBtI8YCk^(mswsHg;Km3CV1O0*oUZ~V zyr2;fBJ#rgM{{)hZK=I4@6))=*hGCgC;>EeTrLg9- z@qSNEqk`t6jMP}%@^$jL7Ip^b$$F4= zCG+Oom)u$jCsZ^UY-Q4U5X)XxUm)dNmvqT2NIAMnyG(Q9<|mI!CGHH}VDTRI7*4s! z%$=)ZfEN+>T8Tbe6j)Q|2hTUiqU%rn+~_~oTx$2H9*9_P2jDt2i#Vh58`=^)X|%SF zKQ=aePgbJ6SEwOVG4ie!f4v~&>rBgb$|`-NdK7#RISrH|8H0g_>8H2lquYHX10osh zRvP6k!%K^bCK>V(yCe|kZC*WE{KhqZ+xRnztM=f9oBn;RS$S90dKhu5lYhXR)p6m{ zS8H6wR02j`R~w#!%zS=d`d;bx!UX5;x`LV39@Wqv@Uo?1;bi!%^=wI82S2isohcx@ z76%fr(Yi3;2Tj0R2O_x{1hN*QEyv76Dy3vuemN(!k^bTZTL85fbtTZa2B-ToT%)uQ z@PQaE^;N%-iPkl0{L!_)e+6dsSV*_6(ANDvmyxJ{t74#k#?gMNUk@Eu297=P1;jo5 zEz&v4W6D}HeUUSn)R2r{X=-M6p=R(OyhnhR>KaIro{?myQ3Cvb<}B;yR%P_GX_wJj{d z+Da1!NN4cTK7GKXK(Cb%Ai^Quki1jq@IEjE__8|6{@#c}0phL>TgfwlsVJvI?i|*w z?Q7^`B^~PZA^PnGrWFwNV516qqk0|GK0t*#Fp!lXTp)J@F1ZPkzHcP>*x#rYpwJ|8 zq1-fT@E8~nLi}8>tf6SY*dHrvspSR(_g!nT)_R8fe(trd_r@`2 zC$(i8mO&7tcJRPnR|tZGN7!qm68O>Eyd(mG^r3@$9o(b*$9Sqqsi&hYCjuX#t@bWi zqq^xA{lA`{a5f>Wy;^d0*}fY~9W)%C(@!vctp7UE-i|Xd@lP$8d87F^lJwjiT^n@Y zv+}0L>SH?+qM+^i#%hJD;k3=RWTWw*1m38D`D~}H5T7sj!!S8oxG>K%V^abmW<%Ck z!VyRfeRRfocwYTj+cg#NOoeEhAS)F`GZnpLDT1oBg7@f02NmkkR`kQ*YO6J%4OSO@ zjefkrsTUND2&Ba^G<2q?IVAbV8xmqG8a4Er(J)vB&9VISk2ihDO8MvH|E+E*RH6w4 z-O>PzFGu`}k?zTTz*zAjczF5uvb?x&+4&a&Cr+pvpfj$+;b`^qI*(a9R%@w3>o{Fz zxq@2+DF!q9RZKfOKG+r`?;l~5q3v4p-KP{ztN31d!MJHei+cD~Sl-d{hLXLQt z(S_ye5_CMd9U~*vz7x!m7!0Od6>>I*R{}(JiduANXK1gWi7}rF47Z_0$);e`mJ+!i z(>TJwPakB8LRohR1b?yI0h5N;BJ~CxB`WL3TpC%K^fwjSxo>Nv;Sb!?KQS>eOkW6}e_eC=m+F1{#qYFa26$*`K;h|zjG${&sQI>a z#}*o0^`benIL*{Ec}HGsaHSNmD*myQ4y8}EX*POEdHcnAa!1NSCf^Zn{oV;;JHb^D z2r9y{8BRMu3ss_ikaUebQ%~>}GMJ;~jjD~Wm`vigg}Np)!6$DgC}}ynTNA0F0m1J* z)W3HS$AI;;*U3F9W`9U%KjZTo(3P&z-h?WH{SJ=zJ$Z;@Y3-qBDYl*SK4C z{$h=4Bn3fpedV>jrWFJAQ*m6LYuEW6e}0MXVk;Vki%2zRXdi*Wa61QsybwmKlXgHm zFf*sD=iRVd2PyN{ib(thk9Wzw-DOxx4dESXprDEFB@;=F*$4cfq?IYkD~E0ZSFG8u zY_OAvXk873R!HCRuZRkEaLID^HvF054bZq`i0(2k%jrJ;zy8C9NtYMlyIf_9|4>ZT z_t;FD&3Ti{;jGc*8fTSUQ&5%kkQPU9MRAagw)&o;64Erb)|)LIEJ!5k#k`#bS)%=l z7l1@UpOT6(tL7?M?r`)Vd%M&A2CsGU=cxof^C71ETT%7Gz3vqE^Urvuaa{UB_Zca6 zk?<(08XB^Bv1HYI6Ac}x^@Sd6bpD^b#!Ml}F`3zG#?;h@zT0_S zv}}XJS-2+dIC9UvjE%6KH(q42-?ug5jmlS5Hpj#jD$1qU%iN2$uG5wXLIzdyM=)AlNL@o`Nf!0Nyi^_7q$eA(7R zxQ9T1?A34HN&5h2opjmbZAX#jogU1iW6CHqZ(X|jUlD3mCdi3cH~-R(Tb|?rrYz<{ z>+|jZ1K>u>pfoRGny|}$I9~2vJ5yuZVCh2f{dQJh64QPUYIgHiHZI%`Fs<@Cz;ypo zYL%{*Ddqg62fsnmAa9BJHG>^eunsRuz_)LFI#T_Qkd)6XvxMP7mZH*G9|6B7cSLWd zd2cI>f!abkOd7M9lC-IM_1FL(qP2{gnD`~Glj0M%UdV>Cd^Bw!+Iqmi=2;>%yx6TL z-37~-_^RBVs55yptr34toEyH6%#lx0YHCURM;+PK1~6QM`}hIuvlpr5Nv_j_*Tye@TIV!MHM4tT%p z#?W=NI-;E}9i?UR?8r5GifB_5Pl_^5{5efkzQ~oTKN`f(+%96< zIHHC|)?J@QK`1^U3?2;RW2!zv$sJ5WaU=g@|1`8f)JhqQxPWnD=9~-fn0V0JdjpQ% zd>ztwk++tHRdD!9gwhc(UPvmGw=iaO$Q)*MEUIR?Iy0Lv`l``*VITUwHXQw|%m;yh z1|b@4^%*lC3-^e&UYC&p=N$Yz-h%OA<4EM34ljl$2wmSXtyXStC2zH*SdoUgp}!dG zR77HT*l?H6eLmW4W}mCKyIRn*R5hYYV$Ge-T)9uh;snd~N1;@|iw28_@IJ|Ng3DXH zq>VvHtJ2OG!Gh1NwRduBzku3H8P;@JK^fU@`AFC;ir-Z|JsI|wu~+U6;yHPBkUBF-I1FO(r3qS~bKqm@lqg=&2P5OwCW-u|U2hyFc($GK;-t@Y?eLDh zDLDqXr}7H9Y${FIiIw%s79@X8+$B?f<4)#u(-TF-ACFZbkQLg67pSb1u!2|HEnzTF^w2Nu9FY6*R@f~>A!6EOl`JVoNz{l0U^UG0k!Jv z`ATzI6ixDyLiZ^ZU63|y%!|cK+oP-GBXgndo6)#qV30%dGxG9O^g`b)OOp!&sUDUy z*IGW63VdaHFNE+^Kl-AcZiQNh1`PfLn7_6BPehhc;Yc6K&`>YOWhUjWUEf`a_%F#@ zIp>AW>l&cI3j+Yi*Z;16pB1%E_`;wkwdmZpDqknvN{iz;J_cyqBLK`|6181Vn|8yr z%MB~;wz8@!(S#$4KppTldJ`269di_6bRxmhf4It+RfkJU4jnomfR)J&HIQ%pbNvk}s zhy>wa6}lRPoW=rDmM_1!vj?7I+9eu#n$5xXUGS6MuYJ-o#)xX7Ht}YVr`BmeMJ@*@ z#XhV$Vt{zg!UdNBSc#@v@JW0aG)cA;n8M(0V82{0?%ECDJ&RNE*<^Vv`dp(fPlfxS7|^2ZwDL@u|_+4>xcuN zY%@#cGMBJT;N0j53=o`}e(00I3oUQROq3m$w$z#jJry~n)Ktcz+Utm}an2VI$lE|k zJ1>QQS*=wQ)pS+-hnf6a2QpiZkjnVAAKf1DCxKe$~c}o2MP9 zXiJa~p<8Y0S*jILO{};!B^3*2P~ke?heX-HO}or>OlG&BalZkLReaVbMr{qS=vZhS zQUeLdxk`Rje@HrSw-x1Ie9)Z!x1cX1ZaUHq2G1YR%y-lp&T9YK{Yd_ zUKW47_Egb0Lj@{?YS7X59WK5>iItwO{UXR&wB!=wq>+;^ivFxq$$O)Y-8H|m^D>a+ z#fO0)$A~_Ms3Z29b%{R23xAB(%nte2sb&A z?gU{n{f=d93P2JBQ7W9>$`IpZn;tP=)y?1+#9n!@Yu-)_4AYI z+uSM*6+{Oz-e}8XapZ{%MY#}4tXjO zmgNej82+DcDP}}j8EQWO+3?f_sjuXlp$UZ+2yQdjF9jovi1lewqJV4pRXoM8JIg91ai8~IFq+hznKCPLemtbnsG22J4bMh z;jByk)4n2hY;mE0Q@Rh6__Z_=Bec#+@RCN5H`!+-P^71%qw=)O>K!%^;F$s!m3PK~ zc$>ObMQl7r<1m%MF}AuSG+zNNZHBaG@9f)rM*7$T(Ql&KG*TCC$%+LmxSKk zI|+OpXq|BVsAkJJQsey=paLH|nK9OzL4Izk7Smxp-OY+y(>O08F!v z?5>E+g=L7|)^Z<5%vHM9l8#|=c!M`2gKW#S?70Du`3l{HK<1WGp~BWH#d63^1tKJ7 zx5l47ZW$ryL-CGXT(0O(1N{-POD2alKz7G1!@q7$v1X+2NL$F`e5xb1-fX%IZn&Cv zgL|srgyLEBZfF!!C2!aeF%c%M$}^fjNZkzwEHjF-zvxV5;Q){>TXW9}UtXhHwkoID zvzOSq$cS7`e%4vNi_>&EN7IxM|< ziN7R=BX^K?zXK%&t2XBJEAWbjmKR`*ubL-&Z-_C{);hlIA^w+*1zIZK1{x|aG+Y~V zqQB}&HGZUB9Xtr%n_1FfxEqn`_HUw3)6==AxQ3u109{=&xL9-5evfQo*JnnCUunQ!y4s4Cvw}7tBl*Z=f<9V0W#}{AX zeq2T#0CyUjH|*#7ct_|b9tXo&gq0j7*6H$Z&Qc636J`__ za3?@*({M6_miM`j-2gGd0D@pNB!9=j(GMKXC@4G{)XnPRR(ViFJF{G8N-D~zDc>#zITkcCrl>iKU@fNZI87YoVDOSPv_b z^r~ck4C&X58Ftz&SY8n0!nQxT@TB?0J&J9^K#-vDs2f*}$GzJ57x*{LEs+JNwUAHV zr-svki_gr&YqltYc@P+U@J0Y%$4Bfjci?P!!7pB^;)X&U?TEfC{;P1Wvkz?>`GKK& zo?Zru1WGCc_fa85-c!`e&h7cR+VkOK5sj?7^xV?WJQta*a;y7Ius9+>UmyAig?OUA zd*HhYbE_r`j=mVY|1k1s7?Ydugb%&krM+jA zXXWDPEPGB%_rMPjf&fbzy07;YL=UdWteI*p&F?flEQnjr_7(J7DRzpS-Uk$xDv^H6 zdD>H6(jJuNW@_I*cNXdPsr6pFKZ)@G}p7V&Nwr z{N%)+b>U}i{J-jhFbi=A1TB56_!i)&zWAxJe(KDhiu$Lb{;yHgEIAZLTGWooz!SlT PThPIM&U^EJ$6fjt^aVyN literal 0 HcmV?d00001 diff --git a/front/src/static/images/preview/eafc3340a67b9eb3c675513f1fe4cafc.png b/front/src/static/images/preview/eafc3340a67b9eb3c675513f1fe4cafc.png new file mode 100644 index 0000000000000000000000000000000000000000..e0bb18efa70960418e7ce477a6dfdc3d02068a8e GIT binary patch literal 11654 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 Ji*@W?{12%ZgO~sS literal 0 HcmV?d00001 diff --git a/front/src/static/netfront_f.js b/front/src/static/netfront_f.js index 140e7312..52b05ba3 100644 --- a/front/src/static/netfront_f.js +++ b/front/src/static/netfront_f.js @@ -4,11 +4,11 @@ let global_eh = undefined; var NetworkUpdateTimeoutId = -1; let NetworkCache = []; -const uid = function(){ +const uid = function () { return Date.now().toString(36) + Math.random().toString(36).substr(2); } -const HostUid = function(){ +const HostUid = function () { let host_name = "host_"; @@ -17,8 +17,7 @@ const HostUid = function(){ t = nodes.find(t => t.data.id === host); - if (!t) - { + if (!t) { return host; } } @@ -26,7 +25,7 @@ const HostUid = function(){ return "host_" + uid(); } -const RouterUid = function(){ +const RouterUid = function () { let host_name = "router_"; @@ -35,8 +34,7 @@ const RouterUid = function(){ t = nodes.find(t => t.data.id === host); - if (!t) - { + if (!t) { return host; } } @@ -44,7 +42,7 @@ const RouterUid = function(){ return "router_" + uid(); } -const ServerUid = function(){ +const ServerUid = function () { let host_name = "server_"; @@ -53,8 +51,7 @@ const ServerUid = function(){ let t = nodes.find(t => t.data.id === host); - if (!t) - { + if (!t) { return host; } } @@ -62,108 +59,192 @@ const ServerUid = function(){ return "server_" + uid(); } -const ShowHostConfig = function(n, shared = 0){ +const ShowHostConfig = function (n, ip_update = 0, shared = 0) { let hostname = n.config.label; hostname = hostname || n.data.id; // Create form - if (shared){ + if (shared) { SharedConfigHostForm(n.data.id); } else { ConfigHostForm(n.data.id); } + // Add hostname ConfigHostName(hostname); // Add jobs let host_jobs = []; - if (jobs){ + if (jobs) { host_jobs = jobs.filter(j => j.host_id === n.data.id); } ConfigHostJob(host_jobs, shared); - // Add interfaces - $.each(n.interface, function (i) { - let iface_id = n.interface[i].id; + if(n.config.dhcp==2){ + ConfigHostCheckbox(n.interface[0].id) + checkbox = n.config.checkbox; + } + else{ + checkbox=0 + } - if (!iface_id){ - return; - } + if (ip_update == 1) { + var update_intf = host_ip_mask_gw[hostname]; - let connect_id = n.interface[i].connect; - if (!connect_id){ - return; + let default_gw = ''; + + if (update_intf[2]!=''){ + default_gw = update_intf[2]; } - let edge = edges.find(e => e.data.id === connect_id); + ConfigHostGateway(default_gw, checkbox); - if (!edge){ - return; - } + $.each(n.interface, function (i) { + let iface_id = n.interface[i].id; - let source_host = edge.data.source; - let target_host = edge.data.target; + if (!iface_id) { + return; + } - if (!source_host || !target_host){ - return; - } + let connect_id = n.interface[i].connect; - let connected_to = target_host; - if (n.data.id === target_host){ - connected_to = source_host; - } + if (!connect_id) { + return; + } - let connected_to_host = nodes.find(n => n.data.id === connected_to); - let connected_to_host_label = "Unknown"; + let edge = edges.find(e => e.data.id === connect_id); - if (connected_to_host){ - connected_to_host_label = connected_to_host.data.label; - } + if (!edge) { + return; + } - ip_addr = n.interface[i].ip; + let source_host = edge.data.source; + let target_host = edge.data.target; - if (!ip_addr){ - ip_addr = ''; - } + if (!source_host || !target_host) { + return; + } - netmask = n.interface[i].netmask; + let connected_to = target_host; + if (n.data.id === target_host) { + connected_to = source_host; + } - if (!netmask){ - netmask = ''; - } + let connected_to_host = nodes.find(n => n.data.id === connected_to); + let connected_to_host_label = "Unknown"; - ConfigHostInterface(iface_id, ip_addr, netmask, connected_to_host_label); + if (connected_to_host) { + connected_to_host_label = connected_to_host.data.label; + } - }); + ip_addr = update_intf[0]; - if(n.interface.length) - { - let default_gw = ''; + if (!ip_addr) { + ip_addr = ''; + } - if ("default_gw" in n.config){ - default_gw = n.config.default_gw; + netmask = update_intf[1]; + + if (!netmask) { + netmask = ''; + } + + + ConfigHostInterface(iface_id, ip_addr, netmask, checkbox, connected_to_host_label); + if(n.config.dhcp==2){ + ConfigHostCheckbox(n.interface[i].id, checkbox) + } + }); + + } + else { + + if (n.interface.length) { + let default_gw = ''; + + if ("default_gw" in n.config) { + default_gw = n.config.default_gw; + } + + ConfigHostGateway(default_gw, checkbox); } - ConfigHostGateway(default_gw); + + // Add interfaces + $.each(n.interface, function (i) { + let iface_id = n.interface[i].id; + + if (!iface_id) { + return; + } + + let connect_id = n.interface[i].connect; + + if (!connect_id) { + return; + } + + let edge = edges.find(e => e.data.id === connect_id); + + if (!edge) { + return; + } + + let source_host = edge.data.source; + let target_host = edge.data.target; + + if (!source_host || !target_host) { + return; + } + + let connected_to = target_host; + if (n.data.id === target_host) { + connected_to = source_host; + } + + let connected_to_host = nodes.find(n => n.data.id === connected_to); + let connected_to_host_label = "Unknown"; + + if (connected_to_host) { + connected_to_host_label = connected_to_host.data.label; + } + + ip_addr = n.interface[i].ip; + + if (!ip_addr) { + ip_addr = ''; + } + + netmask = n.interface[i].netmask; + + if (!netmask) { + netmask = ''; + } + + ConfigHostInterface(iface_id, ip_addr, netmask, checkbox, connected_to_host_label); + if(n.config.dhcp==2){ + ConfigHostCheckbox(n.interface[i].id, checkbox) + } + }); } - if (shared){ + if (shared) { DisableFormInputs(); } } -const ShowRouterConfig = function(n, shared = 0){ +const ShowRouterConfig = function (n, shared = 0) { let hostname = n.config.label; hostname = hostname || n.data.id; // Create form - if (shared){ + if (shared) { SharedConfigRouterForm(n.data.id) } else { ConfigRouterForm(n.data.id); @@ -175,7 +256,7 @@ const ShowRouterConfig = function(n, shared = 0){ // Add jobs let router_jobs = []; - if (jobs){ + if (jobs) { router_jobs = jobs.filter(j => j.host_id === n.data.id); } @@ -185,50 +266,50 @@ const ShowRouterConfig = function(n, shared = 0){ $.each(n.interface, function (i) { let iface_id = n.interface[i].id; - if (!iface_id){ + if (!iface_id) { return; } let connect_id = n.interface[i].connect; - if (!connect_id){ + if (!connect_id) { return; } let edge = edges.find(e => e.data.id === connect_id); - if (!edge){ + if (!edge) { return; } let source_host = edge.data.source; let target_host = edge.data.target; - if (!source_host || !target_host){ + if (!source_host || !target_host) { return; } let connected_to = target_host; - if (n.data.id === target_host){ + if (n.data.id === target_host) { connected_to = source_host; } let connected_to_host = nodes.find(n => n.data.id === connected_to); let connected_to_host_label = "Unknown"; - if (connected_to_host){ + if (connected_to_host) { connected_to_host_label = connected_to_host.data.label; } ip_addr = n.interface[i].ip; - if (!ip_addr){ + if (!ip_addr) { ip_addr = ''; } netmask = n.interface[i].netmask; - if (!netmask){ + if (!netmask) { netmask = ''; } @@ -236,29 +317,28 @@ const ShowRouterConfig = function(n, shared = 0){ }); - if(n.interface.length) - { + if (n.interface.length) { let default_gw = ''; - if ("default_gw" in n.config){ + if ("default_gw" in n.config) { default_gw = n.config.default_gw; } ConfigRouterGateway(default_gw); } - if (shared){ + if (shared) { DisableFormInputs(); } } -const ShowHubConfig = function(n, shared = 0){ +const ShowHubConfig = function (n, shared = 0) { let hostname = n.config.label; hostname = hostname || n.data.id; // Create form - if (shared){ + if (shared) { SharedConfigHubForm(n.data.id); } else { ConfigHubForm(n.data.id); @@ -267,18 +347,18 @@ const ShowHubConfig = function(n, shared = 0){ // Add hostname ConfigHubName(hostname); - if (shared){ + if (shared) { DisableFormInputs(); } } -const ShowSwitchConfig = function(n, shared = 0){ +const ShowSwitchConfig = function (n, shared = 0) { let hostname = n.config.label; hostname = hostname || n.data.id; // Create form - if (shared){ + if (shared) { SharedConfigSwitchForm(n.data.id); } else { ConfigSwitchForm(n.data.id); @@ -290,19 +370,16 @@ const ShowSwitchConfig = function(n, shared = 0){ //Add checkbox STP ConfigSwtichSTP(n.config.stp); - //Add VLAN - ConfigVLAN(n); - - if (shared){ + if (shared) { DisableFormInputs(); } } -const ShowEdgeConfig = function(edge_id, shared = 0){ +const ShowEdgeConfig = function (edge_id, shared = 0) { let ed = edges.find(ed => ed.data.id === edge_id); - if (!ed){ + if (!ed) { return; } @@ -315,22 +392,22 @@ const ShowEdgeConfig = function(edge_id, shared = 0){ // Add source and target info ConfigEdgeEndpoints(edge_source, edge_target); - if (shared){ + if (shared) { DisableFormInputs(); } } -const PacketUid = function(){ +const PacketUid = function () { return "pkt_" + uid(); } -const ShowServerConfig = function(n, shared = 0){ +const ShowServerConfig = function (n, shared = 0) { let hostname = n.config.label; hostname = hostname || n.data.id; // Create form - if (shared){ + if (shared) { SharedConfigServerForm(n.data.id); } else { ConfigServerForm(n.data.id); @@ -342,7 +419,7 @@ const ShowServerConfig = function(n, shared = 0){ // Add jobs let host_jobs = []; - if (jobs){ + if (jobs) { host_jobs = jobs.filter(j => j.host_id === n.data.id); } @@ -352,50 +429,50 @@ const ShowServerConfig = function(n, shared = 0){ $.each(n.interface, function (i) { let iface_id = n.interface[i].id; - if (!iface_id){ + if (!iface_id) { return; } let connect_id = n.interface[i].connect; - if (!connect_id){ + if (!connect_id) { return; } let edge = edges.find(e => e.data.id === connect_id); - if (!edge){ + if (!edge) { return; } let source_host = edge.data.source; let target_host = edge.data.target; - if (!source_host || !target_host){ + if (!source_host || !target_host) { return; } let connected_to = target_host; - if (n.data.id === target_host){ + if (n.data.id === target_host) { connected_to = source_host; } let connected_to_host = nodes.find(n => n.data.id === connected_to); let connected_to_host_label = "Unknown"; - if (connected_to_host){ + if (connected_to_host) { connected_to_host_label = connected_to_host.data.label; } ip_addr = n.interface[i].ip; - if (!ip_addr){ + if (!ip_addr) { ip_addr = ''; } netmask = n.interface[i].netmask; - if (!netmask){ + if (!netmask) { netmask = ''; } @@ -403,23 +480,22 @@ const ShowServerConfig = function(n, shared = 0){ }); - if(n.interface.length) - { + if (n.interface.length) { let default_gw = ''; - if ("default_gw" in n.config){ + if ("default_gw" in n.config) { default_gw = n.config.default_gw; } ConfigServerGateway(default_gw); } - if (shared){ + if (shared) { DisableFormInputs(); } } -const l1HubUid = function(){ +const l1HubUid = function () { let hub_name = "l1hub"; @@ -428,8 +504,7 @@ const l1HubUid = function(){ t = nodes.find(t => t.data.id === hub); - if (!t) - { + if (!t) { return hub; } } @@ -437,7 +512,7 @@ const l1HubUid = function(){ return "hub_" + uid(); } -const l2SwitchUid = function(){ +const l2SwitchUid = function () { let sw_name = "l2sw"; @@ -446,8 +521,7 @@ const l2SwitchUid = function(){ t = nodes.find(t => t.data.id === sw); - if (!t) - { + if (!t) { return sw; } } @@ -455,12 +529,11 @@ const l2SwitchUid = function(){ return "sw_" + uid(); } -const l2SwitchPortUid = function(switch_id){ +const l2SwitchPortUid = function (switch_id) { let t = nodes.find(t => t.data.id === switch_id); - if (!t) - { + if (!t) { return -1; } @@ -469,18 +542,17 @@ const l2SwitchPortUid = function(switch_id){ let i = t.interface.find(i => i.id === port); - if (!i){ + if (!i) { return port; } } } -const l1HubPortUid = function(hub_id){ +const l1HubPortUid = function (hub_id) { let t = nodes.find(t => t.data.id === hub_id); - if (!t) - { + if (!t) { return -1; } @@ -489,156 +561,135 @@ const l1HubPortUid = function(hub_id){ let i = t.interface.find(i => i.id === port); - if (!i){ + if (!i) { return port; } } } -const EdgeUid = function(){ +const EdgeUid = function () { return "edge_" + uid(); } -const InterfaceUid = function(){ +const InterfaceUid = function () { return "iface_" + Math.random().toString(9).substring(2, 10); } -const PostNodesEdges = function(){ +const PostNodesEdges = function () { $.ajax({ type: 'POST', url: '/post_nodes_edges?guid=' + network_guid, data: JSON.stringify([nodes, edges]), - success: function(data) {}, - error: function(err) {console.log('Cannot post edges to server')}, + success: function (data) { }, + error: function (err) { console.log('Cannot post edges to server') }, contentType: "application/json", dataType: 'json' }); } -const AddEdge = function(source_id, target_id){ +const AddEdge = function (source_id, target_id) { - let source_node = nodes.find(n => n.data.id === source_id); - let target_node = nodes.find(n => n.data.id === target_id); + let source_node = nodes.find(n => n.data.id === source_id); + let target_node = nodes.find(n => n.data.id === target_id); - // Do we find nodes? - if (!source_node || !target_node) - { - return; - } - - // Save the network state. - SaveNetworkObject(); - - // Add edge - let edge_id = EdgeUid(); + // Do we find nodes? + if (!source_node || !target_node) { + return; + } - edges.push({ - data: { - id: edge_id, - source: source_node.data.id, - target: target_node.data.id, - } - }); + // Save the network state. + SaveNetworkObject(); - // Add interface If edge connects to host or to router or to server - if (source_node.config.type === 'host' || source_node.config.type === 'router' || source_node.config.type === 'server'){ - let iface_id = InterfaceUid(); - source_node.interface.push({ - id: iface_id, - name: iface_id, - connect: edge_id, - }); - } + // Add edge + let edge_id = EdgeUid(); - if (target_node.config.type === 'host' || target_node.config.type === 'router' || target_node.config.type === 'server'){ - let iface_id = InterfaceUid(); - target_node.interface.push({ - id: iface_id, - name: iface_id, - connect: edge_id, - }); + edges.push({ + data: { + id: edge_id, + source: source_node.data.id, + target: target_node.data.id, } + }); - // Add interface if connected to switch - if (target_node.config.type === 'l2_switch'){ - var vlan = null; - var type_connection = null; - - if (areInterfaceFieldsFilled(target_node)) { - vlan = 1; - type_connection = 0; - } - - let iface_id = l2SwitchPortUid(target_node.data.id); - target_node.interface.push({ - id: iface_id, - name: iface_id, - connect: edge_id, - vlan: vlan, - type_connection: type_connection, - }); - } + // Add interface If edge connects to host or to router or to server + if (source_node.config.type === 'host' || source_node.config.type === 'router' || source_node.config.type === 'server') { + let iface_id = InterfaceUid(); + source_node.interface.push({ + id: iface_id, + name: iface_id, + connect: edge_id, + }); + } - if (source_node.config.type === 'l2_switch'){ - var vlan = null; - var type_connection = null; + if (target_node.config.type === 'host' || target_node.config.type === 'router' || target_node.config.type === 'server') { + let iface_id = InterfaceUid(); + target_node.interface.push({ + id: iface_id, + name: iface_id, + connect: edge_id, + }); + } - if (areInterfaceFieldsFilled(source_node)) { - vlan = 1; - type_connection = 0; - } + // Add interface if connected to switch + if (target_node.config.type === 'l2_switch') { + let iface_id = l2SwitchPortUid(target_node.data.id); + target_node.interface.push({ + id: iface_id, + name: iface_id, + connect: edge_id, + }); + } - let iface_id = l2SwitchPortUid(source_node.data.id); - source_node.interface.push({ - id: iface_id, - name: iface_id, - connect: edge_id, - vlan: vlan, - type_connection: type_connection, - }); - } + if (source_node.config.type === 'l2_switch') { + let iface_id = l2SwitchPortUid(source_node.data.id); + source_node.interface.push({ + id: iface_id, + name: iface_id, + connect: edge_id, + }); + } - // Add interface if connected to Hub - if (target_node.config.type === 'l1_hub'){ - let iface_id = l1HubPortUid(target_node.data.id); - target_node.interface.push({ - id: iface_id, - name: iface_id, - connect: edge_id, - }); - } + // Add interface if connected to Hub + if (target_node.config.type === 'l1_hub') { + let iface_id = l1HubPortUid(target_node.data.id); + target_node.interface.push({ + id: iface_id, + name: iface_id, + connect: edge_id, + }); + } - if (source_node.config.type === 'l1_hub'){ - let iface_id = l1HubPortUid(source_node.data.id); - source_node.interface.push({ - id: iface_id, - name: iface_id, - connect: edge_id, - }); - } + if (source_node.config.type === 'l1_hub') { + let iface_id = l1HubPortUid(source_node.data.id); + source_node.interface.push({ + id: iface_id, + name: iface_id, + connect: edge_id, + }); + } } -const DeleteJob = function(node_id){ +const DeleteJob = function (node_id) { let jobs_to_delete = []; - $.each(jobs , function(idx, job) { + $.each(jobs, function (idx, job) { - if (!job){ + if (!job) { return; } - if (job.host_id === node_id){ + if (job.host_id === node_id) { jobs_to_delete.push(idx); } }); - $.each(jobs_to_delete, function (idx, val){ + $.each(jobs_to_delete, function (idx, val) { jobs.splice(val, 1); }); } -const DeleteNode = function(node_id) { +const DeleteNode = function (node_id) { // Find node in nodes let n = nodes.find(n => n.data.id === node_id); @@ -650,25 +701,24 @@ const DeleteNode = function(node_id) { let edges_to_delete = []; // Find all edges that connected to the deleted node - $.each(edges , function(idx, edge) { + $.each(edges, function (idx, edge) { - if (!edge){ + if (!edge) { return; } // Find the edge - if (edge.data.source === node_id) - { + if (edge.data.source === node_id) { // Find the node on the other side let t = nodes.find(t => t.data.id === edge.data.target); - if (!t){ + if (!t) { console.log("We have an edge without target node"); return; } // Iterate interface and delete one - let new_iface = t.interface.filter(function( iface ) { + let new_iface = t.interface.filter(function (iface) { return iface.connect !== edge.data.id; }); @@ -677,18 +727,17 @@ const DeleteNode = function(node_id) { return; } - if (edge.data.target === node_id) - { + if (edge.data.target === node_id) { // Find the node on the other side let t = nodes.find(t => t.data.id === edge.data.source); - if (!t){ + if (!t) { console.log("We have an edge without target node"); return; } // Iterate interface and delete one - let new_iface = t.interface.filter(function( iface ) { + let new_iface = t.interface.filter(function (iface) { return iface.connect !== edge.data.id; }); @@ -699,36 +748,36 @@ const DeleteNode = function(node_id) { }); - $.each(edges_to_delete, function (idx, val){ + $.each(edges_to_delete, function (idx, val) { edges.splice(val, 1); }); // Delete the node let node_index = nodes.findIndex(prop => prop.data.id === node_id); - nodes.splice(node_index,1); + nodes.splice(node_index, 1); } const DeleteEdge = function (edge_id) { let ed = edges.find(ed => ed.data.id === edge_id); - if (!ed){ + if (!ed) { return; } let connected_nodes = [ed.data.source, ed.data.target]; let iterator = connected_nodes.values(); - for (let node_id of iterator){ + for (let node_id of iterator) { let t = nodes.find(t => t.data.id === node_id); - if (!t){ + if (!t) { console.log("We have an edge without target node"); continue; } // Iterate interface and delete one - let edge_node_iface = t.interface.filter(function( iface ) { + let edge_node_iface = t.interface.filter(function (iface) { return iface.connect !== edge_id; }); @@ -737,58 +786,58 @@ const DeleteEdge = function (edge_id) { // Delete the edeg let edge_index = edges.findIndex(prop => prop.data.id === edge_id); - edges.splice(edge_index,1); + edges.splice(edge_index, 1); return; } -const PostNodes = function(){ +const PostNodes = function () { $.ajax({ type: 'POST', url: '/post_network_nodes?guid=' + network_guid, data: JSON.stringify(nodes), - success: function(data) {}, - error: function(err) {console.log('Cannot post nodes to server')}, + success: function (data) { }, + error: function (err) { console.log('Cannot post nodes to server') }, contentType: "application/json", dataType: 'json' }); } -const MoveNodes = function(){ +const MoveNodes = function () { $.ajax({ type: 'POST', url: '/move_network_nodes?guid=' + network_guid, data: JSON.stringify(nodes), - success: function(data) {}, - error: function(err) {console.log('Cannot post nodes to server')}, + success: function (data) { }, + error: function (err) { console.log('Cannot post nodes to server') }, contentType: "application/json", dataType: 'json' }); } -const prepareStylesheet = function() { - const getColor = function(ele) { - return ele.data('color') || '#ffaaaa'; +const prepareStylesheet = function () { + const getColor = function (ele) { + return ele.data('color') || '#ffaaaa'; }; - const getEdgeLabel = function(ele) { - return ele.data('label') || ''; + const getEdgeLabel = function (ele) { + return ele.data('label') || ''; }; - const getLineStyle = function(ele) { - return ele.data('line') || 'solid'; + const getLineStyle = function (ele) { + return ele.data('line') || 'solid'; }; - const getCurveStyle = function(ele) { - return ele.data('style') || 'bezier'; + const getCurveStyle = function (ele) { + return ele.data('style') || 'bezier'; }; - const getTextDirection = function(ele) { - return ele.data('direction') || 'autorotate'; + const getTextDirection = function (ele) { + return ele.data('direction') || 'autorotate'; }; - const getNodeLabel = function(ele) { + const getNodeLabel = function (ele) { let label = ele.data('label') || ''; let n = nodes.find(n => n.data.id === ele.data('id')); - if (!n){ + if (!n) { return label; } @@ -797,7 +846,7 @@ const prepareStylesheet = function() { let ip_addr = n.interface[i].ip; let netmask = n.interface[i].netmask; - if (!ip_addr || !netmask){ + if (!ip_addr || !netmask) { return; } @@ -805,15 +854,14 @@ const prepareStylesheet = function() { } ); - if (n.config.default_gw) - { + if (n.config.default_gw) { label = label + '\n' + 'gw:' + n.config.default_gw; } $.each(jobs, function (i) { let j = jobs[i]; - if (j.host_id === n.data.id){ + if (j.host_id === n.data.id && j.print_cmd!=='') { label = label + '\n' + '(' + j.print_cmd + ')'; } @@ -825,30 +873,30 @@ const prepareStylesheet = function() { let sheet = cytoscape.stylesheet() .selector('node') .css({ - 'height': 30, - 'width': 30, - 'background-fit': 'cover', - 'border-color': '#000', - 'border-width': 0, - 'content': getNodeLabel, - 'text-valign': 'top', - 'text-align': 'center', - 'font-size': '8px', - 'text-wrap': 'wrap' + 'height': 30, + 'width': 30, + 'background-fit': 'cover', + 'border-color': '#000', + 'border-width': 0, + 'content': getNodeLabel, + 'text-valign': 'top', + 'text-align': 'center', + 'font-size': '8px', + 'text-wrap': 'wrap' }) .selector('edge') .css({ - 'width': 2, - 'target-arrow-shape': 'none', - 'line-color': getColor, - 'target-arrow-color': getColor, - 'curve-style': getCurveStyle, - 'label': getEdgeLabel, - 'line-style': getLineStyle, - 'color': '#000', - 'text-outline-color': '#FFF', - 'text-outline-width': 1, - 'edge-text-rotation': getTextDirection, + 'width': 2, + 'target-arrow-shape': 'none', + 'line-color': getColor, + 'target-arrow-color': getColor, + 'curve-style': getCurveStyle, + 'label': getEdgeLabel, + 'line-style': getLineStyle, + 'color': '#000', + 'text-outline-color': '#FFF', + 'text-outline-width': 1, + 'edge-text-rotation': getTextDirection, }) .selector('.eh-handle') .css({ @@ -921,33 +969,32 @@ const prepareStylesheet = function() { 'opacity': 0 }); - const appendIconClass = function(stylesheet, cssClass) { - return stylesheet.selector('.' + cssClass) - .css({ - 'background-image': DiagramIcons[cssClass], - 'background-opacity': 0, - 'border-width': 0, - 'background-clip': 'none', - }); + const appendIconClass = function (stylesheet, cssClass) { + return stylesheet.selector('.' + cssClass) + .css({ + 'background-image': DiagramIcons[cssClass], + 'background-opacity': 0, + 'border-width': 0, + 'background-clip': 'none', + }); }; for (const prop in DiagramIcons) { - if (Object.prototype.hasOwnProperty.call(DiagramIcons, prop)) { - sheet = appendIconClass(sheet, prop); - } + if (Object.prototype.hasOwnProperty.call(DiagramIcons, prop)) { + sheet = appendIconClass(sheet, prop); + } } return sheet; - }; +}; -const DrawGraph = function() { +const DrawGraph = function () { // Do we already have one? let cy = undefined; - if (global_cy) - { + if (global_cy) { cy = global_cy; var collection = cy.elements(); @@ -976,13 +1023,13 @@ const DrawGraph = function() { // the default values of each option are outlined below: let defaults = { - canConnect: function( sourceNode, targetNode ){ + canConnect: function (sourceNode, targetNode) { // whether an edge can be created between source and target - return !sourceNode.same(targetNode); // e.g. disallow loops + return !sourceNode.same(targetNode); // e.g. disallow loops }, - edgeParams: function( sourceNode, targetNode ){ + edgeParams: function (sourceNode, targetNode) { // for edges between the specified source and target // return element object to be passed to cy.add() for edge @@ -1006,9 +1053,9 @@ const DrawGraph = function() { cy.add(edges); // Changing zoom - cy.on('zoom', function(evt){ + cy.on('zoom', function (evt) { - if (NetworkUpdateTimeoutId >= 0){ + if (NetworkUpdateTimeoutId >= 0) { clearTimeout(NetworkUpdateTimeoutId); NetworkUpdateTimeoutId = -1; } @@ -1017,9 +1064,9 @@ const DrawGraph = function() { }); // Changing the pan - cy.on('pan', function(evt){ + cy.on('pan', function (evt) { - if (NetworkUpdateTimeoutId >= 0){ + if (NetworkUpdateTimeoutId >= 0) { clearTimeout(NetworkUpdateTimeoutId); NetworkUpdateTimeoutId = -1; } @@ -1028,7 +1075,7 @@ const DrawGraph = function() { }); // Looking for a position changing - cy.on('dragfree', 'node', function(evt){ + cy.on('dragfree', 'node', function (evt) { //let node_id = evt.target.id(); let n = nodes.find(n => n.data.id === this.id()); @@ -1058,7 +1105,7 @@ const DrawGraph = function() { } // Is this edge ? - if (evtTarget.group() === 'edges'){ + if (evtTarget.group() === 'edges') { selected_edge_id = evtTarget.data().id; ShowEdgeConfig(selected_edge_id); selecteed_node_id = 0; @@ -1076,15 +1123,15 @@ const DrawGraph = function() { selecteed_node_id = n.data.id; selected_edge_id = 0; - if (n.config.type === 'host'){ + if (n.config.type === 'host') { ShowHostConfig(n); - } else if (n.config.type === 'l1_hub'){ + } else if (n.config.type === 'l1_hub') { ShowHubConfig(n); - } else if (n.config.type === 'l2_switch'){ + } else if (n.config.type === 'l2_switch') { ShowSwitchConfig(n); - } else if (n.config.type === 'router'){ + } else if (n.config.type === 'router') { ShowRouterConfig(n); - } else if (n.config.type === 'server'){ + } else if (n.config.type === 'server') { ShowServerConfig(n); } }); @@ -1098,7 +1145,7 @@ const DrawGraph = function() { SetNetworkPlayerState(-1); }); - $(document).on('keyup', function(e){ + $(document).on('keyup', function (e) { if (e.keyCode == 46 && selecteed_node_id) { @@ -1122,7 +1169,7 @@ const DrawGraph = function() { // Reset network state SetNetworkPlayerState(-1); } - if (e.keyCode == 46 && selected_edge_id) { + if (e.keyCode == 46 && selected_edge_id) { // Save the network state. SaveNetworkObject(); @@ -1144,7 +1191,7 @@ const DrawGraph = function() { SetNetworkPlayerState(-1); } - if (e.keyCode == 90 && e.ctrlKey){ + if (e.keyCode == 90 && e.ctrlKey) { ClearConfigForm(''); selecteed_node_id = 0; @@ -1166,19 +1213,18 @@ const DrawGraph = function() { }); } -const DrawGraphStatic = function(nodes, edges, shared=0) { +const DrawGraphStatic = function (nodes, edges, shared = 0) { // Do we already have one? let cy = undefined; let network_scheme_id = "network_scheme"; - if (shared){ + if (shared) { network_scheme_id = "network_scheme_shared"; } - if (global_cy) - { + if (global_cy) { cy = global_cy; cy.elements().remove(); } else { @@ -1194,11 +1240,11 @@ const DrawGraphStatic = function(nodes, edges, shared=0) { fit: true, }); - global_cy = cy; + global_cy = cy; } // Turn off edges creation. - if (global_eh){ + if (global_eh) { global_eh.disable(); } @@ -1209,13 +1255,12 @@ const DrawGraphStatic = function(nodes, edges, shared=0) { return; } -const DrawSharedGraph = function(nodes, edges) { +const DrawSharedGraph = function (nodes, edges) { // Do we already have one? let cy = undefined; - if (global_cy) - { + if (global_cy) { cy = global_cy; cy.elements().remove(); } else { @@ -1254,7 +1299,7 @@ const DrawSharedGraph = function(nodes, edges) { } // Is this edge ? - if (evtTarget.group() === 'edges'){ + if (evtTarget.group() === 'edges') { selected_edge_id = evtTarget.data().id; ShowEdgeConfig(selected_edge_id); selecteed_node_id = 0; @@ -1271,23 +1316,22 @@ const DrawSharedGraph = function(nodes, edges) { selecteed_node_id = n.data.id; selected_edge_id = 0; - if (n.config.type === 'host'){ - ShowHostConfig(n, shared=1); - } else if (n.config.type === 'l1_hub'){ - ShowHubConfig(n, shared=1); - } else if (n.config.type === 'l2_switch'){ - ShowSwitchConfig(n, shared=1); - } else if (n.config.type === 'router'){ - ShowRouterConfig(n, shared=1); - } else if (n.config.type === 'server'){ - ShowServerConfig(n, shared=1); + if (n.config.type === 'host') { + ShowHostConfig(n, shared = 1); + } else if (n.config.type === 'l1_hub') { + ShowHubConfig(n, shared = 1); + } else if (n.config.type === 'l2_switch') { + ShowSwitchConfig(n, shared = 1); + } else if (n.config.type === 'router') { + ShowRouterConfig(n, shared = 1); + } else if (n.config.type === 'server') { + ShowServerConfig(n, shared = 1); } }); } -const DrawIndexGraphStatic = function(nodes, edges, container_id, graph_network_zoom, - graph_network_pan_x, graph_network_pan_y) -{ +const DrawIndexGraphStatic = function (nodes, edges, container_id, graph_network_zoom, + graph_network_pan_x, graph_network_pan_y) { let index_cy = cytoscape({ container: document.getElementById(container_id), @@ -1297,9 +1341,9 @@ const DrawIndexGraphStatic = function(nodes, edges, container_id, graph_network_ elements: [], layout: 'preset', zoom: graph_network_zoom, - pan: { x: graph_network_pan_x, y: graph_network_pan_y }, - fit: true, - }); + pan: { x: graph_network_pan_x, y: graph_network_pan_y }, + fit: true, + }); index_cy.autounselectify(false); @@ -1312,29 +1356,35 @@ const DrawIndexGraphStatic = function(nodes, edges, container_id, graph_network_ } // Check whether simulation is over and we can run packets -const CheckSimulation = function (simulation_id) -{ +const CheckSimulation = function (simulation_id) { $.ajax({ type: 'GET', url: '/check_simulation?simulation_id=' + simulation_id + '&network_guid=' + network_guid, data: '', - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { // If we got 210 (processing) wait 2 sec and call themself again - if (xhr.status === 210) - { + if (xhr.status === 210) { setTimeout(CheckSimulation, 2000, simulation_id); } // Simulation is ended up and we can grab the packets - if (xhr.status === 200) - { + if (xhr.status === 200) { packets = JSON.parse(data.packets); pcaps = data.pcaps; + // getting the new ip/mask/gw if job "dhcp" present + host_ip_mask_gw = data.host_ip; + // updating host configs + for (let key in host_ip_mask_gw) { + n = nodes.find(n => n.data.id === key); + ShowHostConfig(n, ip_update = 1); + UpdateHostConfiguration($('#config_main_form').serialize(), key, 0); + } + DrawGraph(); SetNetworkPlayerState(0); } }, - error: function(xhr) { + error: function (xhr) { console.log('Cannot check simulation id = ' + simulation_id); SetNetworkPlayerState(-1); }, @@ -1344,20 +1394,23 @@ const CheckSimulation = function (simulation_id) } // Update host configuration -const UpdateHostConfiguration = function (data, host_id) -{ - // Reset network player - SetNetworkPlayerState(-1); +const UpdateHostConfiguration = function (data, host_id, reset_needed = 1) { + if (reset_needed == 1) { + // Reset network player + SetNetworkPlayerState(-1); + } + + const url = `/host/save_config?reset_needed=${reset_needed}`; + $.ajax({ type: 'POST', - url: '/host/save_config', + url: url, data: data, - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { - if (xhr.status === 200) - { - if (!data.warning){ + if (xhr.status === 200) { + if (!data.warning) { // Update nodes nodes = data.nodes; @@ -1377,19 +1430,19 @@ const UpdateHostConfiguration = function (data, host_id) return; } - if (n.config.type === 'host'){ + if (n.config.type === 'host') { ShowHostConfig(n); } else { ClearConfigForm('Узел есть, но это не хост'); return; } - if (data.warning){ + if (data.warning) { HostWarningMsg(data.warning); } } }, - error: function(xhr) { + error: function (xhr) { console.log('Не удалось обновить конфигурацию хоста'); console.log(xhr); }, @@ -1398,27 +1451,28 @@ const UpdateHostConfiguration = function (data, host_id) } // Delete job from host -const DeleteJobFromHost = function (host_id, job_id, network_guid) -{ +const DeleteJobFromHost = function (host_id, job_id, network_guid, dhcp=0) { // Reset network player SetNetworkPlayerState(-1); let data = { - id: job_id, - guid: network_guid, + id: job_id, + guid: network_guid, }; + const url = `/host/delete_job?dhcp=${dhcp}` + $.ajax({ type: 'POST', - url: '/host/delete_job', + url: url, data: data, encode: true, - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { - if (xhr.status === 200) - { + if (xhr.status === 200) { // Update jobs jobs = data.jobs; + nodes = data.nodes; // Update graph DrawGraph(); @@ -1431,7 +1485,7 @@ const DeleteJobFromHost = function (host_id, job_id, network_guid) return; } - if (n.config.type === 'host'){ + if (n.config.type === 'host') { ShowHostConfig(n); } else { ClearConfigForm('Узел есть, но это не хост'); @@ -1439,7 +1493,7 @@ const DeleteJobFromHost = function (host_id, job_id, network_guid) } }, - error: function(xhr) { + error: function (xhr) { console.log('Не удалось удалить команду'); console.log(xhr); }, @@ -1448,14 +1502,13 @@ const DeleteJobFromHost = function (host_id, job_id, network_guid) } // Delete job from router -const DeleteJobFromRouter = function (router_id, job_id, network_guid) -{ +const DeleteJobFromRouter = function (router_id, job_id, network_guid) { // Reset network player SetNetworkPlayerState(-1); let data = { - id: job_id, - guid: network_guid, + id: job_id, + guid: network_guid, }; $.ajax({ @@ -1463,10 +1516,9 @@ const DeleteJobFromRouter = function (router_id, job_id, network_guid) url: '/host/delete_job', data: data, encode: true, - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { - if (xhr.status === 200) - { + if (xhr.status === 200) { // Update jobs jobs = data.jobs; @@ -1481,14 +1533,14 @@ const DeleteJobFromRouter = function (router_id, job_id, network_guid) return; } - if (n.config.type === 'router'){ + if (n.config.type === 'router') { ShowRouterConfig(n); } else { ClearConfigForm('Узел есть, но это не раутер'); } } }, - error: function(xhr) { + error: function (xhr) { console.log('Не удалось удалить команду'); console.log(xhr); }, @@ -1497,14 +1549,13 @@ const DeleteJobFromRouter = function (router_id, job_id, network_guid) } // Delete job from server -const DeleteJobFromServer = function (server_id, job_id, network_guid) -{ +const DeleteJobFromServer = function (server_id, job_id, network_guid) { // Reset network player SetNetworkPlayerState(-1); let data = { - id: job_id, - guid: network_guid, + id: job_id, + guid: network_guid, }; $.ajax({ @@ -1512,10 +1563,9 @@ const DeleteJobFromServer = function (server_id, job_id, network_guid) url: '/host/delete_job', data: data, encode: true, - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { - if (xhr.status === 200) - { + if (xhr.status === 200) { // Update jobs jobs = data.jobs; @@ -1530,14 +1580,14 @@ const DeleteJobFromServer = function (server_id, job_id, network_guid) return; } - if (n.config.type === 'server'){ + if (n.config.type === 'server') { ShowServerConfig(n); } else { ClearConfigForm('Узел есть, но это не сервер'); } } }, - error: function(xhr) { + error: function (xhr) { console.log('Не удалось удалить команду'); console.log(xhr); }, @@ -1546,8 +1596,7 @@ const DeleteJobFromServer = function (server_id, job_id, network_guid) } // Update router configuration -const UpdateRouterConfiguration = function (data, router_id) -{ +const UpdateRouterConfiguration = function (data, router_id) { // Reset network player SetNetworkPlayerState(-1); @@ -1555,19 +1604,16 @@ const UpdateRouterConfiguration = function (data, router_id) type: 'POST', url: '/host/router_save_config', data: data, - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { - if (xhr.status === 200) - { + if (xhr.status === 200) { // Update nodes - if (data.nodes) - { + if (data.nodes) { nodes = data.nodes; } // Update jobs - if (data.jobs) - { + if (data.jobs) { jobs = data.jobs; } @@ -1582,21 +1628,20 @@ const UpdateRouterConfiguration = function (data, router_id) return; } - if (n.config.type === 'router'){ + if (n.config.type === 'router') { ShowRouterConfig(n); } else { ClearConfigForm('Узел есть, но это не раутер'); return; } - if (data.warning) - { + if (data.warning) { HostWarningMsg(data.warning); } } }, - error: function(xhr) { + error: function (xhr) { console.log('Не удалось обновить конфигурацию хоста'); console.log(xhr); }, @@ -1605,8 +1650,7 @@ const UpdateRouterConfiguration = function (data, router_id) } // Update server configuration -const UpdateServerConfiguration = function (data, router_id) -{ +const UpdateServerConfiguration = function (data, router_id) { // Reset network player SetNetworkPlayerState(-1); @@ -1614,18 +1658,17 @@ const UpdateServerConfiguration = function (data, router_id) type: 'POST', url: '/host/server_save_config', data: data, - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { - if (xhr.status === 200) - { + if (xhr.status === 200) { - if (!data.warning){ + if (!data.warning) { - if (data.nodes){ + if (data.nodes) { nodes = data.nodes; } - if (data.jobs){ + if (data.jobs) { jobs = data.jobs; } @@ -1641,21 +1684,20 @@ const UpdateServerConfiguration = function (data, router_id) return; } - if (n.config.type === 'server'){ + if (n.config.type === 'server') { ShowServerConfig(n); } else { ClearConfigForm('Узел есть, но это не сервер'); return; } - if (data.warning) - { + if (data.warning) { ServerWarningMsg(data.warning); } } }, - error: function(xhr) { + error: function (xhr) { console.log('Не удалось обновить конфигурацию сервера'); console.log(xhr); }, @@ -1664,16 +1706,14 @@ const UpdateServerConfiguration = function (data, router_id) } // Update hub configuration -const UpdateHubConfiguration = function (data, hub_id) -{ +const UpdateHubConfiguration = function (data, hub_id) { $.ajax({ type: 'POST', url: '/host/hub_save_config', data: data, - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { - if (xhr.status === 200) - { + if (xhr.status === 200) { // Update nodes nodes = data.nodes; @@ -1691,14 +1731,14 @@ const UpdateHubConfiguration = function (data, hub_id) return; } - if (n.config.type === 'l1_hub'){ + if (n.config.type === 'l1_hub') { ShowHubConfig(n); } else { ClearConfigForm('Нет такого хаба'); } } }, - error: function(xhr) { + error: function (xhr) { console.log('Cannot update host config'); console.log(xhr); }, @@ -1707,8 +1747,7 @@ const UpdateHubConfiguration = function (data, hub_id) } // Update Switch configuration -const UpdateSwitchConfiguration = function (data, switch_id) -{ +const UpdateSwitchConfiguration = function (data, switch_id) { // Reset network player SetNetworkPlayerState(-1); @@ -1716,10 +1755,9 @@ const UpdateSwitchConfiguration = function (data, switch_id) type: 'POST', url: '/host/switch_save_config', data: data, - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { - if (xhr.status === 200) - { + if (xhr.status === 200) { // Update nodes nodes = data.nodes; @@ -1737,14 +1775,14 @@ const UpdateSwitchConfiguration = function (data, switch_id) return; } - if (n.config.type === 'l2_switch'){ + if (n.config.type === 'l2_switch') { ShowSwitchConfig(n); } else { ClearConfigForm('Нет такого свитча'); } } }, - error: function(xhr) { + error: function (xhr) { console.log('Cannot update host config'); console.log(xhr); }, @@ -1752,24 +1790,21 @@ const UpdateSwitchConfiguration = function (data, switch_id) }); } -const RunSimulation = function (network_guid) -{ +const RunSimulation = function (network_guid) { $.ajax({ type: 'POST', url: '/run_simulation?guid=' + network_guid, data: '', - success: function(data, textStatus, xhr) { - if (xhr.status === 201) - { + success: function (data, textStatus, xhr) { + if (xhr.status === 201) { console.log("Simulation is running!"); // Ok, run CheckSimulation - if (data.simulation_id) - { + if (data.simulation_id) { CheckSimulation(data.simulation_id); } } }, - error: function(err) { + error: function (err) { console.log('Cannot run simulation guid = ' + network_guid); SetNetworkPlayerState(-1); }, @@ -1781,11 +1816,10 @@ const RunSimulation = function (network_guid) // 2 states: // Do we need emulation // We have a packets and ready to play packets -const SetNetworkPlayerState = function(simultaion_id) -{ +const SetNetworkPlayerState = function (simultaion_id) { // Reset? - if (simultaion_id === -1){ + if (simultaion_id === -1) { packets = null; pcaps = []; SetNetworkPlayerState(0); @@ -1793,8 +1827,7 @@ const SetNetworkPlayerState = function(simultaion_id) } // If we have packets, than we're ready to run - if (packets) - { + if (packets) { $('#NetworkPlayer').empty(); $('#NetworkPlayer').append(''); $('#NetworkPlayer').append(''); @@ -1810,8 +1843,8 @@ const SetNetworkPlayerState = function(simultaion_id) 'max': packets.length, }, format: { - to: function (val){return '' + val}, - from: function (val){return '' + val}, + to: function (val) { return '' + val }, + from: function (val) { return '' + val }, }, tooltips: false, }); @@ -1824,25 +1857,25 @@ const SetNetworkPlayerState = function(simultaion_id) $('#PacketSliderInput')[0].noUiSlider.on('slide', function (e) { if (!e) return; - let x = Math.round(e[0]); - PacketPlayer.getInstance().setAnimationTrafficStep(x-1); + let x = Math.round(e[0]); + PacketPlayer.getInstance().setAnimationTrafficStep(x - 1); }); $('#PacketSliderInput')[0].noUiSlider.on('update', function (e) { if (!e) return; - let x = Math.round(e[0]); - if (packets.length === 0){ + let x = Math.round(e[0]); + if (packets.length === 0) { $('#NetworkPlayerLabel').text('0 пакетов'); return; } - $('#NetworkPlayerLabel').text('Шаг: ' + x + '/' + packets.length + ' (' + packets[x-1].length + ' ' + NumWord(packets[x-1].length, ['пакет', 'пакета', 'пакетов']) + ')'); + $('#NetworkPlayerLabel').text('Шаг: ' + x + '/' + packets.length + ' (' + packets[x - 1].length + ' ' + NumWord(packets[x - 1].length, ['пакет', 'пакета', 'пакетов']) + ')'); }); // Set click handlers - $('#NetworkPlayPauseButton').click(function() { + $('#NetworkPlayPauseButton').click(function () { // If btn-success then start to play - if ($(this).hasClass("btn-success")){ + if ($(this).hasClass("btn-success")) { $(this).removeClass('btn-success'); $(this).addClass('btn-warning'); @@ -1850,12 +1883,11 @@ const SetNetworkPlayerState = function(simultaion_id) $(this).append(''); // If not in pause. Draw a new layout and go. - if (!PacketPlayer.getInstance().getPlayerPause()) - { + if (!PacketPlayer.getInstance().getPlayerPause()) { DrawGraphStatic(nodes, edges); } - PacketPlayer.getInstance().setAnimationTrafficStepCallback(function() { + PacketPlayer.getInstance().setAnimationTrafficStepCallback(function () { $('#PacketSliderInput')[0].noUiSlider.set(PacketPlayer.getInstance().getAnimationTrafficStep()); }); @@ -1873,7 +1905,7 @@ const SetNetworkPlayerState = function(simultaion_id) } }); - $('#NetworkStopButton').click(function() { + $('#NetworkStopButton').click(function () { PacketPlayer.getInstance().resetAnimationTrafficStepCallback(); PacketPlayer.getInstance().StopPlayer(); @@ -1896,8 +1928,7 @@ const SetNetworkPlayerState = function(simultaion_id) // No packets. // The network is simulating? - if (simultaion_id) - { + if (simultaion_id) { $('#NetworkPlayer').empty(); $('#PacketSliderInput').hide(); $('#NetworkPlayer').append(''); @@ -1913,11 +1944,10 @@ const SetNetworkPlayerState = function(simultaion_id) $('#NetworkPlayer').append(''); $('#NetworkPlayerLabel').text("Ожидание 10-20 сек."); - $('#NetworkEmulateButton').click(function() { + $('#NetworkEmulateButton').click(function () { // Check for job. If no job - show modal and exit. - if (!jobs.length) - { + if (!jobs.length) { $('#noJobsModal').modal('toggle'); return; } @@ -1937,12 +1967,10 @@ const SetNetworkPlayerState = function(simultaion_id) // 2 states: // No packets - disable button. // We have a packets and ready to play packets -const SetSharedNetworkPlayerState = function() -{ +const SetSharedNetworkPlayerState = function () { // If we have packets, than we're ready to run - if (packets) - { + if (packets) { $('#NetworkPlayer').empty(); $('#NetworkPlayer').append(''); $('#NetworkPlayer').append(''); @@ -1958,8 +1986,8 @@ const SetSharedNetworkPlayerState = function() 'max': packets.length, }, format: { - to: function (val){return '' + val}, - from: function (val){return '' + val}, + to: function (val) { return '' + val }, + from: function (val) { return '' + val }, }, tooltips: false, }); @@ -1972,25 +2000,25 @@ const SetSharedNetworkPlayerState = function() $('#PacketSliderInput')[0].noUiSlider.on('slide', function (e) { if (!e) return; - let x = Math.round(e[0]); - PacketPlayer.getInstance().setAnimationTrafficStep(x-1); + let x = Math.round(e[0]); + PacketPlayer.getInstance().setAnimationTrafficStep(x - 1); }); $('#PacketSliderInput')[0].noUiSlider.on('update', function (e) { if (!e) return; - let x = Math.round(e[0]); - if (packets.length === 0){ + let x = Math.round(e[0]); + if (packets.length === 0) { $('#NetworkPlayerLabel').text('0 пакетов'); return; } - $('#NetworkPlayerLabel').text('Шаг: ' + x + '/' + packets.length + ' (' + packets[x-1].length + ' ' + NumWord(packets[x-1].length, ['пакет', 'пакета', 'пакетов']) + ')'); + $('#NetworkPlayerLabel').text('Шаг: ' + x + '/' + packets.length + ' (' + packets[x - 1].length + ' ' + NumWord(packets[x - 1].length, ['пакет', 'пакета', 'пакетов']) + ')'); }); // Set click handlers - $('#NetworkPlayPauseButton').click(function() { + $('#NetworkPlayPauseButton').click(function () { // If btn-success then start to play - if ($(this).hasClass("btn-success")){ + if ($(this).hasClass("btn-success")) { $(this).removeClass('btn-success'); $(this).addClass('btn-warning'); @@ -1998,12 +2026,11 @@ const SetSharedNetworkPlayerState = function() $(this).append(''); // If not in pause. Draw a new layout and go. - if (!PacketPlayer.getInstance().getPlayerPause()) - { + if (!PacketPlayer.getInstance().getPlayerPause()) { DrawGraphStatic(nodes, edges); } - PacketPlayer.getInstance().setAnimationTrafficStepCallback(function() { + PacketPlayer.getInstance().setAnimationTrafficStepCallback(function () { $('#PacketSliderInput')[0].noUiSlider.set(PacketPlayer.getInstance().getAnimationTrafficStep()); }); @@ -2019,7 +2046,7 @@ const SetSharedNetworkPlayerState = function() } }); - $('#NetworkStopButton').click(function() { + $('#NetworkStopButton').click(function () { PacketPlayer.getInstance().resetAnimationTrafficStepCallback(); PacketPlayer.getInstance().StopPlayer(); @@ -2049,23 +2076,21 @@ const SetSharedNetworkPlayerState = function() } // Take a picture and update it. -const TakeGraphPictureAndUpdate = function() -{ - if (!global_cy) - { +const TakeGraphPictureAndUpdate = function () { + if (!global_cy) { return; } - let png_blob = global_cy.png({output: 'blob', maxWidth: 512, maxHeight: 512}); + let png_blob = global_cy.png({ output: 'blob', maxWidth: 512, maxHeight: 512 }); $.ajax({ type: 'POST', url: '/network/upload_network_picture?guid=' + network_guid, data: png_blob, processData: false, - error: function(xhr) { + error: function (xhr) { - if (xhr.status != 200){ + if (xhr.status != 200) { console.log('Cannot upload graph picture'); } @@ -2075,22 +2100,20 @@ const TakeGraphPictureAndUpdate = function() } // Calculate drop offsets -const CalculateDropOffset = function(elem_x, elem_y) -{ +const CalculateDropOffset = function (elem_x, elem_y) { const network_scheme = document.getElementById("network_scheme"); let offset_left = 0; let offset_top = 0; - let ret = {'x' : 0, 'y' : 0}; + let ret = { 'x': 0, 'y': 0 }; console.log(elem_x + ", " + elem_y); - if (network_scheme){ + if (network_scheme) { ret.x += network_scheme.offsetLeft - 25; ret.y += network_scheme.offsetTop - 15; } - if (global_cy) - { + if (global_cy) { ret.x = ret.x + global_cy.pan().x; ret.y = ret.y + global_cy.pan().y; @@ -2101,23 +2124,24 @@ const CalculateDropOffset = function(elem_x, elem_y) return ret; } -const UpdateNetworkConfig = function() -{ - if (!global_cy){ +const UpdateNetworkConfig = function () { + if (!global_cy) { return; } - let data = {'network_title' : network_title, 'network_description' : network_description, - 'zoom' : global_cy.zoom(),'pan_x' : global_cy.pan().x, 'pan_y' : global_cy.pan().y}; + let data = { + 'network_title': network_title, 'network_description': network_description, + 'zoom': global_cy.zoom(), 'pan_x': global_cy.pan().x, 'pan_y': global_cy.pan().y + }; $.ajax({ type: 'POST', url: '/network/update_network_config?guid=' + network_guid, data: JSON.stringify(data), contentType: "application/json; charset=utf-8", - success: function(data, textStatus, xhr) { + success: function (data, textStatus, xhr) { }, - error: function(xhr) { + error: function (xhr) { console.log('Cannot update network config'); console.log(xhr); }, @@ -2126,19 +2150,17 @@ const UpdateNetworkConfig = function() } -const CopyNetwork = function () -{ +const CopyNetwork = function () { $.ajax({ type: 'POST', url: '/network/copy_network?guid=' + network_guid, data: '', - success: function(data, textStatus, xhr) { - if (xhr.status === 200) - { + success: function (data, textStatus, xhr) { + if (xhr.status === 200) { console.log("Copy network is made."); $('#ModalCopy').modal('show'); - $('.modal-option').click(function() { - var selectedOption = $(this).attr('data-option'); + $('.modal-option').click(function () { + var selectedOption = $(this).attr('data-option'); if (selectedOption === 'edit') { var newUrl = data.new_url; window.location.href = newUrl; @@ -2146,11 +2168,11 @@ const CopyNetwork = function () } else if (selectedOption === 'continue') { console.log('Continue here'); } - $('#ModalCopy').modal('hide'); + $('#ModalCopy').modal('hide'); }); } }, - error: function(err) { + error: function (err) { console.log('Copy has not been made.'); }, contentType: "application/json", @@ -2159,16 +2181,16 @@ const CopyNetwork = function () } -const NumWord = function (value, words){ - value = Math.abs(value) % 100; - var num = value % 10; - if(value > 10 && value < 20) return words[2]; - if(num > 1 && num < 5) return words[1]; - if(num == 1) return words[0]; - return words[2]; +const NumWord = function (value, words) { + value = Math.abs(value) % 100; + var num = value % 10; + if (value > 10 && value < 20) return words[2]; + if (num > 1 && num < 5) return words[1]; + if (num == 1) return words[0]; + return words[2]; } -const SaveNetworkObject = function (){ +const SaveNetworkObject = function () { let n = JSON.parse(JSON.stringify(nodes)); let e = JSON.parse(JSON.stringify(edges)); @@ -2180,15 +2202,15 @@ const SaveNetworkObject = function (){ return 0; } -const RestoreNetworkObject = function (){ +const RestoreNetworkObject = function () { let x = NetworkCache.pop(); - if (!x){ + if (!x) { return; } - nodes=x.nodes; - edges=x.edges; + nodes = x.nodes; + edges = x.edges; return 0; } \ No newline at end of file diff --git a/front/src/templates/auth/login.html b/front/src/templates/auth/login.html index 6578af22..08b44d92 100644 --- a/front/src/templates/auth/login.html +++ b/front/src/templates/auth/login.html @@ -62,7 +62,7 @@
Вход с помощью
diff --git a/front/src/templates/base.html b/front/src/templates/base.html index 263efcac..350472c3 100644 --- a/front/src/templates/base.html +++ b/front/src/templates/base.html @@ -337,6 +337,4 @@
Наше компьюнити
- - \ No newline at end of file diff --git a/front/src/templates/network.html b/front/src/templates/network.html index de659783..954fdcfe 100644 --- a/front/src/templates/network.html +++ b/front/src/templates/network.html @@ -86,7 +86,6 @@
Устройства
-
{% endblock %} {% block network %} diff --git a/front/src/templates/network_shared.html b/front/src/templates/network_shared.html index 9787c567..a9402243 100644 --- a/front/src/templates/network_shared.html +++ b/front/src/templates/network_shared.html @@ -90,7 +90,6 @@

Тут будут настройки устройств.

-
{% endblock %} {% block network %} diff --git a/front/src/uwsgi.ini b/front/src/uwsgi.ini index 39783076..70fe10bf 100644 --- a/front/src/uwsgi.ini +++ b/front/src/uwsgi.ini @@ -2,9 +2,7 @@ module = app:app master = true socket = :80 -processes = 5 +processes = 4 chmod-socket = 660 -enable-threads = true -buffer-size = 8192 vacuum = true die-on-term = true diff --git a/front/src/vk_auth.json b/front/src/vk_auth.json new file mode 100644 index 00000000..4e7d57b3 --- /dev/null +++ b/front/src/vk_auth.json @@ -0,0 +1 @@ +{"web": {"client_id": "51544060", "client_secret": "5G1LOaa0ty0zFDmH5cPw", "redirect_uri": "http://127.0.0.1/auth/vk_callback"}} From 344cbfc846fde7641a2c19154f1e9017eb526093 Mon Sep 17 00:00:00 2001 From: Andrey Didenko Date: Fri, 5 Jan 2024 03:37:20 +0300 Subject: [PATCH 2/5] Trash cleanup --- .gitignore | 1 + README.md | 8 ++-- back/{.env => dotenv-back-example} | 2 +- back/src/network.py | 2 +- back/src/simulate.py | 11 +---- back/src/tasks.py | 3 -- front/.dockerignore | 2 +- front/{.env => dotenv-front-example} | 2 +- front/src/static/config.js | 44 +++++++----------- .../0757614576ac6560abf01a573dd0c11f.png | Bin 18650 -> 0 bytes .../28971ab5300dd2c86f51136e13f07b97.png | Bin 12383 -> 0 bytes .../2e3e94529465677725879dd9bb27ff26.png | Bin 18719 -> 0 bytes .../377de4a107c9a13a12ab58f24faefc14.png | Bin 9682 -> 0 bytes .../381a7c8a66d032f313d7a23f7ef1ff9b.png | Bin 3283 -> 0 bytes .../3921e242c3dd4fdd05b2919ff4f48f35.png | Bin 15047 -> 0 bytes .../392b828a784a0a82829f9b992e92ebcf.png | Bin 10935 -> 0 bytes .../3ce7118bb8e4d00ff5a2f7f742394a23.png | Bin 11496 -> 0 bytes .../40733625b12892b15af4bd3fc3bd7053.png | Bin 14838 -> 0 bytes .../463aeffda3959afbd2f6c35f5d592769.png | Bin 9537 -> 0 bytes .../5398197bcfc985efaed44ad99bb36099.png | Bin 11017 -> 0 bytes .../54d9508c83e456116858eeb979d7590d.png | Bin 12206 -> 0 bytes .../5f001cd07997c5e90e5787701a1bd39e.png | Bin 11244 -> 0 bytes .../6761459b948be3876d4823d5afb1fcfe.png | Bin 11592 -> 0 bytes .../696ba869a3229373157ef8579259c7d8.png | Bin 11664 -> 0 bytes .../6ce9900cd7fb8677d6e4092b301dd9d8.png | Bin 9555 -> 0 bytes .../6d96b38b2ceac1ac4993e306abee9c69.png | Bin 11382 -> 0 bytes .../7263d4f87f520c43794c5fec1dfb6f93.png | Bin 6464 -> 0 bytes .../7c659bb5c4d01dedd1e9e3e2b37397b1.png | Bin 12958 -> 0 bytes .../8763d45b85ce4f2bb68625e38781e43b.png | Bin 14321 -> 0 bytes .../8a1005c8f71d9c84eb0370157ba6dff1.png | Bin 14551 -> 0 bytes .../98608cf64b29d1903e2dcf14d75738a9.png | Bin 9379 -> 0 bytes .../a5fd134dc4e05dc7adaba17a14594261.png | Bin 13363 -> 0 bytes .../afc89f7718f229c2adf310fefe93183c.png | Bin 19217 -> 0 bytes .../c546190c0c4e9437035e66383741b39b.png | Bin 15133 -> 0 bytes .../c675db70df6894cca03a0ae94c458781.png | Bin 14175 -> 0 bytes .../d446032ca5cf29036c9ea724eddf19a9.png | Bin 13136 -> 0 bytes .../d5e1fb6ec3865f68b04a18df44e06af7.png | Bin 3719 -> 0 bytes .../e07b021491778459a7f107d2a5691297.png | Bin 9695 -> 0 bytes .../eafc3340a67b9eb3c675513f1fe4cafc.png | Bin 11654 -> 0 bytes .../f7e166fd006fac2187a7ece21e46e17f.png | Bin 15780 -> 0 bytes .../static/images/preview/first_network.jpg | Bin 38349 -> 0 bytes .../static/images/preview/switch_and_hub.png | Bin 18109 -> 0 bytes front/src/vk_auth.json | 1 - 43 files changed, 30 insertions(+), 46 deletions(-) rename back/{.env => dotenv-back-example} (83%) rename front/{.env => dotenv-front-example} (63%) delete mode 100644 front/src/static/images/preview/0757614576ac6560abf01a573dd0c11f.png delete mode 100644 front/src/static/images/preview/28971ab5300dd2c86f51136e13f07b97.png delete mode 100644 front/src/static/images/preview/2e3e94529465677725879dd9bb27ff26.png delete mode 100644 front/src/static/images/preview/377de4a107c9a13a12ab58f24faefc14.png delete mode 100644 front/src/static/images/preview/381a7c8a66d032f313d7a23f7ef1ff9b.png delete mode 100644 front/src/static/images/preview/3921e242c3dd4fdd05b2919ff4f48f35.png delete mode 100644 front/src/static/images/preview/392b828a784a0a82829f9b992e92ebcf.png delete mode 100644 front/src/static/images/preview/3ce7118bb8e4d00ff5a2f7f742394a23.png delete mode 100644 front/src/static/images/preview/40733625b12892b15af4bd3fc3bd7053.png delete mode 100644 front/src/static/images/preview/463aeffda3959afbd2f6c35f5d592769.png delete mode 100644 front/src/static/images/preview/5398197bcfc985efaed44ad99bb36099.png delete mode 100644 front/src/static/images/preview/54d9508c83e456116858eeb979d7590d.png delete mode 100644 front/src/static/images/preview/5f001cd07997c5e90e5787701a1bd39e.png delete mode 100644 front/src/static/images/preview/6761459b948be3876d4823d5afb1fcfe.png delete mode 100644 front/src/static/images/preview/696ba869a3229373157ef8579259c7d8.png delete mode 100644 front/src/static/images/preview/6ce9900cd7fb8677d6e4092b301dd9d8.png delete mode 100644 front/src/static/images/preview/6d96b38b2ceac1ac4993e306abee9c69.png delete mode 100644 front/src/static/images/preview/7263d4f87f520c43794c5fec1dfb6f93.png delete mode 100644 front/src/static/images/preview/7c659bb5c4d01dedd1e9e3e2b37397b1.png delete mode 100644 front/src/static/images/preview/8763d45b85ce4f2bb68625e38781e43b.png delete mode 100644 front/src/static/images/preview/8a1005c8f71d9c84eb0370157ba6dff1.png delete mode 100644 front/src/static/images/preview/98608cf64b29d1903e2dcf14d75738a9.png delete mode 100644 front/src/static/images/preview/a5fd134dc4e05dc7adaba17a14594261.png delete mode 100644 front/src/static/images/preview/afc89f7718f229c2adf310fefe93183c.png delete mode 100644 front/src/static/images/preview/c546190c0c4e9437035e66383741b39b.png delete mode 100644 front/src/static/images/preview/c675db70df6894cca03a0ae94c458781.png delete mode 100644 front/src/static/images/preview/d446032ca5cf29036c9ea724eddf19a9.png delete mode 100644 front/src/static/images/preview/d5e1fb6ec3865f68b04a18df44e06af7.png delete mode 100644 front/src/static/images/preview/e07b021491778459a7f107d2a5691297.png delete mode 100644 front/src/static/images/preview/eafc3340a67b9eb3c675513f1fe4cafc.png delete mode 100644 front/src/static/images/preview/f7e166fd006fac2187a7ece21e46e17f.png delete mode 100644 front/src/static/images/preview/first_network.jpg delete mode 100644 front/src/static/images/preview/switch_and_hub.png delete mode 100644 front/src/vk_auth.json diff --git a/.gitignore b/.gitignore index 4dcf8e01..c163ca2e 100644 --- a/.gitignore +++ b/.gitignore @@ -82,6 +82,7 @@ fabric.properties # Do not track configs client_google.json +vk_auth.json miminet_secret.conf simulation.py migrations/ diff --git a/README.md b/README.md index 9d56a750..994a80de 100644 --- a/README.md +++ b/README.md @@ -15,13 +15,15 @@ ### Docker ``` -cd back && docker compose up -d --build +cd back +COMPOSE_PROFILES=celery,rabbitmq,redis docker compose up -d --build ``` Celery, Rabbitmq и Redis будут доступны после этого шага. В завимости от того, где разворачивается Rabbitmq и Redis, вам потребуется указать имена сервисов. Например, если у Вас уже развернуты Rabbitmq и Redis на другом сервере и нужен только ipmininet worker: ``` -cd back && docker compose up -d --build celery +cd back +COMPOSE_PROFILES=celery docker compose up -d --build ``` ### Vagrant @@ -50,4 +52,4 @@ N - количество экземпляров vagrant(Miminet на данны Поднимаем после Rabbitmq и Redis. ``` cd front && docker compose up -d --build -``` +``` \ No newline at end of file diff --git a/back/.env b/back/dotenv-back-example similarity index 83% rename from back/.env rename to back/dotenv-back-example index a6ab334b..652a13c3 100644 --- a/back/.env +++ b/back/dotenv-back-example @@ -1,4 +1,4 @@ -amqp_urls=amqp://guest:guest@rabbitmq/ +amqp_urls=amqp://user:password@rabbitmq/ backend_urls=redis://:password@redis/1 celery_concurrency=1 queue_names=queue1,queue2,queue3 diff --git a/back/src/network.py b/back/src/network.py index 4bedc416..6bf0c9e6 100644 --- a/back/src/network.py +++ b/back/src/network.py @@ -141,7 +141,7 @@ class Job: job_id: int host_id: str print_cmd: str - arg_1: str | int | tuple = "" + arg_1: str | int = "" arg_2: str | int = "" arg_3: str | int = "" diff --git a/back/src/simulate.py b/back/src/simulate.py index 8866ad4a..aa5a746b 100644 --- a/back/src/simulate.py +++ b/back/src/simulate.py @@ -12,13 +12,8 @@ from jobs import Jobs, parse_ip_route_show_output from network import Job, Network, Node, NodeConfig, NodeData, NodeInterface from pkt_parser import create_pkt_animation, is_ipv4_address -import pdb -from mininet.log import setLogLevel -import ipaddress -from ipaddress import IPv4Address, IPv4Network from operator import attrgetter -setLogLevel('info') class MyTopology(IPTopo): @@ -350,11 +345,9 @@ def run_mininet( net = IPNet(topo=topo, use_v6=False, autoSetMacs=True, allocate_IPs=False) net.start() - # pdb.set_trace() time.sleep(topo.time_to_wait_before_emulation) # Don only 100+ jobs - print(sort_jobs_by_level(network.jobs)) for job in sort_jobs_by_level(network.jobs): job_id = job.job_id @@ -367,7 +360,7 @@ def run_mininet( continue # Do only job_id < 100 - for job in network.jobs: + for job in sort_jobs_by_level(network.jobs): job_id = job.job_id if int(job_id) >= 100: @@ -378,10 +371,10 @@ def run_mininet( except Exception: continue + #Stopping DHCP for host in net.hosts: host.cmd('service dnsmasq stop') - # IPCLI(net) host_ip = get_host_ip_dict(net) time.sleep(2) net.stop() diff --git a/back/src/tasks.py b/back/src/tasks.py index c306574c..9dfd9e55 100644 --- a/back/src/tasks.py +++ b/back/src/tasks.py @@ -5,7 +5,6 @@ from celery import shared_task from network import Network from simulate import run_mininet -from mininet.log import setLogLevel import redis @@ -26,10 +25,8 @@ def mininet_worker( tuple: Tuple (json emulation results, List[pcap, pcap name]) """ - setLogLevel('info') jnet = json.loads(network) - print(network) network_schema = marshmallow_dataclass.class_schema(Network)() animation = "" pcaps = [] diff --git a/front/.dockerignore b/front/.dockerignore index 00bbcbb6..1662f772 100644 --- a/front/.dockerignore +++ b/front/.dockerignore @@ -1,6 +1,6 @@ instance src/static/images -src/static:/svg +src/static/svg src/static/video src/static/pcaps src/static/assets diff --git a/front/.env b/front/dotenv-front-example similarity index 63% rename from front/.env rename to front/dotenv-front-example index e778db3c..ed0f5ded 100644 --- a/front/.env +++ b/front/dotenv-front-example @@ -1,3 +1,3 @@ -amqp_urls=amqp://guest:guest@rabbitmq/ +amqp_urls=amqp://user:password@rabbitmq/ backend_urls=redis://:password@redis/1 exchange_name=default_exchange diff --git a/front/src/static/config.js b/front/src/static/config.js index 240aaa48..2741a098 100644 --- a/front/src/static/config.js +++ b/front/src/static/config.js @@ -346,12 +346,13 @@ const ConfigHostCheckbox = function(name, checkbox) { $("#auto-ip").prop('checked', (checkbox == 1) ? true : false); const disableInputs = [$('#config_host_ip_' + name), $('#config_host_mask_' + name), $('#config_host_default_gw')] - + const holderInputs = [$('#config_host_ip_example'), $('#config_host_mask_example'), $('#config_host_default_gw_holder')] + $("#auto-ip").on("change", function () { if ($(this).is(':checked')) { - $('#config_host_ip_example').removeAttr("hidden"); - $('#config_host_mask_example').removeAttr("hidden"); - $('#config_host_default_gw_holder').removeAttr("hidden"); + holderInputs.forEach(input => { + input.removeAttr("hidden"); + }); disableInputs.forEach(input => { input.attr('hidden', 'true'); }); @@ -360,9 +361,9 @@ const ConfigHostCheckbox = function(name, checkbox) { disableInputs.forEach(input => { input.removeAttr('hidden'); }); - $('#config_host_default_gw_holder').attr("hidden", true); - $('#config_host_ip_example').attr("hidden", true); - $('#config_host_mask_example').attr("hidden", true); + holderInputs.forEach(input => { + input.attr("hidden", true); + }); } }); @@ -388,14 +389,13 @@ const ConfigHostInterface = function (name, ip, netmask, checkbox, connected_to) $('').insertBefore('#config_host_iface_name_' + name); $('#config_host_iface_name_' + name).attr("placeholder", connected_to); - const disableInputs = [$('#config_host_ip_' + name), $('#config_host_mask_' + name), $('#config_host_default_gw')] - var ip_holder = $('', { type: 'text', class: 'form-control form-control-sm w-75', id: 'config_host_ip_example', name: 'config_host_ip_example', placeholder: ip, + hidden: true, disabled: true }); @@ -405,22 +405,17 @@ const ConfigHostInterface = function (name, ip, netmask, checkbox, connected_to) id: 'config_host_mask_example', name: 'config_host_mask_example', placeholder: netmask, + hidden: true, disabled: true }); ip_holder.insertBefore($('#config_host_ip_' + name)); mask_holder.insertBefore($('#config_host_mask_' + name)); - $('#config_host_ip_example').attr("hidden", true); - $('#config_host_mask_example').attr("hidden", true); if (checkbox == 1) { - $('#config_host_ip_' + name).val(ip); - $('#config_host_ip_' + name).attr('hidden', true); - $('#config_host_mask_' + name).val(netmask); - $('#config_host_mask_' + name).attr('hidden', true); - $('#config_host_ip_example').attr("placeholder", ip); - $('#config_host_mask_example').attr("placeholder", netmask); - $('#config_host_ip_example').removeAttr("hidden"); - $('#config_host_mask_example').removeAttr("hidden"); + $('#config_host_ip_' + name).val(ip).attr('hidden', true); + $('#config_host_mask_' + name).val(netmask).attr('hidden', true); + $('#config_host_ip_example').attr("placeholder", ip).removeAttr("hidden"); + $('#config_host_mask_example').attr("placeholder", netmask).removeAttr("hidden"); } else { $('#config_host_ip_example').attr("hidden", true); $('#config_host_mask_example').attr("hidden", true); @@ -685,21 +680,18 @@ const ConfigHostGateway = function (gw, checkbox = 0) { id: 'config_host_default_gw_holder', name: 'config_host_default_gw_holder', placeholder: gw, + hidden: true, disabled: true }); gw_holder.insertBefore($('#config_host_default_gw')); - $('#config_host_default_gw_holder').attr('hidden',true); if (checkbox == 1) { - $('#config_host_default_gw_holder').attr("placeholder", gw); - $('#config_host_default_gw_holder').removeAttr('hidden'); - $('#config_host_default_gw').val(gw); - $('#config_host_default_gw').attr('hidden',true); + $('#config_host_default_gw_holder').attr("placeholder", gw).removeAttr('hidden'); + $('#config_host_default_gw').val(gw).attr('hidden',true); } else{ $('#config_host_default_gw_holder').attr('hidden',true); - $('#config_host_default_gw').val(gw); - $('#config_host_default_gw').removeAttr('hidden'); + $('#config_host_default_gw').val(gw).removeAttr('hidden'); } } diff --git a/front/src/static/images/preview/0757614576ac6560abf01a573dd0c11f.png b/front/src/static/images/preview/0757614576ac6560abf01a573dd0c11f.png deleted file mode 100644 index 6a114d013f873cc20fcb243a25a5be9d2512c779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18650 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 G5C0D@CR=g< diff --git a/front/src/static/images/preview/28971ab5300dd2c86f51136e13f07b97.png b/front/src/static/images/preview/28971ab5300dd2c86f51136e13f07b97.png deleted file mode 100644 index 7030fec1c489b1338912d63a447bc21fd770c704..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12383 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 KG)vTNLjMnnQrwXM diff --git a/front/src/static/images/preview/2e3e94529465677725879dd9bb27ff26.png b/front/src/static/images/preview/2e3e94529465677725879dd9bb27ff26.png deleted file mode 100644 index 1f06b3a7a304eba14d0e7e687844ece1bd8289eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18719 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 Vgg8wVIsp8qs-$(VRMG0`e*r9+3dsNf diff --git a/front/src/static/images/preview/377de4a107c9a13a12ab58f24faefc14.png b/front/src/static/images/preview/377de4a107c9a13a12ab58f24faefc14.png deleted file mode 100644 index 8f5a404903cdb9a3a0c50ca2ec44b78267c0c2ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9682 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 Io!GPg0Wv`J-~a#s diff --git a/front/src/static/images/preview/381a7c8a66d032f313d7a23f7ef1ff9b.png b/front/src/static/images/preview/381a7c8a66d032f313d7a23f7ef1ff9b.png deleted file mode 100644 index fd1b35a5ae51ce1d605a287ba27704b3215020d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3283 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 DzIrg^ diff --git a/front/src/static/images/preview/463aeffda3959afbd2f6c35f5d592769.png b/front/src/static/images/preview/463aeffda3959afbd2f6c35f5d592769.png deleted file mode 100644 index 1277cbbbca6aaa3edca54f90485ed7227b314626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9537 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 XmwvDFlfB@lQPA!ke%qgK3%&4PGeVcB diff --git a/front/src/static/images/preview/5398197bcfc985efaed44ad99bb36099.png b/front/src/static/images/preview/5398197bcfc985efaed44ad99bb36099.png deleted file mode 100644 index fbcb6db4c346573ef71f66ad962e66cc861f9875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11017 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 LpDp;!>CXQEa?U{& diff --git a/front/src/static/images/preview/54d9508c83e456116858eeb979d7590d.png b/front/src/static/images/preview/54d9508c83e456116858eeb979d7590d.png deleted file mode 100644 index 93ae2767da2394b0734ef2d57afe804dd9714ea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12206 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 LVfgy2>#hF<&+>EN diff --git a/front/src/static/images/preview/696ba869a3229373157ef8579259c7d8.png b/front/src/static/images/preview/696ba869a3229373157ef8579259c7d8.png deleted file mode 100644 index 16838729c184a3a42d1fe98e2d328564e4af1ef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11664 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 diff --git a/front/src/static/images/preview/6d96b38b2ceac1ac4993e306abee9c69.png b/front/src/static/images/preview/6d96b38b2ceac1ac4993e306abee9c69.png deleted file mode 100644 index efe12f0ba37e47c1836a393211f163818417017d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11382 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 Xe61c?a8(!pUl-1qpDp^!?e6~r6!*Qs diff --git a/front/src/static/images/preview/7263d4f87f520c43794c5fec1dfb6f93.png b/front/src/static/images/preview/7263d4f87f520c43794c5fec1dfb6f93.png deleted file mode 100644 index 415bd7c177cd0a0ead78c7ed91d79b71ce59117f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6464 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 Q0npFvgyr$lV;67y7nNb{K>z>% diff --git a/front/src/static/images/preview/7c659bb5c4d01dedd1e9e3e2b37397b1.png b/front/src/static/images/preview/7c659bb5c4d01dedd1e9e3e2b37397b1.png deleted file mode 100644 index 9c02c7e80743505e20f4f29d38a44932816ab830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12958 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 H+J^iO3wMP( diff --git a/front/src/static/images/preview/8763d45b85ce4f2bb68625e38781e43b.png b/front/src/static/images/preview/8763d45b85ce4f2bb68625e38781e43b.png deleted file mode 100644 index 668267eed88d93005bd3befa0cd3996988a359e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14321 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
V;0Qh&&#Qa?8S(p3&2Oyr0Pyhe` diff --git a/front/src/static/images/preview/8a1005c8f71d9c84eb0370157ba6dff1.png b/front/src/static/images/preview/8a1005c8f71d9c84eb0370157ba6dff1.png deleted file mode 100644 index 5e1bb461945efed26d838a4a8cc5481def740d26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14551 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 W*U!oYWxziy0#|j6ui!7=xc@(~skJ)* diff --git a/front/src/static/images/preview/98608cf64b29d1903e2dcf14d75738a9.png b/front/src/static/images/preview/98608cf64b29d1903e2dcf14d75738a9.png deleted file mode 100644 index ac03c8c418853615fe397db915a86c77b1fd18aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9379 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 P|L=&I#leF8gqZ&Tde)8# diff --git a/front/src/static/images/preview/a5fd134dc4e05dc7adaba17a14594261.png b/front/src/static/images/preview/a5fd134dc4e05dc7adaba17a14594261.png deleted file mode 100644 index 53f644013918ed5602d0471dfa159c2fe617bb9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13363 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 E1t{Fa{{R30 diff --git a/front/src/static/images/preview/c546190c0c4e9437035e66383741b39b.png b/front/src/static/images/preview/c546190c0c4e9437035e66383741b39b.png deleted file mode 100644 index 45317b2f087680a680710fe4eadfa7ac2e7ff158..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15133 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 SN8<~Cf2t}P4@;EH0{#cHLFk+S diff --git a/front/src/static/images/preview/c675db70df6894cca03a0ae94c458781.png b/front/src/static/images/preview/c675db70df6894cca03a0ae94c458781.png deleted file mode 100644 index 769771c852b1058894fee1078414b5684ec9ca30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14175 zcmeIZN-8IznS*Zz3P zpth&Mw}}73pDqc2=7z*qDgo;b9~tc>Wp%c>zWzd^aH%W%bEs?M)vuN=L*PgN>cxfy zN^?}$f#wXfJ*V7dku{WG?4(McacZ2Xg-h}CaDjf~bOw9Bwn@jnPiX=@dXepWlPxQQ zT+=#nG$$1yMjVdk%TPqqLtx0$JFJkJuWqjwTL(^u*Pf901#3JS*_1+e>&A-Mrr zyN|>9Z5sXY64D>m&BZXwa#GS?G%o?0QuMBVF4^C0>~iEB{Awq4#o~bF2ULG)K;}lA z6G6t30+`xRy876_ZTUY8Lk z5|sD<{rAYc0;2%b_L+Y?{-?&0r@!wAI+>)-O_dm~R=dyDHPsJB-~3AyGY`0|UXaUjT4Kdwqw2%1azW4D z{4cWgPa=b-CW_LvF*{YMlv>$K(0?f5!~)S%(u(F&mb{qw3@M{;fdv|h=DUamkEW_k zk5v=_=|RUX58?oe?LJ=_5xV@L`Yki2F+&c`u+KJltFON4OhQ26)uALcy@&6TNFhhf z@MAmouKi!*;yQxle|LEeaw2*}S#j|CdU)|66CB$mfSVpVk#aGA^z&!itX0ZdT!b@( z;;HYY;(5K%J59I#!6qAIf%-KTAiq${`Y#)XNI)zm^%FrTIMBbt|1t`O)SLo853vibP3}z9($l7yjpk z13h@LY8kD6S&F5^rq+QQYu=O>`JWfu)918JEfN1c-&5d2AsI7p?>jsO@}Czg(h2&Pgi(FY?onXdC)*(Z)~JKJum z?UjvnTTuj$!#XeR@qU+K{gSBp4;2&Vch};0u!U-DnCB2w&0?^d=*@C%@9gggHh&cG zg7zQBQ^8Yx8aT{#imx#djIQkry2 z!``n~`k9BLTdqb(Z_4u>;xw@FtlI4iBO~7}YiyL2N%e6}#G@P4%XFFl^ctBC02$g6 zEDryVV32_p---6$1LVKvANVg1K*awS2mfF2VC!)wfBC9m?S7xT@EUqAc`|y}vFL@< z8)`u@>GCn^+l)|(QaMoAPah&lm?>z(bb;Vr(bkXa?YCQnIz;AyG{)!?i5=QWptI(5vPA~)-)4hZ7(^o z&RMIBQYj3b9|<8B54s~jYL5R^jM@ja_qtcig)nW<&N?wtY&{13jAYZ762x1rlm2~m zoVKpDo9Sqez354rTA%)GF?#2{H3Pdlvw|U`XvZSI8*v541%POK>h}&z1UQA0mAN)Jc1&1 z2w`RxM<19bb;$6pkFkhTT;HdXP#jcVW?Rm6uh>jZ>|yZ-IP&$T~1ez9e-5==`rECytKuBimSLkjQ;p=EsrIo?yaPiOLq_q}hru}iEeectT zWwAL}XZ>(8b_Ue@_dw>w*no>%;qXLVTV!_>rD*SIg>++25$G zvSdC=p#J^fOBP)b5Q!h*O#tk>GBYp4b34=KwuQ$+yUa;VCO`pfyIf1U0G$LGSVsaE zzaHj7iuE_)71Z7EovZBd6}u+;bC2*fzRF<>vatYR!pO8>P8V!p$OsAkSEHWbEV5tv zyi3yO)8tbIysyX|-_tHEH^((k)UWv+V9@T~IrH`={vRbZu*boIf31gPO{M!K9iPxHx}Deze&_3^sx_7!}Juo-3y%9f2S{!MVA4*(pAqT zUW#b4a}o!5$GsP2HqwKb{Fo+#sil@jPiG_9dwL3eLMVA`-5svkr3!3i_*yWM>#^v7(x!w}Q}8jp7$9*vz{l4kS_J^0mZLX39wI_{|Z z&hcrRB03qlLKq)Tes(S#|qQWRuO@UuYaB z^C{$}gD@U1{8GzkVtvC%;*fDDAoxCK+Dy z=fW>gZ4O=MhQbgaG;;%xxm|EWR-n$PW|Jf(Nl8fvFu!#OYb=i=6(-iDLXbxxtw3eB z8k5tm22*zgWd&RZCX^p!(2c) zH%#Qjg(EMYuTM%#SQA6FWQ6Xh;M!cT?Vr9@dFyd=Z>6<_86X{A3WATNfU#ct$rlEw z5!X-};N)>-=3YkkrgPrI;}ECO7dx_>jvcXmo{=Ax4;2J!qW{QPta;Xa?<65%UvjXZxz2{d8UXuCT(uFWE zxpfubGpY94zq9Qxh5yxo2@U-ABmRVIvgdSG_RU#-TaB#+y7~3-yAr?3x0!Hk45c>& zK6W0_7e4@lo_wwZ9^h=dCu3tN&1ZHomau4CX=Y()w>OIkYFy5zjzu)oMo<8>Y)hbF zAge7|vYkfkSXyD1PI{vLB!ZYurek{MYB7`svJlRxi3u-!*ZLt67Bmwn&7t#_M^lsRu_3igq zFEFCXT?MgWq|!soqH6;^1Yz2CBC}r<8~Q!_b=yhDtxZ=40VsbFiVDD8nQ{2xm|^iu zi;Sr~H_7MrRghE}kW~DQL?Rd~$Izr8@C4g}mS3>T`Px*0#ugbWK^MA-{QYvAT`+=h zRP#$duEJ08Rz^J%x6bD>oX`F0?EoK(L<$f=Uh1=uVAF{F%@8%tTGxdaZs6u*5fa`@ zOd3t(-C!_Mf370QOsYu3nkl0bf$K7!`?Uk=Z7tOrMNz&0Nx1Rx=^d%ygE2#1+A%V! z8;SswLFf-F7~hg9Eu6{89FP3)VOp2o%v`j(a%s}y+3s{l+rnKdOh(J$Zb3Iwdv|vg z8ETLbokh6J*ZXPZH@~k{^UV}G$@RFvq-S?Pv-=pxr9|cq!(o+`9y$KqL>UCkmvU`+ zY`%6S8eQeMU**0vM>L~mGvnVXvtl#7y%mbHl5T2{Y;$(1-gW9+lce*sbomf{F<+4F z5TptYOaU;u7^G)6!^M`$2J^SxXp59alUBk;wMomihUGpkzhcR}ae`qc)Y1PlmY~-V zDh1inPYo6JL7Cu628$-Pb?OGip*OyM?)2Rskp5NtDXw-roE>zvc%hmQCFS&BW?g$| z7rt>5pPnA#Fu5yf;oiaY0_NN&)4XO?>Fuo#L(#f zaCdQeoeGhQM(6QdhtWlY3xs8=8J)1(`m9ZxsvJGS98H^ZO}WcmH2Xz}WgmivGynM6 zcl*nSUU5GEXLS^*o6Q*d3_8Sa7W-J3r~-2t2urm;H-AK78PhjgeSFq-L+!JEVab`x z#-8lKWW=03D;Sv?MP0*e33c$H<}iDG6{b_qkyV8NmINA5HVPlacq=f+B0V?TW@lq) zuS|C5Xoq5|WDaeT4RyOJ%w#O9txeLSZ=_TyW}LQu5U>gqxdcmGHR@q-1ZUq0di+M7 z`3fZHo_j;}&vY_%ChwP+Gio|W>c`91-3*|$n(#-IupHn1el~p-#=~H?v1bS*vmi*b z*EZ}27D)ngYsoPl3awvEVt(5ncU|PwbJn%V=BW0oVhi2IEtpHNEQ{yaa|dQ5skdmL z6w8kQDE22L>=9+n06}!^@}Ty$W5(m#AF|IREa!B~?86q;ClfUnEbslnr(czBd^=vQ zqZ!9|YOQFL+=I*|2e-vwwUa5hQ?O*GIrhJ-(>E?N`L_ja<{XWr7^eiav1dANlkJH^ zJWD23M*mp5<=eu9Xw}2_x$QGSt^IwSp(ptnHoV)?QL;``>3BNeSsLalmx; zT7coHcm_R_1H-()$|X5_xhpkX1cI?l!F6llw=2bQmirqx2hE_0pt1y?QF^akwkW|| zRWemDl*elS$yEnUK}+25_1earnh{=Kfzk~7J^Zb$Iy(Ye#rx6x4na<+_3LXZC)ENm zK@#K+v2QLrQ?hSgYd2i>Z$NHcx8Kg;?v=NuaDsuCa(62~6q5iPG)?lM%y~j0(z2hb zq(1DfnAN=Wxk^-;cXrZWhpEKJUCbai)3e1)vI~!os7^&QT!ai!ewTU~$j!j5lCP|D zHW$^W)nT|?^2x4)yqma7KbHB{#CInCtxcOSI>p>zaHrpsUZ_*JD&Pb^VMDczWF4~X z?J$96$yxivt5zsO4PKWjAUP_%;vvB&4$Vy`lRTaeyoCLuaPsL+duUQWOB6 z>;2HKQW^OWH85yU&Bt;3?9l-vKpb$#wOIEJ9c0L2i-z4XY4Qh33yi29_PMoBn$|WV zV1Ab)w2cO3*42wCV zs~mEDh>JYXatbDJ(o93eisS^>1RRb-O3Wz7Ww`r;oA>{g0n+$PN); zzL~gailL$7;g(zpb)px;3zl+Yl-gT%1~NqVnr$4j2x_!eWA76q(!^StWgiMk#8X!u z{noKnaA_8xxRXO1&L|0gl?nP8*iV!uP!)?V>(9$iC7xE3Tf~0T79R}`O&yC5wJkn; zh)$$OC*R=pyL5bfw{{K{*tXvI+tA#VctGOP`&Ae2L-AU!{<`m$q4SQ#PQiAF*^tTZ z_0&5!{v-RKBV1Bs6)s`>H1>jC5mDT)Zxh>VStRMA`Xd9+DMcm~%81Kj9Jf+LUzJx@ zOQ)ZT3^vKE@2vILWf`^HkJrJqJ*~J^^c)mjy2+L=6&d&1U9->DQ1AQ2uT{}!M}3qS ztVV~B4v6s=1ezaKpPtQ&OTX7-I2gY%zZPf?lnP*{_^NhtdJe2vP#mP6QZX7i)z!2n z3%A9{c=$GpP#t24!0;hapKpQHJ>%zqsnCaNpV;+4^X+-h?NhN-mEW$y{u{~z_*t~Kbf6~k{UR7={5M;!B`6{(dS2}JIIMZo>2 zgW1n#8?ME(kkzsG@h0!&V@b!GH12TsYousZ7mshp^j6y)y&=X5SWDk-d!VIr_RPW& z6OB3J6YUwSrlnf8otcvrV9->{{MF(<`>8mJeEj=RAbY(WammQ;^Qi(qVbx&X+?T~A zOQCq%=gVWNUCAiEQM_jUju?vcem%F!w?A1^M;(2;q4|WOKEmU`v6MUZpo*hVEYU3_ zht5llW^Awn;#6BCwZi<>QQq~lLYn4>mBLL3xj)J3W4Pt&CQCp!q%PmIE2+O0DSN;tK|EHeter$HBD_fA_-t2f12MS3;AInvsys?D!N zDwto(Jv8l~w@F@150HB^V8ceg?|0{A;LZ6C8q`Zh`o8q>_kUI~MIu+;BQ@5oz9$Q| z-I8#(bS=UOeG4W5h->v*Ny)~`?M*Vqe?3d(IY|62d-J|uUfM)js}twzvP}@DoIo8) z`JORBOhcXf+T%ba0J8ABmfCn+6OtHzabhNH)aNNAZdNPnBIGpZ zYi;V@*cib43kOXcbFxHto)Mz?QoU9s!tII;yP2zDv{JZ;)*XYGhs_TW=;T0+c(r6t3xJGy0 z3jpQ{BCyCuu!_-1PKJ4#caaBYly3%K8mX*DPS$cw()4jm9J;!wx)Qm2m7Cl*hj5O`>GONaIYh{%ce=cZ5NBQJ%9{&~2Me|>M9x6xs9ZlAEaQc|xH zl%58?q}&8lUVa)Es_r?eMc=eBTYbz-wb(q%Y_1z}7HsfMl)YRMJm7Pi1`!TdlARJrq$&@OxMIWz`VC{SwtwWOYFs;9(| z`}(*C{(AqRt9)q)?iFF{Nvke1KiYMi{N?EgUd>DN9gfXaKJTjJ&r6qg6Md}}@m$bc z)r(R+cA#gqeLr|LkL!A611?-fpm5Z#kBwpoR;aRFiQTL7A z-~|$Xc1!S=>A~=ugD+{8l;rh%D_DuOzue+BLFV6a7F{Sb_A$gI&-(g|dhFTQ#F%7~cwe<@$RX5@C;BC<^7l}E9nuIlvS&n0 ztlyo@C!BD0k%MMWa#R%p%}sEmUk?JadAG$cjO*PAL7R-6*^>bH=S=p+C9GtRT_i%e z0pEyGgJ2T;m-kv5?_R8I>8N&x9SxTLEnt`+{4|J(kuw1 z#5BCSrxzfPD|Y5TXS4qiFZF#!#^D;2?7m@#WO-PHwxR;4L<>_XR6El2j#tL3*xfi_ zs40y|PMU4~JgpxdwYq@s)u-y=@*@22>}d~mS|DTXFG-2tkv`#hl?!`aRm2r^y1889 zN5$=M;X>f(*~C>v63po!3!o6gc&Y?ESXz&M^(p|bljgjv2Sp0)4pXzR*>* zmD}Osg^_ux0(1USf!F4{r5$`BufWTD~Po^SWp!7X%IqdF5b_#Kq1P|E4{$3U|f7$d2F(yA<^0Q_U9IF6{Bz;Jb z@65AmnB5zm){(}K=1e)46hA#Uqgx%M)m3E!nj6B&pWjnuPL-;DW>I@LEMoUV#dGZc zrVw88ebsINxM`lMQ*v=!r9HMGT$^+S5SJbmVc1<1sYqjJa|`!LRB4t8`MS2ur-LF; ziuZmdYpg7Qi`LhUwQ?=zY{NW%4nTapltsHO*|2(LJTuf0ij)$RVOhIX`4pEJgE+EO zTf2lxZ?h{lT}}7t*Ditsl`|7HPVHC)W#XGtezpA#w>GdudrfX*rNvxVh0X@sf8`L= zT`e;1-t{J?8KF`7+}knnqK0l7+BLj#O^OFrH==+m>h&tKdp~wT%%A}n62uOK>p8P) zvT0IL({YR-=#-B}2@%<=KE&@vg2-s{&E>;)Lv#JKj@U8jr#Um!+usdheSznipS~LF{2||8C7597 zBA2m`6IX37j7FO$lm?iB88=@gZ#P$iUwmHW!&qGZV0T*1xVsvK>Sa)w-?MyK8t!7$ zfe7Ug2r)NQSgB_+9btXJX5$v0FKbMJyNgaowL;gq$;I(nYj)ZzHkzK}?J z$Jw>|m<(l85*I{+!NR}PN3IovI#ny1n>cbalUbhmyvmZ*;u!O=^02lq(xH2LK5%-5 z5oK;$kW2rvFav+T|MX+P6?dND-=xZS_;%Y&lj)QzGkr*37UbLg!r-L_bX%FC6DiO3zFWB8Ri>sXABw;QRtAaKGf zrI0`OqEsM356?cdacP|IvaMmXNuH`-Wc#&}zS8(3!t|)7&n!l(Yo^JfX<{Pn#wD1^ zq_}SE$IH4fSt{5)4KRg0FF{(Br+h0-%9+6m4bfFw9GXC2`0LewDE0EuY*!5J|4`E7 z`<1EiW0_wxa*g6=oiDzN=;Q7P&bK{r>Y=+lw{?bBIM9pwYreQ?S4) zhCjs__xB4Gp87b-{ZQIu-&~7fvLtB->7$G)dERqvM!`WVLNux6A zS*kNrjq#+*U`6(ux>7A2=GlI6H@^5O#=_7Oi$3v-6n<bei)NfWd`d=e`8GF`XJRR`+|qq> zvHihHQLIhyj+V0Z=t&2{pP@vLl>~SKIXs&Xj}@lMeODJ#{hiZk?S2Dr-7d#DHd!eG zq5jcys2%;$&!lCf$D=ZBNK&|7i#TrBSfgI$VRhDZ^TfPpKgaa40^_+Uk-UdL1HDb= z($K1uOJfb=19g#_ED7}#203MdF1_ZhZ|l=mjhxwA6rOK<&~q3e6kbhQfG*|O-#gRKGp#A07^X%7OO90;E$*LV@{5G)=|aY+XWCG!V;lg@ z9s5^l?#1SiibfxvcN60%x{=}%0s9Ujx@7=%k_(+X-G-h;3%~tpZeM^)an7Ied?702h;t%P?XCk zSH?=E7ZvFwT6LI~Hs1KSM?$$sbQO`NhQmo}l3>-@CTZzc1cNk6R@v+dcSBI9uviQeCzi8GS2DXiU3HGO8rOhqvK#F~l|7|i-JeV(xs(64kKe9WCO1W~zhxbX}&#PM5cXliq z=g;~VuiP1WxHF{q{@|>siYI3o?;c2pGpIPp0@+m{|18bfsxux%>Rds|Qk2!l&iSXV zvQUz9xY)07rL3`U4C2xqiC6=pxvMWI`rIO>6a|N0>3%ZjW6sNO`$@`N(2!J4rk11% zxPD;0Jdq@LxBHnUL>ENbJ=R&CK{p6i;ie0clMQEqmGv_uo&l#gxOX}7V1G5N+^X$ zQrDAsfL$w&=j&tgepgon`=l)Z)mu(1xmU|Ri5A)L7G5Mit!{SB33~YFfGgQos_86Q zgE%lDn$;}x$yl=B_=$wnruVFeD#bE07Wh0*;rrgOyNK(7jDvHuwT>$t*-)ajAS8Ei zJnWUhxL4p5E}`5yww%5)%34Axr>Pt)6#4pDnvQ^>@NyvCtMSo}pD!eMbIDb7Fq15P zKFVJcYo0F;k(sh6aj+X+=r3C>u0Fh11YR?@c{ZYQfHj*oCc60K4KY$+fXBB#^Z6wC zS9IfGzuZ~{TZ7yW8l3-5e~R3358vSATF6J6_6cqs)NDPYl1{+y=hw?424?ViKJOm< zZh~P=OR0@7GPREw;YL-TPh3#dblJVDa~cSFdbPrZRAudocy-ktuNPNWO-9;;?{b-q z5aSEsQOCongsHG%4sl+VZ!97eD;J+!Dslr27`rq+dYOMDtKFpMDnNRpQje14w<#Ar z*)7}zQE=noME8up-{u-;=$m=L1}($UTf>EUiB&ZxT+J`bv}WFwO$znJ6klGVI`61E z5uBW9A4wLFkvDq5&Mf}OVmYVk>tc_9Mn2p6kFq+1uE4-k_DK!9_?mB)m^v%b@5i_! z9__4-yH|IYs{g>g(J#7KISTAvTKtSdRC`xfONiO`QEih)=9O4Jm}*T)v7)_soaQ5- z-Ra=IeB)yCUXqe2UcYgo$$d}4JmtQ9gg}@^{S~jBcAGxFI9C(Ss+;s6Q3F{K+MYnW!+R`<~zjqAi?|B8@!}SYDmr)Ph3@zh%O}Y2m&`{?MX}5`}c3I#;$1u-1_&J+cgns#qsYxKC16CFd(P9q2Dsjm$sN%w`|m6lE0vr zb#z6>zUET;&z8f{iCO=Pjg}tvHT6~Tp1{ z^->wKk_6`SbGPxMWqJoe_xbjzs}*}yjuJ>cdthZ=?^D3ZXeQZes6CKBimaJ{7NxLTLHU};^f&hqUl>_TIv+jKF?^lQP6o1ttli{^N(86jM2 z*7B8_-VDFG&8VLH8LeI`y8095`)|y7S@M#fXg}Dzh+I=84`UG^?LB#gFEFP0~!5kQeBw>i2JU_v?_A{yFUF{&f--~gUlmLn3fBen22q) zO}E~63(yK2BF0--P`rFLE~-&A+XPy*0>kEncqEyFvDU{#GJ`8H zR76Oeq}N zNyH`PNn17s>!cRBZV#ChAw`K^Rx#nqXi9>{AL4!fBP+tV?L)b)k|F? z^uAN~aEw($o2Wf<9$I1Y)3UPmsX~iM5qkVt`_d}zf$csN_P=!N_`xD)y3z>A<+KB- z@^_MZ<_o=+2DS{|Fdn#Hy`}aW2Jz~zRmo?ROR85%K*p#>7jPGYw=s12g|=>4`K6GnR8bLw-_j&~VRHw+_1aN=p9I!|gsXOQS>eEyOifxTP}Sz@jhz=O@7gxG zk)5}x053H@MIkW?7DBI`!x-!hxJap7L9m;)JbqUR+BIZ^lOa?kyQ$XIHMEL%JVP$- zIM4_wd8X{d9k;posf-1h>lLh~CCM&a_XCP!3~pu>FZ)UVzyYHSYeU?CEWB)?ww`36 zo^LoE-G57L;7TteaIF}#QzJCBwJJ+eqPl(F;pGcpn5l9WR>{b(wX`Ee5GjL{J$Uk>~4e+ z%KqiTgL9krtv?Cz&>NGbSIfSC-XG2k1hfS-#RChK;N_8%%6*Mdbor zCh0jrl;9OT@uZIASG84*o%3pU?ph>eOgPGGlfW;9KlVEBFb;bJy0h#vVKj1DwyM1k zj`6E80fqW4Edd5ORR;*m^Hz3bAGq_q4dxgVXxO*+Elso*Df7ki1lJ6Uy6A5NsstZy zuqoRT`eU9y(ZW&vUk^LQ7TAv7dCUm_e;c8f7FzB!Gx6c}#Iw7Y1 zFhM^qMoPr&!L;Gssd&zjV7UhupVi4fGS4zxO3{{7zdbFfawE#^i~U}=u^o2|jUU8> z?#bB6AtGIUzMiDE{yEJ>S*LR-7q(hkm^yy$IR!Iyi&fr3EFhQ~JQ72q(0B-max+1H zAB;;@{rBHvNJtCu-`5htXvnQ(`n&{!T@VW)kPri0zJ1T%H~vEM|1}w~cI;O?_lo7$ z=Y_=gn|P&P&~jWL4kfw0&<$+p#|4j--C_sntg3>ARGs#6+Gbz_p^bOLdbSHes@a zy@g96IVm z897JYyw{J*lYX-+fB?FtBVa((+$fEWD0C-c;h2Cd1_o2vrF4j z^SxQQ(<4s#A<_tRH-q~bSioxtfp^%W1oq!3yCGm<|LoPTT@IW{L^)V{Xg4{l=-X@< zEE|4&%1>s{e1Xc2e?PzL2OEMNvkMKC;NCi76A@RupR%U#()IV}U@-NeL z4R=DMA8A5t-IG?nxae108~XA39A?0|eOAV|nSY?_I%7v*MA-Tq41*7s06xnW z@R@BPkE@r>?`$iA(`*0HwL47KDzPI<4ua2cxx8 zBg9ULDA|pN?G7@lrN&3^2$X_Xb8lB`eIa1?~B0I6Fs z_i5UWTUZFPbB!c_Futo-bv>%~!k*uApE$K}$c8Ulg*qkL;D7Zt%<_G5nBTSVPle`C%=rytj**Az_DI8@>hM67yB3SC03nk2<>CxI6neJ{SOK#}k@V6vMq{L33p>N5a$yYKF zzoT*!tA&VlLko4SFDdIVrfrR|(7EsS{k1T|495iyE+jVb*iAJgN*pAr_#qyBFQ<$w zh@59dXVLo=LVJp6wVMfWk*D09$~kHSBc51ex;DJUgEdX?Y6bUCi7;ukta;OSv zmM2WrhY$p?M#2l1OFlfpVM4zLPp5_G)h)@;s*4!a)gy}Y@{K#BG^^9-eNKB+kk~zE z>$ni?hj;~{LpIT+KJsQ)AzR{|&37+gf0g2}f%xG-n_j}5{S5WcWdfI|7EW%In`@yn zUmKBOv3GcTTOfIwct0=N@d!&o{ekwRrDxqtJJM8bZ(Cq5lV$3g5XClV+?f!ZJ`!@y zCY#9JAGQ){dpPkMFuw-T)CV|yCiJj+q`aHyTn+a zJnF-lGN1bsT6OiI=3kG#2JJM;gb?U^2F5GTW4Ix|;)sz2|BuxiD;wyNco`^YYUbJC zaM*5tRxD(uD(43(HVYt(6#rTDPmD*9)*VX`ezQGZ+ZNnz7Rh z3to0Z`dG+WzyOMR3ov==_#rNylmwMr@06!m4My{i@t#l=i&s|jh;mo}9MQ=M}rQLG0-)#J2RU|8f^$=4*8BcIbEYKz8E=vL36=p zWb*#j9UP~?udQNMag7jEqtL|IiET`Q5RG;Q;-=BaO+;gQX?p0_JCus(bl>YMj;EzI zmVLFV?|GOi*(F0}NB2l!p(q{ziNYnQhMIzngf_kv2~?%4+-NSk*lV_E2sp%In?sDM zL2M>COa@k$+3-%au%`~kqD>gzVrl|&BHae@NXz-IR8_0Tz-#&=CZqbB(?IQ2(PBv0 zxS3NBoAD9k1dkY=QY%mHF~&=2s@L=mhkcEwFR8q;Uap0I2-O4&IolYXgr;LesRj@t z76dld%H{k5Ptd9&UWCxA!Q^RF8PRfM_`@`sBXa$p}@0D@!!1gZERzC5|8 z0oh3U7jFtKhzt_?;MEUl0atZb`V}-M>-s3~gql)Ax*BTR51p312KZX=KqZ9882osR z^cHDHp?wjGygr8}xlwbPnx6XBK92Vx+wjTWdOsWwFRO-rc>BquQ;3Zly4ScQ188_Z zpkbR`oLx`w$i~mT!*+~huJntOjyG2pME!~$jiqtfsBaZ2Jkl%IcqFsw+T{^)I3>6v zdVhD*Qd)o0{b;H1^d%FkwG?9>$VvJLSz7z@gOOD^9;jWolPevd#;&jr3*|l6X1=_H zZdj=BRDPt=ao@GvAikO`oo78CaE1J=P>t5SADS~W3XN`SM+o`E11ZIdJ6Hvf3b0-1C*aysFXK;W@=j-L z<*{hGm<_#5DvKE(<{ptx;_5z;+RyOP5BlO_a8b)`Y#W4RAQ_<++_pNgM2b*Lr(4|@c9d51JAK8Nu8nN;ClQ1rS#DEL#%aqUl z-El5rlK|D`E7>sW=uWZ)IQj{YIA;M#9k{o50HvI9r^M-rUtIs$a%ufkrlzSSlc6ZU z8)$=Q`^n^5`>=CbaJvS!%Zgn_wkQs(9ZK8;*7?VCaYP($WpY9d196QLy-S_^C4j1k3OGi7s4b++nDKh(xiFP8aqCC3l2Qv+b9 zP4ypLe9OwU#E#Eg3Q%FuQS5L(L{Jxn#s5?)>d4c#yAzBM8VZvCJo0KMIVwbJ$K)DV z$uW(=W)Eu zHAOGxsx(7oO`2gzaK6baT&jWZ-g{V?UGVC5%OIB|)@&b+%i^5t-NJpC%@BbqdVg)% zAR4`GukR~^ul%fPX!yQEy2ci+OY9HmC9D3Ea@5n|WV3`k zNV!uW<({0}e?6tT42PS7q4JxUjRfQG+V3?QQ94EBXuOwtAj!@sMsDmB6txW0?Yl?I z%UEGh0v5qj@C(+-8vdMcgR!rA7suuAL~8r_;Els<$wmOihZ$@cYM|6I*uYe!Hu?-g zTAP_%=Cp!Kd^>!;*UJaL&v)kM6Z43OtTX!tjzs~JgOvLdZqbMhn1?M4_BOjpwN$X5lAfEDIcjQ_m`7U^szJ@X11a{cz^33dL2Gg@$oZD4=C^}9P+6yjON5B3y_4T= z;?1R!jQ1jmo9M@?VB;ToUQUkA{=SjG|0sH+45tp0(~Uh}5sQ)6@{eyi9b2W@upRws z?)ge?eHxCVKc>JF#Cpf+6Ia6sn)>v)nIAi3!kR*om z1c~`JKZQFjmOm!cbHlaEy5`@4|K|oKm0t%0xI3&2*W59X8u>tTyVmvrBmZ3RnQ^cw zmh01p>Xtv|*48cFpmZydt%!N*%+HeY{=E+V zoyM5LIB?iL&wQt5#V(jv0!Z^CM{^hrBqZ3C44ncWil8~Ai#)Ri5i?nl$q_8kRb25% zL!r$s0wmm-Y9qC6w~0S5E{3v~8v11L&WpaJjU_JTDl z!03l4>^~%;c(w%%Z<1)oP3y6*eEbQNchEX~E`p|~-lA;BaXn?XvgeTpZ(QGS3;DLa z;|c^`XBk+u?|$b6d{E;$(tcU2ej=TA@@3{9I$c3CX!^3mMy~8~NyZ^6-w)|1EXXV@ zIcVh}R@>V;o>1hFti>QXdcew=Crd`GFQ8sv*}Y7T^gRA<4-z1KQt{-+yf#tAqXO+|H7vNw+L^{kBn^U zVSUp0S+1ksYcWSWOo|BkOPcJIjEc`n4wxeaM8D6dZOteL0qJ^kji`?R`?S)mcF5QK zQZra@b2M`6+2eBIt02f@u^Am2cH`~3Cu9TodC6rpy_RHjy?k;nUBqu@i2X%=T9Ty`aNiU`5Y zZjRdsodF2#b8(YP<$k~6I8d!G0#Rn>)h@!}9663h7HtqA79hBVRKXvzQM*8-&hmYq z>=!kIY~Qr7)r-fE5H zP0{#}J+FLDLA%xZ2F6i#)tim4yB}f^g#WV+a{$VljSc@j+fyLEp7d|Zo!PJh?JCQS!+)c9eI;f1 z^M5TCTIL2y0=%Ph;sFA7nA(?^FSktu?hC44q-;=&Ckjk_%2S+9ZY~I$Cg$$}76!<< zJ7?SSv=wUgQYR+0Rz`I7TR(LDhyL>zj)@hN+a*ApOVSyy zJ9{Mv@DN?R{DtpO&54fZ2X{=&tMCr^0y!(@oK|RjbLhvb<9qSg8SwmUP50PceF+=s}elxhzBgxz8cI!;BY!BxF&0_@ zDNwsgzHvCC9AQ{hpdgDZI4l5}h@svBqyG5KW$Q47nUd0_3HP+l=e2!xqwTewjm4NB3Z&nm>*o?5#m&x1 zvGGS01IHT$R?jZl`sc9-1oCw%f3plnnuK{pzb5w_F1MA!-%I>ycV+S(_6&ITzKI`` zO@A(yd0p};BCX)?{Ysb((;qpf+&xk&H5wU`-vql|4BStjqJrMyB4F2Q47Y^+aC^t) zp~n^fAqH-Vu!8%^_EL>1LWA}`X~@Q3md202Z5QN!pFZ3aL|zI_C#7jIrZOx>9WuUr zy8Y+I>mHXy0k=QE44|&bgS5^)a2AVjey5>I@RW;>XUy=go{sHD%POBm(@HXO%byH& zz4Z3M?ye@w^Z9g~9^?HVzH&Eb-Apxj5BPwzA;12(m_ zTWMu5=<&rjY%nT#C8>=?Qwj{d*1(Ib;VH=;X4To@%J&tt4?Aoe^8@1wK2XF*%*F%G zmv*boRQDC`ZZ_~O`@)oH13JD}XY&}+6ZoCCMQ@@ev+l%_`ut=gI2P|xj?x6OM%~S@ z!C_{f3M}l4DhS2wbw2({d|-I0fCgP66!x>W>)-w(7N)@B5j0%j&#C7Y1vM4+8ql~-r`hM|Ww*ez=|T$5Ddq7rQ4tU1^!1LepU%m60Lm#oV zSk_aDT@`5z0;~7@o|7~?Gk&i!AxOj{$=YYNd>kZz1aMDo?-z%XLx%qx@eW$o!Szuf!p>DI`#d7TaHd_cd#m@DX|StXWc6sUSIfZWJeJAu?$#|@f7!1YNTnLu zY@dak1s?i9`PH+PiCT>9e&qMAfPmQ7v~fc{Zjwf$t^qq#{@jHs9h>#tgi~2t&ll#L#uv=h*3mW97{5D+FVkmBb~13oB0h zHrQZAuLTFhRhiGFbXkk;TUE|`_J)|S$AMgp6Mpl+Wp`0Koo&^9Xt1ewt(pr%pRX3$ zKg?Wn`NS`M{6>l1GpV;_u+`9fY=Xp2v%D2e|Fk1(vxG56op71ZFSj{Z0nC|dHpUI+ zOnaBCHA76DM7BunH|^R|lXbMx(r=ah?EAwZ1FO_{-3JyL; z8!B<3E%Bs*wn1ew2`2RKJ{Rb5 z2!&oO-EKX@Zwo-Ich_Xqag}Shyv=MUChiu~E25!^#pu1~#o}wz6DdC1I?}i%vV92F zchP>N)sO~HpH3WEjMjU7Ymmk8`)P%jKE^O*@po#o!Pwkq#r5lL`CQWD>%VS#z-4X2 zbS<3c2vw04gNGYNh%3LTh{Z$-^96*%HHLe^rmZkfBTjmpH0L)bgWtbKbuFKKv6t8b zH^}SU{=pvQwmtTA(9;W(g|=w#qw}RRCk19%hgxO3U}MmyhIci*ouvL5(f8S3Uev|P z>!FB14)Vh%aq#!mIU=>Pw@qs#bg&&qVdEeQbB`D8`0ckY^#)(L*Pzo?0fi<U>f+?m#0tWOeNx^3qs;j^j@ua1hbZlNjnR(px^D3wpSYAA!B8V z*5?~&`MJJEx?*b0Vpq#G8nrnfT$ZDaQzS{UYgV5%haj0QpWL4Ie$G932!e!ox4#Rp zJ^7vaSh7q-T;+#Cr&shW8TV7*gNdYXepUT&EA#XwFTHc*=#7#TTp^KEO8BDqZ`=E- zlJk7s>dz^^n;R~0-$<~_r8;$Brx3;`h@Mr~wM|INRf>D`J(56Qa2LoeN?T6WM-kdc z_ued1!L7Um*u!PGTSPci7ga}?#L*{63X5F9u(y{ZQD!evflB**e2#y8} zP@c!rMC9&F0u=c~7I?qMmw|bSi5<9?ze(hl*CfH@(NEDh_sXG1n5(~3H3P^Q%vG{D ztd1Z)=RL5onT{CFVnAtUHZ7B7kSJgW8hyzp(V^>9oKi__|6XanSu}tY3{KKP;3CwO zybPD(H6xqWW`i4)*-Sh7;VcnIRHXcb?lp@H-+*|=HCXDBYv*1wmSXxcX>Sp`xF+jY zYwdW>a;TvI2!Ap_N-Z;v6>+Q6*xul)%$)4#cg1+5tH)=%H@P1SmhREje(b=RAHDEA zvLmBq&_OLX`^k&rdmjG-HubdNi|x(>_ZoM0a?QD5TLu|A^lC0;6vOiCb+t#9zpIAS zt#M7QaI%y6WAHr;ORyKSJsVGhwOr^geIvR_FRz75`{ZF9=O|T4Qph{biKWj?FlAgT84r<`Vd;#gbO_H`5{-6@Jmh{8y=^gQ?0D( zvuejYTDYMJxhpNGAS*mXwmPgxl~o(tC%xr;sl7KOsB)-htK`LU0;O4EEO_jf59ZEb zZ)@#z>2j!%!2h-(dmoav1U_Dcf2XJ zCc3Q|zSQF=7urx8I4O`q7uOndR}!lv4+Sqhf4BavsYMRloS-D%?Q_jD0R6Y)<@c^Y(crdb1%nc3YjNQ3}aFzv4Ny4_}925e-3R6-K2XZu;D2a0;ML_d!DM%V{ z0B0D+U%9H0joW8ymk>r2UEsxi7Y@a}R)jPThBQ>vHp6FBU+@THxcvmw8A-6w7? z+z}gmO3v*Nh7(qFPKPc33 zm4RoA71oW+bSIdSvmS(V&L;wIoUvmYhfv<_I9~Do;dv0GtqKG=6>SQ?Ar#Z~FXmnlaTujk<*~-jHEZ+b74~Fm z=&px{*IeyH>GWO4o^WVdI=)cnms2cX*EyphIi^<~uOn6qA1AHQLTV0gAKrZd4~-Ei z{5&-`8(tMj^&w|>-B~pn=DIE5G9PD5=MR0?@Tq>!jgcVR<58t*e>Aj4epTIJEbLQM z&{PdGgrX=w$7`~#jHurU?$_ZE5m$4q zi~U2qHtcb7;3Axzt zEju_8zp2d!+_t&~@xOD6JPe`I{**{$ySU|^hO9h6%denD@obI1K{ z<5U2Qlb8GV!^%kPam&uiRymLPw}RwNk<9fgGII(YTgkLsf%_7B9xH=~*UWA%U2AIF zc)_Apc7+88hQ-r;HZE6E>N_Y=gx-)qsat%2Yq5=BDAnkHy+-~0q&l)@ZPZ#eCM#l1 z?bFw@r3Wj(aTe%;fJJmB$Ye{jK2d8}kQ|e}>T0lsLDOS>|6uBlvRzgL!w3l31B_0O z!p9q6?g1W)0)8HaKQH#5w@|jA9k3;!wx`J3=M%vGp`jxV+joJd1FCQ?+8YN>hPOv1 z|DK=y=Y#Qhbp#S$9-|7*skWbr1TjUTJ2}8ze?Raqq<@p4EbiwJI(j<; z^()HPU30rb220i8ZU28@hi#>FMyvt^v2*Lj~!CC z??IuEH~c90mho8Mk&CR6neN#))MA$w*EsyS4++IfKXEDC0?Uz#Q4|IX)1j1TL}v63 zqg#*y0*S&@Afc=DwO76E7-*|`zzgsr7KWh*%4_1Voq_`PK00+M>R>LC_JA4hT=z5DPKNT6op@unKfN*cwC19l}c`6UnX&oz4@w&|p=_2YY&( zyAqOqyNepgL+#Ihsc7tbmh+6%xv9F$gn<9hQK+BwH0o^jHv_<=gB~zc5lZY1Q&%z$ zI6pGFV2hh%rX{_2F-2^i=<(*hNqCUGbWkpM6bO>MyU(0ZGH#UKY&_>?y?Q_qCK4^@ zC~s$ez1Ui5JY&hq`{l1V?@{WC52Ecs?2D^gu)UEA3MFsvuq>vLtnEf?$p&c{eo&^P`YbWlTLoS zv{LEcd^gWDdGu1T5`9bf4K;nZBol~g;mBdp=!n@L=+C(#0`0I#%cJ}8?>|l57quis z*3W6ho!k2EV??dbHms@qUeW7cA7KnxuZW*8rDLrV_olxx)x5F;%^GB(&QQOJ284WK z2QqlYd{1x%;-%7h{e5RXk0$(axl?Z>t?15lxfhce5LfWpHk%d@Ck*F0L+UJZ z>W>Jdl>rut#_;Y6c4P3;C3cp~1E=p9&iiH_A3ytgS(iQ)c>dlnc}iPbp@Jyr&VW+P z*P|e^a(!bwdcWE}t4Cqx9K6));ldob`M>#iHiKp*cHm zL}e)RmY1RUTaKnrYZP@224Os>9>% zeyvRQaGzoD5V(?0?8ZVTR06VzBgh?rXe+sO?9gdDPf3e9N7=KLA{HMJ#64vv5g8}nteDq4 z3A3x8Dw=F>na`pHE)II|%(+(KAziZudBBSi;6=plAT`@&B)x}iK+I1#$Cy9RSV(HZ z@Y8Wa?aL<^B9ir}OZtcY@)~9!wY=bU+`kxOY{TEb#?CKBZ~?DWkPWJ5We ziJ6_HO&r_3>_S{5S&1(3Thdm6qJ%{@tF6z+Pbbz*3k2lu0-w}$EpS3q9Uzd?iov<$ zJ53`rXGR12u`$~Pcf4cy45O$0F`iBHz5T8sia7RLuFNFc#+t3e;_1eUDPc3q*$nax z=C^&LW90Zla!nC?K+?8otUbK{+oWZbt5pa z$x=+*w4kHSuU79_nk!?5Q5l;%&tuuPq@1bbBtI8YCk^(mswsHg;Km3CV1O0*oUZ~V zyr2;fBJ#rgM{{)hZK=I4@6))=*hGCgC;>EeTrLg9- z@qSNEqk`t6jMP}%@^$jL7Ip^b$$F4= zCG+Oom)u$jCsZ^UY-Q4U5X)XxUm)dNmvqT2NIAMnyG(Q9<|mI!CGHH}VDTRI7*4s! z%$=)ZfEN+>T8Tbe6j)Q|2hTUiqU%rn+~_~oTx$2H9*9_P2jDt2i#Vh58`=^)X|%SF zKQ=aePgbJ6SEwOVG4ie!f4v~&>rBgb$|`-NdK7#RISrH|8H0g_>8H2lquYHX10osh zRvP6k!%K^bCK>V(yCe|kZC*WE{KhqZ+xRnztM=f9oBn;RS$S90dKhu5lYhXR)p6m{ zS8H6wR02j`R~w#!%zS=d`d;bx!UX5;x`LV39@Wqv@Uo?1;bi!%^=wI82S2isohcx@ z76%fr(Yi3;2Tj0R2O_x{1hN*QEyv76Dy3vuemN(!k^bTZTL85fbtTZa2B-ToT%)uQ z@PQaE^;N%-iPkl0{L!_)e+6dsSV*_6(ANDvmyxJ{t74#k#?gMNUk@Eu297=P1;jo5 zEz&v4W6D}HeUUSn)R2r{X=-M6p=R(OyhnhR>KaIro{?myQ3Cvb<}B;yR%P_GX_wJj{d z+Da1!NN4cTK7GKXK(Cb%Ai^Quki1jq@IEjE__8|6{@#c}0phL>TgfwlsVJvI?i|*w z?Q7^`B^~PZA^PnGrWFwNV516qqk0|GK0t*#Fp!lXTp)J@F1ZPkzHcP>*x#rYpwJ|8 zq1-fT@E8~nLi}8>tf6SY*dHrvspSR(_g!nT)_R8fe(trd_r@`2 zC$(i8mO&7tcJRPnR|tZGN7!qm68O>Eyd(mG^r3@$9o(b*$9Sqqsi&hYCjuX#t@bWi zqq^xA{lA`{a5f>Wy;^d0*}fY~9W)%C(@!vctp7UE-i|Xd@lP$8d87F^lJwjiT^n@Y zv+}0L>SH?+qM+^i#%hJD;k3=RWTWw*1m38D`D~}H5T7sj!!S8oxG>K%V^abmW<%Ck z!VyRfeRRfocwYTj+cg#NOoeEhAS)F`GZnpLDT1oBg7@f02NmkkR`kQ*YO6J%4OSO@ zjefkrsTUND2&Ba^G<2q?IVAbV8xmqG8a4Er(J)vB&9VISk2ihDO8MvH|E+E*RH6w4 z-O>PzFGu`}k?zTTz*zAjczF5uvb?x&+4&a&Cr+pvpfj$+;b`^qI*(a9R%@w3>o{Fz zxq@2+DF!q9RZKfOKG+r`?;l~5q3v4p-KP{ztN31d!MJHei+cD~Sl-d{hLXLQt z(S_ye5_CMd9U~*vz7x!m7!0Od6>>I*R{}(JiduANXK1gWi7}rF47Z_0$);e`mJ+!i z(>TJwPakB8LRohR1b?yI0h5N;BJ~CxB`WL3TpC%K^fwjSxo>Nv;Sb!?KQS>eOkW6}e_eC=m+F1{#qYFa26$*`K;h|zjG${&sQI>a z#}*o0^`benIL*{Ec}HGsaHSNmD*myQ4y8}EX*POEdHcnAa!1NSCf^Zn{oV;;JHb^D z2r9y{8BRMu3ss_ikaUebQ%~>}GMJ;~jjD~Wm`vigg}Np)!6$DgC}}ynTNA0F0m1J* z)W3HS$AI;;*U3F9W`9U%KjZTo(3P&z-h?WH{SJ=zJ$Z;@Y3-qBDYl*SK4C z{$h=4Bn3fpedV>jrWFJAQ*m6LYuEW6e}0MXVk;Vki%2zRXdi*Wa61QsybwmKlXgHm zFf*sD=iRVd2PyN{ib(thk9Wzw-DOxx4dESXprDEFB@;=F*$4cfq?IYkD~E0ZSFG8u zY_OAvXk873R!HCRuZRkEaLID^HvF054bZq`i0(2k%jrJ;zy8C9NtYMlyIf_9|4>ZT z_t;FD&3Ti{;jGc*8fTSUQ&5%kkQPU9MRAagw)&o;64Erb)|)LIEJ!5k#k`#bS)%=l z7l1@UpOT6(tL7?M?r`)Vd%M&A2CsGU=cxof^C71ETT%7Gz3vqE^Urvuaa{UB_Zca6 zk?<(08XB^Bv1HYI6Ac}x^@Sd6bpD^b#!Ml}F`3zG#?;h@zT0_S zv}}XJS-2+dIC9UvjE%6KH(q42-?ug5jmlS5Hpj#jD$1qU%iN2$uG5wXLIzdyM=)AlNL@o`Nf!0Nyi^_7q$eA(7R zxQ9T1?A34HN&5h2opjmbZAX#jogU1iW6CHqZ(X|jUlD3mCdi3cH~-R(Tb|?rrYz<{ z>+|jZ1K>u>pfoRGny|}$I9~2vJ5yuZVCh2f{dQJh64QPUYIgHiHZI%`Fs<@Cz;ypo zYL%{*Ddqg62fsnmAa9BJHG>^eunsRuz_)LFI#T_Qkd)6XvxMP7mZH*G9|6B7cSLWd zd2cI>f!abkOd7M9lC-IM_1FL(qP2{gnD`~Glj0M%UdV>Cd^Bw!+Iqmi=2;>%yx6TL z-37~-_^RBVs55yptr34toEyH6%#lx0YHCURM;+PK1~6QM`}hIuvlpr5Nv_j_*Tye@TIV!MHM4tT%p z#?W=NI-;E}9i?UR?8r5GifB_5Pl_^5{5efkzQ~oTKN`f(+%96< zIHHC|)?J@QK`1^U3?2;RW2!zv$sJ5WaU=g@|1`8f)JhqQxPWnD=9~-fn0V0JdjpQ% zd>ztwk++tHRdD!9gwhc(UPvmGw=iaO$Q)*MEUIR?Iy0Lv`l``*VITUwHXQw|%m;yh z1|b@4^%*lC3-^e&UYC&p=N$Yz-h%OA<4EM34ljl$2wmSXtyXStC2zH*SdoUgp}!dG zR77HT*l?H6eLmW4W}mCKyIRn*R5hYYV$Ge-T)9uh;snd~N1;@|iw28_@IJ|Ng3DXH zq>VvHtJ2OG!Gh1NwRduBzku3H8P;@JK^fU@`AFC;ir-Z|JsI|wu~+U6;yHPBkUBF-I1FO(r3qS~bKqm@lqg=&2P5OwCW-u|U2hyFc($GK;-t@Y?eLDh zDLDqXr}7H9Y${FIiIw%s79@X8+$B?f<4)#u(-TF-ACFZbkQLg67pSb1u!2|HEnzTF^w2Nu9FY6*R@f~>A!6EOl`JVoNz{l0U^UG0k!Jv z`ATzI6ixDyLiZ^ZU63|y%!|cK+oP-GBXgndo6)#qV30%dGxG9O^g`b)OOp!&sUDUy z*IGW63VdaHFNE+^Kl-AcZiQNh1`PfLn7_6BPehhc;Yc6K&`>YOWhUjWUEf`a_%F#@ zIp>AW>l&cI3j+Yi*Z;16pB1%E_`;wkwdmZpDqknvN{iz;J_cyqBLK`|6181Vn|8yr z%MB~;wz8@!(S#$4KppTldJ`269di_6bRxmhf4It+RfkJU4jnomfR)J&HIQ%pbNvk}s zhy>wa6}lRPoW=rDmM_1!vj?7I+9eu#n$5xXUGS6MuYJ-o#)xX7Ht}YVr`BmeMJ@*@ z#XhV$Vt{zg!UdNBSc#@v@JW0aG)cA;n8M(0V82{0?%ECDJ&RNE*<^Vv`dp(fPlfxS7|^2ZwDL@u|_+4>xcuN zY%@#cGMBJT;N0j53=o`}e(00I3oUQROq3m$w$z#jJry~n)Ktcz+Utm}an2VI$lE|k zJ1>QQS*=wQ)pS+-hnf6a2QpiZkjnVAAKf1DCxKe$~c}o2MP9 zXiJa~p<8Y0S*jILO{};!B^3*2P~ke?heX-HO}or>OlG&BalZkLReaVbMr{qS=vZhS zQUeLdxk`Rje@HrSw-x1Ie9)Z!x1cX1ZaUHq2G1YR%y-lp&T9YK{Yd_ zUKW47_Egb0Lj@{?YS7X59WK5>iItwO{UXR&wB!=wq>+;^ivFxq$$O)Y-8H|m^D>a+ z#fO0)$A~_Ms3Z29b%{R23xAB(%nte2sb&A z?gU{n{f=d93P2JBQ7W9>$`IpZn;tP=)y?1+#9n!@Yu-)_4AYI z+uSM*6+{Oz-e}8XapZ{%MY#}4tXjO zmgNej82+DcDP}}j8EQWO+3?f_sjuXlp$UZ+2yQdjF9jovi1lewqJV4pRXoM8JIg91ai8~IFq+hznKCPLemtbnsG22J4bMh z;jByk)4n2hY;mE0Q@Rh6__Z_=Bec#+@RCN5H`!+-P^71%qw=)O>K!%^;F$s!m3PK~ zc$>ObMQl7r<1m%MF}AuSG+zNNZHBaG@9f)rM*7$T(Ql&KG*TCC$%+LmxSKk zI|+OpXq|BVsAkJJQsey=paLH|nK9OzL4Izk7Smxp-OY+y(>O08F!v z?5>E+g=L7|)^Z<5%vHM9l8#|=c!M`2gKW#S?70Du`3l{HK<1WGp~BWH#d63^1tKJ7 zx5l47ZW$ryL-CGXT(0O(1N{-POD2alKz7G1!@q7$v1X+2NL$F`e5xb1-fX%IZn&Cv zgL|srgyLEBZfF!!C2!aeF%c%M$}^fjNZkzwEHjF-zvxV5;Q){>TXW9}UtXhHwkoID zvzOSq$cS7`e%4vNi_>&EN7IxM|< ziN7R=BX^K?zXK%&t2XBJEAWbjmKR`*ubL-&Z-_C{);hlIA^w+*1zIZK1{x|aG+Y~V zqQB}&HGZUB9Xtr%n_1FfxEqn`_HUw3)6==AxQ3u109{=&xL9-5evfQo*JnnCUunQ!y4s4Cvw}7tBl*Z=f<9V0W#}{AX zeq2T#0CyUjH|*#7ct_|b9tXo&gq0j7*6H$Z&Qc636J`__ za3?@*({M6_miM`j-2gGd0D@pNB!9=j(GMKXC@4G{)XnPRR(ViFJF{G8N-D~zDc>#zITkcCrl>iKU@fNZI87YoVDOSPv_b z^r~ck4C&X58Ftz&SY8n0!nQxT@TB?0J&J9^K#-vDs2f*}$GzJ57x*{LEs+JNwUAHV zr-svki_gr&YqltYc@P+U@J0Y%$4Bfjci?P!!7pB^;)X&U?TEfC{;P1Wvkz?>`GKK& zo?Zru1WGCc_fa85-c!`e&h7cR+VkOK5sj?7^xV?WJQta*a;y7Ius9+>UmyAig?OUA zd*HhYbE_r`j=mVY|1k1s7?Ydugb%&krM+jA zXXWDPEPGB%_rMPjf&fbzy07;YL=UdWteI*p&F?flEQnjr_7(J7DRzpS-Uk$xDv^H6 zdD>H6(jJuNW@_I*cNXdPsr6pFKZ)@G}p7V&Nwr z{N%)+b>U}i{J-jhFbi=A1TB56_!i)&zWAxJe(KDhiu$Lb{;yHgEIAZLTGWooz!SlT PThPIM&U^EJ$6fjt^aVyN diff --git a/front/src/static/images/preview/eafc3340a67b9eb3c675513f1fe4cafc.png b/front/src/static/images/preview/eafc3340a67b9eb3c675513f1fe4cafc.png deleted file mode 100644 index e0bb18efa70960418e7ce477a6dfdc3d02068a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11654 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 Ji*@W?{12%ZgO~sS diff --git a/front/src/static/images/preview/first_network.jpg b/front/src/static/images/preview/first_network.jpg deleted file mode 100644 index de500d5e9d3bd0748980e2225c8163d9b5bbb708..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38349 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 Q&(o|Yf1aUj`{%F!17N_K-T(jq diff --git a/front/src/static/images/preview/switch_and_hub.png b/front/src/static/images/preview/switch_and_hub.png deleted file mode 100644 index d2a8fb12df2cd442e72c4d74371150ae851c9434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18109 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 Date: Fri, 5 Jan 2024 04:29:21 +0300 Subject: [PATCH 3/5] Update README.md --- README.md | 84 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 994a80de..3b8bef12 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,57 @@ -# Miminet -Эмулятор компьютерной сети для образовательных целей на базе ОС Linux. +# DHCP for Miminet +Добавление DHCP реализованно на хосте, чтобы запустить DHCP серврер выбирете соответствующую команду в разделе "Добавить команду" в конфигурации хоста. +Введите параметры: диапазон IP-адресов (второе значение обязательно должно быть больше первого, например: 10.0.0.10, 10.0.0.20) +укажите маску подсети и шлюз, которые DHCP сервер будет выдавать запросившим хостам. -![diagram drawio](https://github.com/mimi-net/miminet/assets/89993880/9f6ddcc2-afeb-43bd-9abf-fc34cb102e8b) +После добавления команды у всех хостов появится чекбокс "ВыдатьIP-адрес автоматически". При нажатии на чекбокс параметры хоста ip, netmask, gateway станут недоступными для редактирования. +После нажатия на кнопку "Эмулировать" на backend части серера построится сеть, и DHCP сервер (если он добавлен) раздаст IP-адреса тем хостам, которые его запросили. +По завершении эмуляции конфигурации хостов обновятся и они получат IP-адреса (шлюз и маску). +Заметьте, если вы удалить команду добавления DHCP сервера, то чекбоксы на хостах пропадут. -## Local Deployment -В директориях back и front находятся .env examples, которые используются в docker-compose и ansible. -Если Вы используете Docker для backend и frontend, не меняйте имена хостов для url в .env. -Если Вы используете virtualbox/vmware с Vagrant для backend, и разворачиваете Redis и Rabbitmq на хосте, укажите ip хоста в back/.env. (в virtual box по умолчанию 192.168.56.1) +# For developers -## Backend +## Реализация DHCP-сервера и клиента -### Docker -``` -cd back -COMPOSE_PROFILES=celery,rabbitmq,redis docker compose up -d --build -``` -Celery, Rabbitmq и Redis будут доступны после этого шага. В завимости от того, где разворачивается Rabbitmq и Redis, вам потребуется указать имена сервисов. +Этот репозиторий содержит код на Python для реализации базового DHCP-сервера и клиента. DHCP-сервер отвечает за динамическое присвоение IP-адресов хостам в определенном диапазоне. -Например, если у Вас уже развернуты Rabbitmq и Redis на другом сервере и нужен только ipmininet worker: -``` -cd back -COMPOSE_PROFILES=celery docker compose up -d --build -``` +## Использование -### Vagrant -NFS(для полной автоматизации vagrant up): -``` -# /etc/sudoers.d/vagrant-syncedfolders -Cmnd_Alias VAGRANT_EXPORTS_CHOWN = /bin/chown 0\:0 /tmp/vagrant-exports -Cmnd_Alias VAGRANT_EXPORTS_MV = /bin/mv -f /tmp/vagrant-exports /etc/exports -Cmnd_Alias VAGRANT_NFSD_CHECK = /etc/init.d/nfs-kernel-server status -Cmnd_Alias VAGRANT_NFSD_START = /etc/init.d/nfs-kernel-server start -Cmnd_Alias VAGRANT_NFSD_APPLY = /usr/sbin/exportfs -ar -%sudo ALL=(root) NOPASSWD: VAGRANT_EXPORTS_CHOWN, VAGRANT_EXPORTS_MV, VAGRANT_NFSD_CHECK, VAGRANT_NFSD_START, VAGRANT_NFSD_APPLY -``` +### DHCP-сервер +Чтобы запустить DHCP-сервер, вы можете использовать следующую функцию: + +```python +from job import dhcp_server + +# Предоставьте необходимую информацию о задании +job_info = { + 'arg_1': '10.0.0.10,10.0.0.20', # Диапазон IP-адресов + 'arg_2': 16, # Маска подсети + 'arg_3': '10.0.0.1' # Шлюз по умолчанию +} + +# Замените следующее на вашу фактическую информацию о хосте и задании +dhcp_server(job_info, ваш_хост_задания) ``` -cd back -export numberOfBoxes=N -export provider=vbox/vmware -. vagrant_vms.sh -``` -N - количество экземпляров vagrant(Miminet на данный момент не поддерживает мультипроцессинг, выходом является запуск нескольких вм). -## Frontend +### DHCP-клиент + +Чтобы настроить хост в качестве DHCP-клиента, используйте следующую функцию: + +```python +from job import dhcp_client -### Docker -Поднимаем после Rabbitmq и Redis. +# Замените следующее на вашу фактическую информацию о задании и хосте +dhcp_client(ваша_информация_о_задании, ваш_хост_задания) ``` -cd front && docker compose up -d --build -``` \ No newline at end of file + +Убедитесь, что функции `mask_to_byte` и `parse_ip_route_show_output` правильно определены и импортированы для DHCP-сервера и клиента соответственно. + +## Важные замечания + +- DHCP-сервер требует службы `dnsmasq`. Убедитесь, что она установлена и запущена на хосте. +- Конфигурация DHCP-клиента включает в себя установку сетевого интерфейса (`ifconfig`), получение IP-адреса (`dhclient`) и обновление информации о маршрутизации. + From 1b72aaed00d1297de3a8df1d4ceb5bb65fce42ad Mon Sep 17 00:00:00 2001 From: Andrey Didenko Date: Sat, 6 Jan 2024 00:18:20 +0300 Subject: [PATCH 4/5] Add CI/CD --- .github/workflows/dhcp_test.yml | 22 ++++++++ back/src/test_dhcp/dhcp_tests.py | 89 ++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 .github/workflows/dhcp_test.yml create mode 100644 back/src/test_dhcp/dhcp_tests.py diff --git a/.github/workflows/dhcp_test.yml b/.github/workflows/dhcp_test.yml new file mode 100644 index 00000000..8b032248 --- /dev/null +++ b/.github/workflows/dhcp_test.yml @@ -0,0 +1,22 @@ +name: Тесты DHCP + +on: + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout репозитория + uses: actions/checkout@v2 + + - name: Установка зависимостей + run: | + sudo apt-get update + sudo apt-get install -y dnsmasq dhclient + pip3 install miminet + + - name: Запуск тестов + run: | + python3 -m unittest discover back/src/test_dhcp/ diff --git a/back/src/test_dhcp/dhcp_tests.py b/back/src/test_dhcp/dhcp_tests.py new file mode 100644 index 00000000..dcf2e888 --- /dev/null +++ b/back/src/test_dhcp/dhcp_tests.py @@ -0,0 +1,89 @@ +import unittest +from unittest.mock import MagicMock, call, patch +import sys, os +import subprocess + +cur_dir=os.path.dirname(os.path.abspath(__file__)) +proj_root=os.path.abspath(os.path.join(cur_dir,'..')) +sys.path.append(proj_root) + +from jobs import dhcp_server, dhcp_client, mask_to_byte, parse_ip_route_show_output +from network import Job +from mininet.cli import CLI +from mininet.net import Mininet +from mininet.node import Host + +subprocess.run(['sudo', 'mn', '-c'], capture_output=True, text=True) + +def create_mininet_topology(): + net = Mininet() + + host = net.addHost('h1') + switch = net.addSwitch('s1') + net.addLink(host, switch) + net.start() + return net + + +class TestDHCPFunctions(unittest.TestCase): + def setUp(self): + # Создаем макет (mock) для host + self.mock_host = MagicMock() + + # Создаем экземпляр Job для тестов + self.job_info = Job(id='job_id_1', level=1, job_id=105, host_id='h1', print_cmd='', arg_1='10.0.0.10,10.0.0.20', arg_2=16, arg_3='10.0.0.1') + + self.net = create_mininet_topology() + + def tearDown(self): + # Очищаем Mininet топологию в tearDown + self.net.stop() + + def get_mininet_host(self, host_id): + # Вспомогательная функция для получения хоста из Mininet + return self.net.get(host_id) + + def test_dhcp_server(self): + # Тестируем функцию dhcp_server + dhcp_server(self.job_info, self.mock_host) + + # Проверяем, что методы и команды были вызваны с ожидаемыми параметрами + expected_commands = [ + call('service dnsmasq stop'), + call('dnsmasq --dhcp-range=10.0.0.10,10.0.0.20,255.255.0.0 --dhcp-option=3,10.0.0.1') + ] + self.mock_host.cmd.assert_has_calls(expected_commands) + + + @patch('jobs.parse_ip_route_show_output', return_value=('10.0.0.1', '255.255.255.0', '10.0.0.254')) + def test_dhcp_client(self, parse_ip_route_mock): + # Тестируем функцию dhcp_client + self.mock_host.intf().name = 'h1-eth0' + + # Вызываем функцию + dhcp_client(self.job_info, self.mock_host) + + # Создаем ожидаемые вызовы + expected_commands = [ + call('ifconfig h1-eth0 0'), + call('timeout -k 0 30 dhclient -v -4 h1-eth0'), + call('ip route show'), + call('route add default gw 10.0.0.254') + ] + + # Проверяем, что все вызовы были выполнены в ожидаемом порядке + self.mock_host.cmd.assert_has_calls(expected_commands) + + def test_mask_to_byte(self): + result = mask_to_byte(16) + self.assertEqual(result, '255.255.0.0') + + def test_parse_ip_route_show_output(self): + output = 'default via 192.168.1.1 dev eth0\n 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100' + ip, netmask, gateway = parse_ip_route_show_output(output) + self.assertEqual(ip, '192.168.1.100') + self.assertEqual(netmask, '24') + self.assertEqual(gateway, '192.168.1.1') + +if __name__ == '__main__': + unittest.main() From bc794c7667bd02091a7399d52d5f3b6311eb0950 Mon Sep 17 00:00:00 2001 From: Andrey Didenko Date: Sat, 6 Jan 2024 02:04:33 +0300 Subject: [PATCH 5/5] Update .yml --- .github/dependabot.yml | 20 ------- .github/workflows/back_test.yml | 58 ------------------- .github/workflows/dependency_review.yml | 14 ----- .github/workflows/dhcp_test.yml | 12 ++-- .github/workflows/linter.yml | 44 -------------- .github/workflows/staging.yml | 23 -------- .../test_dhcp/{dhcp_tests.py => test_dhcp.py} | 0 7 files changed, 8 insertions(+), 163 deletions(-) delete mode 100644 .github/dependabot.yml delete mode 100644 .github/workflows/back_test.yml delete mode 100644 .github/workflows/dependency_review.yml delete mode 100644 .github/workflows/linter.yml delete mode 100644 .github/workflows/staging.yml rename back/src/test_dhcp/{dhcp_tests.py => test_dhcp.py} (100%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index bdfcc022..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,20 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "pip" - directory: "/" - schedule: - interval: "weekly" - groups: - pip-dependencies: - patterns: - - "*" - - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "monthly" - groups: - github-actions: - patterns: - - "*" - diff --git a/.github/workflows/back_test.yml b/.github/workflows/back_test.yml deleted file mode 100644 index a4161ea6..00000000 --- a/.github/workflows/back_test.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Pytest - -on: [push, pull_request] - -jobs: - - build: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - python-version: ["3.11"] - steps: - - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install apt package - run: | - sudo apt-get update \ - && sudo apt-get install -y --no-install-recommends \ - ifupdown \ - iproute2 \ - iptables \ - traceroute \ - curl \ - dnsutils \ - netcat \ - openssh-client \ - iputils-ping \ - mininet \ - net-tools \ - bridge-utils \ - tcpdump \ - git - sudo touch /etc/network/interfaces - sudo mkdir -p /opt/mininet_dependencies - - - name: Disable packet transmission to filters - run: | - sudo sysctl -w net.bridge.bridge-nf-call-iptables=0 - sudo sysctl -w net.bridge.bridge-nf-call-arptables=0 - sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=0 - sudo sysctl -p - - - name: Install dependencies - run: | - sudo python -m pip install -U pip - sudo python -m pip install wheel - sudo python -m pip install -r back/requirements.txt - - - name: Test with pytest - run: | - sudo python -m pip install pytest - cd back/src - sudo python -m pytest -vv . diff --git a/.github/workflows/dependency_review.yml b/.github/workflows/dependency_review.yml deleted file mode 100644 index 2bb8a81b..00000000 --- a/.github/workflows/dependency_review.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: 'Dependency Review' -on: [pull_request] - -permissions: - contents: read - -jobs: - dependency-review: - runs-on: ubuntu-latest - steps: - - name: 'Checkout Repository' - uses: actions/checkout@v4 - - name: Dependency Review - uses: actions/dependency-review-action@v3 diff --git a/.github/workflows/dhcp_test.yml b/.github/workflows/dhcp_test.yml index 8b032248..7a9c849d 100644 --- a/.github/workflows/dhcp_test.yml +++ b/.github/workflows/dhcp_test.yml @@ -1,7 +1,10 @@ name: Тесты DHCP on: - workflow_dispatch: + push: + branches: + - main + pull_request: jobs: test: @@ -14,9 +17,10 @@ jobs: - name: Установка зависимостей run: | sudo apt-get update - sudo apt-get install -y dnsmasq dhclient - pip3 install miminet + sudo apt-get install -y dnsmasq isc-dhcp-client + sudo apt-get install -y mininet + pip3 install mininet - name: Запуск тестов run: | - python3 -m unittest discover back/src/test_dhcp/ + sudo python3 -m unittest discover back/src/test_dhcp/ \ No newline at end of file diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml deleted file mode 100644 index 52a360cb..00000000 --- a/.github/workflows/linter.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Linter - -on: [push, pull_request] - -jobs: - - build: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - node: ['back', 'front'] - python-version: ["3.11"] - steps: - - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - cache-dependency-path: ${{matrix.node}}/requirements.txt - - - name: Install dependencies - run: | - python -m pip install -U pip - pip install flake8 mypy black~=23.0 isort wheel types-requests - if [ ${{matrix.node}} == 'back' ]; then - sudo apt-get update - sudo apt-get install -y --no-install-recommends mininet - mkdir -p /opt/mininet_dependencies - fi - pip install -r ${{matrix.node}}/requirements.txt - - - name: Lint with mypy - run: | - mypy --ignore-missing-imports ${{matrix.node}} - - - name: Lint with black - run: | - black --check --verbose --diff ${{matrix.node}} - - - name: Lint with flake8 - run: | - flake8 --count --verbose --max-line-length=88 --extend-ignore=E501,W391,C901,E203 --statistics ${{matrix.node}} diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml deleted file mode 100644 index 204201e3..00000000 --- a/.github/workflows/staging.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Deploy on staging servers - -on: - push: - branches: - - 'main' - -jobs: - deploy: - runs-on: ubuntu-latest - environment: staging_environment - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Deploy on staging servers - uses: appleboy/ssh-action@v1.0.0 - with: - command_timeout: 20m - host: "${{ secrets.HOST_1 }},${{ secrets.HOST_2}}" - port: ${{ secrets.PORT }} - username: ${{ secrets.USERNAME }} - key: ${{ secrets.KEY }} - script: diff --git a/back/src/test_dhcp/dhcp_tests.py b/back/src/test_dhcp/test_dhcp.py similarity index 100% rename from back/src/test_dhcp/dhcp_tests.py rename to back/src/test_dhcp/test_dhcp.py