|
@@ -3,10 +3,11 @@ from flask import jsonify, request
|
|
|
from flask_cors import cross_origin
|
|
|
|
|
|
from app.api.base import api_bp, verify_api_key
|
|
|
+from app.config import PAGE_LIMIT
|
|
|
from app.dashboard.views.alias_log import get_alias_log
|
|
|
from app.dashboard.views.index import get_alias_info, AliasInfo
|
|
|
from app.extensions import db
|
|
|
-from app.models import GenEmail
|
|
|
+from app.models import GenEmail, ForwardEmail, ForwardEmailLog
|
|
|
|
|
|
|
|
|
@api_bp.route("/aliases")
|
|
@@ -157,7 +158,7 @@ def get_alias_activities(alias_id):
|
|
|
|
|
|
activities.append(activity)
|
|
|
|
|
|
- return (jsonify(activities=activities), 200)
|
|
|
+ return jsonify(activities=activities), 200
|
|
|
|
|
|
|
|
|
@api_bp.route("/aliases/<int:alias_id>", methods=["PUT"])
|
|
@@ -189,3 +190,71 @@ def update_alias(alias_id):
|
|
|
db.session.commit()
|
|
|
|
|
|
return jsonify(note=new_note), 200
|
|
|
+
|
|
|
+
|
|
|
+def serialize_forward_email(fe: ForwardEmail) -> dict:
|
|
|
+
|
|
|
+ res = {
|
|
|
+ "creation_date": fe.created_at.format(),
|
|
|
+ "creation_timestamp": fe.created_at.timestamp,
|
|
|
+ "last_email_sent_date": None,
|
|
|
+ "last_email_sent_timestamp": None,
|
|
|
+ "contact": fe.website_from or fe.website_email,
|
|
|
+ "reverse_alias": fe.website_send_to(),
|
|
|
+ }
|
|
|
+
|
|
|
+ fel: ForwardEmailLog = fe.last_reply()
|
|
|
+ if fel:
|
|
|
+ res["last_email_sent_date"] = fel.created_at.format()
|
|
|
+ res["last_email_sent_timestamp"] = fel.created_at.timestamp
|
|
|
+
|
|
|
+ return res
|
|
|
+
|
|
|
+
|
|
|
+def get_alias_contacts(gen_email, page_id: int) -> [dict]:
|
|
|
+ q = (
|
|
|
+ ForwardEmail.query.filter_by(gen_email_id=gen_email.id)
|
|
|
+ .order_by(ForwardEmail.id.desc())
|
|
|
+ .limit(PAGE_LIMIT)
|
|
|
+ .offset(page_id * PAGE_LIMIT)
|
|
|
+ )
|
|
|
+
|
|
|
+ res = []
|
|
|
+ for fe in q.all():
|
|
|
+ res.append(serialize_forward_email(fe))
|
|
|
+
|
|
|
+ return res
|
|
|
+
|
|
|
+
|
|
|
+@api_bp.route("/aliases/<int:alias_id>/contacts")
|
|
|
+@cross_origin()
|
|
|
+@verify_api_key
|
|
|
+def get_alias_contacts_route(alias_id):
|
|
|
+ """
|
|
|
+ Get alias contacts
|
|
|
+ Input:
|
|
|
+ page_id: in query
|
|
|
+ Output:
|
|
|
+ - contacts: list of contacts:
|
|
|
+ - creation_date
|
|
|
+ - creation_timestamp
|
|
|
+ - last_email_sent_date
|
|
|
+ - last_email_sent_timestamp
|
|
|
+ - contact
|
|
|
+ - reverse_alias
|
|
|
+
|
|
|
+ """
|
|
|
+ user = g.user
|
|
|
+ try:
|
|
|
+ page_id = int(request.args.get("page_id"))
|
|
|
+ except (ValueError, TypeError):
|
|
|
+ return jsonify(error="page_id must be provided in request query"), 400
|
|
|
+
|
|
|
+ gen_email: GenEmail = GenEmail.get(alias_id)
|
|
|
+
|
|
|
+ if gen_email.user_id != user.id:
|
|
|
+ return jsonify(error="Forbidden"), 403
|
|
|
+
|
|
|
+ contacts = get_alias_contacts(gen_email, page_id)
|
|
|
+
|
|
|
+ return jsonify(contacts=contacts), 200
|