alias.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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.index import get_alias_info, AliasInfo
  6. from app.extensions import db
  7. from app.models import GenEmail
  8. @api_bp.route("/aliases")
  9. @cross_origin()
  10. @verify_api_key
  11. def get_aliases():
  12. """
  13. Get aliases
  14. Input:
  15. page_id: in query
  16. Output:
  17. - aliases: list of alias:
  18. - id
  19. - email
  20. - creation_date
  21. - creation_timestamp
  22. - nb_forward
  23. - nb_block
  24. - nb_reply
  25. """
  26. user = g.user
  27. try:
  28. page_id = int(request.args.get("page_id"))
  29. except (ValueError, TypeError):
  30. return jsonify(error="page_id must be provided in request query"), 400
  31. aliases: [AliasInfo] = get_alias_info(user.id, page_id=page_id)
  32. return (
  33. jsonify(
  34. aliases=[
  35. {
  36. "id": alias.id,
  37. "email": alias.gen_email.email,
  38. "creation_date": alias.gen_email.created_at.format(),
  39. "creation_timestamp": alias.gen_email.created_at.timestamp,
  40. "nb_forward": alias.nb_forward,
  41. "nb_block": alias.nb_blocked,
  42. "nb_reply": alias.nb_reply,
  43. "enabled": alias.gen_email.enabled,
  44. }
  45. for alias in aliases
  46. ]
  47. ),
  48. 200,
  49. )
  50. @api_bp.route("/aliases/<int:alias_id>", methods=["DELETE"])
  51. @cross_origin()
  52. @verify_api_key
  53. def delete_alias(alias_id):
  54. """
  55. Delete alias
  56. Input:
  57. alias_id: in url
  58. Output:
  59. 200 if deleted successfully
  60. """
  61. user = g.user
  62. gen_email = GenEmail.get(alias_id)
  63. if gen_email.user_id != user.id:
  64. return jsonify(error="Forbidden"), 403
  65. GenEmail.delete(alias_id)
  66. db.session.commit()
  67. return jsonify(deleted=True), 200
  68. @api_bp.route("/aliases/<int:alias_id>/toggle", methods=["POST"])
  69. @cross_origin()
  70. @verify_api_key
  71. def toggle_alias(alias_id):
  72. """
  73. Enable/disable alias
  74. Input:
  75. alias_id: in url
  76. Output:
  77. 200 along with new status:
  78. - enabled
  79. """
  80. user = g.user
  81. gen_email: GenEmail = GenEmail.get(alias_id)
  82. if gen_email.user_id != user.id:
  83. return jsonify(error="Forbidden"), 403
  84. gen_email.enabled = not gen_email.enabled
  85. db.session.commit()
  86. return jsonify(enabled=gen_email.enabled), 200