blob: 3840e781b4c03dc0fe40a0a11332dd2e3b93e7ed [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
55 if not frappe.db.exists("Mode of Payment", gateway) and payment_gateway_account:
56 mode_of_payment = frappe.get_doc({
57 "doctype": "Mode of Payment",
58 "mode_of_payment": gateway,
59 "enabled": 1,
Mangesh-Khairnar1bef6a52020-10-04 13:01:11 +053060 "type": payment_type,
61 "accounts": [{
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053062 "doctype": "Mode of Payment Account",
63 "company": get_default_company(),
64 "default_account": payment_gateway_account
Mangesh-Khairnar1bef6a52020-10-04 13:01:11 +053065 }]
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053066 })
jbienesdev1c9410e2020-07-13 16:25:09 +080067 mode_of_payment.insert(ignore_permissions=True)
68
69def get_tracking_url(carrier, tracking_number):
70 # Return the formatted Tracking URL.
71 tracking_url = ''
72 url_reference = frappe.get_value('Parcel Service', carrier, 'url_reference')
73 if url_reference:
74 tracking_url = frappe.render_template(url_reference, {'tracking_number': tracking_number})
jbienesdev1c9410e2020-07-13 16:25:09 +080075 return tracking_url