Skip to content

Commit 81fd4be

Browse files
committed
Fixed datetime formatting, corrected api endpoints, and fixed kwargs not getting set in client.
1 parent c9cbe1d commit 81fd4be

File tree

8 files changed

+37
-16
lines changed

8 files changed

+37
-16
lines changed

gophish/api/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def post(self, resource):
5757
resource - gophish.models.Model - The resource instance
5858
5959
"""
60-
response = self.api.execute("POST", self.endpoint, json=json.dumps(resource))
60+
response = self.api.execute("POST", self.endpoint, json=(resource.as_dict()))
6161

6262
if not response.ok:
6363
return Error.parse(response.json())

gophish/api/campaigns.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77
class API(APIEndpoint):
8-
def __init__(self, api, endpoint='/api/campaigns'):
8+
def __init__(self, api, endpoint='/api/campaigns/'):
99
""" Creates a new instance of the campaigns API """
1010

1111
super(API, self).__init__(api, endpoint=endpoint, cls=Campaign)

gophish/api/groups.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from gophish.api import APIEndpoint
33

44
class API(APIEndpoint):
5-
def __init__(self, api, endpoint='/api/groups'):
5+
def __init__(self, api, endpoint='/api/groups/'):
66
super(API, self).__init__(api, endpoint=endpoint, cls=Group)
77

88
def get(self, group_id=None):

gophish/api/pages.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from gophish.api import APIEndpoint
33

44
class API(APIEndpoint):
5-
def __init__(self, api, endpoint='/api/pages'):
5+
def __init__(self, api, endpoint='/api/pages/'):
66
super(API, self).__init__(api, endpoint=endpoint, cls=Page)
77

88
def get(self, page_id=None):

gophish/api/smtp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from gophish.api import APIEndpoint
33

44
class API(APIEndpoint):
5-
def __init__(self, api, endpoint='/api/smtp'):
5+
def __init__(self, api, endpoint='/api/smtp/'):
66
super(API, self).__init__(api, endpoint=endpoint, cls=SMTP)
77

88
def get(self, smtp_id=None):

gophish/api/templates.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
from gophish.api import APIEndpoint
33

44
class API(APIEndpoint):
5-
def __init__(self, api, endpoint='/api/templates'):
5+
def __init__(self, api, endpoint='/api/templates/'):
66
super(API, self).__init__(api, endpoint=endpoint, cls=Template)
77

88
def get(self, template_id=None):
99
""" Gets one or more templates """
1010

11-
return super(API, self).get(resource_id=campaign_id)
11+
return super(API, self).get(resource_id=template_id)
1212

1313
def post(self, template):
1414
""" Creates a new template """

gophish/client.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@ class GophishClient(object):
1414
def __init__(self, api_key, host=DEFAULT_URL, **kwargs):
1515
self.api_key = api_key
1616
self.host = host
17-
self._kwargs = kwargs
17+
self._client_kwargs = kwargs
1818

19-
def execute(self, method, path, data=None):
19+
def execute(self, method, path, **kwargs):
2020
""" Executes a request to a given endpoint, returning the result """
2121

2222
url = "{}{}".format(self.host, path)
23-
response = requests.request(method, url, params={"api_key": self.api_key}, json=data, **self._kwargs)
23+
kwargs.update(self._client_kwargs)
24+
response = requests.request(method, url, params={"api_key": self.api_key}, **kwargs)
2425
return response
2526

2627
class Gophish(object):

gophish/models.py

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datetime import datetime
2+
from dateutil.tz import tzlocal
23

34
import json as _json
45
import dateutil.parser
@@ -11,6 +12,25 @@ class Model(object):
1112
def __init__(self):
1213
self._valid_properties = {}
1314

15+
def as_dict(self):
16+
""" Returns a dict representation of the resource """
17+
result = {}
18+
for key in self._valid_properties:
19+
val = getattr(self, key)
20+
if isinstance(val, datetime):
21+
val = val.isoformat()
22+
# Parse custom classes
23+
elif val and not isinstance(val, (str, list, dict)):
24+
val = val.as_dict()
25+
# Parse lists of objects
26+
elif isinstance(val, list):
27+
val = [e.as_dict() for e in val]
28+
29+
# Add it if it's not None
30+
if val:
31+
result[key] = val
32+
return result
33+
1434
@classmethod
1535
def parse(cls, json):
1636
"""Parse a JSON object into a model instance."""
@@ -19,8 +39,8 @@ def parse(cls, json):
1939

2040
class Campaign(Model):
2141
_valid_properties = {
22-
'id': None, 'name': None, 'created_date': datetime.now(),
23-
'launch_date': datetime.now(), 'completed_date': None, 'template': None,
42+
'id': None, 'name': None, 'created_date': datetime.now(tzlocal()),
43+
'launch_date': datetime.now(tzlocal()), 'completed_date': None, 'template': None,
2444
'page': None, 'results': [], 'status': None, 'timeline': [],
2545
'smtp': None, 'url': None}
2646

@@ -106,7 +126,7 @@ def parse(cls, json):
106126
class Group(Model):
107127
""" Groups contain one or more users """
108128
_valid_properties = {
109-
'id': None, 'name': None, 'modified_date': datetime.now(),
129+
'id': None, 'name': None, 'modified_date': datetime.now(tzlocal()),
110130
'targets': []}
111131

112132
def __init__(self, **kwargs):
@@ -131,7 +151,7 @@ class SMTP(Model):
131151
_valid_properties = {
132152
'id': None, 'interface_type': 'SMTP', 'name': None, 'host': None,
133153
'from_address': None, 'ignore_cert_errors' : False,
134-
'modified_date': datetime.now()}
154+
'modified_date': datetime.now(tzlocal())}
135155

136156
def __init__(self, **kwargs):
137157
for key, default in SMTP._valid_properties.items():
@@ -151,7 +171,7 @@ def parse(cls, json):
151171
class Template(Model):
152172
_valid_properties = {
153173
'id': None, 'name': None, 'text': None, 'html': None,
154-
'modified_date': datetime.now(), 'subject': None, 'attachments': []}
174+
'modified_date': datetime.now(tzlocal()), 'subject': None, 'attachments': []}
155175

156176
def __init__(self, **kwargs):
157177
for key, default in Template._valid_properties.items():
@@ -173,7 +193,7 @@ def parse(cls, json):
173193

174194
class Page(Model):
175195
_valid_properties = {
176-
'id': None, 'name': None, 'html': None, 'modified_date': datetime.now(),
196+
'id': None, 'name': None, 'html': None, 'modified_date': datetime.now(tzlocal()),
177197
'capture_credentials': False, 'capture_passwords': False,
178198
'redirect_url': None}
179199

0 commit comments

Comments
 (0)