changement de structure

darcs-hash:20060920201205-f46e9-1eb5e174b56f63387321970baaa769c5baaf9f98.gz
This commit is contained in:
gdetrez 2006-09-20 22:12:05 +02:00
parent b5b3e3b72e
commit 3dc01c0c2d
6 changed files with 288 additions and 255 deletions

View file

@ -1,257 +1,149 @@
#! /usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import cherrypy, sys, os, datetime
from Cheetah.Template import Template import cherrypy, sys, os, datetime
sys.path.append('/usr/scripts/gestion/') sys.path.append('/usr/scripts/gestion/')
# ######################################################## # # ######################################################## #
# Configuration de Cheetah # # FILTRES MAISON #
# ######################################################## # # ######################################################## #
def serverSidePath(self, path): from plugins.domfilter import DOMFilter
if (cherrypy.config.configMap["global"]["server.environment"] == "development"): from plugins.templatesfilter import TemplatesFilter
if os.path.isfile(os.getcwd()+'/templates/'+path+".dev"): return os.getcwd()+'/templates/'+path+".dev" # les template se trouve dans le dossier template from plugins.verifdroitsfilter import VerifDroitsFilter
return os.getcwd()+'/templates/'+path
# ######################################################## #
# on surcharge cette fonction dans la classe Template # SERVER #
Template.serverSidePath = serverSidePath # ######################################################## #
class Intranet:
__ldap = None
def __init__(self):
# ######################################################## # import monCompte, impression, factures
# FILTRES MAISON # self.__ldap = cherrypy.config.configMap["global"]["crans_ldap"]
# ######################################################## #
# liste des modules disponibles
from cherrypy.filters.basefilter import BaseFilter self.monCompte = monCompte.monCompte()
import cherrypy._cputil
##########################
# DomFilter
##########################
#
# transforme des objets python
# en chainses de caracteres qui peuvent
# etre parsees avec JSON/javascript
#
class DOMFilter(BaseFilter):
def beforeFinalize(self):
body = cherrypy.response.body
if isinstance(body, dict):
body = self.printAsDom(body)
cherrypy.response.body = body
def printAsDom(self, chose):
if isinstance(chose, dict):
stringList = []
for a_key in chose.keys():
stringList.append('%s:%s' % (self.printAsDom(a_key), self.printAsDom(chose[a_key])))
return "{%s}" % ','.join(stringList)
if isinstance(chose, list):
stringList = []
for an_item in chose:
stringList.append('%s' % (self.printAsDom(an_item)))
return "[%s]" % ','.join(stringList)
if isinstance(chose, str):
return '"%s"' % chose
if isinstance(chose, unicode):
return '"%s"' % chose.encode('utf8')
return str(chose)
##########################
# templatesEngine
##########################
#
# Application des templates,
# avec plein de test chians
#
class templatesEngine(BaseFilter):
def _getBodyTemplate(self, body):
if isinstance(body, dict):
if body.has_key('template'):
if body['template'].endswith(".py"):
return body['template']
elif body['template'].endswith(".tmpl"):
return body['template']
else:
return body['template'] + ".tmpl"
return False
def _isStandaloneBody(self, body):
if isinstance(body, dict):
if body.has_key('standalone'):
return body['standalone']
if body.has_key('template'):
return False
else:
return True
return True
def _getBodyNameSpace(self, body):
if isinstance(body, dict):
if body.has_key('values'):
return body['values']
return {}
def _useMainTemplate(self, body):
t = Template(file='main.tmpl', searchList=[body,{'login':cherrypy.session['uid'], 'environment':cherrypy.config.configMap["global"]["server.environment"]}])
return str(t)
def beforeFinalize(self):
body = cherrypy.response.body
if isinstance(body, dict):
bodyTemplate = self._getBodyTemplate(body)
if bodyTemplate:
templatevalues = self._getBodyNameSpace(body)
t = Template(file=bodyTemplate, searchList=[templatevalues])
body['page'] = str(t)
if not self._isStandaloneBody(body):
body = self._useMainTemplate(body)
else:
body = body["page"]
cherrypy.response.body = body
##########################
# verification des droits
##########################
#
# Application des templates,
# avec plein de test chians
#
class verifDroits(BaseFilter):
def before_main(self):
if not cherrypy.config.get('sessionAuthenticateFilter.on', False):
return
if not cherrypy.session.get("session_key"):
return
droits = cherrypy.config.get('crans.droits', 'all')
if (droits != "all"):
if not droits in cherrypy.session['droits']:
raise cherrypy.HTTPError(403, "Vous n'avez pas les droits nécessaires.")
# ######################################################## #
# SERVER #
# ######################################################## #
class Intranet:
__ldap = None
def __init__(self):
import monCompte, impression, factures
self.__ldap = cherrypy.config.configMap["global"]["crans_ldap"]
# liste des modules disponibles
self.monCompte = monCompte.monCompte()
self.sous = factures.root() self.sous = factures.root()
# liste des modules en developpement # liste des modules en developpement
if (cherrypy.config.configMap["global"]["server.environment"] == "development"): if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
self.impression = impression.root() self.impression = impression.root()
_cpFilterList = [templatesEngine(), DOMFilter(), verifDroits()] _cpFilterList = [TemplatesFilter(), DOMFilter(), VerifDroitsFilter()]
def index(self): def index(self):
return { return {
'template':'accueil', 'template':'accueil',
'values':{}, 'values':{},
} }
index.exposed= True index.exposed= True
def info(self): def info(self):
return { return {
'template':'info-diverses', 'template':'info-diverses',
'values':{} 'values':{}
} }
info.exposed = True info.exposed = True
''' '''
def nounous(self): def nounous(self):
return "coucou" return "coucou"
nounous.exposed= True nounous.exposed= True
def test(self): def test(self):
return {"quoi":cherrypy.request.path, "il_faut":cherrypy.config.configMap["/nounous"]["crans.droits"], "moi":cherrypy.session['droits'] } return {"quoi":cherrypy.request.path, "il_faut":cherrypy.config.configMap["/nounous"]["crans.droits"], "moi":cherrypy.session['droits']
test.exposed = True }
test.exposed = True
def environment(self):
return cherrypy.config.configMap["global"]["server.environment"] def environment(self):
environment.exposed = True return cherrypy.config.configMap["global"]["server.environment"]
''' environment.exposed = True
'''
# ######################################################## # # ######################################################## #
# LOGIN MAISON # # LOGIN MAISON #
# ######################################################## # # ######################################################## #
# #
# Methode pour afficher la template de login # Methode pour afficher la template de login
# #
def login(from_page = '', login = None, password = '', error_msg=''): def login(from_page = '', login = None, password = '', error_msg=''):
return { return {
'template':'login', 'template':'login',
'values':{'login':login, 'password':password, 'from_page':from_page, 'message':error_msg}, 'values':{'login':login, 'password':password, 'from_page':from_page, 'message':error_msg},
'standalone':True 'standalone':True
} }
# #
# methode qui verifie le login # methode qui verifie le login
# #
def verifLogin(login = '', password = ''): def verifLogin(login = '', password = ''):
message = None message = None
if login != '' and password != '': if login != '' and password != '':
try: try:
globalLdap = cherrypy.config.configMap["global"]["crans_ldap"] globalLdap = cherrypy.config.configMap["global"]["crans_ldap"]
adh =globalLdap.search('uid=' + login)['adherent'][0] adh =globalLdap.search('uid=' + login)['adherent'][0]
if adh.checkPassword(password): if adh.checkPassword(password):
cherrypy.session['uid'] = login cherrypy.session['uid'] = login
cherrypy.session['session_key'] = True cherrypy.session['session_key'] = True
cherrypy.session['droits'] = adh.droits() cherrypy.session['droits'] = adh.droits()
return return
else: else:
#print("bad password") #print("bad password")
message = u"L'authentification a echoué." message = u"L'authentification a echoué."
except Exception, e: except Exception, e:
#print(e) #print(e)
message = u"L'authentification a echoué." message = u"L'authentification a echoué."
else: else:
#print("sth empty") #print("sth empty")
message = u"L'authentification a echoué." message = u"L'authentification a echoué."
return message return message
# ######################################################## # # ######################################################## #
# CHERRYPY # # COMMAND LINE OPTION #
# ######################################################## # # ######################################################## #
# #
# mise en place de cherrypy + conf #
#
#cherrypy.config.update(file="/usr/scripts/intranet/dev.cfg") from optparse import OptionParser
cherrypy.config.update(file="/usr/scripts/intranet/prod.cfg")
cherrypy.config.update(file="/usr/scripts/intranet/intranet.cfg") parser = OptionParser()
settings={'/': { parser.add_option("-d", "--dev",
'sessionAuthenticateFilter.checkLoginAndPassword': verifLogin, action="store_true", dest="dev", default=False,
'sessionAuthenticateFilter.loginScreen': login help="launch in dev mode")
}
} (options, args) = parser.parse_args()
cherrypy.config.update(settings)
if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
from ldap_crans_test import crans_ldap # ######################################################## #
print("settings : unsing test ldap : env=" + cherrypy.config.configMap["global"]["server.environment"]) # CHERRYPY #
else: # ######################################################## #
from ldap_crans import crans_ldap #
print("settings : unsing prod ldap : env=" + cherrypy.config.configMap["global"]["server.environment"]) # mise en place de cherrypy + conf
cherrypy.config.update({'global':{'crans_ldap':crans_ldap()}}) #
cherrypy.root = Intranet()
cherrypy.config.update(file="/usr/scripts/intranet/intranet.cfg")
cherrypy.server.start() if (options.dev):
cherrypy.config.update(file="/usr/scripts/intranet/dev.cfg")
else:
cherrypy.config.update(file="/usr/scripts/intranet/prod.cfg")
settings={'/': {
'sessionAuthenticateFilter.checkLoginAndPassword': verifLogin,
'sessionAuthenticateFilter.loginScreen': login
}}
cherrypy.config.update(settings)
if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
from ldap_crans_test import crans_ldap
print("settings : unsing test ldap : env=" + cherrypy.config.configMap["global"]["server.environment"])
else:
from ldap_crans import crans_ldap
print("settings : unsing prod ldap : env=" + cherrypy.config.configMap["global"]["server.environment"])
cherrypy.config.update({'global':{'crans_ldap':crans_ldap()}})
cherrypy.root = Intranet()
cherrypy.server.start()

