(self, request)
| 59 | |
| 60 | @check_authorization |
| 61 | async def rest_core(self, request): |
| 62 | try: |
| 63 | access = dict(access=tuple(await self.auth_svc.get_permissions(request))) |
| 64 | data = dict(await request.json()) |
| 65 | index = data.pop('index') |
| 66 | options = dict( |
| 67 | DELETE=dict( |
| 68 | agents=lambda d: self.rest_svc.delete_agent(d), |
| 69 | operations=lambda d: self.rest_svc.delete_operation(d), |
| 70 | abilities=lambda d: self.rest_svc.delete_ability(d), |
| 71 | adversaries=lambda d: self.rest_svc.delete_adversary(d) |
| 72 | ), |
| 73 | PUT=dict( |
| 74 | adversaries=lambda d: self.rest_svc.persist_adversary(access, d), |
| 75 | abilities=lambda d: self.rest_svc.persist_ability(access, d), |
| 76 | sources=lambda d: self.rest_svc.persist_source(access, d), |
| 77 | objectives=lambda d: self.rest_svc.persist_objective(access, d), |
| 78 | planners=lambda d: self.rest_svc.update_planner(d), |
| 79 | agents=lambda d: self.rest_svc.update_agent_data(d), |
| 80 | chain=lambda d: self.rest_svc.update_chain_data(d), |
| 81 | operations=lambda d: self.rest_svc.create_operation(access, d), |
| 82 | schedule=lambda d: self.rest_svc.create_schedule(access, d), |
| 83 | link=lambda d: self.rest_svc.apply_potential_link(Link.load(d)), |
| 84 | manual_command=lambda d: self.rest_svc.add_manual_command(access, d) |
| 85 | ), |
| 86 | POST=dict( |
| 87 | operation_report=lambda d: self.rest_svc.display_operation_report(d), |
| 88 | result=lambda d: self.rest_svc.display_result(d), |
| 89 | contact=lambda d: self.rest_svc.download_contact_report(d), |
| 90 | configuration=lambda d: self.rest_svc.update_config(d), |
| 91 | link=lambda d: self.rest_svc.get_potential_links(**d), |
| 92 | operation=lambda d: self.rest_svc.update_operation(**d), |
| 93 | task=lambda d: self.rest_svc.task_agent_with_ability(**d), |
| 94 | agent_configuration=lambda d: self.rest_svc.get_agent_configuration(d), |
| 95 | exfil_files=lambda d: self.rest_svc.list_exfil_files(d) |
| 96 | ) |
| 97 | ) |
| 98 | if index not in options[request.method]: |
| 99 | search = {**data, **access} |
| 100 | return web.json_response(await self.rest_svc.display_objects(index, search)) |
| 101 | return web.json_response(await options[request.method][index](data)) |
| 102 | except ma.ValidationError as e: |
| 103 | raise web.HTTPBadRequest(content_type='application/json', text=json.dumps(e.messages)) |
| 104 | except Exception as e: |
| 105 | self.log.error(repr(e), exc_info=True) |
| 106 | |
| 107 | @check_authorization |
| 108 | async def rest_core_info(self, request): |
nothing calls this directly
no test coverage detected