further work on the new cherrypy driven web interface. clicking onhelp already works ;) we have to decide whether we want to seperate that monstrous contitional statement in cryptobox.pl into seperate functions.
This commit is contained in:
parent
64acd36411
commit
4bcd42d615
2 changed files with 185 additions and 18 deletions
|
@ -1,25 +1,179 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import cherrypy, neo_cgi, neo_util, neo_cs, os
|
import os,sys
|
||||||
|
import CryptoBox
|
||||||
|
try:
|
||||||
|
import cherrypy
|
||||||
|
except:
|
||||||
|
print "could not import cherrypy module! Try apt-get install python-cherrypy."
|
||||||
|
sys.exit(1)
|
||||||
|
try:
|
||||||
|
import neo_cgi, neo_util, neo_cs
|
||||||
|
except:
|
||||||
|
print "could not import clearsilver modules! Try apt-get install python-clearsilver."
|
||||||
|
|
||||||
|
|
||||||
|
class clearsilver:
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def render(self,cs_path,settings = {},hdf_path = ""):
|
||||||
|
"""
|
||||||
|
render a clearsilver template and return the result.
|
||||||
|
gets:
|
||||||
|
- path to clearsilver template
|
||||||
|
- dictionary with settings (optional)
|
||||||
|
- path to hdf dataset (optional)
|
||||||
|
"""
|
||||||
|
|
||||||
class RunCmd:
|
|
||||||
def index(self):
|
|
||||||
print "ooooooooooooooooooooooooooooooo"
|
|
||||||
print os.path.abspath("./")
|
|
||||||
hdf=neo_util.HDF()
|
hdf=neo_util.HDF()
|
||||||
#hdf.setValue("hdf.loadpaths.0","/my/path")
|
if hdf_path != "":
|
||||||
hdf.readFile("../lang/de.hdf")
|
hdf.readFile(hdf_path)
|
||||||
hdf.setValue("Settings.TemplateDir","../templates")
|
for key in settings.keys():
|
||||||
hdf.setValue("Settings.Stylesheet","cryptobox.css")
|
hdf.setValue(key,str(settings[key]))
|
||||||
hdf.setValue("Data.Action","show_status")
|
|
||||||
cs= neo_cs.CS(hdf)
|
cs= neo_cs.CS(hdf)
|
||||||
cs.parseFile("../templates/main.cs")
|
cs.parseFile(cs_path)
|
||||||
return cs.render()
|
return cs.render()
|
||||||
|
|
||||||
|
|
||||||
|
class CryptoBoxSite(CryptoBox.CryptoBoxProps):
|
||||||
|
def index(self,action="show_status",page="",weblang="",device="", type=""):
|
||||||
|
|
||||||
|
#PROPOSAL:
|
||||||
|
#cherrypy could create nice paths like http://crypto.box/doc/,
|
||||||
|
#but that would require an update of the links in the templates.
|
||||||
|
#is the style worth it?
|
||||||
|
|
||||||
|
|
||||||
|
#sanitize input
|
||||||
|
page = self.sanitize_input(page)
|
||||||
|
action = self.sanitize_input(action)
|
||||||
|
device = self.sanitize_input(device)
|
||||||
|
type = self.sanitize_input(type)
|
||||||
|
#setting settings ;)
|
||||||
|
settings={}
|
||||||
|
TemplateDir = self.cbxPrefs["Settings"]["TemplateDir"]
|
||||||
|
settings["Settings.TemplateDir"] = TemplateDir
|
||||||
|
settings["Settings.Stylesheet"] = self.cbxPrefs["Settings"]["Stylesheet"]
|
||||||
|
LangDir = self.cbxPrefs["Settings"]["LangDir"]
|
||||||
|
settings["Settings.LangDir"] = LangDir
|
||||||
|
Language = self.cbxPrefs["Settings"]["Language"]
|
||||||
|
settings["Settings.DocDir"] = self.cbxPrefs["Settings"]["DocDir"]
|
||||||
|
settings["Settings.DocLang"] = self.cbxPrefs["Settings"]["DocLang"]
|
||||||
|
|
||||||
|
|
||||||
|
# BEWARE: there are two kinds of actions:
|
||||||
|
# * some require a harddisk
|
||||||
|
# * some do not require a harddisk
|
||||||
|
# take care, that you put a new action into the appropriate block below
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#TODO: check for ssl, see cryptobox.pl lines 483-9
|
||||||
|
|
||||||
|
#--------------------------------------------------------------#
|
||||||
|
# here you may define all cases that do not require a harddisk #
|
||||||
|
# put all other cases below the harddisk check #
|
||||||
|
#--------------------------------------------------------------#
|
||||||
|
#################### show_log #######################
|
||||||
|
if action == "show_log":
|
||||||
|
settings["Data.Action"] = "show_log"
|
||||||
|
##################### doc ############################
|
||||||
|
elif action == "doc":
|
||||||
|
settings["Data.Action"] = "show_doc"
|
||||||
|
if page != "":
|
||||||
|
|
||||||
|
settings["Data.Doc.Page"] = page
|
||||||
|
else:
|
||||||
|
settings["Data.Doc.Page"] ="CryptoBoxUser"
|
||||||
|
|
||||||
|
|
||||||
|
##################### poweroff ######################
|
||||||
|
elif action == "system_ask":
|
||||||
|
settings["Data.Action"] = "form_system"
|
||||||
|
##################### reboot ########################
|
||||||
|
elif action == "shutdown_do":
|
||||||
|
if type == "reboot":
|
||||||
|
#TODO: call function for system reboot
|
||||||
|
pass
|
||||||
|
settings["Data.Success"] = "ReBoot"
|
||||||
|
settings["Data.Redirect.Action"] = "show_status"
|
||||||
|
settings["Data.Redirect.Delay"] = "180"
|
||||||
|
else:
|
||||||
|
settings["Data.Success"] = "PowerOff"
|
||||||
|
settings["Data.Action"] = "empty"
|
||||||
|
##################### check for a harddisk ##########################
|
||||||
|
# catch this error, to prevent all following actions from execution #
|
||||||
|
#####################################################################
|
||||||
|
elif not True: #TODO: replace True with check for hard disk is_harddisk_available()
|
||||||
|
settings["Data.Error"] = "NoHardDisk"
|
||||||
|
#-------------------------------------------------------#
|
||||||
|
# here you may define all cases that require a harddisk #
|
||||||
|
#-------------------------------------------------------#
|
||||||
|
################ umount_do #######################
|
||||||
|
elif action == "unmount_do":
|
||||||
|
if device == "":
|
||||||
|
#TODO: debug message: "invalid device: "+ device
|
||||||
|
settings["Data.Warning"] = "InvalidDevice"
|
||||||
|
settings["Data.Action"] = "empty"
|
||||||
|
elif not True: #TODO: replace True with check_config()
|
||||||
|
settings["Data.Warning"] = "NotInitialized"
|
||||||
|
settings["Data.Action"] = "form_init"
|
||||||
|
elif True: #TODO: replace True with check_init_running()
|
||||||
|
settings["Data.Warning"] = "InitNotFinished"
|
||||||
|
settings["Data.Action"] = "empty"
|
||||||
|
settings["Data.Redirect.Action"] = "form_config"
|
||||||
|
settings["Data.Redirect.Delay"] = "30"
|
||||||
|
elif not True: #TODO: replace True with check_mounted(device)
|
||||||
|
settings["Data.Warning"] = "NotMounted"
|
||||||
|
settings["Data.Action"] = "show_volume"
|
||||||
|
else: #unmount
|
||||||
|
#TODO: replace this line with umount_vol(device)
|
||||||
|
if True: #TODO: replace True with check_mounted(device)
|
||||||
|
settings["Data.Warning"] = "UmountFailed"
|
||||||
|
settings["Data.Action"] = "show_volume"
|
||||||
|
else:
|
||||||
|
settings["Data.Action"] = "show_volume"
|
||||||
|
################ mount_do ########################
|
||||||
|
elif action == "mount_do":
|
||||||
|
if device != "":
|
||||||
|
pass #TODO: is_encrypted = check_device_encryption(device)
|
||||||
|
if device == "":
|
||||||
|
#TODO: debug_msg(DEBUG_INFO, "invalid device: " + device)
|
||||||
|
settings["Data.Warning"] = "InvalidDevice"
|
||||||
|
settings["Data.Action"] = "empty"
|
||||||
|
elif not True: #TODO: replace True with check_config()
|
||||||
|
settings["Data.Warning"] = "NotInitialized"
|
||||||
|
settings["Data.Action"] = "form_init"
|
||||||
|
#at cryptobox.pl line 568
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#go render stuff
|
||||||
|
cs = clearsilver()
|
||||||
|
content = cs.render(TemplateDir+"/main.cs",settings,LangDir+"/"+Language+".hdf")
|
||||||
|
return content
|
||||||
|
|
||||||
|
|
||||||
|
def sanitize_input(self,data):
|
||||||
|
#TODO: do things
|
||||||
|
return data
|
||||||
index.exposed = True
|
index.exposed = True
|
||||||
|
|
||||||
#####
|
##############################################################
|
||||||
cherrypy.root = RunCmd()
|
|
||||||
#cherrypy.lib.cptools.serve_file("/tmp/cryptobox.css")
|
cherrypy.root = CryptoBoxSite()
|
||||||
cherrypy.config.configMap.update({ "/cryptobox.css": {
|
#expose static content:
|
||||||
"staticFilter.on" : True, "staticFilter.file": "/tmp/cryptobox.css" }})
|
#I currently have no idea how to cleanly extract the stylesheet path from
|
||||||
|
#the config object without an extra CryptoBox.CryptoBoxProps instance.
|
||||||
|
#perhaps put config handling into a seperate class in CryptoBox.py?
|
||||||
|
cherrypy.config.configMap.update(
|
||||||
|
{
|
||||||
|
"/cryptobox.css": {
|
||||||
|
"staticFilter.on" : True,
|
||||||
|
"staticFilter.file": os.path.abspath("../www-data/cryptobox.css" )
|
||||||
|
}
|
||||||
|
})
|
||||||
cherrypy.server.start()
|
cherrypy.server.start()
|
||||||
|
|
||||||
|
|
|
@ -50,3 +50,16 @@ Facility = file
|
||||||
#Destination = /var/log/cryptobox.log
|
#Destination = /var/log/cryptobox.log
|
||||||
Destination = ./cryptobox.log
|
Destination = ./cryptobox.log
|
||||||
|
|
||||||
|
[Settings]
|
||||||
|
#default stylesheet
|
||||||
|
Stylesheet = cryptobox.css
|
||||||
|
#where are the clearsilver templates?
|
||||||
|
TemplateDir = ../templates
|
||||||
|
#path to language files
|
||||||
|
LangDir = ../lang
|
||||||
|
#default language
|
||||||
|
Language = de
|
||||||
|
#path to documentation files
|
||||||
|
DocDir = ../doc/html
|
||||||
|
#default language for documentation
|
||||||
|
DocLang = en
|
Loading…
Reference in a new issue