View file

@ -1,2 +1,5 @@
[global]
rootDir="/usr/scripts/intranet"
[/nounous] [/nounous]
crans.droits="nounou" crans.droits="nounou"

View file

View file

@ -0,0 +1,38 @@
from cherrypy.filters.basefilter import BaseFilter
import cherrypy._cputil
##########################
# DomFilter
##########################
#
# transforme des objets python
# en chainses de caracteres qui peuvent
# etre parsees avec JSON/javascript
#
class DOMFilter(BaseFilter):
def beforeFinalize(self):
body = cherrypy.response.body
if isinstance(body, dict):
body = self.printAsDom(body)
cherrypy.response.body = body
def printAsDom(self, chose):
if isinstance(chose, dict):
stringList = []
for a_key in chose.keys():
stringList.append('%s:%s' % (self.printAsDom(a_key), self.printAsDom(chose[a_key])))
return "{%s}" % ','.join(stringList)
if isinstance(chose, list):
stringList = []
for an_item in chose:
stringList.append('%s' % (self.printAsDom(an_item)))
return "[%s]" % ','.join(stringList)
if isinstance(chose, str):
return '"%s"' % chose
if isinstance(chose, unicode):
return '"%s"' % chose.encode('utf8')
return str(chose)

View file

@ -0,0 +1,78 @@
from cherrypy.filters.basefilter import BaseFilter
import cherrypy._cputil, os
from Cheetah.Template import Template
# ######################################################## #
# Configuration de Cheetah #
# ######################################################## #
def serverSidePath(self, path):
if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
if os.path.isfile(os.getcwd()+'/templates/'+path+".dev"):
return cherrypy.config.configMap["global"]["rootDir"]+'/templates/'+path+".dev"
# les template se trouve dans le dossier template
return cherrypy.config.configMap["global"]["rootDir"]+'/templates/'+path
# on surcharge cette fonction dans la classe Template
Template.serverSidePath = serverSidePath
##########################
# templatesEngine
##########################
#
# Application des templates,
# avec plein de test chians
#
class TemplatesFilter(BaseFilter):
def _getBodyTemplate(self, body):
if isinstance(body, dict):
if body.has_key('template'):
if body['template'].endswith(".py"):
return body['template']
elif body['template'].endswith(".tmpl"):
return body['template']
else:
return body['template'] + ".tmpl"
return False
def _isStandaloneBody(self, body):
if isinstance(body, dict):
if body.has_key('standalone'):
return body['standalone']
if body.has_key('template'):
return False
else:
return True
return True
def _getBodyNameSpace(self, body):
if isinstance(body, dict):
if body.has_key('values'):
return body['values']
return {}
def _useMainTemplate(self, body):
t = Template(file='main.tmpl', searchList=[body,{'login':cherrypy.session['uid'], 'environment':cherrypy.config.configMap["global"]["server.environment"]}])
return str(t)
def beforeFinalize(self):
body = cherrypy.response.body
if isinstance(body, dict):
bodyTemplate = self._getBodyTemplate(body)
if bodyTemplate:
templatevalues = self._getBodyNameSpace(body)
t = Template(file=bodyTemplate, searchList=[templatevalues])
body['page'] = str(t)
if not self._isStandaloneBody(body):
body = self._useMainTemplate(body)
else:
body = body["page"]
cherrypy.response.body = body

View file

@ -0,0 +1,22 @@
from cherrypy.filters.basefilter import BaseFilter
import cherrypy._cputil
##########################
# verification des droits
##########################
#
# Application des templates,
# avec plein de test chians
#
class VerifDroitsFilter(BaseFilter):
def before_main(self):
if not cherrypy.config.get('sessionAuthenticateFilter.on', False):
return
if not cherrypy.session.get("session_key"):
return
droits = cherrypy.config.get('crans.droits', 'all')
if (droits != "all"):
if not droits in cherrypy.session['droits']:
raise cherrypy.HTTPError(403, "Vous n'avez pas les droits nécessaires.")