The license.txt file has been replaced with LICENSE for quite a while now. INAL but it didn't seem accurate to say "hey, checkout license.txt although there's no such file". Apart from this, there were inconsistencies in the headers altogether...this change brings consistency.
89 lines
2.8 KiB
Python
89 lines
2.8 KiB
Python
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
|
# License: MIT. See LICENSE
|
|
no_cache = 1
|
|
|
|
import os, re
|
|
import frappe
|
|
from frappe import _
|
|
import frappe.sessions
|
|
from frappe.utils.jinja_globals import is_rtl
|
|
|
|
def get_context(context):
|
|
if frappe.session.user == "Guest":
|
|
frappe.throw(_("Log in to access this page."), frappe.PermissionError)
|
|
elif frappe.db.get_value("User", frappe.session.user, "user_type") == "Website User":
|
|
frappe.throw(_("You are not permitted to access this page."), frappe.PermissionError)
|
|
|
|
hooks = frappe.get_hooks()
|
|
try:
|
|
boot = frappe.sessions.get()
|
|
except Exception as e:
|
|
boot = frappe._dict(status='failed', error = str(e))
|
|
print(frappe.get_traceback())
|
|
|
|
# this needs commit
|
|
csrf_token = frappe.sessions.get_csrf_token()
|
|
|
|
frappe.db.commit()
|
|
|
|
desk_theme = frappe.db.get_value("User", frappe.session.user, "desk_theme")
|
|
|
|
boot_json = frappe.as_json(boot)
|
|
|
|
# remove script tags from boot
|
|
boot_json = re.sub(r"\<script[^<]*\</script\>", "", boot_json)
|
|
|
|
# TODO: Find better fix
|
|
boot_json = re.sub(r"</script\>", "", boot_json)
|
|
|
|
context.update({
|
|
"no_cache": 1,
|
|
"build_version": frappe.utils.get_build_version(),
|
|
"include_js": hooks["app_include_js"],
|
|
"include_css": hooks["app_include_css"],
|
|
"layout_direction": "rtl" if is_rtl() else "ltr",
|
|
"lang": frappe.local.lang,
|
|
"sounds": hooks["sounds"],
|
|
"boot": boot if context.get("for_mobile") else boot_json,
|
|
"desk_theme": desk_theme or "Light",
|
|
"csrf_token": csrf_token,
|
|
"google_analytics_id": frappe.conf.get("google_analytics_id"),
|
|
"google_analytics_anonymize_ip": frappe.conf.get("google_analytics_anonymize_ip"),
|
|
"mixpanel_id": frappe.conf.get("mixpanel_id")
|
|
})
|
|
|
|
return context
|
|
|
|
@frappe.whitelist()
|
|
def get_desk_assets(build_version):
|
|
"""Get desk assets to be loaded for mobile app"""
|
|
data = get_context({"for_mobile": True})
|
|
assets = [{"type": "js", "data": ""}, {"type": "css", "data": ""}]
|
|
|
|
if build_version != data["build_version"]:
|
|
# new build, send assets
|
|
for path in data["include_js"]:
|
|
# assets path shouldn't start with /
|
|
# as it points to different location altogether
|
|
if path.startswith('/assets/'):
|
|
path = path.replace('/assets/', 'assets/')
|
|
try:
|
|
with open(os.path.join(frappe.local.sites_path, path) ,"r") as f:
|
|
assets[0]["data"] = assets[0]["data"] + "\n" + frappe.safe_decode(f.read(), "utf-8")
|
|
except IOError:
|
|
pass
|
|
|
|
for path in data["include_css"]:
|
|
if path.startswith('/assets/'):
|
|
path = path.replace('/assets/', 'assets/')
|
|
try:
|
|
with open(os.path.join(frappe.local.sites_path, path) ,"r") as f:
|
|
assets[1]["data"] = assets[1]["data"] + "\n" + frappe.safe_decode(f.read(), "utf-8")
|
|
except IOError:
|
|
pass
|
|
|
|
return {
|
|
"build_version": data["build_version"],
|
|
"boot": data["boot"],
|
|
"assets": assets
|
|
}
|