forked from p15670423/monkey
Island, Agent: Remove per-agent configuration from agent document
Each agent doesn't need to have a separate configuration since the configuration is global and unique agent parameters are not and should not be stored in configuration
This commit is contained in:
parent
1b2ca74b9f
commit
35b4fae326
|
@ -41,7 +41,6 @@ class ControlClient(object):
|
|||
"ip_addresses": local_ips(),
|
||||
"networks": get_host_subnets(),
|
||||
"description": " ".join(platform.uname()),
|
||||
"config": WormConfiguration.as_dict(),
|
||||
"parent": parent,
|
||||
"launch_time": agent_process.get_start_time(),
|
||||
}
|
||||
|
@ -50,7 +49,7 @@ class ControlClient(object):
|
|||
monkey["tunnel"] = ControlClient.proxies.get("https")
|
||||
|
||||
requests.post( # noqa: DUO123
|
||||
"https://%s/api/agent" % (WormConfiguration.current_server,),
|
||||
f"https://{WormConfiguration.current_server}/api/agent",
|
||||
data=json.dumps(monkey),
|
||||
headers={"content-type": "application/json"},
|
||||
verify=False,
|
||||
|
@ -173,7 +172,7 @@ class ControlClient(object):
|
|||
return
|
||||
try:
|
||||
reply = requests.get( # noqa: DUO123
|
||||
"https://%s/api/agent/%s/legacy" % (WormConfiguration.current_server, GUID),
|
||||
f"https://{WormConfiguration.current_server}/api/agent/",
|
||||
verify=False,
|
||||
proxies=ControlClient.proxies,
|
||||
timeout=MEDIUM_REQUEST_TIMEOUT,
|
||||
|
@ -210,7 +209,7 @@ class ControlClient(object):
|
|||
return
|
||||
try:
|
||||
requests.patch( # noqa: DUO123
|
||||
"https://%s/api/agent/%s" % (WormConfiguration.current_server, GUID),
|
||||
f"https://{WormConfiguration.current_server}/api/agent/{GUID}",
|
||||
data=json.dumps({"config_error": True}),
|
||||
headers={"content-type": "application/json"},
|
||||
verify=False,
|
||||
|
|
|
@ -49,7 +49,7 @@ class ControlChannel(IControlChannel):
|
|||
def get_config(self) -> dict:
|
||||
try:
|
||||
response = requests.get( # noqa: DUO123
|
||||
f"https://{self._control_channel_server}/api/agent/{self._agent_id}",
|
||||
f"https://{self._control_channel_server}/api/agent",
|
||||
verify=False,
|
||||
proxies=ControlClient.proxies,
|
||||
timeout=SHORT_REQUEST_TIMEOUT,
|
||||
|
|
|
@ -37,7 +37,6 @@ class Monkey(Document):
|
|||
|
||||
# SCHEMA
|
||||
guid = StringField(required=True)
|
||||
config = EmbeddedDocumentField("Config")
|
||||
should_stop = BooleanField()
|
||||
dead = BooleanField()
|
||||
description = StringField()
|
||||
|
|
|
@ -21,28 +21,11 @@ class Monkey(AbstractResource):
|
|||
urls = [
|
||||
"/api/agent",
|
||||
"/api/agent/<string:guid>",
|
||||
# API Spec: Resource names should alternate with IDs (/api/agents/123/config-format/xyz)
|
||||
"/api/agent/<string:guid>/<string:config_format>",
|
||||
]
|
||||
|
||||
# Used by monkey. can't secure.
|
||||
def get(self, guid=None, config_format=None, **kw):
|
||||
if not guid:
|
||||
guid = request.args.get("guid")
|
||||
|
||||
if guid:
|
||||
monkey_json = mongo.db.monkey.find_one_or_404({"guid": guid})
|
||||
# TODO: When the "legacy" format is no longer needed, update this logic and remove the
|
||||
# "/api/agent/<string:guid>/<string:config_format>" route. Also considering not
|
||||
# flattening the config in the first place.
|
||||
if config_format == "legacy":
|
||||
ConfigService.decrypt_flat_config(monkey_json["config"])
|
||||
else:
|
||||
ConfigService.format_flat_config_for_agent(monkey_json["config"])
|
||||
|
||||
return monkey_json
|
||||
|
||||
return {}
|
||||
def get(self):
|
||||
return {"config": ConfigService.format_flat_config_for_agent()}
|
||||
|
||||
# Used by monkey. can't secure.
|
||||
@TestTelemStore.store_exported_telem
|
||||
|
@ -54,8 +37,6 @@ class Monkey(AbstractResource):
|
|||
monkey_json = json.loads(request.data)
|
||||
update = {"$set": {"modifytime": datetime.now()}}
|
||||
monkey = NodeService.get_monkey_by_guid(guid)
|
||||
if "config" in monkey_json:
|
||||
update["$set"]["config"] = monkey_json["config"]
|
||||
if "config_error" in monkey_json:
|
||||
update["$set"]["config_error"] = monkey_json["config_error"]
|
||||
|
||||
|
@ -89,11 +70,6 @@ class Monkey(AbstractResource):
|
|||
# if new monkey telem, change config according to "new monkeys" config.
|
||||
db_monkey = mongo.db.monkey.find_one({"guid": monkey_json["guid"]})
|
||||
|
||||
# Update monkey configuration
|
||||
new_config = ConfigService.get_flat_config(False, False)
|
||||
monkey_json["config"] = monkey_json.get("config", {})
|
||||
monkey_json["config"].update(new_config)
|
||||
|
||||
# try to find new monkey parent
|
||||
parent = monkey_json.get("parent")
|
||||
parent_to_add = (monkey_json.get("guid"), None) # default values in case of manual run
|
||||
|
|
|
@ -427,11 +427,13 @@ class ConfigService:
|
|||
}
|
||||
|
||||
@staticmethod
|
||||
def format_flat_config_for_agent(config: Dict):
|
||||
def format_flat_config_for_agent():
|
||||
config = ConfigService.get_flat_config()
|
||||
ConfigService._remove_credentials_from_flat_config(config)
|
||||
ConfigService._format_payloads_from_flat_config(config)
|
||||
ConfigService._format_pbas_from_flat_config(config)
|
||||
ConfigService._format_propagation_from_flat_config(config)
|
||||
return config
|
||||
|
||||
@staticmethod
|
||||
def _remove_credentials_from_flat_config(config: Dict):
|
||||
|
|
Loading…
Reference in New Issue