Skip to content

Commit cd2b18f

Browse files
committed
Added IMAP support
1 parent f5c4ccc commit cd2b18f

File tree

4 files changed

+86
-2
lines changed

4 files changed

+86
-2
lines changed

gophish/api/api.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def _build_url(self, *parts):
3838

3939
def request(self,
4040
method,
41+
body=None,
4142
resource_id=None,
4243
resource_action=None,
4344
resource_cls=None,
@@ -54,7 +55,7 @@ def request(self,
5455
if resource_action:
5556
endpoint = self._build_url(endpoint, resource_action)
5657

57-
response = self.api.execute(method, endpoint)
58+
response = self.api.execute(method, endpoint, json=body)
5859
if not response.ok:
5960
raise Error.parse(response.json())
6061

gophish/api/imap.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from gophish.models import IMAP, Success
2+
from gophish.api import APIEndpoint
3+
4+
5+
class API(APIEndpoint):
6+
def __init__(self, api, endpoint='api/imap/'):
7+
super(API, self).__init__(api, endpoint=endpoint, cls=IMAP)
8+
9+
def get(self):
10+
"""Gets the configured IMAP settings
11+
"""
12+
13+
return super(API, self).get()
14+
15+
def post(self, imap):
16+
"""Updates the IMAP settings
17+
18+
Arguments:
19+
imap {gophish.models.IMAP} -- The IMAP settings to configure
20+
"""
21+
22+
return super(API, self).post(imap)
23+
24+
def validate(self, imap):
25+
"""Sends a validation payload to the webhook specified by the given ID
26+
27+
Arguments:
28+
webhook_id {int} -- The ID of the webhook to validate
29+
"""
30+
return self.request("POST",
31+
body=imap.as_dict(),
32+
resource_action='validate',
33+
resource_cls=Success,
34+
single_resource=True)

gophish/client.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import requests
22

3-
from gophish.api import (campaigns, groups, pages, smtp, templates, webhooks)
3+
from gophish.api import (campaigns, groups, imap, pages, smtp, templates,
4+
webhooks)
45

56
DEFAULT_URL = 'http://localhost:3333'
67

@@ -37,6 +38,7 @@ def __init__(self,
3738
self.client = client(api_key, host=host, **kwargs)
3839
self.campaigns = campaigns.API(self.client)
3940
self.groups = groups.API(self.client)
41+
self.imap = imap.API(self.client)
4042
self.pages = pages.API(self.client)
4143
self.smtp = smtp.API(self.client)
4244
self.templates = templates.API(self.client)

gophish/models.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,53 @@ def parse(cls, json):
426426
return webhook
427427

428428

429+
class IMAP(Model):
430+
_valid_properties = {
431+
'enabled': None,
432+
'host': None,
433+
'port': None,
434+
'username': None,
435+
'password': None,
436+
'tls': None,
437+
'folder': None,
438+
'restrict_domain': None,
439+
'delete_reported_campaign_email': None,
440+
'last_login': None,
441+
'modified_date': None,
442+
'imap_freq': None
443+
}
444+
445+
def __init__(self, **kwargs):
446+
for key, default in IMAP._valid_properties.items():
447+
setattr(self, key, kwargs.get(key, default))
448+
449+
@classmethod
450+
def parse(cls, json):
451+
imap = cls()
452+
for key, val in json.items():
453+
if key in cls._valid_properties:
454+
setattr(imap, key, val)
455+
return imap
456+
457+
458+
class Success(Exception, Model):
459+
_valid_properties = {'message': None, 'success': None, 'data': None}
460+
461+
def __init__(self, *args, **kwargs):
462+
super().__init__(*args, **kwargs)
463+
464+
def __str__(self):
465+
return self.message
466+
467+
@classmethod
468+
def parse(cls, json):
469+
success = cls()
470+
for key, val in json.items():
471+
if key in cls._valid_properties:
472+
setattr(success, key, val)
473+
return success
474+
475+
429476
class Error(Exception, Model):
430477
_valid_properties = {'message': None, 'success': None, 'data': None}
431478

0 commit comments

Comments
 (0)