| 14 | |
| 15 | |
| 16 | class AgentFieldsSchema(ma.Schema): |
| 17 | |
| 18 | paw = ma.fields.String(allow_none=True) |
| 19 | sleep_min = ma.fields.Integer() |
| 20 | sleep_max = ma.fields.Integer() |
| 21 | watchdog = ma.fields.Integer() |
| 22 | group = ma.fields.String() |
| 23 | architecture = ma.fields.String() |
| 24 | platform = ma.fields.String() |
| 25 | server = ma.fields.String() |
| 26 | upstream_dest = ma.fields.String(allow_none=True) |
| 27 | username = ma.fields.String() |
| 28 | location = ma.fields.String() |
| 29 | pid = ma.fields.Integer() |
| 30 | ppid = ma.fields.Integer() |
| 31 | trusted = ma.fields.Boolean() |
| 32 | executors = ma.fields.List(ma.fields.String()) |
| 33 | privilege = ma.fields.String() |
| 34 | exe_name = ma.fields.String() |
| 35 | host = ma.fields.String() |
| 36 | contact = ma.fields.String() |
| 37 | proxy_receivers = ma.fields.Dict(keys=ma.fields.String(), values=ma.fields.List(ma.fields.String()), |
| 38 | allow_none=True) |
| 39 | proxy_chain = ma.fields.List(ma.fields.List(ma.fields.String()), allow_none=True) |
| 40 | origin_link_id = ma.fields.String() |
| 41 | deadman_enabled = ma.fields.Boolean(allow_none=True) |
| 42 | available_contacts = ma.fields.List(ma.fields.String(), allow_none=True) |
| 43 | host_ip_addrs = ma.fields.List(ma.fields.String(), allow_none=True) |
| 44 | |
| 45 | display_name = ma.fields.String(dump_only=True) |
| 46 | created = ma.fields.DateTime(format=BaseObject.TIME_FORMAT, dump_only=True) |
| 47 | last_seen = ma.fields.DateTime(format=BaseObject.TIME_FORMAT, dump_only=True) |
| 48 | links = ma.fields.List(ma.fields.Nested(LinkSchema), dump_only=True) |
| 49 | pending_contact = ma.fields.String() |
| 50 | |
| 51 | @ma.pre_load |
| 52 | def remove_nulls(self, in_data, **_): |
| 53 | return {k: v for k, v in in_data.items() if v is not None} |
| 54 | |
| 55 | @ma.pre_load |
| 56 | def remove_properties(self, data, **_): |
| 57 | data.pop('display_name', None) |
| 58 | data.pop('created', None) |
| 59 | data.pop('last_seen', None) |
| 60 | data.pop('links', None) |
| 61 | return data |
| 62 | |
| 63 | |
| 64 | class AgentSchema(AgentFieldsSchema): |