{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/views/Home.vue?19a9","webpack:///./src/App.vue?c7dd","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue","webpack:///./src/views/Home.vue?2fa5","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?493c","webpack:///./src/views/Home.vue?c853","webpack:///./src/views/Login.vue?9fed","webpack:///./src/models/user.js","webpack:///src/views/Login.vue","webpack:///./src/views/Login.vue?5da6","webpack:///./src/views/Login.vue?7b2b","webpack:///./src/views/Register.vue?cd0a","webpack:///src/views/Register.vue","webpack:///./src/views/Register.vue?382a","webpack:///./src/views/Register.vue?b624","webpack:///./src/views/Verify.vue?aa01","webpack:///src/views/Verify.vue","webpack:///./src/views/Verify.vue?2269","webpack:///./src/views/Verify.vue?2627","webpack:///./src/router.js","webpack:///./src/services/auth.service.js","webpack:///./src/store/auth.module.js","webpack:///./src/store/index.js","webpack:///./src/main.js","webpack:///./src/services/api.js","webpack:///./src/views/Register.vue?ac6d","webpack:///./src/views/Login.vue?0aa2","webpack:///./src/services/auth-header.js","webpack:///./src/views/Verify.vue?0f2c"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","staticClass","_v","currentUser","loggedIn","_e","on","$event","preventDefault","logOut","staticRenderFns","mounted","log","computed","$store","state","auth","status","user","methods","dispatch","$router","component","_m","staticStyle","handleFormSubmit","directives","rawName","expression","domProps","composing","$set","errors","has","_s","first","dev","ref","onCaptchaVerified","onCaptchaExpired","loading","User","email","password","use_2fa","user_agent","components","created","handleLogin","$validator","validateAll","isValid","$refs","recaptcha","reset","successful","submitted","class","handleRegister","validate","$route","params","Vue","use","Router","router","routes","path","Home","Login","Register","Verify","AuthService","axios","post","API_LOGIN_URL","response","token","localStorage","setItem","JSON","stringify","API_2STEP_URL","headers","authHeader","removeItem","API_REGISTER_URL","API_VERIFICATION_URL","parse","getItem","initialState","namespaced","actions","login","commit","step2","logout","register","verify","mutations","loginSuccess","step2Success","loginFailure","registerSuccess","registerFailure","verifySuccess","verifyFailure","Vuex","Store","library","add","faHome","faUser","faDesktop","faUserPlus","faTerminal","faArchive","faAnchor","faSignInAlt","faSignOutAlt","config","productionTip","VeeValidate","FontAwesomeIcon","VueTimeago","locale","store","render","h","App","$mount","apiDev","apiProto","apiHost","apiPort","API_DEV","API_PROTO","API_HOST","API_PORT","API_BASE_URL","API_USER_UPDATE_URL","API_AGENTS_URL","API_NEW_AGENT_URL","API_SUBNETS_URL","Authorization"],"mappings":"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","file":"js/app.87259cfb.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-4243023f\":\"a2fc7a13\",\"chunk-5901d641\":\"79e44169\",\"chunk-7f0640d2\":\"d23fcd32\",\"chunk-802008de\":\"024b232d\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-4243023f\":1,\"chunk-5901d641\":1,\"chunk-7f0640d2\":1,\"chunk-802008de\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-4243023f\":\"b4b9c5e3\",\"chunk-5901d641\":\"6a321eaa\",\"chunk-7f0640d2\":\"72d5f723\",\"chunk-802008de\":\"1c7f1d14\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=d4e9a582&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('nav',{staticClass:\"navbar navbar-expand navbar-dark bg-dark\"},[_c('a',{staticClass:\"navbar-brand\",attrs:{\"href\":\"/\"}},[_vm._v(\"shieldwall\")]),_c('div',{staticClass:\"navbar-nav mr-auto\"},[_c('li',{staticClass:\"nav-item\"},[_c('a',{staticClass:\"nav-link\",attrs:{\"href\":\"https://www.evilsocket.net/2021/02/13/Hide-your-servers-in-plain-sight-presenting-ShieldWall/\",\"target\":\"_blank\"}},[_c('font-awesome-icon',{attrs:{\"icon\":\"anchor\"}}),_vm._v(\" \"),_c('span',{staticClass:\"d-none d-sm-inline-block\"},[_vm._v(\"Rationale\")])],1)]),_c('li',{staticClass:\"nav-item\"},[_c('a',{staticClass:\"nav-link\",attrs:{\"href\":\"https://github.com/evilsocket/shieldwall/wiki\",\"target\":\"_blank\"}},[_c('font-awesome-icon',{attrs:{\"icon\":\"archive\"}}),_vm._v(\" \"),_c('span',{staticClass:\"d-none d-sm-inline-block\"},[_vm._v(\"Docs\")])],1)])]),(!_vm.currentUser && !_vm.loggedIn)?_c('div',{staticClass:\"navbar-nav ml-auto\"},[_c('li',{staticClass:\"nav-item\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":\"/register\"}},[_c('font-awesome-icon',{attrs:{\"icon\":\"user\"}}),_vm._v(\" \"),_c('span',{staticClass:\"d-none d-sm-inline-block\"},[_vm._v(\"Sign Up\")])],1)],1),_c('li',{staticClass:\"nav-item\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":\"/login\"}},[_c('font-awesome-icon',{attrs:{\"icon\":\"sign-in-alt\"}}),_vm._v(\" \"),_c('span',{staticClass:\"d-none d-sm-inline-block\"},[_vm._v(\"Login\")])],1)],1)]):_vm._e(),(_vm.loggedIn && _vm.currentUser)?_c('div',{staticClass:\"navbar-nav ml-auto\"},[_c('li',{staticClass:\"nav-item\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":\"/agents\"}},[_c('font-awesome-icon',{attrs:{\"icon\":\"terminal\"}}),_vm._v(\" \"),_c('span',{staticClass:\"d-none d-sm-inline-block\"},[_vm._v(\"Agents\")])],1)],1),_c('li',{staticClass:\"nav-item\"},[_c('router-link',{staticClass:\"nav-link\",attrs:{\"to\":\"/profile\"}},[_c('font-awesome-icon',{attrs:{\"icon\":\"user\"}}),_vm._v(\" \"),_c('span',{staticClass:\"d-none d-sm-inline-block\"},[_vm._v(\"Profile\")])],1)],1),_c('li',{staticClass:\"nav-item\"},[_c('a',{staticClass:\"nav-link\",attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.logOut($event)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"sign-out-alt\"}}),_vm._v(\" \"),_c('span',{staticClass:\"d-none d-sm-inline-block\"},[_vm._v(\"Logout\")])],1)])]):_vm._e(),(_vm.currentUser && !_vm.loggedIn)?_c('div',{staticClass:\"navbar-nav ml-auto\"},[_c('li',{staticClass:\"nav-item\"},[_c('a',{staticClass:\"nav-link\",attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.logOut($event)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"sign-out-alt\"}}),_vm._v(\" \"),_c('span',{staticClass:\"d-none d-sm-inline-block\"},[_vm._v(\"Logout\")])],1)])]):_vm._e()]),_c('div',{staticClass:\"container-fluid\"},[_c('router-view')],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div id=\"app\">\n    <nav class=\"navbar navbar-expand navbar-dark bg-dark\">\n      <a class=\"navbar-brand\" href=\"/\">shieldwall</a>\n\n      <div class=\"navbar-nav mr-auto\">\n        <li class=\"nav-item\">\n          <a href=\"https://www.evilsocket.net/2021/02/13/Hide-your-servers-in-plain-sight-presenting-ShieldWall/\" target=\"_blank\" class=\"nav-link\">\n            <font-awesome-icon icon=\"anchor\" /> <span class=\"d-none d-sm-inline-block\">Rationale</span>\n          </a>\n        </li>\n\n        <li class=\"nav-item\">\n          <a href=\"https://github.com/evilsocket/shieldwall/wiki\" target=\"_blank\" class=\"nav-link\">\n            <font-awesome-icon icon=\"archive\" /> <span class=\"d-none d-sm-inline-block\">Docs</span>\n          </a>\n        </li>\n      </div>\n\n      <div v-if=\"!currentUser && !loggedIn\" class=\"navbar-nav ml-auto\">\n        <li class=\"nav-item\">\n          <router-link to=\"/register\" class=\"nav-link\">\n            <font-awesome-icon icon=\"user\" /> <span class=\"d-none d-sm-inline-block\">Sign Up</span>\n          </router-link>\n        </li>\n        <li class=\"nav-item\">\n          <router-link to=\"/login\" class=\"nav-link\">\n            <font-awesome-icon icon=\"sign-in-alt\" /> <span class=\"d-none d-sm-inline-block\">Login</span>\n          </router-link>\n        </li>\n      </div>\n\n      <div v-if=\"loggedIn && currentUser\" class=\"navbar-nav ml-auto\">\n        <li class=\"nav-item\">\n          <router-link to=\"/agents\" class=\"nav-link\">\n            <font-awesome-icon icon=\"terminal\" /> <span class=\"d-none d-sm-inline-block\">Agents</span>\n          </router-link>\n        </li>\n        <li class=\"nav-item\">\n          <router-link to=\"/profile\" class=\"nav-link\">\n            <font-awesome-icon icon=\"user\" /> <span class=\"d-none d-sm-inline-block\">Profile</span>\n          </router-link>\n        </li>\n        <li class=\"nav-item\">\n          <a class=\"nav-link\" href @click.prevent=\"logOut\">\n            <font-awesome-icon icon=\"sign-out-alt\" /> <span class=\"d-none d-sm-inline-block\">Logout</span>\n          </a>\n        </li>\n      </div>\n\n      <div v-if=\"currentUser && !loggedIn\" class=\"navbar-nav ml-auto\">\n        <li class=\"nav-item\">\n          <a class=\"nav-link\" href @click.prevent=\"logOut\">\n            <font-awesome-icon icon=\"sign-out-alt\" /> <span class=\"d-none d-sm-inline-block\">Logout</span>\n          </a>\n        </li>\n      </div>\n    </nav>\n\n    <div class=\"container-fluid\">\n      <router-view />\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  mounted() {\n    window.console.log(\"app.loggedIn = \",this.loggedIn);\n    window.console.log(\"app.currentUser = \",this.currentUser);\n  },\n  computed: {\n    loggedIn() {\n      return this.$store.state.auth.status.loggedIn;\n    },\n\n    currentUser() {\n      return this.$store.state.auth.user;\n    },\n  },\n  methods: {\n    logOut() {\n      this.$store.dispatch('auth/logout');\n      this.$router.push('/login');\n    }\n  }\n};\n</script>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=1786a31a&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"home-container container-fluid\"},[_c('div',{staticClass:\"jumbotron\"},[_vm._m(0),_c('hr',{staticClass:\"my-4\"}),_c('p',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\" ShieldWall embraces the zero-trust principle and instruments your server firewall to block inbound connections from every IP on any port, by default. \")]),_c('p',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\" This website allows you to push policies to your agents and temporarily unlock certain ports from your IP. \")]),_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col\"},[_c('div',{staticClass:\"card text-center\"},[_c('div',{staticClass:\"card-header\"},[_vm._v(\" Free API \")]),_c('div',{staticClass:\"card-body\"},[_c('p',{staticClass:\"card-text\"},[_vm._v(\"Create a free account and use this server.\")]),(!_vm.currentUser)?_c('a',{staticClass:\"btn btn-primary\",attrs:{\"href\":\"/#/register\"}},[_vm._v(\"Sign Up\")]):_vm._e(),_vm._v(\" \"),_c('a',{staticClass:\"btn btn-info\",attrs:{\"href\":\"https://github.com/evilsocket/shieldwall/wiki/Quick-Start\",\"target\":\"_blank\"}},[_vm._v(\"Quick Start\")])])])]),_vm._m(1)])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"text-align\":\"center\"}},[_c('h1',{staticClass:\"display-4\"},[_c('img',{attrs:{\"src\":\"/logo.png\",\"width\":\"50px\"}}),_vm._v(\" shieldwall \")]),_c('br'),_c('p',{staticClass:\"lead\"},[_vm._v(\" Helps you secure your most private servers! \")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"col\"},[_c('div',{staticClass:\"card text-center\"},[_c('div',{staticClass:\"card-header\"},[_vm._v(\" Host it Yourself \")]),_c('div',{staticClass:\"card-body\"},[_c('p',{staticClass:\"card-text\"},[_vm._v(\"Host the backend and API service yourself for a more discreet setup.\")]),_c('a',{staticClass:\"btn btn-success\",attrs:{\"href\":\"https://github.com/evilsocket/shieldwall\",\"target\":\"_blank\"}},[_vm._v(\" Code Repository \")])])])])}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"home-container container-fluid\">\n    <div class=\"jumbotron\">\n      <div style=\"text-align: center;\">\n        <h1 class=\"display-4\">\n          <img src=\"/logo.png\" width=\"50px\"/>\n          shieldwall\n        </h1>\n        <br/>\n\n        <p class=\"lead\">\n          Helps you secure your most private servers!\n        </p>\n      </div>\n\n      <hr class=\"my-4\">\n\n      <p style=\"text-align: center\">\n        ShieldWall embraces the zero-trust principle and instruments your server firewall to block inbound\n        connections from every IP on any port, by default.\n      </p>\n      <p style=\"text-align: center\">\n        This website allows you to push policies to your agents and temporarily unlock certain ports from your IP.\n      </p>\n\n      <div class=\"container\">\n        <div class=\"row\">\n          <div class=\"col\">\n            <div class=\"card text-center\">\n              <div class=\"card-header\">\n                Free API\n              </div>\n              <div class=\"card-body\">\n                <p class=\"card-text\">Create a free account and use this server.</p>\n                <a href=\"/#/register\" class=\"btn btn-primary\" v-if=\"!currentUser\">Sign Up</a>\n                &nbsp;\n                <a href=\"https://github.com/evilsocket/shieldwall/wiki/Quick-Start\" target=\"_blank\" class=\"btn btn-info\" >Quick Start</a>\n              </div>\n\n            </div>\n          </div>\n          <div class=\"col\">\n            <div class=\"card text-center\">\n              <div class=\"card-header\">\n                Host it Yourself\n              </div>\n              <div class=\"card-body\">\n                <p class=\"card-text\">Host the backend and API service yourself for a more discreet setup.</p>\n                <a href=\"https://github.com/evilsocket/shieldwall\" target=\"_blank\" class=\"btn btn-success\">\n                  Code Repository\n                </a>\n              </div>\n\n            </div>\n          </div>\n        </div>\n      </div>\n\n    </div>\n  </div>\n</template>\n\n<script>\n\nexport default {\n  name: 'Home',\n  computed: {\n    currentUser() {\n      return this.$store.state.auth.user;\n    },\n  },\n  mounted() {\n\n  }\n};\n</script>\n\n<style scoped>\n.home-container {\n  padding: 20px 25px 30px;\n  margin: 0 auto 25px;\n  margin-top: 25px;\n}\n\n.beta {\n  font-size: 15px;\n  margin-left: -10px;\n}\n\n.btn {\n  margin-top: 5px;\n}\n\n.card {\n  margin-top: 10px;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=d4e9a582&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=d4e9a582&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"d4e9a582\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"col-md-12\"},[_c('div',{staticClass:\"card card-container\"},[_c('img',{staticClass:\"profile-img-card\",attrs:{\"id\":\"profile-img\",\"src\":\"/logo.png\"}}),_c('form',{attrs:{\"name\":\"form\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.handleFormSubmit($event)}}},[_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"email\"}},[_vm._v(\"Email\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user.email),expression:\"user.email\"},{name:\"validate\",rawName:\"v-validate\",value:('required|email|max:50'),expression:\"'required|email|max:50'\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"name\":\"email\"},domProps:{\"value\":(_vm.user.email)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.user, \"email\", $event.target.value)}}}),(_vm.errors.has('email'))?_c('div',{staticClass:\"alert alert-danger\"},[_vm._v(_vm._s(_vm.errors.first('email'))+\" \")]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"password\"}},[_vm._v(\"Password\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user.password),expression:\"user.password\"},{name:\"validate\",rawName:\"v-validate\",value:('required'),expression:\"'required'\"}],staticClass:\"form-control\",attrs:{\"type\":\"password\",\"name\":\"password\"},domProps:{\"value\":(_vm.user.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.user, \"password\", $event.target.value)}}}),(_vm.errors.has('password'))?_c('div',{staticClass:\"alert alert-danger\"},[_vm._v(_vm._s(_vm.errors.first('email'))+\" \")]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[(!_vm.dev)?_c('vue-recaptcha',{ref:\"recaptcha\",attrs:{\"sitekey\":\"6LewaVIaAAAAAFn37I4KpU4OOKcjJBh_D0GXB8gC\"},on:{\"verify\":_vm.onCaptchaVerified,\"expired\":_vm.onCaptchaExpired}},[_c('button',{staticClass:\"btn btn-primary btn-block\",attrs:{\"disabled\":_vm.loading}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"spinner-border spinner-border-sm\"}),_c('span',[_vm._v(\"Login\")])])]):_vm._e(),(_vm.dev)?_c('button',{staticClass:\"btn btn-primary btn-block\",attrs:{\"disabled\":_vm.loading}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"spinner-border spinner-border-sm\"}),_c('span',[_vm._v(\"Login\")])]):_vm._e()],1),_c('div',{staticClass:\"form-group\"},[(_vm.message)?_c('div',{staticClass:\"alert alert-danger\",attrs:{\"role\":\"alert\"}},[_vm._v(_vm._s(_vm.message))]):_vm._e()])])]),_c('center',[_vm._v(\" Don't have an account? \"),_c('br'),_c('a',{attrs:{\"href\":\"/#/register\"}},[_vm._v(\"Sign up for free!\")])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default class User {\n  constructor(email, password) {\n    this.email = email;\n    this.password = password;\n    this.use_2fa = false;\n    this.user_agent = '';\n  }\n}","<template>\n  <div class=\"col-md-12\">\n    <div class=\"card card-container\">\n      <img\n          id=\"profile-img\"\n          src=\"/logo.png\"\n          class=\"profile-img-card\"\n      />\n\n      <form name=\"form\" @submit.prevent=\"handleFormSubmit\">\n        <div class=\"form-group\">\n          <label for=\"email\">Email</label>\n          <input\n              v-model=\"user.email\"\n              v-validate=\"'required|email|max:50'\"\n              type=\"text\"\n              class=\"form-control\"\n              name=\"email\"\n          />\n          <div\n              v-if=\"errors.has('email')\"\n              class=\"alert alert-danger\"\n          >{{ errors.first('email') }}\n          </div>\n        </div>\n        <div class=\"form-group\">\n          <label for=\"password\">Password</label>\n          <input\n              v-model=\"user.password\"\n              v-validate=\"'required'\"\n              type=\"password\"\n              class=\"form-control\"\n              name=\"password\"\n          />\n          <div\n              v-if=\"errors.has('password')\"\n              class=\"alert alert-danger\"\n          >{{ errors.first('email') }}\n          </div>\n        </div>\n        <div class=\"form-group\">\n          <vue-recaptcha\n              ref=\"recaptcha\"\n              v-if=\"!dev\"\n              @verify=\"onCaptchaVerified\"\n              @expired=\"onCaptchaExpired\"\n              sitekey=\"6LewaVIaAAAAAFn37I4KpU4OOKcjJBh_D0GXB8gC\">\n            <button class=\"btn btn-primary btn-block\" :disabled=\"loading\">\n              <span v-show=\"loading\" class=\"spinner-border spinner-border-sm\"></span>\n              <span>Login</span>\n            </button>\n          </vue-recaptcha>\n          <button class=\"btn btn-primary btn-block\" :disabled=\"loading\" v-if=\"dev\">\n            <span v-show=\"loading\" class=\"spinner-border spinner-border-sm\"></span>\n            <span>Login</span>\n          </button>\n        </div>\n        <div class=\"form-group\">\n          <div v-if=\"message\" class=\"alert alert-danger\" role=\"alert\">{{ message }}</div>\n        </div>\n      </form>\n    </div>\n\n    <center>\n      Don't have an account? <br/>\n      <a href=\"/#/register\">Sign up for free!</a>\n    </center>\n  </div>\n</template>\n\n<script>\nimport User from '../models/user';\nimport VueRecaptcha from 'vue-recaptcha';\nimport {API_DEV} from '../services/api';\n\nexport default {\n  name: 'Login',\n  components: {VueRecaptcha},\n\n  data() {\n    return {\n      user: new User('', ''),\n      loading: false,\n      message: '',\n      dev: API_DEV\n    };\n  },\n  computed: {\n    loggedIn() {\n      return this.$store.state.auth.status.loggedIn;\n    }\n  },\n  created() {\n    if (this.loggedIn) {\n      this.$router.push('/');\n    }\n  },\n  methods: {\n    handleFormSubmit() {\n      if (this.dev === true) {\n        this.handleLogin();\n      }\n    },\n\n    handleLogin() {\n      this.loading = true;\n      this.$validator.validateAll().then(isValid => {\n        if (!isValid) {\n          this.loading = false;\n          return;\n        }\n\n        if (this.user.email && this.user.password) {\n          this.$store.dispatch('auth/login', this.user).then(\n              () => {\n                // login ok but not logged = 2fa enabled\n                if (this.$store.state.auth.status.loggedIn === false) {\n                  window.console.log(\"2fa required for user\");\n                  this.$router.push('/2step');\n                } else {\n                  this.$router.push('/agents');\n                }\n              },\n              error => {\n                this.loading = false;\n                this.message =\n                    (error.response && error.response.data && error.response.data.error) ||\n                    error.message ||\n                    error.toString();\n              }\n          );\n        }\n      });\n    },\n\n    onCaptchaExpired: function () {\n      this.$refs.recaptcha.reset();\n    },\n\n    onCaptchaVerified: function () {\n      this.handleLogin();\n    }\n  }\n};\n</script>\n\n<style scoped>\nlabel {\n  display: block;\n  margin-top: 10px;\n}\n\n.card-container.card {\n  max-width: 350px !important;\n  padding: 40px 40px;\n}\n\n.card {\n  background-color: #f7f7f7;\n  padding: 20px 25px 30px;\n  margin: 0 auto 25px;\n  margin-top: 50px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  border-radius: 2px;\n  -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);\n  -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);\n  box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);\n}\n\n.profile-img-card {\n  width: 96px;\n  height: 96px;\n  margin: 0 auto 10px;\n  display: block;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=58967a43&scoped=true&\"\nimport script from \"./Login.vue?vue&type=script&lang=js&\"\nexport * from \"./Login.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&id=58967a43&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"58967a43\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"col-md-12\"},[_c('div',{staticClass:\"card card-container\"},[_c('img',{staticClass:\"profile-img-card\",attrs:{\"id\":\"profile-img\",\"src\":\"/logo.png\"}}),_c('form',{attrs:{\"name\":\"form\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.handleFormSubmit($event)}}},[(!_vm.successful)?_c('div',[_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"email\"}},[_vm._v(\"Email\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user.email),expression:\"user.email\"},{name:\"validate\",rawName:\"v-validate\",value:('required|email|max:50'),expression:\"'required|email|max:50'\"}],staticClass:\"form-control\",attrs:{\"type\":\"email\",\"name\":\"email\"},domProps:{\"value\":(_vm.user.email)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.user, \"email\", $event.target.value)}}}),(_vm.submitted && _vm.errors.has('email'))?_c('div',{staticClass:\"alert-danger\"},[_vm._v(_vm._s(_vm.errors.first('email'))+\" \")]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"password\"}},[_vm._v(\"Password\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user.password),expression:\"user.password\"},{name:\"validate\",rawName:\"v-validate\",value:('required|min:8|max:64'),expression:\"'required|min:8|max:64'\"}],staticClass:\"form-control\",attrs:{\"type\":\"password\",\"name\":\"password\"},domProps:{\"value\":(_vm.user.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.user, \"password\", $event.target.value)}}}),(_vm.submitted && _vm.errors.has('password'))?_c('div',{staticClass:\"alert-danger\"},[_vm._v(_vm._s(_vm.errors.first('password'))+\" \")]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[(!_vm.dev)?_c('vue-recaptcha',{ref:\"recaptcha\",attrs:{\"sitekey\":\"6LewaVIaAAAAAFn37I4KpU4OOKcjJBh_D0GXB8gC\"},on:{\"verify\":_vm.onCaptchaVerified,\"expired\":_vm.onCaptchaExpired}},[_c('button',{staticClass:\"btn btn-primary btn-block\",attrs:{\"disabled\":_vm.loading}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"spinner-border spinner-border-sm\"}),_vm._v(\" Sign Up \")])]):_vm._e(),(_vm.dev)?_c('button',{staticClass:\"btn btn-primary btn-block\",attrs:{\"disabled\":_vm.loading}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"spinner-border spinner-border-sm\"}),_vm._v(\" Sign Up \")]):_vm._e()],1)]):_vm._e()]),(_vm.message)?_c('div',{staticClass:\"alert\",class:_vm.successful ? 'alert-success' : 'alert-danger'},[_vm._v(_vm._s(_vm.message)+\" \")]):_vm._e()]),_c('center',[_vm._v(\" Already have an account? \"),_c('br'),_c('a',{attrs:{\"href\":\"/#/login\"}},[_vm._v(\"Login in here!\")])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"col-md-12\">\n    <div class=\"card card-container\">\n      <img\n          id=\"profile-img\"\n          src=\"/logo.png\"\n          class=\"profile-img-card\"\n      />\n      <form name=\"form\" @submit.prevent=\"handleFormSubmit\">\n        <div v-if=\"!successful\">\n          <div class=\"form-group\">\n            <label for=\"email\">Email</label>\n            <input\n                v-model=\"user.email\"\n                v-validate=\"'required|email|max:50'\"\n                type=\"email\"\n                class=\"form-control\"\n                name=\"email\"\n            />\n            <div\n                v-if=\"submitted && errors.has('email')\"\n                class=\"alert-danger\"\n            >{{ errors.first('email') }}\n            </div>\n          </div>\n          <div class=\"form-group\">\n            <label for=\"password\">Password</label>\n            <input\n                v-model=\"user.password\"\n                v-validate=\"'required|min:8|max:64'\"\n                type=\"password\"\n                class=\"form-control\"\n                name=\"password\"\n            />\n            <div\n                v-if=\"submitted && errors.has('password')\"\n                class=\"alert-danger\"\n            >{{ errors.first('password') }}\n            </div>\n          </div>\n\n          <div class=\"form-group\">\n            <vue-recaptcha\n                ref=\"recaptcha\"\n                v-if=\"!dev\"\n                @verify=\"onCaptchaVerified\"\n                @expired=\"onCaptchaExpired\"\n                sitekey=\"6LewaVIaAAAAAFn37I4KpU4OOKcjJBh_D0GXB8gC\">\n              <button class=\"btn btn-primary btn-block\" :disabled=\"loading\">\n                <span v-show=\"loading\" class=\"spinner-border spinner-border-sm\"></span>\n                Sign Up\n              </button>\n            </vue-recaptcha>\n            <button class=\"btn btn-primary btn-block\" :disabled=\"loading\" v-if=\"dev\">\n              <span v-show=\"loading\" class=\"spinner-border spinner-border-sm\"></span>\n              Sign Up\n            </button>\n          </div>\n\n        </div>\n      </form>\n\n      <div\n          v-if=\"message\"\n          class=\"alert\"\n          :class=\"successful ? 'alert-success' : 'alert-danger'\"\n      >{{ message }}\n      </div>\n    </div>\n\n    <center>\n      Already have an account? <br/>\n      <a href=\"/#/login\">Login in here!</a>\n    </center>\n  </div>\n</template>\n\n<script>\nimport User from '../models/user';\nimport VueRecaptcha from 'vue-recaptcha';\nimport {API_DEV} from \"@/services/api\";\n\nexport default {\n  name: 'Register',\n  components: { VueRecaptcha },\n\n  data() {\n    return {\n      user: new User('', ''),\n      successful: false,\n      loading: false,\n      message: '',\n      dev: API_DEV\n    };\n  },\n  computed: {\n    loggedIn() {\n      return this.$store.state.auth.status.loggedIn;\n    }\n  },\n  mounted() {\n    if (this.loggedIn) {\n      this.$router.push('/agents');\n    }\n  },\n  methods: {\n    handleRegister() {\n      this.message = '';\n      this.$validator.validate().then(isValid => {\n        this.loading = true;\n        if (isValid) {\n          this.$store.dispatch('auth/register', this.user).then(\n              data => {\n                this.loading = false;\n                this.message = data;\n                this.successful = true;\n              },\n              error => {\n                this.loading = false;\n                this.message =\n                    (error.response && error.response.data && error.response.data.error) ||\n                    error.message ||\n                    error.toString();\n                this.successful = false;\n              }\n          );\n        }\n      });\n    },\n\n    handleFormSubmit() {\n      if (this.dev === true) {\n        this.handleRegister();\n      }\n    },\n\n    onCaptchaExpired: function () {\n      this.$refs.recaptcha.reset();\n    },\n\n    onCaptchaVerified: function () {\n      this.handleRegister();\n    }\n  }\n};\n</script>\n\n<style scoped>\nlabel {\n  display: block;\n  margin-top: 10px;\n}\n\n.card-container.card {\n  max-width: 350px !important;\n  padding: 40px 40px;\n}\n\n.card {\n  background-color: #f7f7f7;\n  padding: 20px 25px 30px;\n  margin: 0 auto 25px;\n  margin-top: 50px;\n  -moz-border-radius: 2px;\n  -webkit-border-radius: 2px;\n  border-radius: 2px;\n  -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);\n  -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);\n  box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);\n}\n\n.profile-img-card {\n  width: 96px;\n  height: 96px;\n  margin: 0 auto 10px;\n  display: block;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Register.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Register.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Register.vue?vue&type=template&id=5a260c7e&scoped=true&\"\nimport script from \"./Register.vue?vue&type=script&lang=js&\"\nexport * from \"./Register.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Register.vue?vue&type=style&index=0&id=5a260c7e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5a260c7e\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[(_vm.status)?_c('div',{staticClass:\"alert\",attrs:{\"role\":\"alert\"}},[_vm._v(_vm._s(_vm.status))]):_vm._e(),(_vm.message)?_c('div',{staticClass:\"alert alert-success\",attrs:{\"role\":\"alert\"}},[_vm._v(_vm._s(_vm.message))]):_vm._e(),(_vm.error)?_c('div',{staticClass:\"alert alert-danger\",attrs:{\"role\":\"alert\"}},[_vm._v(_vm._s(_vm.error))]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"container\">\n    <div v-if=\"status\" class=\"alert\" role=\"alert\">{{ status }}</div>\n    <div v-if=\"message\" class=\"alert alert-success\" role=\"alert\">{{ message }}</div>\n    <div v-if=\"error\" class=\"alert alert-danger\" role=\"alert\">{{ error }}</div>\n  </div>\n</template>\n\n<script>\n\nexport default {\n  name: 'Agents',\n  data() {\n    return {\n      status: '',\n      message: '',\n      error: ''\n    };\n  },\n  mounted() {\n    // this.message = \"mounted\";\n    // alert(\"code = \" + this.$route.params.code);\n    this.status = 'checking code ...';\n\n    this.$store.dispatch('auth/verify', this.$route.params.code).then(\n        () => {\n          this.status = '';\n          this.message = 'account verified';\n          this.$router.push('/login');\n        },\n        error => {\n          this.status = '';\n          this.error =\n              (error.response && error.response.data && error.response.data.error) ||\n              error.message ||\n              error.toString();\n          if (error.response.status === 401) {\n            this.$store.dispatch('auth/logout');\n            this.$router.push('/login');\n          }\n        }\n    );\n  }\n};\n</script>\n\n<style scoped>\n.container {\n  padding: 20px 25px 30px;\n  margin: 0 auto 25px;\n  margin-top: 50px;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Verify.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Verify.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Verify.vue?vue&type=template&id=f816b1a8&scoped=true&\"\nimport script from \"./Verify.vue?vue&type=script&lang=js&\"\nexport * from \"./Verify.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Verify.vue?vue&type=style&index=0&id=f816b1a8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"f816b1a8\",\n  null\n  \n)\n\nexport default component.exports","import Vue from 'vue';\nimport Router from 'vue-router';\nimport Home from './views/Home.vue';\nimport Login from './views/Login.vue';\nimport Register from './views/Register.vue';\nimport Verify from './views/Verify.vue';\n\nVue.use(Router);\n\nexport const router = new Router({\n  mode: 'hash',\n  routes: [\n    {\n      path: '/',\n      name: 'home',\n      component: Home\n    },\n    {\n      path: '/login',\n      component: Login\n    },\n    {\n      path: '/register',\n      component: Register\n    },\n    {\n      path: '/verify/:code',\n      component: Verify,\n      params: true\n    },\n    {\n      path: '/2step',\n      name: '2step',\n      // lazy-loaded\n      component: () => import('./views/2Step.vue')\n    },\n    {\n      path: '/profile',\n      name: 'profile',\n      // lazy-loaded\n      component: () => import('./views/Profile.vue')\n    },\n    {\n      path: '/agents',\n      name: 'agents',\n      // lazy-loaded\n      component: () => import('./views/Agents.vue')\n    },\n    {\n      path: '/agents/new',\n      name: 'agent-new',\n      // lazy-loaded\n      component: () => import('./views/Agent.vue')\n    },\n    {\n      path: '/agent/:id',\n      name: 'agent-edit',\n      // lazy-loaded\n      component: () => import('./views/Agent.vue')\n    },\n  ]\n});\n\n// router.beforeEach((to, from, next) => {\n//   const publicPages = ['/login', '/register', '/home'];\n//   const authRequired = !publicPages.includes(to.path);\n//   const loggedIn = localStorage.getItem('user');\n\n//   // trying to access a restricted page + not logged in\n//   // redirect to login page\n//   if (authRequired && !loggedIn) {\n//     next('/login');\n//   } else {\n//     next();\n//   }\n// });\n","import axios from 'axios';\nimport {API_2STEP_URL, API_LOGIN_URL, API_REGISTER_URL, API_VERIFICATION_URL} from './api';\nimport authHeader from './auth-header';\n\nclass AuthService {\n    login(user) {\n        return axios\n            .post(API_LOGIN_URL, {\n                email: user.email,\n                password: user.password\n            })\n            .then(response => {\n                if (response.data.token) {\n                    if (!response.data.data.use_2fa) {\n                        window.console.log(\"saving user to user\", response.data);\n                        localStorage.setItem('user', JSON.stringify(response.data));\n                    } else {\n                        window.console.log(\"saving user to user2fa\", response.data);\n                        localStorage.setItem('user2fa', JSON.stringify(response.data));\n                    }\n                }\n                return response.data;\n            });\n    }\n\n    step2(code) {\n        return axios\n            .post(API_2STEP_URL, {\n                code: code\n            }, { headers: authHeader() })\n            .then(response => {\n                if (response.data.token) {\n                    window.console.log(\"finalizing user to user\", response.data);\n                    localStorage.setItem('user', JSON.stringify(response.data));\n                    localStorage.removeItem('user2fa');\n                }\n                return response.data;\n            });\n    }\n\n    logout() {\n        localStorage.removeItem('user');\n        localStorage.removeItem('user2fa');\n    }\n\n    register(user) {\n        return axios.post(API_REGISTER_URL, {\n            email: user.email,\n            password: user.password\n        });\n    }\n\n    verify(code) {\n        return axios.get(API_VERIFICATION_URL + '/' + code);\n    }\n}\n\nexport default new AuthService();\n","import AuthService from '../services/auth.service';\n\nconst user = JSON.parse(localStorage.getItem('user'));\nconst initialState = user\n  ? { status: { loggedIn: true }, user }\n  : { status: { loggedIn: false }, user: null };\n\nexport const auth = {\n  namespaced: true,\n  state: initialState,\n  actions: {\n    login({ commit }, user) {\n      return AuthService.login(user).then(\n        user => {\n          commit('loginSuccess', user);\n          return Promise.resolve(user);\n        },\n        error => {\n          commit('loginFailure');\n          return Promise.reject(error);\n        }\n      );\n    },\n    step2({ commit }, code) {\n      return AuthService.step2(code).then(\n          user => {\n            commit('step2Success', user);\n            return Promise.resolve(user);\n          },\n          error => {\n            commit('loginFailure');\n            return Promise.reject(error);\n          }\n      );\n    },\n    logout({ commit }) {\n      AuthService.logout();\n      commit('logout');\n    },\n    register({ commit }, user) {\n      return AuthService.register(user).then(\n        response => {\n          commit('registerSuccess');\n          return Promise.resolve(response.data);\n        },\n        error => {\n          commit('registerFailure');\n          return Promise.reject(error);\n        }\n      );\n    },\n    verify({ commit }, code) {\n      return AuthService.verify(code).then(\n          response => {\n            commit('verifySuccess');\n            return Promise.resolve(response.data);\n          },\n          error => {\n            commit('verifyFailure');\n            return Promise.reject(error);\n          }\n      );\n    }\n  },\n  mutations: {\n    loginSuccess(state, user) {\n      state.status.loggedIn = !user.data.use_2fa;\n      state.user = user;\n    },\n    step2Success(state, user) {\n      state.status.loggedIn = true;\n      state.user = user;\n    },\n    loginFailure(state) {\n      state.status.loggedIn = false;\n      state.user = null;\n    },\n    logout(state) {\n      state.status.loggedIn = false;\n      state.user = null;\n    },\n    registerSuccess(state) {\n      state.status.loggedIn = false;\n    },\n    registerFailure(state) {\n      state.status.loggedIn = false;\n    },\n    verifySuccess() {\n\n    },\n    verifyFailure(state) {\n      state.status.loggedIn = false;\n      state.user = null;\n    }\n  }\n};\n","import Vue from 'vue';\nimport Vuex from 'vuex';\n\nimport { auth } from './auth.module';\n\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n  modules: {\n    auth\n  }\n});\n","import Vue from 'vue';\nimport App from './App.vue';\nimport {router} from './router';\nimport store from './store';\nimport 'bootstrap';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport VeeValidate from 'vee-validate';\nimport Vuex from 'vuex';\nimport {library} from '@fortawesome/fontawesome-svg-core';\n\nimport {FontAwesomeIcon} from '@fortawesome/vue-fontawesome';\nimport {faDesktop, faHome, faSignInAlt, faSignOutAlt, faTerminal, faAnchor, faArchive, faUser, faUserPlus} from '@fortawesome/free-solid-svg-icons';\nimport VueTimeago from 'vue-timeago'\n\nlibrary.add(faHome, faUser, faDesktop, faUserPlus, faTerminal, faArchive, faAnchor, faSignInAlt, faSignOutAlt);\n\nVue.config.productionTip = false;\n\nVue.use(VeeValidate);\nVue.component('font-awesome-icon', FontAwesomeIcon);\n\nVue.use(Vuex);\n\nVue.use(VueTimeago, {\n    name: 'Timeago', // Component name, `Timeago` by default\n    locale: 'en' // Default locale\n});\n\n\nnew Vue({\n    router,\n    store,\n    render: h => h(App)\n}).$mount('#app');\n","var apiDev, apiProto, apiHost, apiPort;\n\nif (process.env.NODE_ENV === 'development') {\n    apiDev = true;\n    apiProto = 'http';\n    apiHost = 'localhost';\n    apiPort = 8080;\n} else {\n    apiDev = false;\n    apiProto = 'https';\n    apiHost = 'shieldwall.me';\n    apiPort = 443;\n}\n\nexport const API_DEV = apiDev;\n\nexport const API_PROTO = apiProto;\nexport const API_HOST = apiHost;\nexport const API_PORT = apiPort;\n\nexport const API_BASE_URL = API_PROTO + '://' + API_HOST + ':' + API_PORT + '/api/v1';\n\nexport const API_LOGIN_URL = API_BASE_URL + '/user/login';\nexport const API_2STEP_URL = API_BASE_URL + '/user/2step';\nexport const API_REGISTER_URL = API_BASE_URL + '/user/register';\nexport const API_VERIFICATION_URL = API_BASE_URL + '/user/verify';\n\nexport const API_USER_UPDATE_URL = API_BASE_URL + '/user/';\n\nexport const API_AGENTS_URL = API_BASE_URL + '/user/agents';\nexport const API_NEW_AGENT_URL = API_AGENTS_URL + '/new';\n\nexport const API_SUBNETS_URL = API_BASE_URL + '/subnets';\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Register.vue?vue&type=style&index=0&id=5a260c7e&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=58967a43&scoped=true&lang=css&\"","\nexport default function authHeader() {\n  let user = JSON.parse(localStorage.getItem('user'));\n  if(!user) {\n    user = JSON.parse(localStorage.getItem('user2fa'));\n  }\n\n  if (user && user.token) {\n    return { Authorization: 'Bearer ' + user.token };\n  } else {\n    return {};\n  }\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Verify.vue?vue&type=style&index=0&id=f816b1a8&scoped=true&lang=css&\""],"sourceRoot":""}