Root.py 7.5 KB
Newer Older
gdetrez's avatar
gdetrez committed
1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
# #############################################################
#                                            ..                
#                       ....  ............   ........          
#                     .     .......   .            ....  ..    
#                   .  ... ..   ..   ..    ..   ..... .  ..    
#                   .. .. ....@@@.  ..  .       ........  .    
#              ..  .  .. ..@.@@..@@.  .@@@@@@@   @@@@@@. ....  
#         .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... ....  
#       @@@@... .@@@.. @@ @@  .@..@@..@@...@@@.  .@@@@@.    .. 
#     .@@@..  . @@@.   @@.@@..@@.@@..@@@   @@ .@@@@@@..  ..... 
#    ...@@@.... @@@    .@@.......... ........ .....        ..  
#   . ..@@@@.. .         .@@@@.   .. .......  . .............  
#  .   ..   ....           ..     .. . ... ....                
# .    .       ....   ............. .. ...                     
# ..  ..  ...   ........ ...      ...                          
#  ................................                            
#                                                              
# #############################################################
# __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)
75 76 77 78 79
#if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
#    from ldap_crans_test import CransLdap
#else:
#    from ldap_crans import CransLdap
from ldap_crans import CransLdap
gdetrez's avatar
gdetrez committed
80

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

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

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

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


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