{"version":3,"sources":["src/index.js"],"names":["getInterfaceAddress","ipWithSubnet","ip","ciscoMask","split","mask","result","getNetworks","network","ciscoReverseMask","inputExternalCiscoIp","document","getElementById","inputExternalUTMIp","inputLocalCiscoIp","inputLocalNetworkUTM","inputLocalNetworkCisco","inputPSK","inputKeyId","fields","field","addEventListener","compileTexts","generateConfigButton","querySelector","download","args","pre_class","target","classList","replace","text","textContent","blob","Blob","type","link","createElement","url","window","URL","createObjectURL","href","body","appendChild","click","revokeObjectURL","remove","copyToClipboard","hiddenInput","value","select","execCommand","showConfig","querySelectorAll","elem","ciscoOutConfig","ciscoInConfig","switchClass","element","className","elements","add","getConfigInString","data","externalUtmIp","keyId","PSK","externalCiscoIP","localCiscoIP","ciscoSubnet","utmSubnet","getConfigOutString","pinError","regex","exec","parentElement","checkFields","ipValidationRegexp","subnetValidationRegexp"],"mappings":"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","file":"src.deee0a28.js","sourceRoot":"..","sourcesContent":["function getInterfaceAddress(ipWithSubnet) {\n const ip = ipWithSubnet.split(\"/\")[0];\n const mask = ipWithSubnet.split(\"/\")[1];\n let ciscoMask;\n switch (mask) {\n case \"16\":\n ciscoMask = \"255.255.0.0\";\n break;\n case \"8\":\n ciscoMask = \"255.0.0.0\";\n break;\n default:\n ciscoMask = \"255.255.255.0\"; // mask 24\n }\n const result = ip + \" \" + ciscoMask;\n return result;\n}\n\nfunction getNetworks(network) {\n const ip = network.split(\"/\")[0];\n const mask = network.split(\"/\")[1];\n let ciscoReverseMask;\n switch (mask) {\n case \"16\":\n ciscoReverseMask = \"0.0.255.255\";\n break;\n case \"8\":\n ciscoReverseMask = \"0.255.255.255\";\n break;\n default:\n ciscoReverseMask = \"0.0.0.255\"; // mask 24\n }\n const result = ip + \" \" + ciscoReverseMask;\n return result;\n}\n\nconst inputExternalCiscoIp = document.getElementById(\"external-cisco-ip\"); // IP-адрес с маской\nconst inputExternalUTMIp = document.getElementById(\"external-utm-ip\"); // IP-адрес без маски\nconst inputLocalCiscoIp = document.getElementById(\"local-cisco-ip\"); // IP-адрес с маской\nconst inputLocalNetworkUTM = document.getElementById(\"local-utm-subnet\"); // IP-адрес с маской\nconst inputLocalNetworkCisco = document.getElementById(\"local-cisco-subnet\"); // IP-адрес с маской\nconst inputPSK = document.getElementById(\"psk-key\"); // PSK ключ validation: string, min 10 letters max 256 letters\nconst inputKeyId = document.getElementById(\"psk-id\"); // key-id validation: min 1 letter max 256 letter\n\n\nconst fields = [\n inputExternalCiscoIp,\n inputLocalCiscoIp,\n inputLocalNetworkCisco,\n inputLocalNetworkUTM,\n inputExternalUTMIp,\n inputPSK,\n inputKeyId,\n];\n\nfor (let field of fields) {\n field.addEventListener('keyup', compileTexts);\n}\n\nconst generateConfigButton = document.querySelector('.generate-config');\ngenerateConfigButton.addEventListener('click', showConfig);\n\nfunction download(args) {\n const pre_class = args.target.classList[0].replace('-download', '');\n const text = document.querySelector(`.${pre_class}`).textContent;\n\n const blob = new Blob([text], { type: 'text/plain' });\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n\n link.href = url;\n link.download = `${pre_class}.rsc`;\n\n document.body.appendChild(link);\n link.click();\n window.URL.revokeObjectURL(url);\n link.remove();\n}\n\nfunction copyToClipboard(args) {\n const pre_class = args.target.classList[0].replace('-copy', '');\n const text = document.querySelector(`.${pre_class}`).textContent;\n\n const hiddenInput = document.createElement('textarea');\n hiddenInput.type = 'text';\n hiddenInput.value = text;\n document.body.appendChild(hiddenInput);\n hiddenInput.select();\n document.execCommand('copy');\n hiddenInput.remove();\n}\n\n// Добавление обработчика событий кликов по кнопкам скачивания скриптов\nfor (let elem of document.querySelectorAll('button.download')) {\n elem.addEventListener('click', download);\n}\n\n// Добавление обработчика событий кликов по кнопкам копирования скриптов в буфер обмена\nfor (let elem of document.querySelectorAll('button.copy')) {\n elem.addEventListener('click', copyToClipboard);\n}\n\nconst ciscoOutConfig = document.querySelector('.cisco-out-config');\nconst ciscoInConfig = document.querySelector('.cisco-in-config');\n\nfunction switchClass(element, className) {\n let elements = document.querySelectorAll(`.${className}`);\n\n for (let elem of elements) {\n elem.classList.remove(className);\n }\n\n if (element) { \n element.classList.add(className);\n }\n}\n\nfunction getConfigInString(data) {\n return `\\\ncrypto ikev2 proposal ikev2proposal\n encryption aes-cbc-256\n integrity sha256\n group 19\n\ncrypto ikev2 policy ikev2policy\n match fvrf any\n proposal ikev2proposal\n\ncrypto ikev2 keyring key\n peer strongswan\n address ${data.externalUtmIp}\n identity key-id ${data.keyId}\n pre-shared-key local ${data.PSK}\n pre-shared-key remote ${data.PSK}\n\ncrypto ikev2 profile ikev2profile\n match identity remote address ${data.externalUtmIp} 255.255.255.255\n authentication remote pre-share\n authentication local pre-share\n keyring local key\n\ncrypto ipsec transform-set TS esp-gcm 256\n mode tunnel\n\ncrypto map cmap 10 ipsec-isakmp\n set peer ${data.externalUtmIp}\n set transform-set TS\n set ikev2-profile ikev2profile\n match address cryptoacl\n\ninterface GigabitEthernet1\n ip address ${getInterfaceAddress(data.externalCiscoIP)}\n ip nat outside\n negotiation auto\n no mop enabled\n no mop sysid\n crypto map cmap\n\ninterface GigabitEthernet2\n ip address ${getInterfaceAddress(data.localCiscoIP)}\n ip nat inside\n negotiation auto\n no mop enabled\n no mop sysid\n\nip nat inside source list NAT interface GigabitEthernet1 overload\n\nip access-list extended NAT\n deny ip ${getNetworks(data.ciscoSubnet)} ${getNetworks(data.utmSubnet)}\n permit ip ${getNetworks(data.ciscoSubnet)} any\nip access-list extended cryptoacl\n permit ip ${getNetworks(data.ciscoSubnet)} ${getNetworks(data.utmSubnet)}\n`;\n}\n\nfunction getConfigOutString(data) {\n return `\\\ncrypto ikev2 proposal ikev2proposal\n encryption aes-cbc-256\n integrity sha256\n group 19\n\ncrypto ikev2 policy ikev2policy\n match fvrf any\n proposal ikev2proposal\n\ncrypto ikev2 keyring key\n peer strongswan\n address ${data.externalUtmIp}\n pre-shared-key local ${data.PSK}\n pre-shared-key remote ${data.PSK}\n\ncrypto ikev2 profile ikev2profile\n match identity remote key-id ${data.keyId}\n authentication remote pre-share\n authentication local pre-share\n keyring local key\n\ncrypto ipsec transform-set TS esp-gcm 256\n mode tunnel\n\ncrypto map cmap 10 ipsec-isakmp\n set peer ${data.externalUtmIp}\n set transform-set TS\n set ikev2-profile ikev2profile\n match address cryptoacl\n\ninterface GigabitEthernet1\n! внешний интерфейс\n ip address ${getInterfaceAddress(data.externalCiscoIP)}\n ip nat outside\n negotiation auto\n no mop enabled\n no mop sysid\n crypto map cmap\n\ninterface GigabitEthernet2\n! локальный интерфейс\n ip address ${getInterfaceAddress(data.localCiscoIP)}\n ip nat inside\n negotiation auto\n no mop enabled\n no mop sysid\n\nip nat inside source list NAT interface GigabitEthernet1 overload\n\nip access-list extended NAT\n deny ip ${getNetworks(data.ciscoSubnet)} ${getNetworks(data.utmSubnet)}\n permit ip ${getNetworks(data.ciscoSubnet)} any\nip access-list extended cryptoacl\n permit ip ${getNetworks(data.ciscoSubnet)} ${getNetworks(data.utmSubnet)}\n`;\n}\n\nfunction pinError(field, regex = null) {\n if (!regex) {\n if (field.value) {\n field.parentElement.classList.remove('error');\n } else {\n field.parentElement.classList.add('error');\n }\n } else {\n if (!field.value || !regex.exec(field.value)) {\n field.parentElement.classList.add('error');\n } else {\n field.parentElement.classList.remove('error');\n }\n }\n}\n\nfunction checkFields() {\n\n const ipValidationRegexp = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n const subnetValidationRegexp = /^(\\d{1,3}\\.){3}\\d{1,3}\\/\\d{1,2}$/; // TODO: валидация должна работать только с 16, 32, 24 маской.\n\n pinError(inputExternalCiscoIp, subnetValidationRegexp);\n pinError(inputExternalUTMIp, ipValidationRegexp);\n pinError(inputLocalCiscoIp, subnetValidationRegexp);\n pinError(inputLocalNetworkUTM, subnetValidationRegexp);\n pinError(inputLocalNetworkCisco, subnetValidationRegexp);\n}\n\nfunction compileTexts() {\n checkFields()\n const externalUtmIp = inputExternalUTMIp.value;\n const keyId = inputKeyId.value;\n const PSK = inputPSK.value;\n const externalCiscoIP = inputExternalCiscoIp.value;\n const localCiscoIP = inputLocalCiscoIp.value;\n const ciscoSubnet = inputLocalNetworkCisco.value;\n const utmSubnet = inputLocalNetworkUTM.value;\n\n const data = {\n externalUtmIp,\n keyId,\n PSK,\n externalCiscoIP,\n localCiscoIP,\n ciscoSubnet,\n utmSubnet,\n };\n\n ciscoOutConfig.textContent = getConfigOutString(data);\n ciscoInConfig.textContent = getConfigInString(data);\n}\n\nfunction showConfig(args) {\n switchClass(args.target, 'active');\n let targetRenderedElement = document.querySelector('div.rendered-data');\n switchClass(targetRenderedElement, 'active-render');\n};\n\ncompileTexts();\n\n// TODO: если валидация не проходит то конфиг закрывать, кнопка не должна работать"]}