mirror of
https://github.com/chillout2k/gulag.git
synced 2025-12-13 16:00:18 +00:00
PATCH@QuarMail-Resource
This commit is contained in:
parent
8fae189267
commit
46a6eaccae
18
app/Gulag.py
18
app/Gulag.py
@ -353,6 +353,24 @@ class Gulag:
|
|||||||
logging.warning(whoami(self) + e.message)
|
logging.warning(whoami(self) + e.message)
|
||||||
raise GulagException(whoami(self) + e.message) from e
|
raise GulagException(whoami(self) + e.message) from e
|
||||||
|
|
||||||
|
def modify_quarmail(self, quarmail):
|
||||||
|
try:
|
||||||
|
if 'id' not in quarmail:
|
||||||
|
raise GulagBadInputException(whoami(self) + "'id' is mandatory!")
|
||||||
|
for field in quarmail:
|
||||||
|
if field not in self.fields['QuarMails']:
|
||||||
|
raise GulagBadInputException(whoami(self) +
|
||||||
|
"Unknown QuarMail field: " + field
|
||||||
|
)
|
||||||
|
self.db.modify_quarmail(quarmail)
|
||||||
|
except GulagDBBadInputException as e:
|
||||||
|
raise GulagBadInputException(whoami(self) + e.message) from e
|
||||||
|
except GulagDBNotFoundException as e:
|
||||||
|
raise GulagNotFoundException(whoami(self) + e.message) from e
|
||||||
|
except GulagDBException as e:
|
||||||
|
logging.warning(whoami(self) + e.message)
|
||||||
|
raise GulagException(whoami(self) + e.message) from e
|
||||||
|
|
||||||
def delete_quarmail(self, args):
|
def delete_quarmail(self, args):
|
||||||
qm_db = None
|
qm_db = None
|
||||||
try:
|
try:
|
||||||
|
|||||||
@ -278,10 +278,37 @@ class GulagDB:
|
|||||||
except mariadb.Error as e:
|
except mariadb.Error as e:
|
||||||
raise GulagDBException(whoami(self) + (e.msg)) from e
|
raise GulagDBException(whoami(self) + (e.msg)) from e
|
||||||
|
|
||||||
|
def modify_quarmail(self, quarmail):
|
||||||
|
try:
|
||||||
|
cursor = self.conn.cursor()
|
||||||
|
mod_fields = ""
|
||||||
|
if 'id' not in quarmail:
|
||||||
|
raise GulagDBBadInputException("Missing QuarMail-ID!")
|
||||||
|
if len(quarmail) < 2:
|
||||||
|
raise GulagDBBadInputException("No fields specified to modify!")
|
||||||
|
for field in quarmail:
|
||||||
|
if field == 'id':
|
||||||
|
continue
|
||||||
|
mod_fields += " " + field + "='" + quarmail[field] + "',"
|
||||||
|
mod_fields = str(mod_fields).rstrip(',')
|
||||||
|
cursor.execute(
|
||||||
|
"update QuarMails set "+mod_fields+" where id="+str(quarmail['id'])
|
||||||
|
)
|
||||||
|
if(cursor.rowcount == 0):
|
||||||
|
raise GulagDBNotFoundException(whoami(self) + "No QuarMails modified!")
|
||||||
|
cursor.close()
|
||||||
|
return True
|
||||||
|
except GulagDBBadInputException as e:
|
||||||
|
raise GulagDBBadInputException(whoami(self) + e.message) from e
|
||||||
|
except mariadb.Error as e:
|
||||||
|
raise GulagDBException(whoami(self) + str(e.msg)) from e
|
||||||
|
|
||||||
def delete_quarmail(self, id):
|
def delete_quarmail(self, id):
|
||||||
try:
|
try:
|
||||||
cursor = self.conn.cursor()
|
cursor = self.conn.cursor()
|
||||||
cursor.execute("delete from QuarMails where id=" + str(id))
|
cursor.execute("delete from QuarMails where id=" + str(id))
|
||||||
|
if(cursor.rowcount == 0):
|
||||||
|
raise GulagDBNotFoundException(whoami(self) + "No QuarMails deleted!")
|
||||||
cursor.close()
|
cursor.close()
|
||||||
return True
|
return True
|
||||||
except mariadb.Error as e:
|
except mariadb.Error as e:
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import json
|
|||||||
from Gulag import (
|
from Gulag import (
|
||||||
GulagException,GulagNotFoundException,GulagBadInputException
|
GulagException,GulagNotFoundException,GulagBadInputException
|
||||||
)
|
)
|
||||||
|
from GulagUtils import whoami
|
||||||
|
|
||||||
class GulagResource(Resource):
|
class GulagResource(Resource):
|
||||||
gulag = None
|
gulag = None
|
||||||
@ -39,7 +40,7 @@ class ResMailboxes(GulagResource):
|
|||||||
try:
|
try:
|
||||||
return self.gulag.get_mailboxes()
|
return self.gulag.get_mailboxes()
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResMailbox(GulagResource):
|
class ResMailbox(GulagResource):
|
||||||
def get(self,id):
|
def get(self,id):
|
||||||
@ -56,9 +57,9 @@ class ResQuarMails(GulagResource):
|
|||||||
try:
|
try:
|
||||||
return self.gulag.get_quarmails(args)
|
return self.gulag.get_quarmails(args)
|
||||||
except GulagBadInputException as e:
|
except GulagBadInputException as e:
|
||||||
abort(400, message=e.message)
|
abort(400, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResQuarMail(GulagResource):
|
class ResQuarMail(GulagResource):
|
||||||
def get(self,quarmail_id):
|
def get(self,quarmail_id):
|
||||||
@ -68,20 +69,33 @@ class ResQuarMail(GulagResource):
|
|||||||
args['rfc822_message'] = True
|
args['rfc822_message'] = True
|
||||||
return self.gulag.get_quarmail(args)
|
return self.gulag.get_quarmail(args)
|
||||||
except GulagNotFoundException as e:
|
except GulagNotFoundException as e:
|
||||||
abort(404, message=e.message)
|
abort(404, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
def delete(self,quarmail_id):
|
def patch(self,quarmail_id):
|
||||||
pass
|
try:
|
||||||
|
args = json.loads(request.get_data(as_text=True))
|
||||||
|
args['id'] = quarmail_id
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
abort(400, message=whoami(self) + "Invalid JSON: " + e.msg)
|
||||||
|
try:
|
||||||
|
self.gulag.modify_quarmail(args)
|
||||||
|
return Response(response=None,status=204,mimetype=None)
|
||||||
|
except GulagBadInputException as e:
|
||||||
|
abort(400, message=whoami(self)+e.message)
|
||||||
|
except GulagNotFoundException as e:
|
||||||
|
abort(404, message=whoami(self)+e.message)
|
||||||
|
except GulagException as e:
|
||||||
|
abort(500, message=whoami(self)+e.message)
|
||||||
def delete(self,quarmail_id):
|
def delete(self,quarmail_id):
|
||||||
args = {"quarmail_id": quarmail_id}
|
args = {"quarmail_id": quarmail_id}
|
||||||
try:
|
try:
|
||||||
self.gulag.delete_quarmail(args)
|
self.gulag.delete_quarmail(args)
|
||||||
return Response(response=None,status=202,mimetype=None)
|
return Response(response=None,status=202,mimetype=None)
|
||||||
except GulagNotFoundException as e:
|
except GulagNotFoundException as e:
|
||||||
abort(404, message=e.message)
|
abort(404, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResQuarMailRelease(GulagResource):
|
class ResQuarMailRelease(GulagResource):
|
||||||
def get(self,quarmail_id):
|
def get(self,quarmail_id):
|
||||||
@ -91,9 +105,9 @@ class ResQuarMailRelease(GulagResource):
|
|||||||
try:
|
try:
|
||||||
return self.gulag.release_quarmail(args)
|
return self.gulag.release_quarmail(args)
|
||||||
except GulagNotFoundException as e:
|
except GulagNotFoundException as e:
|
||||||
abort(404, message=e.message)
|
abort(404, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResQuarMailBounce(GulagResource):
|
class ResQuarMailBounce(GulagResource):
|
||||||
def get(self,quarmail_id):
|
def get(self,quarmail_id):
|
||||||
@ -103,9 +117,9 @@ class ResQuarMailBounce(GulagResource):
|
|||||||
try:
|
try:
|
||||||
return self.gulag.bounce_quarmail(args)
|
return self.gulag.bounce_quarmail(args)
|
||||||
except GulagNotFoundException as e:
|
except GulagNotFoundException as e:
|
||||||
abort(404, message=e.message)
|
abort(404, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResQuarMailAttachments(GulagResource):
|
class ResQuarMailAttachments(GulagResource):
|
||||||
def get(self,quarmail_id):
|
def get(self,quarmail_id):
|
||||||
@ -115,7 +129,7 @@ class ResQuarMailAttachments(GulagResource):
|
|||||||
try:
|
try:
|
||||||
return self.gulag.get_quarmail_attachments(args)
|
return self.gulag.get_quarmail_attachments(args)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResQuarMailAttachment(GulagResource):
|
class ResQuarMailAttachment(GulagResource):
|
||||||
def get(self,quarmail_id,attachment_id):
|
def get(self,quarmail_id,attachment_id):
|
||||||
@ -128,9 +142,9 @@ class ResQuarMailAttachment(GulagResource):
|
|||||||
try:
|
try:
|
||||||
return self.gulag.get_quarmail_attachment(args)
|
return self.gulag.get_quarmail_attachment(args)
|
||||||
except GulagNotFoundException as e:
|
except GulagNotFoundException as e:
|
||||||
abort(404, message=e.message)
|
abort(404, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResQuarMailURIs(GulagResource):
|
class ResQuarMailURIs(GulagResource):
|
||||||
def get(self,quarmail_id):
|
def get(self,quarmail_id):
|
||||||
@ -142,7 +156,7 @@ class ResQuarMailURIs(GulagResource):
|
|||||||
try:
|
try:
|
||||||
return self.gulag.get_quarmail_uris(args)
|
return self.gulag.get_quarmail_uris(args)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResQuarMailURI(GulagResource):
|
class ResQuarMailURI(GulagResource):
|
||||||
def get(self,quarmail_id,uri_id):
|
def get(self,quarmail_id,uri_id):
|
||||||
@ -153,9 +167,9 @@ class ResQuarMailURI(GulagResource):
|
|||||||
try:
|
try:
|
||||||
return self.gulag.get_quarmail_uri(args)
|
return self.gulag.get_quarmail_uri(args)
|
||||||
except GulagNotFoundException as e:
|
except GulagNotFoundException as e:
|
||||||
abort(404, message=e.message)
|
abort(404, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResAttachments(GulagResource):
|
class ResAttachments(GulagResource):
|
||||||
def get(self):
|
def get(self):
|
||||||
@ -167,9 +181,9 @@ class ResAttachment(GulagResource):
|
|||||||
try:
|
try:
|
||||||
return self.gulag.get_attachment(args)
|
return self.gulag.get_attachment(args)
|
||||||
except GulagNotFoundException as e:
|
except GulagNotFoundException as e:
|
||||||
abort(404, message=e.message)
|
abort(404, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResRspamd2Mailbox(GulagResource):
|
class ResRspamd2Mailbox(GulagResource):
|
||||||
def post(self,mailbox_id):
|
def post(self,mailbox_id):
|
||||||
@ -181,11 +195,11 @@ class ResRspamd2Mailbox(GulagResource):
|
|||||||
})
|
})
|
||||||
return {}
|
return {}
|
||||||
except GulagNotFoundException as e:
|
except GulagNotFoundException as e:
|
||||||
abort(404, message=e.message)
|
abort(404, message=whoami(self)+e.message)
|
||||||
except GulagBadInputException as e:
|
except GulagBadInputException as e:
|
||||||
abort(400, message=e.message)
|
abort(400, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|
||||||
class ResMailradar2Mailbox(GulagResource):
|
class ResMailradar2Mailbox(GulagResource):
|
||||||
def post(self,mailbox_id):
|
def post(self,mailbox_id):
|
||||||
@ -197,8 +211,8 @@ class ResMailradar2Mailbox(GulagResource):
|
|||||||
})
|
})
|
||||||
return {}
|
return {}
|
||||||
except GulagNotFoundException as e:
|
except GulagNotFoundException as e:
|
||||||
abort(404, message=e.message)
|
abort(404, message=whoami(self)+e.message)
|
||||||
except GulagBadInputException as e:
|
except GulagBadInputException as e:
|
||||||
abort(400, message=e.message)
|
abort(400, message=whoami(self)+e.message)
|
||||||
except GulagException as e:
|
except GulagException as e:
|
||||||
abort(500, message=e.message)
|
abort(500, message=whoami(self)+e.message)
|
||||||
|
|||||||
@ -2,6 +2,9 @@ ARG http_proxy
|
|||||||
ARG https_proxy
|
ARG https_proxy
|
||||||
FROM debian
|
FROM debian
|
||||||
RUN apt update && \
|
RUN apt update && \
|
||||||
apt -yq --no-install-recommends install procps net-tools mariadb-server mariadb-client
|
apt -yq --no-install-recommends install procps net-tools \
|
||||||
|
mariadb-server mariadb-client \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
COPY db/gulag.sql /.
|
COPY db/gulag.sql /.
|
||||||
CMD ["/usr/bin/mysqld_safe"]
|
CMD ["/usr/bin/mysqld_safe"]
|
||||||
|
|||||||
@ -14,7 +14,9 @@ RUN env; set -ex ; \
|
|||||||
uwsgi uwsgi-plugin-python3 procps net-tools \
|
uwsgi uwsgi-plugin-python3 procps net-tools \
|
||||||
python3-pip libmagic1 python3-ssdeep \
|
python3-pip libmagic1 python3-ssdeep \
|
||||||
&& pip3 install python-magic \
|
&& pip3 install python-magic \
|
||||||
&& /bin/mkdir /config /socket /app
|
&& /bin/mkdir /config /socket /app \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY app/*.py /app/
|
COPY app/*.py /app/
|
||||||
|
|
||||||
|
|||||||
@ -103,6 +103,29 @@ paths:
|
|||||||
description: not found
|
description: not found
|
||||||
500:
|
500:
|
||||||
description: server error
|
description: server error
|
||||||
|
patch:
|
||||||
|
summary: modifies a quarantined email
|
||||||
|
operationId: modify_quarmail
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- in: path
|
||||||
|
name: quarmail_id
|
||||||
|
description: unique id of quarantined email
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
- in: body
|
||||||
|
name: quarmail
|
||||||
|
description: quarmail fields to modify.
|
||||||
|
schema:
|
||||||
|
$ref: "#/definitions/QuarMail"
|
||||||
|
responses:
|
||||||
|
202:
|
||||||
|
description: quarantined email deleted
|
||||||
|
404:
|
||||||
|
description: not found
|
||||||
|
500:
|
||||||
|
description: server error
|
||||||
delete:
|
delete:
|
||||||
summary: deletes a quarantined email
|
summary: deletes a quarantined email
|
||||||
operationId: delete_quarmail
|
operationId: delete_quarmail
|
||||||
@ -121,7 +144,6 @@ paths:
|
|||||||
description: not found
|
description: not found
|
||||||
500:
|
500:
|
||||||
description: server error
|
description: server error
|
||||||
|
|
||||||
/quarmails/{quarmail_id}/attachments:
|
/quarmails/{quarmail_id}/attachments:
|
||||||
get:
|
get:
|
||||||
summary: retrieves meta data of all attachments of a quarantined email by quarmail_id
|
summary: retrieves meta data of all attachments of a quarantined email by quarmail_id
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user