|
1 |
| -import itertools |
2 |
| -import json |
3 |
| - |
4 |
| -import requests |
5 |
| - |
| 1 | +from .core import Malwarecage |
6 | 2 | from .api import MalwarecageAPI
|
7 |
| -from .obj import MalwarecageObject |
8 |
| -from .file import MalwarecageFile |
9 |
| -from .config import MalwarecageConfig |
10 |
| -from .blob import MalwarecageBlob |
11 |
| - |
12 |
| - |
13 |
| -class Malwarecage(object): |
14 |
| - def __init__(self, api=None): |
15 |
| - self.api = api or MalwarecageAPI() |
16 |
| - |
17 |
| - def login(self, username, password): |
18 |
| - result = self.api.post("auth/login", json={ |
19 |
| - "login": username, |
20 |
| - "password": password |
21 |
| - }, noauth=True) |
22 |
| - self.api.set_api_key(result["token"]) |
23 |
| - |
24 |
| - def _recent(self, endpoint): |
25 |
| - try: |
26 |
| - for page in itertools.count(start=1): |
27 |
| - result = self.api.get(endpoint, params={"page": page}) |
28 |
| - key = endpoint+"s" |
29 |
| - if key not in result or len(result[key]) == 0: |
30 |
| - return |
31 |
| - for obj in result[key]: |
32 |
| - yield MalwarecageObject.create(self.api, obj) |
33 |
| - except requests.exceptions.HTTPError as e: |
34 |
| - if e.response.status_code >= 500: |
35 |
| - raise e |
36 |
| - |
37 |
| - def recent_objects(self): |
38 |
| - return self._recent("object") |
39 |
| - |
40 |
| - def recent_files(self): |
41 |
| - return self._recent("file") |
42 |
| - |
43 |
| - def recent_configs(self): |
44 |
| - return self._recent("config") |
45 |
| - |
46 |
| - def recent_blobs(self): |
47 |
| - return self._recent("blob") |
48 |
| - |
49 |
| - def query(self, hash): |
50 |
| - result = self.api.get("object/{}".format(hash)) |
51 |
| - return MalwarecageObject.create(self.api, result) |
52 |
| - |
53 |
| - def query_file(self, hash): |
54 |
| - result = self.api.get("file/{}".format(hash)) |
55 |
| - return MalwarecageFile(self.api, result) |
56 |
| - |
57 |
| - def query_config(self, hash): |
58 |
| - result = self.api.get("config/{}".format(hash)) |
59 |
| - return MalwarecageConfig(self.api, result) |
60 |
| - |
61 |
| - def query_blob(self, hash): |
62 |
| - result = self.api.get("blob/{}".format(hash)) |
63 |
| - return MalwarecageConfig(self.api, result) |
64 |
| - |
65 |
| - def search(self, query): |
66 |
| - result = self.api.post("search", json={"query": query}) |
67 |
| - for file in result: |
68 |
| - yield MalwarecageObject.create(self.api, file) |
69 |
| - |
70 |
| - def upload_file(self, name, content, parent=None, metakeys=None): |
71 |
| - parent = parent or "root" |
72 |
| - result = self.api.post("file/{}".format(parent), data={ |
73 |
| - 'metakeys': json.dumps({'metakeys': metakeys or []}) |
74 |
| - }, files={'file': (name, content)}) |
75 |
| - return MalwarecageFile(self.api, result) |
76 |
| - |
77 |
| - def upload_config(self, family, cfg, parent=None): |
78 |
| - parent = parent or "root" |
79 |
| - result = self.api.put("config/{}".format(parent), json={ |
80 |
| - "family": family, |
81 |
| - "cfg": cfg |
82 |
| - }) |
83 |
| - return MalwarecageConfig(self.api, result) |
84 |
| - |
85 |
| - def upload_blob(self, name, type, content, parent=None): |
86 |
| - parent = parent or "root" |
87 |
| - result = self.api.put("blob/{}".format(parent), json={ |
88 |
| - "blob_name": name, |
89 |
| - "blob_type": type, |
90 |
| - "content": content |
91 |
| - }) |
92 |
| - return MalwarecageBlob(self.api, result) |
0 commit comments