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)