scripts/intranet/Root.py
gdetrez 122619c021 envoi de rapports de bug...
darcs-hash:20061202214729-f46e9-87e28633677416742ceee22abab710b20dba7537.gz
2006-12-02 22:47:29 +01:00

209 lines
7.2 KiB
Python
Executable file

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cherrypy, sys, os, datetime
sys.path.append('/usr/scripts/gestion/')
# ######################################################## #
# COMMAND LINE OPTION #
# ######################################################## #
#
#
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-d", "--dev",
action="store_true", dest="dev", default=False,
help="launch in dev mode")
parser.add_option("-p", "--port",
action="store", type="int", dest="port",
help="change server port")
(options, args) = parser.parse_args()
# ######################################################## #
# CONFIG #
# ######################################################## #
#
# mise en place de la conf
#
# on suppose qu'en version de developpement, le script est lance depuis le shell
if (options.dev):
cherrypy.config.update(file=os.getcwd() + "/conf/intranet.cfg")
cherrypy.config.update(file=os.getcwd() + "/conf/dev.cfg")
settings={'global': { 'rootDir': os.getcwd() } }
cherrypy.config.update(settings)
else:
cherrypy.config.update(file="/usr/scripts/intranet/conf/intranet.cfg")
cherrypy.config.update(file="/usr/scripts/intranet/conf/prod.cfg")
# changer le port ??
if (options.port):
settings={'global':{'server.socketPort':options.port}}
cherrypy.config.update(settings)
# import du crans_ldap qu'il va bien
if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
from ldap_crans_test import crans_ldap
cherrypy.log("settings : unsing test ldap : env=" + cherrypy.config.configMap["global"]["server.environment"], "LDAP")
else:
from ldap_crans import crans_ldap
cherrypy.log("settings : unsing prod ldap : env=" + cherrypy.config.configMap["global"]["server.environment"], "LDAP")
cherrypy.config.update({'global':{'crans_ldap':crans_ldap()}})
# ######################################################## #
# FILTRES MAISON #
# ######################################################## #
from plugins.domfilter import DOMFilter
from plugins.templatesfilter import TemplatesFilter
from plugins.verifdroitsfilter import VerifDroitsFilter
from crans.mail import quickSend
# ######################################################## #
# SERVER #
# ######################################################## #
class Intranet:
__ldap = None
def __init__(self):
from pages import monCompte, impression, factures, digicode, mesmachines
self.__ldap = cherrypy.config.configMap["global"]["crans_ldap"]
# liste des modules disponibles
self.monCompte = monCompte.monCompte()
self.sous = factures.root()
self.impression = impression.root()
self.digicode = digicode.root()
self.mesMachines = mesmachines.root()
# liste des modules en developpement
#if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
_cpFilterList = [TemplatesFilter(), DOMFilter(), VerifDroitsFilter()]
def index(self):
return {
'template':'accueil',
'values':{},
'stylesheets':['accueil.css'],
}
index.exposed= True
def info(self):
return {
'template':'info-diverses',
'values':{},
'stylesheets':['accueil.css'],
}
info.exposed = True
def send_error_repport(self, **kw):
exp = "intranet"
dest = cherrypy.config.get("mail.bugreport", "nounous@crans.org")
subject = "Rapport de Bug"
text = """
Bonsoir,
Ceci est un rapport de bug envoye depuis l'intranet.
%s
""" % "\n".join( [ "%s: %s" % (str(a), str(kw[a])) for a in kw] )
quickSend(exp, dest, subject, text)
return self.index()
send_error_repport.exposed = True
def testErreur(self):
raise Exception, "sdlfkjqmsdklj"
testErreur.exposed = True
def test(self):
return cherrypy.request.remote_addr
test.exposed = True
def _cp_on_http_error(self, status, message):
if status==403:
cherrypy.response.body = {
'template':'error403',
'values':{'status':status, 'message':message },
'standalone':False,
}
elif status==404:
cherrypy.response.body = {
'template':'error',
'values':{'status':status, 'message':message },
'standalone':False,
}
elif status==500:
from plugins.templatesfilter import TemplatesFilter
TemplatesFilter().goWithThisDict({'template':'error', 'values':{'status':status, 'message':message }})
else:
cherrypy._cputil._cp_on_http_error(status, message)
# ######################################################## #
# LOGIN MAISON #
# ######################################################## #
#
# Methode pour afficher la template de login
#
def login(from_page = '', login = None, password = '', error_msg=''):
return {
'template':'login',
'values':{'login':login, 'password':password, 'from_page':from_page, 'message':error_msg},
'standalone':True
}
#
# methode qui verifie le login
#
def verifLogin(login = '', password = ''):
message = None
try:
if login != '' and password != '':
cherrypy.session['LDAP'] = crans_ldap()
LDAP = cherrypy.session['LDAP']
adh = LDAP.search('uid=' + login)['adherent'][0]
if adh.checkPassword(password):
cherrypy.session['uid'] = login
cherrypy.session['session_key'] = True
cherrypy.session['droits'] = adh.droits()
cherrypy.log("User logged in : %s" % cherrypy.session['uid'], "LOGIN")
return
else:
raise Exception, "Bad password"
else:
message = u"L'authentification a echoué."
raise Exception, "Empty string"
except Exception, e:
cherrypy.log("%s (login:%s)" % (str(e), login), "LOGIN", 1)
message = u"L'authentification a echoué."
return message
# on indique tout ca a cherrypy
settings={'/': {
'sessionAuthenticateFilter.checkLoginAndPassword': verifLogin,
'sessionAuthenticateFilter.loginScreen': login
}}
cherrypy.config.update(settings)
# ######################################################## #
# LANCEMENT DE CHERRYPY #
# ######################################################## #
cherrypy.root = Intranet()
cherrypy.server.start()