{ "version": 3, "sources": ["../../../../../../../../source/febe/ui/src/scripts/classes/Request.ts", "../../../../../../../../source/febe/ui/static/svg/icons/tune.svg", "../../../../../../../../source/febe/ui/static/svg/icons/rabbit_running.svg", "../../../../../../../../source/febe/ui/static/svg/icons/rabbit.svg", "../../../../../../../../source/febe/ui/static/svg/icons/schedule.svg", "../../../../../../../../source/febe/ui/src/scripts/classes/Utils.ts"], "sourcesContent": ["/*\n\n Usage example:\n\n const req = new Request({\n url: String [false], // => url to call\n async: Boolean [true], =>\n readystate: Function [Function]\n }).fetch().then(response => {\n // do something with the response\n }).catch(err => {\n // handle request errors\n });\n\n*/\nlet parseResponse = (s: string) => {\n try {\n return JSON.parse(s);\n } catch {\n return s;\n }\n};\n\n// transforms an object into FormData\nlet formify = (data = {}, fd = false) => {\n if (fd === false) {\n let e = [];\n for (let key in data) e.push(`${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`);\n return e.join(\"&\").replace(/%20/g, \"+\");\n } else {\n // parse form data object\n let d = new FormData();\n for (let key in data) {\n if (data[key] instanceof Array) {\n data[key].forEach((v: string) => d.append(key, v));\n } else {\n d.append(key, data[key]);\n }\n }\n return d;\n }\n};\n\nexport default class Request {\n props: {\n url: string;\n withCredentials: boolean;\n contentType: string;\n async: boolean;\n parseFormData: boolean;\n };\n\n constructor(props = {}) {\n this.props = {\n url: \"/\",\n withCredentials: false,\n contentType: \"application/json\",\n async: true,\n parseFormData: false,\n ...props,\n };\n }\n\n // Request.fetch will deprecate in favor of Request.get\n fetch() {\n return this.get();\n }\n\n // creates a GET request\n get() {\n let { url, withCredentials, async } = this.props;\n\n return new Promise((resolve, reject) => {\n let ajax = new XMLHttpRequest();\n ajax.onreadystatechange = function () {\n if (this.readyState == 4) {\n const res = parseResponse(this.responseText);\n switch (this.status) {\n case 404:\n case 500:\n return reject(res);\n case 200:\n default:\n return resolve(res);\n }\n }\n };\n\n ajax.open(\"GET\", url, async);\n ajax.withCredentials = withCredentials;\n ajax.send();\n });\n }\n\n // creates a POST request\n post(data: any, string?: boolean) {\n return new Promise((resolve, reject) => {\n let { url, contentType, parseFormData } = this.props;\n\n const xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function () {\n if (this.readyState === 4) {\n const res = parseResponse(this.responseText);\n switch (this.status) {\n case 404:\n case 500:\n return reject(res);\n case 200:\n default:\n return resolve(res);\n }\n }\n };\n\n xhr.open(\"POST\", url, true);\n xhr.setRequestHeader(\"Content-Type\", contentType);\n\n xhr.setRequestHeader(\"X-CSRF-Token\", globalThis.csrf_token);\n\n xhr.withCredentials = true;\n\n if (contentType == \"application/x-www-form-urlencoded\") {\n data = formify(data, parseFormData);\n } else if (string === true) {\n data = JSON.stringify(data);\n }\n xhr.send(data);\n });\n }\n\n // creates a PUT request\n update(data: any, string: boolean) {\n return new Promise((resolve, reject) => {\n let { url, contentType, parseFormData } = this.props;\n\n const xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function () {\n if (this.readyState === 4) {\n const res = parseResponse(this.responseText);\n switch (this.status) {\n case 404:\n case 500:\n return reject(res);\n case 200:\n default:\n return resolve(res);\n }\n }\n };\n xhr.open(\"PUT\", url, true);\n xhr.setRequestHeader(\"Content-Type\", contentType);\n xhr.setRequestHeader(\"X-CSRF-Token\", globalThis.csrf_token);\n xhr.withCredentials = true;\n\n if (contentType == \"application/x-www-form-urlencoded\") {\n data = formify(data, parseFormData);\n } else if (string === true) {\n data = JSON.stringify(data);\n }\n\n xhr.send(data);\n });\n }\n\n // creates a DELETE request\n delete() {\n return new Promise((resolve, reject) => {\n let { url } = this.props;\n\n const xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function () {\n if (this.readyState === 4) {\n switch (this.status) {\n case 404:\n case 500:\n return reject();\n case 200:\n default:\n return resolve(null);\n }\n }\n };\n\n xhr.open(\"DELETE\", url, true);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n xhr.withCredentials = true;\n xhr.setRequestHeader(\"X-CSRF-Token\", globalThis.csrf_token);\n\n xhr.send();\n\n resolve(null);\n });\n }\n}\n", "", "", "", "", "import tune from \"@icons/tune.svg\";\nimport rabbitRunning from \"@icons/rabbit_running.svg\";\nimport rabbit from \"@icons/rabbit.svg\";\nimport schedule from \"@icons/schedule.svg\";\nimport check from \"@icons/check.svg\";\nimport warning from \"@icons/warning.svg\";\nimport close from \"@icons/close.svg\";\n\nimport Request from \"./Request\";\nimport { Hatch, SafeString } from \"./Hatch\";\nimport { FetchFormModal } from \"../components/Modal\";\nimport { ToggleableElement } from \"../global/interfaces\";\n\ninterface cc {\n code: string;\n name: string;\n}\n\n/*\n Simplified delay mechanism as a promise\n */\nexport const wait = (time = 0) => {\n return new Promise((resolve) => setTimeout(() => resolve(null), time));\n};\n\ninterface toast {\n id?: string;\n type?: string;\n message: SafeString | string;\n title?: SafeString | string;\n action?: {\n type: string;\n label: string;\n href: string;\n };\n}\n\n// core methods and utilities should be defined as a method on this class.\nexport default class Utils {\n /*\n converts a size in bytes to a 'human' format\n */\n static humanByteSize = (bytes: number, si: number) => {\n const thresh = si ? 1000 : 1024;\n if (Math.abs(bytes) < thresh) {\n return {\n string: bytes + \" B\",\n };\n }\n let units = si\n ? [\"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n : [\"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"];\n let u = -1;\n do {\n bytes /= thresh;\n ++u;\n } while (Math.abs(bytes) >= thresh && u < units.length - 1);\n return {\n value: parseFloat(bytes.toFixed(1)),\n units: units[u],\n string: `${bytes.toFixed(1)}${units[u]}`,\n };\n };\n\n /*\n Copies input content to the OS clipboard\n */\n static copyToClipboard = (el: Element) => {\n navigator.clipboard.writeText(el.getAttribute(\"data-clipboard\")).then(() => {\n el.setAttribute(\"data-label-cached\", el.innerHTML);\n el.innerHTML = `\n
${check}\n ${!el.querySelector(\".ma-icon\") ? \"Copied\" : \"\"}\n
`;\n if (el.classList.contains(\"primary\")) {\n el.classList.remove(\"primary\");\n el.classList.add(\"secondary\");\n } else {\n el.classList.add(\"primary\");\n el.classList.remove(\"secondary\");\n }\n setTimeout(() => {\n el.innerHTML = el.getAttribute(\"data-label-cached\");\n if (el.classList.contains(\"secondary\")) {\n el.classList.add(\"primary\");\n el.classList.remove(\"secondary\");\n } else {\n el.classList.remove(\"primary\");\n el.classList.add(\"secondary\");\n }\n }, 500);\n });\n };\n\n /*\n Show all items with a hidden class in container\n */\n static toggleShowMore = (el: ToggleableElement) => {\n if (!el.toggled) {\n el.toggled = true;\n el.innerText = \"Show less\";\n el.parentElement.parentElement.querySelectorAll(\".hidden:not(textarea)\").forEach((item) => {\n item.classList.add(\"toToggle\");\n item.classList.remove(\"hidden\");\n });\n } else {\n el.toggled = false;\n el.innerText = \"Show more\";\n el.parentElement.parentElement.querySelectorAll(\".toToggle\").forEach((item) => {\n item.classList.remove(\"toToggle\");\n item.classList.add(\"hidden\");\n });\n }\n };\n\n static defang = (url: string): string => {\n url = url.replace(\"https://\", \"hxxps://\");\n url = url.replace(\"http://\", \"hxxp://\");\n url = url.replace(\"ftp://\", \"fxp://\");\n url = url.replaceAll(\".\", \"[.]\");\n return url;\n };\n\n static refang = (url: string): string => {\n url = url.replace(\"hxxps://\", \"https://\");\n url = url.replace(\"hxxp://\", \"http://\");\n url = url.replace(\"fxp://\", \"ftp://\");\n url = url.replaceAll(\"[.]\", \".\");\n return url;\n };\n\n /*\n Checks if element is overflow and direction\n {\n isOverflow: true | false\n dir: \"both\" | \"left\" | \"right\"\n }\n */\n static getOverflow = (el: Element) => {\n let direction: string;\n if (el.scrollLeft == 0) {\n direction = \"left\";\n } else if (Math.round(el.scrollWidth) - 1 <= Math.round(el.getBoundingClientRect().width + el.scrollLeft)) {\n direction = \"right\";\n } else if (el.scrollWidth > el.clientWidth) {\n direction = \"both\";\n } else {\n direction = null;\n }\n\n let overflow = {\n isOverflow: el.scrollWidth > el.clientWidth,\n dir: direction,\n };\n return overflow;\n };\n\n static scrollAndBlink = async (el: HTMLElement) => {\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" });\n\n for (let i = 0; i < 12; i++) {\n await wait(300);\n el.classList.toggle(\"blink\");\n }\n };\n\n /*\n Returns the color label for scores\n */\n static getSeverity = (score: number) => {\n let statusColor = \"normal\";\n\n if (score > 4) {\n statusColor = \"warning\";\n }\n if (score > 7) {\n statusColor = \"alert\";\n }\n\n return statusColor;\n };\n\n /*\n Simple form validation\n */\n\n static validateForm = (form: HTMLFormElement) => {\n let requireds = form.querySelectorAll(\"[required]\");\n let valid = true;\n requireds.forEach((item: HTMLInputElement) => {\n if (!item.value) {\n valid = false;\n }\n });\n if (valid) {\n return true;\n } else {\n globalThis.notification.notify({\n title: \"Failed to send\",\n message: \"Please fill out the required field(s).\",\n type: \"danger\",\n dismiss: \"Dismiss\",\n timer: 5000,\n });\n return false;\n }\n };\n\n /*\n Returns a new Request class\n - for documentation, see file ./classes/Request.es6\n - usage: Utilities.Request({...}) => Promise\n */\n static Request = (props: any) => {\n return new Request(props);\n };\n\n static Hash = (str = \"\") => {\n let hash = 0;\n if (str.length == 0) return hash;\n for (let i = 0; i < str.length; i++) {\n let char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n };\n\n static stateToIcon = (state: string) => {\n let iconTemplate = (str: string) => {\n return `
${str}
`;\n };\n let statusMap = {\n static_analysis: {\n icon: iconTemplate(tune),\n label: \"Scheduler\",\n },\n running: {\n icon: iconTemplate(rabbitRunning),\n label: \"Running\",\n },\n reported: {\n icon: iconTemplate(check),\n label: \"Reported\",\n },\n scheduled: {\n icon: iconTemplate(rabbit),\n label: \"Scheduled\",\n },\n pending: {\n icon: iconTemplate(schedule),\n label: \"Pending\",\n },\n failed: {\n icon: iconTemplate(warning),\n label: \"Failed\",\n },\n };\n\n return statusMap[state];\n };\n\n static spawnToast = (toast: toast) => {\n let holder = document.querySelector(\"#toasts\");\n let el = document.createElement(\"div\");\n if (toast.id) el.setAttribute(\"ID\", toast.id);\n el.classList.add(\"toast\");\n el.classList.add(toast.type ? toast.type : \"info\");\n el.innerHTML = Hatch`\n

${toast.title}

\n

${toast.message}

\n ${\n toast.action\n ? Hatch`\n
\n \n ${toast.action.label}\n \n
\n `\n : \"\"\n }\n `.toString();\n let closeEl = el.querySelector(\"[data-close-toast]\");\n closeEl?.addEventListener(\"click\", (e: Event) => {\n e.preventDefault();\n this.closeToast(el);\n });\n holder?.appendChild(el);\n };\n\n static formatTags = (tags: string[]) => {\n if (!tags || !tags.length) {\n return \"\";\n }\n let formatted = \"\";\n tags.forEach((tag) => {\n let prefix = tag.split(\":\")[0];\n let content = tag;\n let rhs = tag.split(\":\")[1];\n if (rhs) {\n content = rhs;\n }\n let tagClass = (() => {\n switch (prefix) {\n case \"botnet\":\n return \"blue\";\n case \"campaign\":\n return \"purple\";\n case \"family\":\n return \"rose\";\n case \"brand\":\n return \"turquoise\";\n default:\n return \"\";\n }\n })();\n\n formatted += Hatch`${content}`;\n });\n return formatted;\n };\n\n static ccToLabel = async () => {\n let response = await fetch(location.origin + \"/static/json/country-codes.json\");\n return (await response.json()) as { code: string; name: string }[];\n };\n\n static closeToast = (toast: HTMLElement) => {\n toast.classList.add(\"out\");\n toast.style.marginTop = `-${toast.getBoundingClientRect().height}px`;\n toast.style.opacity = \"0\";\n setTimeout(() => {\n toast?.remove();\n }, 400);\n };\n\n static feedback = () => {\n let feedbackform = Hatch`\n

Give us feedback

\n

Please let us know if you have any feedback for us. For example, if you are missing support for a specific malware family, you believe the scoring to be inaccurate, or if there is something you like/dislike in general.

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n \n \n
\n \n
\n `;\n\n new FetchFormModal({\n body: feedbackform,\n action: \"/feedback\",\n successMsg: \"Thank you, your feedback has been successfully submitted.\",\n });\n };\n}\n\nexport const debounce = (delay: number, fun: (...args: any[]) => any) => {\n let timeout: number;\n return (...args: any[]) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n fun(...args);\n }, delay);\n };\n};\n\nexport const deepEqual = (lhs: Record, rhs: Record) => {\n if (lhs === rhs) {\n return true;\n }\n if (!lhs) {\n return false;\n }\n const entries = Object.entries(lhs);\n\n if (Object.keys(rhs).length !== entries.length) {\n return false;\n }\n for (let [key, value] of entries) {\n const rh = rhs[key];\n if (rh === undefined) {\n return false;\n }\n if (typeof rh === \"object\") {\n if (!deepEqual(value, rh)) {\n return false;\n }\n continue;\n }\n if (value !== rh) {\n return false;\n }\n }\n return true;\n};\n\nexport const matchImportUrl = (url: string) => {\n url = url.replace(\"https://tria.ge/\", \"\");\n url = url.split(\"/\")[0];\n\n let importReg = /^(19|2[0-9])(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])-[abcdefghjklmnpqrstvwxyz123456789]{10}$/gm;\n return importReg.test(url);\n};\n\nexport const isValidHttpUrl = (str: string) => {\n let url: URL;\n try {\n url = new URL(str);\n } catch (_) {\n return false;\n }\n\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n};\n\nexport const getChildIndex = (node: HTMLElement) => {\n return Array.prototype.indexOf.call(node.parentNode.children, node);\n};\n\nexport let testSamlEmail = async (email: string) => {\n if (!globalThis.permissions.includes(\"login_saml\")) {\n return false;\n }\n const response = await fetch(\"/api/login/saml/org\", {\n headers: { \"X-CSRF-Token\": globalThis.csrf_token },\n body: JSON.stringify({ email: email }),\n method: \"POST\",\n credentials: \"include\",\n }).catch((err) => {\n console.error(err);\n return err;\n });\n if (!response.ok) {\n return null;\n }\n const res = await response.json();\n return await res.redirect;\n};\n"], "mappings": "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", "names": ["parseResponse", "s", "formify", "data", "fd", "e", "key", "d", "v", "Request", "props", "url", "withCredentials", "async", "resolve", "reject", "ajax", "res", "string", "contentType", "parseFormData", "xhr", "tune_default", "rabbit_running_default", "rabbit_default", "schedule_default", "wait", "time", "resolve", "Utils", "bytes", "si", "thresh", "units", "u", "el", "check_default", "item", "url", "direction", "i", "score", "statusColor", "form", "requireds", "valid", "props", "Request", "str", "hash", "char", "state", "iconTemplate", "tune_default", "rabbit_running_default", "rabbit_default", "schedule_default", "warning_default", "toast", "holder", "Hatch", "SafeString", "close_default", "e", "tags", "formatted", "tag", "prefix", "content", "rhs", "tagClass", "feedbackform", "FetchFormModal", "debounce", "delay", "fun", "timeout", "args", "deepEqual", "lhs", "entries", "key", "value", "rh", "matchImportUrl", "isValidHttpUrl", "getChildIndex", "node", "testSamlEmail", "email", "response", "err"] }