Guest User

Untitled

a guest
Dec 13th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. @app.route('/api/v1/wh/mg/lead/email/delivered', methods=['POST'])
  2. def lead_email_delivered():
  3. """
  4. The lead email delivered webhook.
  5. :return: json
  6. """
  7. if request.method == 'POST':
  8.  
  9. form_data = {
  10. "message_id": request.form.get('Message-Id', None),
  11. "x_mail_gun_sid": request.form.get('X-Mailgun-Sid', None),
  12. "domain": request.form.get('domain', 'email.com'),
  13. "event": request.form.get('event', 'delivered'),
  14. "timestamp": request.form.get('timestamp', None),
  15. "recipient": request.form.get('recipient', None),
  16. "signature": request.form.get('signature', None),
  17. "token": request.form.get('token', None)
  18. }
  19.  
  20. # verify the mailgun token and signature with the api_key
  21. token = form_data['token'].encode('utf-8')
  22. timestamp = form_data['timestamp'].encode('utf-8')
  23. signature = form_data['signature'].encode('utf-8')
  24. mg_recipient = form_data['recipient']
  25. event = form_data['event']
  26.  
  27. if verify(mailgun_api_key, token, timestamp, signature):
  28.  
  29. try:
  30. lead = db_session.query(Lead).filter(
  31. Lead.email_addr == mg_recipient
  32. ).first()
  33.  
  34. if lead:
  35.  
  36. email = lead.email
  37. lead_id = lead.id
  38. event = form_data['event']
  39.  
  40. # set the delivered flags in the database
  41. lead.followup_email_delivered = 1
  42. lead.followup_email_status = event
  43. lead.webhook_last_updated = datetime.now()
  44. db_session.commit()
  45.  
  46. # return a successful response
  47. return jsonify({
  48. "l_id": lead_id,
  49. "email": email,
  50. "event": event,
  51. "status": 'success'}), 202
  52.  
  53. # return 404: no email for recipient email address
  54. else:
  55. resp = {"Error": "Unable to resolve the recipient email address..."}
  56. data = json.dumps(resp)
  57. return Response(data, status=404, mimetype='application/json')
  58.  
  59. # database exception
  60. except exc.SQLAlchemyError as db_err:
  61. resp = {"Database Error": str(db_err)}
  62. data = json.dumps(resp)
  63. return Response(data, status=500, mimetype='application/json')
  64.  
  65. # signature and token verification failed
  66. else:
  67. resp = {"Signature": form_data['signature'], "Token": form_data['token']}
  68. data = json.dumps(resp)
  69. return Response(data, status=409, mimetype='application/json')
  70.  
  71. # method not allowed
  72. else:
  73. resp = {"Message": "Method Not Allowed"}
  74. data = json.dumps(resp)
  75. return Response(data, status=405, mimetype='application/json')
Add Comment
Please, Sign In to add comment