Пример #1
0
def static_html(name):
    if name in aliases: redirect(aliases[name])
    linkheaders = ["</style.css>; rel=preload; as=style"]
    keys = remove_identical(FormsDict.decode(request.query))

    adminmode = request.cookies.get("adminmode") == "true" and auth.check(
        request)

    clock = Clock()
    clock.start()

    LOCAL_CONTEXT = {
        "adminmode": adminmode,
        "apikey": request.cookies.get("apikey") if adminmode else None,
        "_urikeys": keys,  #temporary!
    }
    lc = LOCAL_CONTEXT
    lc["filterkeys"], lc["limitkeys"], lc["delimitkeys"], lc["amountkeys"], lc[
        "specialkeys"] = uri_to_internal(keys)

    template = jinja_environment.get_template(name + '.jinja')
    try:
        res = template.render(**LOCAL_CONTEXT)
    except ValueError as e:
        abort(404, "Entity does not exist")

    if settings.get_settings("DEV_MODE"): jinja_environment.cache.clear()

    log("Generated page {name} in {time:.5f}s".format(name=name,
                                                      time=clock.stop()),
        module="debug_performance")
    return clean_html(res)
Пример #2
0
	def start():
		if auth.check(request):
			result = pyhpfile(os.path.join(WEBFOLDER,"main.pyhp"),{"db":db})
		else:
			#result = pyhpfile("web/login.pyhp",{"db":db,"auth":auth})
			result = auth.get_login_page(stylesheets=["/style.css"])

		return result
Пример #3
0
def customerror(error):
	errorcode = error.status_code
	errordesc = error.status
	traceback = error.traceback
	traceback = traceback.strip() if traceback is not None else "No Traceback"
	adminmode = request.cookies.get("adminmode") == "true" and auth.check(request)

	template = jinja_environment.get_template('error.jinja')
	res = template.render(errorcode=errorcode,errordesc=errordesc,traceback=traceback,adminmode=adminmode)
	return res
Пример #4
0
def static_html(name):
	if name in aliases: redirect(aliases[name])
	linkheaders = ["</style.css>; rel=preload; as=style"]
	keys = remove_identical(FormsDict.decode(request.query))


	pyhp_file = os.path.exists(pthjoin(WEBFOLDER,"pyhp",name + ".pyhp"))
	html_file = os.path.exists(pthjoin(WEBFOLDER,name + ".html"))
	jinja_file = os.path.exists(pthjoin(WEBFOLDER,"jinja",name + ".jinja"))
	pyhp_pref = settings.get_settings("USE_PYHP")
	jinja_pref = settings.get_settings("USE_JINJA")

	adminmode = request.cookies.get("adminmode") == "true" and auth.check(request)

	clock = Clock()
	clock.start()

	# if a jinja file exists, use this
	if (jinja_file and jinja_pref) or (jinja_file and not html_file and not pyhp_file):
		LOCAL_CONTEXT = {
			"adminmode":adminmode,
			"apikey":request.cookies.get("apikey") if adminmode else None,
			"_urikeys":keys, #temporary!
		}
		LOCAL_CONTEXT["filterkeys"], LOCAL_CONTEXT["limitkeys"], LOCAL_CONTEXT["delimitkeys"], LOCAL_CONTEXT["amountkeys"] = uri_to_internal(keys)

		template = jinjaenv.get_template(name + '.jinja')

		res = template.render(**LOCAL_CONTEXT)
		log("Generated page {name} in {time:.5f}s (Jinja)".format(name=name,time=clock.stop()),module="debug")
		return res

	# if a pyhp file exists, use this
	elif (pyhp_file and pyhp_pref) or (pyhp_file and not html_file):

		#things we expose to the pyhp pages
		environ = {
			"adminmode":adminmode,
			"apikey":request.cookies.get("apikey") if adminmode else None,
			# maloja
			"db": database,
			"htmlmodules": htmlmodules,
			"htmlgenerators": htmlgenerators,
			"malojatime": malojatime,
			"utilities": utilities,
			"urihandler": urihandler,
			"settings": settings.get_settings,
			# external
			"urllib": urllib
		}
		# request
		environ["filterkeys"], environ["limitkeys"], environ["delimitkeys"], environ["amountkeys"] = uri_to_internal(keys)
		environ["_urikeys"] = keys #temporary!

		#response.set_header("Content-Type","application/xhtml+xml")
		res = pyhpfile(pthjoin(WEBFOLDER,"pyhp",name + ".pyhp"),environ)
		log("Generated page {name} in {time:.5f}s (PYHP)".format(name=name,time=clock.stop()),module="debug")
		return res

	# if not, use the old way
	else:
		try:
			with open(pthjoin(WEBFOLDER,name + ".html")) as htmlfile:
				html = htmlfile.read()

			# apply global substitutions
			with open(pthjoin(WEBFOLDER,"common/footer.html")) as footerfile:
				footerhtml = footerfile.read()
			with open(pthjoin(WEBFOLDER,"common/header.html")) as headerfile:
				headerhtml = headerfile.read()
			html = html.replace("</body>",footerhtml + "</body>").replace("</head>",headerhtml + "</head>")


			# If a python file exists, it provides the replacement dict for the html file
			if os.path.exists(pthjoin(WEBFOLDER,name + ".py")):
				#txt_keys = SourceFileLoader(name,"web/" + name + ".py").load_module().replacedict(keys,DATABASE_PORT)
				try:
					module = importlib.import_module(".web." + name,package="maloja")
					txt_keys,resources = module.instructions(keys)
				except Exception as e:
					log("Error in website generation: " + str(sys.exc_info()),module="error")
					raise

				# add headers for server push
				for resource in resources:
					if all(ord(c) < 128 for c in resource["file"]):
						# we can only put ascii stuff in the http header
						linkheaders.append("<" + resource["file"] + ">; rel=preload; as=" + resource["type"])

				# apply key substitutions
				for k in txt_keys:
					if isinstance(txt_keys[k],list):
						# if list, we replace each occurence with the next item
						for element in txt_keys[k]:
							html = html.replace(k,element,1)
					else:
						html = html.replace(k,txt_keys[k])


			response.set_header("Link",",".join(linkheaders))
			log("Generated page {name} in {time:.5f}s (Python+HTML)".format(name=name,time=clock.stop()),module="debug")
			return html

		except:
			abort(404, "Page does not exist")