alias.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. from flask import g
  2. from flask import jsonify, request
  3. from flask_cors import cross_origin
  4. from app.api.base import api_bp, verify_api_key
  5. from app.dashboard.views.alias_log import get_alias_log
  6. from app.dashboard.views.index import get_alias_info, AliasInfo
  7. from app.extensions import db
  8. from app.models import GenEmail
  9. @api_bp.route("/aliases")
  10. @cross_origin()
  11. @verify_api_key
  12. def get_aliases():
  13. """
  14. Get aliases
  15. Input:
  16. page_id: in query
  17. Output:
  18. - aliases: list of alias:
  19. - id
  20. - email
  21. - creation_date
  22. - creation_timestamp
  23. - nb_forward
  24. - nb_block
  25. - nb_reply
  26. """
  27. user = g.user
  28. try:
  29. page_id = int(request.args.get("page_id"))
  30. except (ValueError, TypeError):
  31. return jsonify(error="page_id must be provided in request query"), 400
  32. aliases: [AliasInfo] = get_alias_info(user, page_id=page_id)
  33. return (
  34. jsonify(
  35. aliases=[
  36. {
  37. "id": alias.id,
  38. "email": alias.gen_email.email,
  39. "creation_date": alias.gen_email.created_at.format(),
  40. "creation_timestamp": alias.gen_email.created_at.timestamp,
  41. "nb_forward": alias.nb_forward,
  42. "nb_block": alias.nb_blocked,
  43. "nb_reply": alias.nb_reply,
  44. "enabled": alias.gen_email.enabled,
  45. }
  46. for alias in aliases
  47. ]
  48. ),
  49. 200,
  50. )
  51. @api_bp.route("/aliases/<int:alias_id>", methods=["DELETE"])
  52. @cross_origin()
  53. @verify_api_key
  54. def delete_alias(alias_id):
  55. """
  56. Delete alias
  57. Input:
  58. alias_id: in url
  59. Output:
  60. 200 if deleted successfully
  61. """
  62. user = g.user
  63. gen_email = GenEmail.get(alias_id)
  64. if gen_email.user_id != user.id:
  65. return jsonify(error="Forbidden"), 403
  66. GenEmail.delete(alias_id)
  67. db.session.commit()
  68. return jsonify(deleted=True), 200
  69. @api_bp.route("/aliases/<int:alias_id>/toggle", methods=["POST"])
  70. @cross_origin()
  71. @verify_api_key
  72. def toggle_alias(alias_id):
  73. """
  74. Enable/disable alias
  75. Input:
  76. alias_id: in url
  77. Output:
  78. 200 along with new status:
  79. - enabled
  80. """
  81. user = g.user
  82. gen_email: GenEmail = GenEmail.get(alias_id)
  83. if gen_email.user_id != user.id:
  84. return jsonify(error="Forbidden"), 403
  85. gen_email.enabled = not gen_email.enabled
  86. db.session.commit()
  87. return jsonify(enabled=gen_email.enabled), 200
  88. @api_bp.route("/aliases/<int:alias_id>/activities")
  89. @cross_origin()
  90. @verify_api_key
  91. def get_alias_activities(alias_id):
  92. """
  93. Get aliases
  94. Input:
  95. page_id: in query
  96. Output:
  97. - activities: list of activity:
  98. - from
  99. - to
  100. - timestamp
  101. - action: forward|reply|block
  102. """
  103. user = g.user
  104. try:
  105. page_id = int(request.args.get("page_id"))
  106. except (ValueError, TypeError):
  107. return jsonify(error="page_id must be provided in request query"), 400
  108. gen_email: GenEmail = GenEmail.get(alias_id)
  109. if gen_email.user_id != user.id:
  110. return jsonify(error="Forbidden"), 403
  111. alias_logs = get_alias_log(gen_email, page_id)
  112. activities = []
  113. for alias_log in alias_logs:
  114. activity = {"timestamp": alias_log.when.timestamp}
  115. if alias_log.is_reply:
  116. activity["from"] = alias_log.alias
  117. activity["to"] = alias_log.website_from or alias_log.website_email
  118. activity["action"] = "reply"
  119. else:
  120. activity["to"] = alias_log.alias
  121. activity["from"] = alias_log.website_from or alias_log.website_email
  122. if alias_log.bounced:
  123. activity["action"] = "bounced"
  124. elif alias_log.blocked:
  125. activity["action"] = "block"
  126. else:
  127. activity["action"] = "forward"
  128. activities.append(activity)
  129. return (jsonify(activities=activities), 200)