Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

86 wiersze
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