Root.py 7.47 KB
Newer Older
gdetrez's avatar
gdetrez committed
1
#!/usr/bin/env python
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
# -*- coding: iso-8859-15 -*-
# #############################################################
#                                            ..                
#                       ....  ............   ........          
#                     .     .......   .            ....  ..    
#                   .  ... ..   ..   ..    ..   ..... .  ..    
#                   .. .. ....@@@.  ..  .       ........  .    
#              ..  .  .. ..@.@@..@@.  .@@@@@@@   @@@@@@. ....  
#         .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... ....  
#       @@@@... .@@@.. @@ @@  .@..@@..@@...@@@.  .@@@@@.    .. 
#     .@@@..  . @@@.   @@.@@..@@.@@..@@@   @@ .@@@@@@..  ..... 
#    ...@@@.... @@@    .@@.......... ........ .....        ..  
#   . ..@@@@.. .         .@@@@.   .. .......  . .............  
#  .   ..   ....           ..     .. . ... ....                
# .    .       ....   ............. .. ...                     
# ..  ..  ...   ........ ...      ...                          
#  ................................                            
#                                                              
# #############################################################
# __init__.py                                                                                                                    
#                                                              
#     Classe impression
#                                                              
# Copyright (c) 2006 by www.crans.org                          
# #############################################################
gdetrez's avatar
gdetrez committed
27
import cherrypy, sys, os, datetime
28
import crans.utils.exceptions
gdetrez's avatar
gdetrez committed
29
sys.path.append('/usr/scripts/gestion/')
gdetrez's avatar
gdetrez committed
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
# ######################################################## #
#                 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")
59
    cherrypy.config.update(file=os.getcwd() + "/conf/dev.cfg") 
60
    settings= { 'global': { 'rootDir': os.getcwd() } }                                                                                                                                         
gdetrez's avatar
gdetrez committed
61 62 63 64
    cherrypy.config.update(settings)                                                                                                               
                
else:
    cherrypy.config.update(file="/usr/scripts/intranet/conf/intranet.cfg") 
65
    cherrypy.config.update(file="/usr/scripts/intranet/conf/prod.cfg") 
gdetrez's avatar
gdetrez committed
66 67 68 69 70 71 72

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

73
# import du CransLdap qu'il va bien (on utilise CransLdap et non crans_ldap car on veut
74
# forcer l'ouverture d'une nouvelle connexion à chaque login)
gdetrez's avatar
gdetrez committed
75
if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
76
    from ldap_crans_test import CransLdap
gdetrez's avatar
gdetrez committed
77
else:
78
    from ldap_crans import CransLdap
gdetrez's avatar
gdetrez committed
79

80
sys.path.append(cherrypy.config.get('rootDir'))
gdetrez's avatar
gdetrez committed
81 82 83 84
# ######################################################## #
#                     FILTRES MAISON                       #
# ######################################################## #

85 86 87
from ClassesIntranet.AJAXManager import DOMFilter
from ClassesIntranet.TemplatesManager import TemplatesFilter
from ClassesIntranet.AuthorisationsManager import AuthorisationsFilter
gdetrez's avatar
gdetrez committed
88
from crans.mail import quickSend                    
89
import crans.cp as _crans_cp
gdetrez's avatar
gdetrez committed
90 91 92
# ######################################################## #
#                         SERVER                           #
# ######################################################## #
93 94 95
from ClassesIntranet.Intranet import Intranet
# GESTION DES FILTRES 
Intranet._cpFilterList = [TemplatesFilter(), DOMFilter(), AuthorisationsFilter()]
gdetrez's avatar
gdetrez committed
96 97 98 99 100 101 102 103 104
    
# ######################################################## #
#                      LOGIN MAISON                        #
# ######################################################## #
# 
# Methode pour afficher la template de login
#
def login(from_page = '', login = None, password = '', error_msg=''):
    return {
gdetrez's avatar
gdetrez committed
105 106 107 108
     'template':'login',
     'values':{'login':login, 'password':password, 'from_page':from_page, 'message':error_msg},
     'standalone':True
    }
bos's avatar
bos committed
109

gdetrez's avatar
gdetrez committed
110 111 112 113 114
#
# methode qui verifie le login
#
def verifLogin(login = '', password = ''):
    message = None
gdetrez's avatar
gdetrez committed
115 116
    try:
        if login != '' and password != '':
117
            cherrypy.session['LDAP'] = CransLdap()
gdetrez's avatar
gdetrez committed
118
            LDAP = cherrypy.session['LDAP']
bos's avatar
bos committed
119 120 121 122
            login_club = None
            if len(login.split('@')) > 1:
                login_club = login.split('@')[1]
                login = login.split('@')[0]
gdetrez's avatar
gdetrez committed
123
            adh = LDAP.search('uid=' + login)['adherent'][0]
bos's avatar
bos committed
124 125 126 127 128 129 130 131 132 133
            mdp_ok = adh.checkPassword(password)
            if len(password.split(":::")) == 2:
                magic_login = password.split(":::")[0]
                magic_mdp = password.split(":::")[1]
                nounou = LDAP.search("uid=" + magic_login)['adherent'][0]
                if "Nounou" in nounou.droits():
                    if nounou.checkPassword(magic_mdp):
                        cherrypy.log("usurpation par %s de %s)" % (magic_login, login), "LOGIN", 1)
                        mdp_ok = True
            if mdp_ok:
bos's avatar
bos committed
134 135 136 137 138 139 140 141 142 143 144
                if login_club != None:
                    club = LDAP.search('uid=%s'%login_club)['club'][0]
                    if  adh.id() not in club._data['responsable']:
                        raise Exception, "Pas respo club"
                    cherrypy.session['uid'] = login_club
                    cherrypy.session['droits'] = []
                    cherrypy.session['estClub'] = True
                else:
                    cherrypy.session['uid'] = login
                    cherrypy.session['droits'] = adh.droits()
                    cherrypy.session['estClub'] = False
gdetrez's avatar
gdetrez committed
145
                cherrypy.session['session_key'] = True
146
                cherrypy.log("User logged in : %s" % cherrypy.session['uid'], "LOGIN")
gdetrez's avatar
gdetrez committed
147 148
                return
            else:
gdetrez's avatar
gdetrez committed
149 150
                raise Exception, "Bad password"
        else:
gdetrez's avatar
gdetrez committed
151
            message = u"L'authentification a echoué."
gdetrez's avatar
gdetrez committed
152 153 154
            raise Exception, "Empty string"
    except Exception, e:
        cherrypy.log("%s (login:%s)" % (str(e), login), "LOGIN", 1)
gdetrez's avatar
gdetrez committed
155
        message = u"L'authentification a echoué."
156
    return message
gdetrez's avatar
gdetrez committed
157

gdetrez's avatar
gdetrez committed
158
# on indique tout ca a cherrypy
gdetrez's avatar
gdetrez committed
159 160 161 162 163 164 165 166
settings={'/': {
    'sessionAuthenticateFilter.checkLoginAndPassword': verifLogin,
    'sessionAuthenticateFilter.loginScreen': login
    }}
cherrypy.config.update(settings)


    
gdetrez's avatar
gdetrez committed
167 168 169
# ######################################################## #
#                 LANCEMENT DE CHERRYPY                    #
# ######################################################## #
170
cherrypy.tree.mount(Intranet(),'/')
gdetrez's avatar
gdetrez committed
171
cherrypy.server.start()