123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- from flask import g
- from flask import jsonify, request
- from flask_cors import cross_origin
- from app.api.base import api_bp, verify_api_key
- 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
- @api_bp.route("/aliases")
- @cross_origin()
- @verify_api_key
- def get_aliases():
- """
- Get aliases
- Input:
- page_id: in query
- Output:
- - aliases: list of alias:
- - id
- - email
- - creation_date
- - creation_timestamp
- - nb_forward
- - nb_block
- - nb_reply
- """
- 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
- aliases: [AliasInfo] = get_alias_info(user, page_id=page_id)
- return (
- jsonify(
- aliases=[
- {
- "id": alias.id,
- "email": alias.gen_email.email,
- "creation_date": alias.gen_email.created_at.format(),
- "creation_timestamp": alias.gen_email.created_at.timestamp,
- "nb_forward": alias.nb_forward,
- "nb_block": alias.nb_blocked,
- "nb_reply": alias.nb_reply,
- "enabled": alias.gen_email.enabled,
- }
- for alias in aliases
- ]
- ),
- 200,
- )
- @api_bp.route("/aliases/<int:alias_id>", methods=["DELETE"])
- @cross_origin()
- @verify_api_key
- def delete_alias(alias_id):
- """
- Delete alias
- Input:
- alias_id: in url
- Output:
- 200 if deleted successfully
- """
- user = g.user
- gen_email = GenEmail.get(alias_id)
- if gen_email.user_id != user.id:
- return jsonify(error="Forbidden"), 403
- GenEmail.delete(alias_id)
- db.session.commit()
- return jsonify(deleted=True), 200
- @api_bp.route("/aliases/<int:alias_id>/toggle", methods=["POST"])
- @cross_origin()
- @verify_api_key
- def toggle_alias(alias_id):
- """
- Enable/disable alias
- Input:
- alias_id: in url
- Output:
- 200 along with new status:
- - enabled
- """
- user = g.user
- gen_email: GenEmail = GenEmail.get(alias_id)
- if gen_email.user_id != user.id:
- return jsonify(error="Forbidden"), 403
- gen_email.enabled = not gen_email.enabled
- db.session.commit()
- return jsonify(enabled=gen_email.enabled), 200
- @api_bp.route("/aliases/<int:alias_id>/activities")
- @cross_origin()
- @verify_api_key
- def get_alias_activities(alias_id):
- """
- Get aliases
- Input:
- page_id: in query
- Output:
- - activities: list of activity:
- - from
- - to
- - timestamp
- - action: forward|reply|block
- """
- 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
- alias_logs = get_alias_log(gen_email, page_id)
- activities = []
- for alias_log in alias_logs:
- activity = {"timestamp": alias_log.when.timestamp}
- if alias_log.is_reply:
- activity["from"] = alias_log.alias
- activity["to"] = alias_log.website_from or alias_log.website_email
- activity["action"] = "reply"
- else:
- activity["to"] = alias_log.alias
- activity["from"] = alias_log.website_from or alias_log.website_email
- if alias_log.bounced:
- activity["action"] = "bounced"
- elif alias_log.blocked:
- activity["action"] = "block"
- else:
- activity["action"] = "forward"
- activities.append(activity)
- return (jsonify(activities=activities), 200)
|