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)
|
||||
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):
|
||||
qm_db = None
|
||||
try:
|
||||
|
||||
@ -278,10 +278,37 @@ class GulagDB:
|
||||
except mariadb.Error as 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):
|
||||
try:
|
||||
cursor = self.conn.cursor()
|
||||
cursor.execute("delete from QuarMails where id=" + str(id))
|
||||
if(cursor.rowcount == 0):
|
||||
raise GulagDBNotFoundException(whoami(self) + "No QuarMails deleted!")
|
||||
cursor.close()
|
||||
return True
|
||||
except mariadb.Error as e:
|
||||
|
||||
@ -4,6 +4,7 @@ import json
|
||||
from Gulag import (
|
||||
GulagException,GulagNotFoundException,GulagBadInputException
|
||||
)
|
||||
from GulagUtils import whoami
|
||||
|
||||
class GulagResource(Resource):
|
||||
gulag = None
|
||||
@ -39,7 +40,7 @@ class ResMailboxes(GulagResource):
|
||||
try:
|
||||
return self.gulag.get_mailboxes()
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResMailbox(GulagResource):
|
||||
def get(self,id):
|
||||
@ -56,9 +57,9 @@ class ResQuarMails(GulagResource):
|
||||
try:
|
||||
return self.gulag.get_quarmails(args)
|
||||
except GulagBadInputException as e:
|
||||
abort(400, message=e.message)
|
||||
abort(400, message=whoami(self)+e.message)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResQuarMail(GulagResource):
|
||||
def get(self,quarmail_id):
|
||||
@ -68,20 +69,33 @@ class ResQuarMail(GulagResource):
|
||||
args['rfc822_message'] = True
|
||||
return self.gulag.get_quarmail(args)
|
||||
except GulagNotFoundException as e:
|
||||
abort(404, message=e.message)
|
||||
abort(404, message=whoami(self)+e.message)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
def delete(self,quarmail_id):
|
||||
pass
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
def patch(self,quarmail_id):
|
||||
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):
|
||||
args = {"quarmail_id": quarmail_id}
|
||||
try:
|
||||
self.gulag.delete_quarmail(args)
|
||||
return Response(response=None,status=202,mimetype=None)
|
||||
except GulagNotFoundException as e:
|
||||
abort(404, message=e.message)
|
||||
abort(404, message=whoami(self)+e.message)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResQuarMailRelease(GulagResource):
|
||||
def get(self,quarmail_id):
|
||||
@ -91,9 +105,9 @@ class ResQuarMailRelease(GulagResource):
|
||||
try:
|
||||
return self.gulag.release_quarmail(args)
|
||||
except GulagNotFoundException as e:
|
||||
abort(404, message=e.message)
|
||||
abort(404, message=whoami(self)+e.message)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResQuarMailBounce(GulagResource):
|
||||
def get(self,quarmail_id):
|
||||
@ -103,9 +117,9 @@ class ResQuarMailBounce(GulagResource):
|
||||
try:
|
||||
return self.gulag.bounce_quarmail(args)
|
||||
except GulagNotFoundException as e:
|
||||
abort(404, message=e.message)
|
||||
abort(404, message=whoami(self)+e.message)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResQuarMailAttachments(GulagResource):
|
||||
def get(self,quarmail_id):
|
||||
@ -115,7 +129,7 @@ class ResQuarMailAttachments(GulagResource):
|
||||
try:
|
||||
return self.gulag.get_quarmail_attachments(args)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResQuarMailAttachment(GulagResource):
|
||||
def get(self,quarmail_id,attachment_id):
|
||||
@ -128,9 +142,9 @@ class ResQuarMailAttachment(GulagResource):
|
||||
try:
|
||||
return self.gulag.get_quarmail_attachment(args)
|
||||
except GulagNotFoundException as e:
|
||||
abort(404, message=e.message)
|
||||
abort(404, message=whoami(self)+e.message)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResQuarMailURIs(GulagResource):
|
||||
def get(self,quarmail_id):
|
||||
@ -142,7 +156,7 @@ class ResQuarMailURIs(GulagResource):
|
||||
try:
|
||||
return self.gulag.get_quarmail_uris(args)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResQuarMailURI(GulagResource):
|
||||
def get(self,quarmail_id,uri_id):
|
||||
@ -153,9 +167,9 @@ class ResQuarMailURI(GulagResource):
|
||||
try:
|
||||
return self.gulag.get_quarmail_uri(args)
|
||||
except GulagNotFoundException as e:
|
||||
abort(404, message=e.message)
|
||||
abort(404, message=whoami(self)+e.message)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResAttachments(GulagResource):
|
||||
def get(self):
|
||||
@ -167,9 +181,9 @@ class ResAttachment(GulagResource):
|
||||
try:
|
||||
return self.gulag.get_attachment(args)
|
||||
except GulagNotFoundException as e:
|
||||
abort(404, message=e.message)
|
||||
abort(404, message=whoami(self)+e.message)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResRspamd2Mailbox(GulagResource):
|
||||
def post(self,mailbox_id):
|
||||
@ -181,11 +195,11 @@ class ResRspamd2Mailbox(GulagResource):
|
||||
})
|
||||
return {}
|
||||
except GulagNotFoundException as e:
|
||||
abort(404, message=e.message)
|
||||
abort(404, message=whoami(self)+e.message)
|
||||
except GulagBadInputException as e:
|
||||
abort(400, message=e.message)
|
||||
abort(400, message=whoami(self)+e.message)
|
||||
except GulagException as e:
|
||||
abort(500, message=e.message)
|
||||
abort(500, message=whoami(self)+e.message)
|
||||
|
||||
class ResMailradar2Mailbox(GulagResource):
|
||||
def post(self,mailbox_id):
|
||||
@ -197,8 +211,8 @@ class ResMailradar2Mailbox(GulagResource):
|
||||
})
|
||||
return {}
|
||||
except GulagNotFoundException as e:
|
||||
abort(404, message=e.message)
|
||||
abort(404, message=whoami(self)+e.message)
|
||||
except GulagBadInputException as e:
|
||||
abort(400, message=e.message)
|
||||
abort(400, message=whoami(self)+e.message)
|
||||
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
|
||||
FROM debian
|
||||
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 /.
|
||||
CMD ["/usr/bin/mysqld_safe"]
|
||||
|
||||
@ -14,7 +14,9 @@ RUN env; set -ex ; \
|
||||
uwsgi uwsgi-plugin-python3 procps net-tools \
|
||||
python3-pip libmagic1 python3-ssdeep \
|
||||
&& 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/
|
||||
|
||||
|
||||
@ -103,6 +103,29 @@ paths:
|
||||
description: not found
|
||||
500:
|
||||
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:
|
||||
summary: deletes a quarantined email
|
||||
operationId: delete_quarmail
|
||||
@ -121,7 +144,6 @@ paths:
|
||||
description: not found
|
||||
500:
|
||||
description: server error
|
||||
|
||||
/quarmails/{quarmail_id}/attachments:
|
||||
get:
|
||||
summary: retrieves meta data of all attachments of a quarantined email by quarmail_id
|
||||
|
||||
Loading…
Reference in New Issue
Block a user