Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 

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