@ -1,10 +1,13 @@
import CryptoBox
import CryptoBoxWebserverSettings
import CryptoBoxWebserverRender
# RFC: is this global variable necessary? [l]
website = CryptoBoxWebserverRender . CryptoBoxWebserverRender ( )
# is it necessary to inherit these both classes?
# for clarity they should be just instanciated - or not?
# RFC: where should we put the information gathering? (available harddisks, current volume info, ...) - selectively for every "site" or always (as before)? [l]
# RFC: is it necessary to inherit these both classes?
# for clarity they should be just instanciated - or not? [l]
class CryptoBoxWebserverSites ( CryptoBox . CryptoBoxProps , CryptoBoxWebserverSettings . CryptoBoxWebserverSettings ) :
'''
url2func = { ' index ' : ' show_status ' , ' doc ' : ' show_doc ' , ' logs ' : ' show_log ' }
@ -41,7 +44,9 @@ class CryptoBoxWebserverSites(CryptoBox.CryptoBoxProps, CryptoBoxWebserverSettin
checking .
# RFC: why shouldn't it be called in __init__? [l]
there is no such thing like __init__ in cherrypy sites [ a ]
what about the unnamed place , where ' exposed ' attributes are set ? [ l ]
'''
# RFC: this dictionary is not sufficient for arbitrary text inputs (e.g.: names) or numbers [l]
niceparams = {
' weblang ' : [ " Settings.Language " , self . settings [ " Settings.AvailableLanguages " ] ] ,
' loglevel ' : [ " Log.Level " , ( ' ' , ' info ' , ' warn ' , ' debug ' , ' error ' ) ] ,
@ -50,11 +55,13 @@ class CryptoBoxWebserverSites(CryptoBox.CryptoBoxProps, CryptoBoxWebserverSettin
## check all given evil parameters against the nice ones
## set them to self.settings if accepted, otherwise do nothing
for evilkey in evilparams . keys ( ) :
# TODO: should be easier without the following for-loop
for nicekey in niceparams . keys ( ) :
if evilkey == nicekey :
#self.log.warn(niceparams[nicekey][0])
#self.log.warn(niceparams[nicekey][1])
if evilparams [ nicekey ] and evilparams [ nicekey ] in niceparams [ nicekey ] [ 1 ] :
# RFC: isn't "self.settings" a non-obvious name for user input? [l]
self . settings [ niceparams [ nicekey ] [ 0 ] ] = evilparams [ nicekey ]
#self.log.warn(niceparams[nicekey][0])
#self.log.warn(evilparams[nicekey])
@ -75,16 +82,17 @@ class CryptoBoxWebserverSites(CryptoBox.CryptoBoxProps, CryptoBoxWebserverSettin
return
def __isHDAvailable ( self ) :
return False
#TODO: implement this
return True
def __check_config ( self ) :
#TODO
pass
#TODO : from now on a cryptobox is always configured
return True
def __check_init_running ( self ) :
#TODO
pass
#TODO : implement this check (is mkfs still running?)
return False
######################################################################
## put real sites down here and don't forget to expose them at the end
@ -93,17 +101,18 @@ class CryptoBoxWebserverSites(CryptoBox.CryptoBoxProps, CryptoBoxWebserverSettin
''' displays a HTML version of the logfile
The loglevel has to be set and nothing else , as we just log in english .
RFC : what does this mean ? We still have to save the current language - or not ?
RFC : what does this mean ? We still have to save the current language - or not ? [ l ]
Be aware not to name this method just " log " as it seems to be a
reserved word .
# RFC: maybe it conflicts with CryptoBoxProps.log - which we inherited?
# RFC: maybe it conflicts with CryptoBoxProps.log - which we inherited? [l]
'''
self . __prepare ( " show_log " )
self . __sanitize_input ( { " loglevel " : loglevel } )
self . settings [ " Data.Log " ] = " <br/> " . join ( self . getLogData ( lines = 30 , maxSize = 2000 ) )
return website . render ( self )
def status ( self , weblang = " " ) :
''' shows the current status of the box
'''
@ -127,15 +136,16 @@ class CryptoBoxWebserverSites(CryptoBox.CryptoBoxProps, CryptoBoxWebserverSettin
pass
def doc ( self , action = " " , page = " " , weblang = " " ) :
# TODO: add "doclang" - it is selected by each link in the doc pages
def doc ( self , page = " " , weblang = " " ) :
''' prints the offline wikipage
TODO : " action " is unnessessary , remove it here and from all html
files in doc / html / [ de | en ] / *
TODO : " action " is unnessessary , remove it from all html files in doc / html / [ de | en ] / *
'''
self . __prepare ( " show_doc " )
# TODO: single pagenames should be sanitized
self . __sanitize_input ( { " weblang " : weblang } )
# TODO: check the supplied page name for validity (is it text? pattern match?)
if page :
self . settings [ " Data.Doc.Page " ] = page
else :
@ -143,9 +153,12 @@ class CryptoBoxWebserverSites(CryptoBox.CryptoBoxProps, CryptoBoxWebserverSettin
self . settings [ " Data.Doc.Page " ] = " CryptoBoxUser "
if len ( self . settings [ " Settings.AvailableDocLanguages " ] ) < 1 :
self . settings [ " Data.Error " ] = " NoDocumentation "
# TODO: what should be done, if there is an error?
## set doclang to weblang, otherwise the default weblang from the config will be used for doclang
# TODO: hard coded languages?
elif self . settings [ " Settings.Language " ] in ( " en " , " de " ) :
self . settings [ " Settings.DocLang " ] = self . settings [ " Settings.Language " ]
# TODO: missing 'else'?
return website . render ( self )