Root.py 6.71 KB
Newer Older
gdetrez's avatar
gdetrez committed
1 2 3 4 5 6 7
#!/usr/bin/env python
# -*- coding: utf-8 -*-


import cherrypy, sys, os, datetime
sys.path.append('/usr/scripts/gestion/')

gdetrez's avatar
gdetrez committed
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
            
# ######################################################## #
#                 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")
38
    cherrypy.config.update(file=os.getcwd() + "/conf/dev.cfg") 
gdetrez's avatar
gdetrez committed
39 40 41 42 43
    settings={'global': { 'rootDir': os.getcwd() } }                                                                                                                                         
    cherrypy.config.update(settings)                                                                                                               
                
else:
    cherrypy.config.update(file="/usr/scripts/intranet/conf/intranet.cfg") 
44
    cherrypy.config.update(file="/usr/scripts/intranet/conf/prod.cfg") 
gdetrez's avatar
gdetrez committed
45 46 47 48 49 50 51 52 53

# changer le port ??
if (options.port):
    settings={'global':{'server.socketPort':options.port}}
    cherrypy.config.update(settings)                                                                                                               
    

if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
    from ldap_crans_test import crans_ldap
gdetrez's avatar
gdetrez committed
54
    cherrypy.log("settings : unsing test ldap : env=" + cherrypy.config.configMap["global"]["server.environment"], "LDAP")
gdetrez's avatar
gdetrez committed
55 56
else:
    from ldap_crans import crans_ldap
gdetrez's avatar
gdetrez committed
57
    cherrypy.log("settings : unsing prod ldap : env=" + cherrypy.config.configMap["global"]["server.environment"], "LDAP")
gdetrez's avatar
gdetrez committed
58 59
cherrypy.config.update({'global':{'crans_ldap':crans_ldap()}})

gdetrez's avatar
gdetrez committed
60 61 62 63 64 65 66 67 68 69 70 71 72 73
# ######################################################## #
#                     FILTRES MAISON                       #
# ######################################################## #

from plugins.domfilter import DOMFilter
from plugins.templatesfilter import TemplatesFilter
from plugins.verifdroitsfilter import VerifDroitsFilter
                    
# ######################################################## #
#                         SERVER                           #
# ######################################################## #
class Intranet:
    __ldap = None
    def __init__(self):
74
        from pages import monCompte, impression, factures, digicode, mesmachines
gdetrez's avatar
gdetrez committed
75 76 77 78
        self.__ldap = cherrypy.config.configMap["global"]["crans_ldap"]
        
        # liste des modules disponibles
        self.monCompte = monCompte.monCompte()
79
        self.sous = factures.root()
gdetrez's avatar
gdetrez committed
80
        self.impression = impression.root()        
gdetrez's avatar
gdetrez committed
81
        self.digicode = digicode.root()
82
        self.mesMachines = mesmachines.root()
83
        
gdetrez's avatar
gdetrez committed
84
        # liste des modules en developpement
85 86
        #if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
        
gdetrez's avatar
gdetrez committed
87

gdetrez's avatar
gdetrez committed
88 89 90 91 92 93 94 95
            
            
    _cpFilterList = [TemplatesFilter(), DOMFilter(), VerifDroitsFilter()]
    
    def index(self):
        return {
            'template':'accueil',
            'values':{},
96
	        'stylesheets':['accueil.css'],
gdetrez's avatar
gdetrez committed
97 98 99 100 101 102
            }
    index.exposed= True
    
    def info(self):
        return {
    'template':'info-diverses',
103 104
    'values':{},
	'stylesheets':['accueil.css'],
gdetrez's avatar
gdetrez committed
105 106 107
    }
    info.exposed = True
    
108
    
gdetrez's avatar
gdetrez committed
109
    def _cp_on_http_error(self, status, message):
110 111 112 113 114 115 116 117 118 119 120 121
        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,
                }
122 123 124
        else:
            cherrypy._cputil._cp_on_http_error(status, message)

gdetrez's avatar
gdetrez committed
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
    '''
    def nounous(self):
        return "coucou"
    nounous.exposed= True
    
    def test(self):
        return {"quoi":cherrypy.request.path, "il_faut":cherrypy.config.configMap["/nounous"]["crans.droits"], "moi":cherrypy.session['droits']
    }
    test.exposed = True
    
    def environment(self):
        return cherrypy.config.configMap["global"]["server.environment"]
    environment.exposed = True
    '''
    
# ######################################################## #
#                      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
    if login != '' and password != '':
        try:
            globalLdap = cherrypy.config.configMap["global"]["crans_ldap"]
            adh =globalLdap.search('uid=' + login)['adherent'][0]
            if adh.checkPassword(password):
                cherrypy.session['uid'] = login
                cherrypy.session['session_key'] = True
                cherrypy.session['droits'] = adh.droits()
165 166
                cherrypy.session['LDAP'] = crans_ldap()

167
                cherrypy.log("User logged in : %s" % cherrypy.session['uid'], "LOGIN")
gdetrez's avatar
gdetrez committed
168 169 170 171 172 173 174 175 176 177
                return
            else:
                #print("bad password")
                message = u"L'authentification a echoué."
        except Exception, e:
            #print(e)
            message = u"L'authentification a echoué."
    else:
        #print("sth empty")
        message = u"L'authentification a echoué."
178
    return message
gdetrez's avatar
gdetrez committed
179 180 181 182 183





gdetrez's avatar
gdetrez committed
184
# on indique tout ca a cherrypy
gdetrez's avatar
gdetrez committed
185 186 187 188 189 190 191 192
settings={'/': {
    'sessionAuthenticateFilter.checkLoginAndPassword': verifLogin,
    'sessionAuthenticateFilter.loginScreen': login
    }}
cherrypy.config.update(settings)


    
gdetrez's avatar
gdetrez committed
193 194 195 196 197
# ######################################################## #
#                 LANCEMENT DE CHERRYPY                    #
# ######################################################## #
cherrypy.root = Intranet()
cherrypy.server.start()