Skip to content

Commit d985b38

Browse files
committed
Refactoring the way classes are loaded into the CRUD APIEndpoint base class
1 parent 9bec3f8 commit d985b38

File tree

6 files changed

+94
-54
lines changed

6 files changed

+94
-54
lines changed

gophish/api/api.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,19 @@ class APIEndpoint:
1111
Represents an API endpoint for Gophish, containing common patterns
1212
for CRUD operations.
1313
"""
14-
def __init__(self, api, endpoint=None):
14+
def __init__(self, api, endpoint=None, cls=None):
1515
""" Creates an instance of the APIEndpoint class.
1616
1717
Args:
1818
api - Gophish.client - The authenticated REST client
1919
endpoint - str - The URL path to the resource endpoint
20+
cls - gophish.models.Model - The Class to use when parsing results
2021
"""
2122
self.api = api
2223
self.endpoint = endpoint
24+
self._cls = cls
2325

24-
def get(self, cls, resource_id=None):
26+
def get(self, resource_id=None):
2527
""" Gets the details for one or more resources by ID
2628
2729
Args:
@@ -42,29 +44,28 @@ def get(self, cls, resource_id=None):
4244
return Error.parse(response.json())
4345

4446
if resource_id:
45-
return cls.parse(response.json())
47+
return self._cls.parse(response.json())
4648

47-
return [cls.parse(resource) for resource in response.json()]
49+
return [self._cls.parse(resource) for resource in response.json()]
4850

49-
def post(self, cls, resource):
51+
def post(self, resource):
5052
""" Creates a new instance of the resource.
5153
5254
Args:
53-
cls - gophish.models.Model - The resource class
55+
resource - gophish.models.Model - The resource instance
5456
5557
"""
5658
response = self.api.execute("POST", self.endpoint, json=json.dumps(resource))
5759

5860
if not response.ok:
5961
return Error.parse(response.json())
6062

61-
return cls.parse(response.json())
63+
return self._cls.parse(response.json())
6264

63-
def put(self, cls, resource):
65+
def put(self, resource):
6466
""" Edits an existing resource
6567
6668
Args:
67-
cls - gophish.models.Model - The resource class
6869
resource - gophish.models.Model - The resource instance
6970
"""
7071

@@ -78,13 +79,12 @@ def put(self, cls, resource):
7879
if not respose.ok:
7980
return Error.parse(response.json())
8081

81-
return cls.parse(response.json())
82+
return self._cls.parse(response.json())
8283

83-
def delete(self, cls, resource_id):
84+
def delete(self, resource_id):
8485
""" Deletes an existing resource
8586
8687
Args:
87-
cls - gophish.models.Model - The resource class
8888
resource_id - int - The resource ID to be deleted
8989
"""
9090

@@ -95,4 +95,4 @@ def delete(self, cls, resource_id):
9595
if not response.ok:
9696
return Error.parse(response.json())
9797

98-
return cls.parse(response.json())
98+
return self._cls.parse(response.json())

gophish/api/campaigns.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,28 @@
88
class API(APIEndpoint):
99
def __init__(self, api, endpoint='/campaigns'):
1010
""" Creates a new instance of the campaigns API """
11-
super(API, self).__init__(api, endpoint=endpoint)
11+
12+
super(API, self).__init__(api, endpoint=endpoint, cls=Campaign)
13+
14+
def get(self, campaign_id=None):
15+
""" Gets the details for one or more campaigns by ID """
16+
17+
return super(API, self).get(resource_id=campaign_id)
18+
19+
def post(self, campaign):
20+
""" Creates a new campaign """
21+
22+
return super(API, self).post(campaign)
23+
24+
def puts(self, campaign):
25+
""" Edits an existing campaign """
26+
27+
return super(API, self).put(campaign)
28+
29+
def delete(self, campaign_id):
30+
""" Deletes an existing campaign """
31+
32+
return super(API, self).delete(campaign_id)
1233

1334
def summary(campaign_id=None):
1435
""" Returns the summary of one or more campaigns. """

gophish/api/groups.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
1-
class API(object):
1+
from gophish.models import Group
2+
3+
class API(APIEndpoint):
24
def __init__(self, api, endpoint='/groups'):
3-
self.api = api
4-
self.endpoint = endpoint
5+
super(API, self).__init__(api, endpoint=endpoint, cls=Group)
56

