blob: 362f6cf88eee8e26e3b42b5f0fedc41e89b9e863 [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
31def get_webhook_address(connector_name, method, exclude_uri=False):
32 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
42 server_url = '{uri.scheme}://{uri.netloc}/api/method/{endpoint}'.format(uri=urlparse(url), endpoint=endpoint)
43
hrwx5aa87432019-09-13 17:04:01 +000044 return server_url
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053045
Mangesh-Khairnar1bef6a52020-10-04 13:01:11 +053046def create_mode_of_payment(gateway, payment_type="General"):
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053047 payment_gateway_account = frappe.db.get_value("Payment Gateway Account", {
48 "payment_gateway": gateway
49 }, ['payment_account'])
50
51 if not frappe.db.exists("Mode of Payment", gateway) and payment_gateway_account:
52 mode_of_payment = frappe.get_doc({
53 "doctype": "Mode of Payment",
54 "mode_of_payment": gateway,
55 "enabled": 1,
Mangesh-Khairnar1bef6a52020-10-04 13:01:11 +053056 "type": payment_type,
57 "accounts": [{
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053058 "doctype": "Mode of Payment Account",
59 "company": get_default_company(),
60 "default_account": payment_gateway_account
Mangesh-Khairnar1bef6a52020-10-04 13:01:11 +053061 }]
Mangesh-Khairnar27f81e02020-09-15 14:38:06 +053062 })
jbienesdev1c9410e2020-07-13 16:25:09 +080063 mode_of_payment.insert(ignore_permissions=True)
64
65def get_tracking_url(carrier, tracking_number):
66 # Return the formatted Tracking URL.
67 tracking_url = ''
68 url_reference = frappe.get_value('Parcel Service', carrier, 'url_reference')
69 if url_reference:
70 tracking_url = frappe.render_template(url_reference, {'tracking_number': tracking_number})
jbienesdev1c9410e2020-07-13 16:25:09 +080071 return tracking_url