No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

86 líneas
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