Skip to content

Commit 2758857

Browse files
committed
first commit
1 parent 7240ea6 commit 2758857

File tree

5 files changed

+97
-0
lines changed

5 files changed

+97
-0
lines changed

CHANGE.md

Whitespace-only changes.

fireeyepy/__init__.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
from platform import python_version
2+
from .errors import *
3+
import os
4+
import requests
5+
import logging
6+
7+
__version__ = "0.0.1"
8+
logger = logging.getLogger("fireeye")
9+
10+
class Detection:
11+
def __init__(self,key=None):
12+
self.api_key = key or os.environ.get("FIREEYE_API_KEY", None)
13+
self.api_host = "feapi.marketplace.apps.fireeye.com"
14+
user_agent = "fireeye-python/{version} python/{python_version}".format(
15+
version=__version__, python_version=python_version()
16+
)
17+
self.headers = {"User-Agent": user_agent, "feye-auth-key": key}
18+
self.session = requests.Session()
19+
20+
def submit_file(self, body=None, files=None):
21+
return self.post(self.api_host, "/file-submit", body, files)
22+
23+
def get_file_result(self, submission_id):
24+
return self.get(self.api_host, "/file-result", {"submission_id": submission_id})
25+
26+
def get_hash_lookup(self, hash):
27+
return self.get(self.api_host, "/hash-lookup", {"hash": hash})
28+
29+
def get_submissions(self):
30+
return self.get(self.api_host, "/get-submissions")
31+
32+
def get(self, host, request_uri, params=None):
33+
uri = "https://{host}{request_uri}".format(host=host, request_uri=request_uri)
34+
headers = self.headers
35+
36+
logger.debug("GET to %r with params %r, headers %r", uri, params, headers)
37+
return self.parse(host, self.session.get(uri, params=params, headers=headers))
38+
39+
def post(self, host, request_uri, data=None, files=None):
40+
uri = "https://{host}{request_uri}".format(host=host, request_uri=request_uri)
41+
headers = self.headers
42+
43+
logger.debug("POST to %r with data %r, files %r, headers %r", uri, data, files, headers)
44+
return self.parse(host, self.session.post(uri, data=data, files=files, headers=headers))
45+
46+
def parse(self, host, response):
47+
logger.debug("Response headers %r", response.headers)
48+
if response.status_code == 401:
49+
raise AuthenticationError
50+
elif response.status_code == 204:
51+
return None
52+
elif 200 <= response.status_code < 300:
53+
content_mime = response.headers.get("content-type").split(";", 1)[0]
54+
if content_mime == "application/json":
55+
return response.json()
56+
else:
57+
return response.content
58+
elif 400 <= response.status_code < 500:
59+
logger.warning(
60+
"Client error: %s %r", response.status_code, response.content
61+
)
62+
message = "{code} response from {host}".format(
63+
code=response.status_code, host=host
64+
)
65+
raise ClientError(message)
66+
elif 500 <= response.status_code < 600:
67+
logger.warning(
68+
"Server error: %s %r", response.status_code, response.content
69+
)
70+
message = "{code} response from {host}".format(
71+
code=response.status_code, host=host
72+
)
73+
raise ServerError(message)

fireeyepy/errors.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Error(Exception):
2+
pass
3+
4+
class AuthenticationError(Error):
5+
pass
6+
7+
class ServerError(Error):
8+
pass
9+
10+
class ClientError(Error):
11+
pass

requirements.txt

384 Bytes
Binary file not shown.

setup.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from setuptools import setup
2+
3+
setup(
4+
name="fireeyepy",
5+
version="0.0.1",
6+
description="FireEye Client Library for Python",
7+
url="https://github.com/fireeye/fireeye-python",
8+
author="FireEye",
9+
license="MIT",
10+
packages=["fireeyepy"],
11+
platforms=["any"],
12+
install_requires=["requests>=2.4.2"]
13+
)

0 commit comments

Comments
 (0)