{"version":3,"sources":["utils/constants.js","utils/utils.js","utils/api.js","components/UIComponents/Table.js","components/Details/ReputationHeader.js","components/UIComponents/ExpandableHeader.js","components/Details/HeaderSection.js","components/Details/IPDetails.js","components/Details/URLDetails.js","components/Details/FileDetails.js","components/Details/Details.js","serviceWorker.js","index.js"],"names":["API_RESPONSE_STATUS","success","error","REPUTATION_RESULT","clean","dirty","unknown","TABLE_DATE_FORMAT","MD5Mask","URLMask","IPMask","FILEMask","keysToString","obj","defaultVal","arguments","length","undefined","Object","keys","join","dateToString","date","moment","format","fieldToTitle","str","replace","key","toUpperCase","compareDate","fieldName","a","b","Date","get","_x","_get","apply","this","_callee","url","response","data","status","regenerator_default","wrap","_context","prev","next","fetch","headers","Accept","sent","json","abrupt","t0","stop","UIComponents_Table","_ref","title","style","readyHeaders","map","react_default","createElement","className","header","item","i","ReputationHeader","indicatorName","isPrivate","result","headerMessage","concat","headerClass","classNames","ExpandableHeader","expand","onClick","iconClass","down","right","HeaderSection","_ref2","label","value","foundXFE","xfe","notFound","IPDetails","props","_this","classCallCheck","possibleConstructorReturn","getPrototypeOf","call","state","expandXFE","expandVT","setState","ipReputation","ipHistory","score","geo","country","cats","ExpandableHeader_ExpandableHeader","onToggleXFE","HeaderSection_HeaderSection","subnets","sort","subnet","objectSpread","category","location","created","history","vt","ipReport","_ref3","Resolutions","detected_urls","onToggleVT","width","detected","positives","total","_this$props","details","ReputationHeader_ReputationHeader","getXFESection","getVTSection","Component","autobind","resolve","A","URLDetails","urlDetails","urlMalware","AAAA","TXT","MX","tableData","name","flatten","exchange","priority","malware","m","family","firstseen","urlReport","scan_date","entries","scans","filter","_ref4","_ref5","slicedToArray","_ref6","_ref7","engine","scan","FileDetails","type","mimetype","md5","origins","emails","subjects","downloadServers","CnCServers","externals","rows","s","ips","fileReport","sha1","sha256","file","readyDetails","readyResult","virus","Details","loading","_this2","window","search","asyncToGenerator","mark","urls","hashes","_parseType","isMD5","isURL","isIP","isFile","parseType","components_Details_IPDetails","Details_URLDetails","components_Details_FileDetails","assign","_this$state","JSON","stringify","getDetailsSection","Boolean","hostname","match","ReactDOM","render","components_Details_Details","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/details.ff774b44.chunk.js","sourcesContent":["export const API_RESPONSE_STATUS = {\n success: 'success',\n error: 'err',\n};\n\nexport const REPUTATION_RESULT = {\n clean: 0,\n dirty: 1,\n unknown: 2\n};\n\nexport const TABLE_DATE_FORMAT = 'MMMM Do YYYY, h:mm a';\n\n","import moment from 'moment';\nimport { TABLE_DATE_FORMAT } from './constants';\n\nconst MD5Mask = 1;\nconst URLMask = 2;\nconst IPMask = 4;\nconst FILEMask = 8;\n\nexport function parseType(type) {\n return {\n isMD5: !!(type & MD5Mask),\n isURL: !!(type & URLMask),\n isIP: !!(type & IPMask),\n isFile: !!(type & FILEMask),\n };\n}\n\nexport function keysToString(obj, defaultVal = 'Unknown') {\n if (!obj) {\n return defaultVal;\n }\n\n return Object.keys(obj).join(', ') || defaultVal;\n}\n\nexport function dateToString(date) {\n return moment(date).format(\n TABLE_DATE_FORMAT);\n}\n\n// \"field_name\" => \"Field nNme\"\nexport function fieldToTitle(str) {\n return str.replace(/_/g, ' ').replace(/(?: |\\b)(\\w)/g, key => key.toUpperCase());\n\n}\n\nexport function compareDate(fieldName) {\n return function compare(a, b) {\n const dateA = new Date(a[fieldName]);\n const dateB = new Date(b[fieldName]);\n return dateA - dateB;\n }\n}\n","import { API_RESPONSE_STATUS } from './constants';\n\nexport async function get(url) {\n try {\n const response = await fetch(url, {\n headers: { 'Accept': 'application/json' }\n });\n\n const data = await response.json();\n\n // convert response status to success/fail\n const status = (response.status >= 200 && response.status < 400) ? API_RESPONSE_STATUS.success\n : API_RESPONSE_STATUS.error;\n\n return {\n status,\n data\n }\n } catch (err) {\n return {\n status: API_RESPONSE_STATUS.error,\n data: err\n }\n }\n}\n","import './Table.less';\nimport React from 'react';\nimport { fieldToTitle } from '../../utils/utils';\n\nexport default function({ title, headers, data, keys, style }) {\n if (!data || data.length === 0) {\n return null;\n }\n\n const readyHeaders = headers || keys.map(fieldToTitle);\n return (\n
\n

{title}

\n \n \n {\n readyHeaders.map(header => ())\n }\n \n \n {\n data.map(((item, i) => (\n \n {keys.map(key => ())}\n \n )))\n }\n \n
{header}
{item[key]}
\n
\n )\n}\n","import './ReputationHeader.less'\nimport { REPUTATION_RESULT } from '../../utils/constants';\nimport classNames from 'classnames';\nimport React from 'react';\n\nexport function ReputationHeader({ indicatorName, isPrivate, result }) {\n let headerMessage = `Could not determine the ${indicatorName} reputation.`;\n let headerClass = 'unknown';\n\n if (isPrivate) {\n headerMessage = `${indicatorName} is a private (internal).`;\n headerClass = 'clean';\n } else if (result === REPUTATION_RESULT.clean) {\n headerMessage = `${indicatorName} is found to be clean.`;\n headerClass = 'clean';\n } else if (result === REPUTATION_RESULT.dirty) {\n headerMessage = `${indicatorName} is found to be malicious.`;\n headerClass = 'dirty';\n }\n\n return (\n
\n

\n {headerMessage}\n

\n
\n );\n}\n","import './ExpandableHeader.less';\nimport React from 'react';\nimport classNames from 'classnames';\n\nexport function ExpandableHeader({ title, expand ,onClick}) {\n const iconClass = classNames('chevron', { down: expand, right: !expand } , 'icon');\n\n return (\n
\n \n {title}\n
\n );\n}\n","import './HeaderSection.less';\nimport React from 'react';\n\nexport function HeaderSection({ headers }) {\n return (\n
\n {\n headers.map(({ label, value }) => (\n
\n
{label}
\n
{value}
\n
\n ))\n }\n
\n );\n}\n","import './IPDetails.less';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport autobind from 'autobind-decorator';\nimport { compareDate, dateToString, keysToString } from '../../utils/utils';\nimport Table from '../UIComponents/Table';\nimport { ReputationHeader } from './ReputationHeader';\nimport { ExpandableHeader } from '../UIComponents/ExpandableHeader';\nimport { HeaderSection } from './HeaderSection';\n\nfunction foundXFE(xfe) {\n const { notFound } = xfe || {};\n return !notFound;\n}\n\nclass IPDetails extends Component {\n static propTypes = {\n details: PropTypes.string,\n result: PropTypes.number,\n isPrivate: PropTypes.bool,\n xfe: PropTypes.object,\n vt: PropTypes.object\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n expandXFE: true,\n expandVT: !foundXFE(props.xfe)\n };\n }\n\n @autobind\n onToggleXFE() {\n this.setState({ expandXFE: !this.state.expandXFE });\n }\n\n @autobind\n onToggleVT() {\n this.setState({ expandVT: !this.state.expandVT });\n }\n\n getXFESection() {\n const { xfe } = this.props;\n const { expandXFE } = this.state;\n const { error, ipReputation, ipHistory } = xfe || {};\n if (!foundXFE(xfe)) {\n return null;\n }\n\n if (error) {\n return (\n
\n {error}\n
\n );\n }\n\n const headers = [{\n label: 'Risk Score:',\n value: ipReputation.score\n }, {\n label: 'Country:',\n value: ipReputation.geo && ipReputation.geo.country || 'Unknown'\n }, {\n label: 'Categories:',\n value: keysToString(ipReputation.cats)\n }];\n\n\n return (\n
\n
\n \n
\n {\n expandXFE &&\n
\n \n
\n ({\n ...subnet,\n category: keysToString(subnet.cats),\n location: (subnet.geo && subnet.geo.country) || 'Unknown',\n created: dateToString(subnet.created)\n }))}\n keys={['subnet', 'score', 'category', 'location', 'reason', 'created']}\n />\n ({\n ...history,\n category: keysToString(history.cats),\n location: (history.geo && history.geo.country) || 'Unknown',\n created: dateToString(history.created)\n }))}\n keys={['ip', 'score', 'category', 'location', 'reason', 'created']}\n />\n
\n
\n }\n
\n )\n }\n\n getVTSection() {\n const { vt } = this.props;\n const { expandVT } = this.state;\n\n if (!vt) {\n return null;\n }\n\n const { error, ipReport } = vt;\n\n if (error) {\n return (\n
\n {error}\n
\n );\n }\n\n const { Resolutions, detected_urls } = ipReport || {};\n return (\n
\n
\n \n
\n {\n expandVT &&\n
\n {\n !(Resolutions && Resolutions.length > 0) && !(detected_urls && detected_urls.length > 0) &&\n
\n No results\n
\n }\n
\n \n ({\n ...detected,\n positives: `${detected.positives} / ${detected.total}`\n }))}\n keys={['url', 'positives', 'scan_date']}\n headers={['URL', 'Positives', 'Scan Date']}\n style={{ width: '70%' }}\n />\n
\n
\n }\n
\n )\n }\n\n\n\n render() {\n const { details, result, isPrivate } = this.props;\n return (\n
\n

IP: {details}

\n \n {this.getXFESection()}\n {this.getVTSection()}\n
\n );\n }\n}\n\n\nexport default IPDetails;\n","import './IPDetails.less';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport autobind from 'autobind-decorator';\nimport { compareDate, dateToString, keysToString } from '../../utils/utils';\nimport { flatten, sortBy } from 'lodash';\nimport Table from '../UIComponents/Table';\nimport { ReputationHeader } from './ReputationHeader';\nimport { ExpandableHeader } from '../UIComponents/ExpandableHeader';\nimport { HeaderSection } from './HeaderSection';\n\nfunction foundXFE(xfe) {\n const { notFound, resolve } = xfe || {};\n return !notFound || resolve && resolve.A;\n}\n\nclass URLDetails extends Component {\n static propTypes = {\n details: PropTypes.string,\n result: PropTypes.number,\n xfe: PropTypes.object,\n vt: PropTypes.object\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n expandXFE: true,\n expandVT: !foundXFE(props.xfe)\n };\n }\n\n @autobind\n onToggleXFE() {\n this.setState({ expandXFE: !this.state.expandXFE });\n }\n\n @autobind\n onToggleVT() {\n this.setState({ expandVT: !this.state.expandVT });\n }\n\n getXFESection() {\n const { xfe } = this.props;\n const { expandXFE } = this.state;\n if (!foundXFE(xfe)) {\n return null;\n }\n\n const { resolve, urlDetails, urlMalware } = xfe;\n\n const headers = [{\n label: 'Risk Score:',\n value: urlDetails && urlDetails.score || 'Unknown'\n }, {\n label: 'Categories:',\n value: keysToString(urlDetails && urlDetails.cats)\n }];\n\n const { A, AAAA, TXT, MX } = resolve || {};\n\n const tableData = [\n {\n name: 'A Records',\n value: (A || []).join(', '),\n },\n {\n name: 'AAAA Records',\n value: (AAAA || []).join(', '),\n },\n {\n name: 'TXT Records',\n value: flatten(TXT || []).join(', '),\n },\n {\n name: 'TXT Records',\n value: (MX || []).map(({ exchange, priority }) => `${exchange} (${priority})`).join(', '),\n }\n ];\n\n return (\n
\n
\n \n
\n {\n expandXFE &&\n
\n \n
\n \n ({\n ...m,\n family: (m.family || []).join(', ') || 'Unknown',\n firstseen: dateToString(m.firstseen),\n }))}\n keys={['firstseen', 'type', 'md5', 'uri', 'family']}\n headers={['First Seen', 'Type', 'MD5', 'URI', 'Family']}\n />\n
\n
\n }\n
\n )\n }\n\n getVTSection() {\n const { vt } = this.props;\n const { expandVT } = this.state;\n\n if (!vt) {\n return null;\n }\n\n const { urlReport } = vt;\n\n const headers = [{\n label: 'Scan Date:',\n value: urlReport && urlReport.scan_date || 'Unknown'\n }, {\n label: 'Positives:',\n value: urlReport && urlReport.positives || 0\n }, {\n label: 'Total:',\n value: urlReport && urlReport.total || 0\n }];\n\n return (\n
\n
\n \n
\n {\n expandVT &&\n
\n \n
\n scan.detected)\n .map(([engine, scan]) => ({\n ...scan,\n engine,\n }))}\n keys={['engine', 'result']}\n headers={['Scan Engine', 'Result']}\n style={{ width: '50%' }}\n />\n
\n
\n }\n
\n )\n }\n\n\n\n render() {\n const { details, result } = this.props;\n return (\n
\n

URL: {details}

\n \n {this.getXFESection()}\n {this.getVTSection()}\n
\n );\n }\n}\n\n\nexport default URLDetails;\n","import './FileDetails.less';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport autobind from 'autobind-decorator';\nimport { compareDate } from '../../utils/utils';\nimport { flatten, sortBy } from 'lodash';\nimport Table from '../UIComponents/Table';\nimport { ReputationHeader } from './ReputationHeader';\nimport { ExpandableHeader } from '../UIComponents/ExpandableHeader';\nimport { HeaderSection } from './HeaderSection';\n\nfunction foundXFE(xfe) {\n return xfe && !xfe.notFound;\n}\n\nclass FileDetails extends Component {\n static propTypes = {\n details: PropTypes.string,\n result: PropTypes.number,\n xfe: PropTypes.object,\n vt: PropTypes.object,\n file: PropTypes.object\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n expandXFE: true,\n expandVT: !foundXFE(props.xfe)\n };\n }\n\n @autobind\n onToggleXFE() {\n this.setState({ expandXFE: !this.state.expandXFE });\n }\n\n @autobind\n onToggleVT() {\n this.setState({ expandVT: !this.state.expandVT });\n }\n\n getXFESection() {\n const { xfe } = this.props;\n const { expandXFE } = this.state;\n if (!foundXFE(xfe)) {\n return null;\n }\n\n const { type, mimetype, md5, family, created, origins } = xfe.malware || {};\n\n const headers = [{\n label: 'Type:',\n value: type\n }, {\n label: 'Mime Type:',\n value: mimetype\n }, {\n label: 'MD5:',\n value: md5\n }, {\n label: 'Family:',\n value: (family || []).join(', ') || 'Unknown'\n }, {\n label: 'Created:',\n value: created\n }];\n\n const { emails, subjects, downloadServers, CnCServers, externals } = origins || {};\n\n return (\n
\n
\n \n
\n {\n expandXFE &&\n
\n \n
\n \n ({ ...s, ips: s.ips && s.ips.join(', ')}))\n }\n keys={['firstseen', 'lastseen', 'subject', 'ips',]}\n headers={['First Seen', 'Last Seen', 'Subject', 'IPs']}\n />\n \n ({ ...s, family: s.family && s.family.join(', ')}))\n }\n keys={['firstseen', 'lastseen', 'ip', 'family',]}\n headers={['First Seen', 'Last Seen', 'IP', 'Family']}\n />\n {\n externals && externals.family && externals.family.length > 0 &&\n
\n
External Detection
\n
{externals.family.join(',')}
\n
\n }\n
\n
\n }\n
\n )\n }\n\n getVTSection() {\n const { vt } = this.props;\n const { expandVT } = this.state;\n\n if (!vt) {\n return null;\n }\n\n const { fileReport } = vt;\n\n const headers = [{\n label: 'Scan Date:',\n value: fileReport && fileReport.scan_date || 'Unknown'\n }, {\n label: 'Positives:',\n value: fileReport && fileReport.positives || 0\n }, {\n label: 'Total:',\n value: fileReport && fileReport.total || 0\n }, {\n label: 'MD5:',\n value: fileReport && fileReport.md5 || 'N/A'\n }, {\n label: 'SHA1:',\n value: fileReport && fileReport.sha1 || 'N/A'\n }, {\n label: 'SHA256:',\n value: fileReport && fileReport.sha256 || 'N/A'\n }];\n\n return (\n
\n
\n \n
\n {\n expandVT &&\n
\n \n
\n scan.detected)\n .map(([engine, scan]) => ({\n ...scan,\n engine,\n }))}\n keys={['engine', 'version', 'result', 'update']}\n headers={['Engine Name', 'Version','Result', 'Update']}\n style={{ width: '50%' }}\n />\n
\n
\n }\n
\n )\n }\n\n\n\n render() {\n const { details, result, file } = this.props;\n let readyDetails = details;\n let readyResult = result;\n if (file) {\n readyDetails = file.details && file.details.name;\n readyResult = file.result;\n }\n return (\n
\n
File: {readyDetails}
\n \n {\n file && file.virus &&\n
Malware Name: {file.virus}
\n }\n {this.getXFESection()}\n {this.getVTSection()}\n
\n );\n }\n}\n\n\nexport default FileDetails;\n","import './Details.less';\nimport React, { Component } from 'react';\nimport { API_RESPONSE_STATUS } from '../../utils/constants';\nimport { parseType } from '../../utils/utils';\nimport { get } from '../../utils/api';\nimport IPDetails from \"./IPDetails\";\nimport URLDetails from './URLDetails';\nimport FileDetails from './FileDetails';\n\nclass Details extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n status: '',\n loading: false,\n data: {}\n };\n }\n\n componentDidMount() {\n const url = `/work${window.location.search}`;\n this.setState({ loading: true }, async () => {\n const { status, data } = await get(url);\n this.setState({ status, data, loading: false })\n });\n }\n\n getDetailsSection(data) {\n const { type, ips, urls, file, hashes } = data;\n const { isIP, isURL, isFile, isMD5 } = parseType(type);\n return (\n
\n
\n

DBOT Analysis Report:

\n
\n
\n {\n isIP && ips && ips[0] && \n }\n {\n isURL && urls && urls[0] && \n }\n {\n (isMD5 || isFile) && hashes && hashes[0] && \n }\n {\n !type &&
Could not find any result. Sorry...
\n }\n
\n
\n );\n }\n\n render() {\n const { status, loading, data } = this.state;\n return (\n
\n {loading &&\n
\n
\n
DBOT is collecting security details for your query. It might take up to a minute!
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n }\n {!loading && status === API_RESPONSE_STATUS.error &&\n
\n
\n

OOps

\n DBOT encountered an error while trying to serve your request. The issues has been reported and will be analyzed.\n Please try to click the link again from Slack interface.\n
\n
\n Error details: { JSON.stringify(data, null, 2) }\n
\n
\n }\n\n {!loading && status === API_RESPONSE_STATUS.success && this.getDetailsSection(data)}\n
\n );\n }\n}\n\nexport default Details;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport Details from './components/Details/Details';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(
, document.getElementById('details-container'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}