blob: caafc0821e110c78fc777c2ae69ca1924a765621 [file] [log] [blame]
Aditya Hasef3c22f32019-01-22 18:22:20 +05301from __future__ import unicode_literals
Saurabhd60c0f22018-05-16 11:33:47 +05302import frappe
3from frappe import _
4import base64, hashlib, hmac
5from six.moves.urllib.parse import urlparse
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +05306from erpnext import get_default_company
Saurabhd60c0f22018-05-16 11:33:47 +05307
8def validate_webhooks_request(doctype, hmac_key, secret_key='secret'):
9 def innerfn(fn):
10 settings = frappe.get_doc(doctype)
11
12 if frappe.request and settings and settings.get(secret_key) and not frappe.flags.in_test:
13 sig = base64.b64encode(
14 hmac.new(
15 settings.get(secret_key).encode('utf8'),
16 frappe.request.data,
17 hashlib.sha256
18 ).digest()
19 )
20
21 if frappe.request.data and \
22 frappe.get_request_header(hmac_key) and \
23 not sig == bytes(frappe.get_request_header(hmac_key).encode()):
24 frappe.throw(_("Unverified Webhook Data"))
25 frappe.set_user(settings.modified_by)
26
27 return fn
28
29 return innerfn
30
Ankush Menate28165e2021-05-07 20:27:51 +053031def get_webhook_address(connector_name, method, exclude_uri=False, force_https=False):
Saurabhd60c0f22018-05-16 11:33:47 +053032 endpoint = "erpnext.erpnext_integrations.connectors.{0}.{1}".format(connector_name, method)
33
34 if exclude_uri:
35 return endpoint
36
37 try:
38 url = frappe.request.url
39 except RuntimeError:
hrwx5aa87432019-09-13 17:04:01 +000040 url = "http://localhost:8000"
Saurabhd60c0f22018-05-16 11:33:47 +053041
Ankush Menate28165e2021-05-07 20:27:51 +053042 url_data = urlparse(url)
43 scheme = "https" if force_https else url_data.scheme
44 netloc = url_data.netloc
45
46 server_url = f"{scheme}://{netloc}/api/method/{endpoint}"
Saurabhd60c0f22018-05-16 11:33:47 +053047
hrwx5aa87432019-09-13 17:04:01 +000048 return server_url
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053049
Mangesh-Khairnar1bef6a52020-10-04 13:01:11 +053050def create_mode_of_payment(gateway, payment_type="General"):
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053051 payment_gateway_account = frappe.db.get_value("Payment Gateway Account", {
52 "payment_gateway": gateway
53 }, ['payment_account'])
54
Ankush Menat4551d7d2021-08-19 13:41:10 +053055 mode_of_payment = frappe.db.exists("Mode of Payment", gateway)
Deepesh Gargb2af6b42021-07-05 13:46:03 +053056 if not mode_of_payment and payment_gateway_account:
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053057 mode_of_payment = frappe.get_doc({
58 "doctype": "Mode of Payment",
59 "mode_of_payment": gateway,
60 "enabled": 1,
Mangesh-Khairnar1bef6a52020-10-04 13:01:11 +053061 "type": payment_type,
62 "accounts": [{
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053063 "doctype": "Mode of Payment Account",
64 "company": get_default_company(),
65 "default_account": payment_gateway_account
Mangesh-Khairnar1bef6a52020-10-04 13:01:11 +053066 }]
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053067 })
jbienesdev1c9410e2020-07-13 16:25:09 +080068 mode_of_payment.insert(ignore_permissions=True)
69
Deepesh Gargb2af6b42021-07-05 13:46:03 +053070 return mode_of_payment
Deepesh Garg3ef394c2021-07-05 14:45:33 +053071 elif mode_of_payment:
Deepesh Gargb2af6b42021-07-05 13:46:03 +053072 return frappe.get_doc("Mode of Payment", mode_of_payment)
73
jbienesdev1c9410e2020-07-13 16:25:09 +080074def get_tracking_url(carrier, tracking_number):
75 # Return the formatted Tracking URL.
76 tracking_url = ''
77 url_reference = frappe.get_value('Parcel Service', carrier, 'url_reference')
78 if url_reference:
79 tracking_url = frappe.render_template(url_reference, {'tracking_number': tracking_number})
jbienesdev1c9410e2020-07-13 16:25:09 +080080 return tracking_url