You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

86 regels
2.3 KiB

  1. import base64
  2. import hashlib
  3. import hmac
  4. from urllib.parse import urlparse
  5. import frappe
  6. from frappe import _
  7. from erpnext import get_default_company
  8. def validate_webhooks_request(doctype, hmac_key, secret_key="secret"):
  9. def innerfn(fn):
  10. settings = frappe.get_doc(doctype)
  11. if frappe.request and settings and settings.get(secret_key) and not frappe.flags.in_test:
  12. sig = base64.b64encode(
  13. hmac.new(settings.get(secret_key).encode("utf8"), frappe.request.data, hashlib.sha256).digest()
  14. )
  15. if frappe.request.data and not sig == bytes(frappe.get_request_header(hmac_key).encode()):
  16. frappe.throw(_("Unverified Webhook Data"))
  17. frappe.set_user(settings.modified_by)
  18. return fn
  19. return innerfn
  20. def get_webhook_address(connector_name, method, exclude_uri=False, force_https=False):
  21. endpoint = "erpnext.erpnext_integrations.connectors.{0}.{1}".format(connector_name, method)
  22. if exclude_uri:
  23. return endpoint
  24. try:
  25. url = frappe.request.url
  26. except RuntimeError:
  27. url = "http://localhost:8000"
  28. url_data = urlparse(url)
  29. scheme = "https" if force_https else url_data.scheme
  30. netloc = url_data.netloc
  31. server_url = f"{scheme}://{netloc}/api/method/{endpoint}"
  32. return server_url
  33. def create_mode_of_payment(gateway, payment_type="General"):
  34. payment_gateway_account = frappe.db.get_value(
  35. "Payment Gateway Account", {"payment_gateway": gateway}, ["payment_account"]
  36. )
  37. mode_of_payment = frappe.db.exists("Mode of Payment", gateway)
  38. if not mode_of_payment and payment_gateway_account:
  39. mode_of_payment = frappe.get_doc(
  40. {
  41. "doctype": "Mode of Payment",
  42. "mode_of_payment": gateway,
  43. "enabled": 1,
  44. "type": payment_type,
  45. "accounts": [
  46. {
  47. "doctype": "Mode of Payment Account",
  48. "company": get_default_company(),
  49. "default_account": payment_gateway_account,
  50. }
  51. ],
  52. }
  53. )
  54. mode_of_payment.insert(ignore_permissions=True)
  55. return mode_of_payment
  56. elif mode_of_payment:
  57. return frappe.get_doc("Mode of Payment", mode_of_payment)
  58. def get_tracking_url(carrier, tracking_number):
  59. # Return the formatted Tracking URL.
  60. tracking_url = ""
  61. url_reference = frappe.get_value("Parcel Service", carrier, "url_reference")
  62. if url_reference:
  63. tracking_url = frappe.render_template(url_reference, {"tracking_number": tracking_number})
  64. return tracking_url