67
def get(group_id=None):
78
""" Gets one or more groups """
8-
raise NotImplementedError
9+
return super(API, self).get(resource_id=group_id)
910

1011
def post(group):
1112
""" Creates a new group """
12-
raise NotImplementedError
13+
return super(API, self).post(group)
1314

1415
def put(group):
1516
""" Edits a group """
16-
raise NotImplementedError
17+
return super(API, self).put(group)
1718

1819
def delete(group_id):
1920
""" Deletes a group by ID """
20-
raise NotImplementedError
21+
return super(API, self).put(group_id)

gophish/api/pages.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
1-
class API(object):
1+
from gophish.models import Page
2+
from gophish.api import APIEndpoint
3+
4+
class API(APIEndpoint):
25
def __init__(self, api, endpoint='/pages'):
3-
self.api = api
4-
self.endpoint = endpoint
6+
super(API, self).__init__(api, endpoint=endpoint, cls=Page)
57

6-
def get(page_id=None):
8+
def get(self, page_id=None):
79
""" Gets one or more pages """
8-
raise NotImplementedError
10+
11+
return self.super(API, self).get(resource_id=page_id)
912

10-
def post(page):
13+
def post(self, page):
1114
""" Creates a new page """
12-
raise NotImplementedError
1315

14-
def put(page):
16+
return super(API, self).post(page)
17+
18+
def put(self, page):
1519
""" Edits a page """
16-
raise NotImplementedError
1720

18-
def delete(page_id):
21+
return super(API, self).put(put)
22+
23+
def delete(self, page_id):
1924
""" Deletes a page by ID """
20-
raise NotImplementedError
25+
26+
return super(API, self).delete(page_id)

gophish/api/smtp.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
1-
class API(object):
1+
from gophish.api import APIEndpoint
2+
from gophish.models import SMTP
3+
4+
class API(APIEndpoint):
25
def __init__(self, api, endpoint='/smtp'):
3-
self.api = api
4-
self.endpoint = endpoint
6+
super(API, self).__init__(api, endpoint=endpoint, cls=SMTP)
57

6-
def get(smtp_id=None):
8+
def get(self, smtp_id=None):
79
""" Gets one or more SMTP sending profiles """
8-
raise NotImplementedError
910

10-
def post(smtp):
11+
return super(API, self).get(resource_id=smtp_id)
12+
13+
def post(self, smtp):
1114
""" Creates a new SMTP sending profile """
12-
raise NotImplementedError
1315

14-
def put(smtp):
16+
return super(API, self).post(smtp)
17+
18+
def put(self, smtp):
1519
""" Edits an SMTP sending profile """
16-
raise NotImplementedError
1720

18-
def delete(smtp_id):
21+
return super(API, self).put(smtp)
22+
23+
def delete(self, smtp_id):
1924
""" Deletes an SMTP sending profile by ID """
20-
raise NotImplementedError
25+
26+
return super(API, self).delete(smtp_id)

gophish/api/templates.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
1-
class API(object):
1+
from gophish.models import Template
2+
from gophish.api import APIEndpoint
3+
4+
class API(APIEndpoint):
25
def __init__(self, api, endpoint='/templates'):
3-
self.api = api
4-
self.endpoint = endpoint
6+
super(API, self).__init__(api, endpoint=endpoint, cls=Template)
57

6-
def get(template_id=None):
8+
def get(self, template_id=None):
79
""" Gets one or more templates """
8-
raise NotImplementedError
10+
11+
return super(API, self).get(resource_id=campaign_id)
912

10-
def post(template):
13+
def post(self, template):
1114
""" Creates a new template """
12-
raise NotImplementedError
1315

14-
def put(template):
16+
return super(API, self).post(template)
17+
18+
def put(self, template):
1519
""" Edits a template """
16-
raise NotImplementedError
1720

18-
def delete(template_id):
21+
return super(API, self).put(template)
22+
23+
def delete(self, template_id):
1924
""" Deletes a template by ID """
20-
raise NotImplementedError
25+
26+
return super(API, self).delete(template_id)

0 commit comments

Comments
 (0)