aboutsummaryrefslogtreecommitdiffstats

import cherrypy

from .db import DBPoolManager
from .types import Site
from .imapplugin import ImapPlugin

class Server():
	def __init__(self,dbpool:DBPoolManager,site:Site,imap:ImapPlugin):
		cherrypy.engine.subscribe("newpage",self.registerpage)
		self.dbpool=dbpool
		self.site=site
		self.imap=imap
	
	def registerpage(self,path,content,regentoken=None):
		with self.dbpool.get_connection() as conn, conn.cursor() as cur:
			cur.execute("CREATE TABLE IF NOT EXISTS pagecache ("
				"path VARCHAR(100) PRIMARY KEY,"
				"content MEDIUMTEXT,"
				"generate VARCHAR(40)"
				")")
			cur.execute("INSERT INTO pagecache VALUES (?,?,?) ON DUPLICATE KEY UPDATE content=?, generate=?",(path,content,regentoken,content,regentoken))
			conn.commit()
	
	def getpage(self,path,**kwargs):
		with self.dbpool.get_connection() as conn, conn.cursor() as cur:
			cur.execute("SELECT content,generate FROM pagecache WHERE path=? LIMIT 1",(path,))
			data=cur.fetchone()
			if not data:
				return
			page,generate=data
			if kwargs:
				results=cherrypy.engine.publish('generate::'+generate,path=path,**kwargs)
				if results:
					return results[0]
			else:
				return page
			

	@cherrypy.expose
	def index(self):
		#import threading
		#cherrypy.log("Listing threads:")
		#for thread in threading.enumerate():
		#	cherrypy.log(repr(thread))
		#cherrypy.log("Threads holding an IMAP connection:")
		#for thread in self.imap.mbpool.holding_threads:
		#	cherrypy.log(repr(thread))
		
		from os import getenv
		raise cherrypy.HTTPRedirect(getenv("ACIT_HOME_REDIRECT","about:blank"),303)
	
	@cherrypy.expose(["style.css"])
	def style(self):
		from .html import style_css
		cherrypy.response.headers["Content-Type"]="text/css"
		return style_css

	@cherrypy.expose
	def default(self,*pathlist,**kwargs):
		from os.path import normpath
		path=normpath("/".join(pathlist))
		page=self.getpage(path,**kwargs)
		if not page:
			from .html import notfound
			cherrypy.response.status=404
			return notfound.format(path=path)
		else:
			return page


class SecureServer():
	def __init__(self,server:Server):
		self.site=server.site
		self.dbpool=server.dbpool
		self.imap=server.imap
	
	@cherrypy.expose
	def index(self):
		return "Secure."
		#raise cherrypy.HTTPRedirect("/",303)