Project

General

Profile

Revision bba06e79

IDbba06e7957f43e6a31d2766b021864fa103722d9
Parent ad86ea60
Child 5f1e0df1

Added by Francois POIROTTE almost 13 years ago

Activation du cache des permissions (#577)

Modifie l'ordre des middlewares WSGI afin que les couches apportées par
Beaker (gestion du cache et gestion des sessions) soient disponibles
depuis les couches d'authentification/autorisations (repoze.who et
repoze.what).

Ceci permet d'activer réellement le cache des permissions au niveau du
plugin Kerberos (auparavant, la fonctionnalité était présent, mais
inutilisable car Beaker ne se trouvait pas dans la pile de couches).

Ce changeset remplace également le plugin d'authentification Kerberos
pour supprimer les méthodes responsables de l'identification et de
l'authentification de l'utilisateur par une unique méthode d'ajout de
méta-données (mdprovider).
De fait, le plugin sera correctement appelé avec le nouveau code pour la
pile d'authentification (afin de créer l'utilisateur dans Vigilo
correspondant à l'utilisateur externe).
Le plugin a été renommé (nom plus explicite/réaliste) et déplacé à cet
endroit : `vigilo.turbogears.repoze.plugins.mdldapsync`.
Ceci introduit une dépendance sur python-ldap dans vigilo.turbogears.

Ce changement centralise tout ce qui concerne repoze.wh(o|at) dans
vigilo.turbogears.repoze.
Le classifier a été modifié pour identifier spécifiquement les requêtes
authentifiée par un mécanisme externe (ex: Kerberos).
Les plugins ont vu leur nom changer radicalement et se trouvent
désormais chacun dans un fichier séparé (sqlauth, mduser, mdgroups).

Un nouveau module (d'identification) pour repoze.who a été ajouté dans
`vigilo.turbogears.repoze.plugins.externalid`. Ce module permet de
pré-authentifier un utilisateur à partir du contenu d'une session
Beaker. Il sera utilisé avec `mdldapsync` qui mémorise déjà l'identité
d'un utilisateur authentifié via un mécanisme externe dans la session
Beaker.

Les fichiers .ini des différentes IHM ont été mis à jour en conséquence.

Les méthodes liées à l'authentification dans les contrôleurs !TurboGears
ont été mises en commun dans `vigilo.turbogears.controllers.auth`.

Refs: #577.
Change-Id: Ia2d600622fd623e1a4474a4ea24fef3b3b503c12
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/377
Tested-by: Build system <>
Reviewed-by: Aurelien BOMPARD <>

View differences:

deployment/who.ini
5 5

  
6 6
[plugin:basicauth]
7 7
use = repoze.who.plugins.basicauth:make_plugin
8
realm=Vigilo
8
realm = Vigilo
9 9

  
10 10
[plugin:friendlyform]
11 11
use = repoze.who.plugins.friendlyform:FriendlyFormPlugin
......
16 16
post_login_url = /post_login
17 17
post_logout_url = /post_logout
18 18

  
19
[plugin:sqlauth]
20
use = vigilo.turbogears.repoze_plugins:auth_plugin
21

  
22 19
[general]
23
;request_classifier = repoze.who.classifiers:default_request_classifier
24
request_classifier = vigilo.turbogears.repoze_plugins:vigilo_api_classifier
20
request_classifier = vigilo.turbogears.repoze.classifier:vigilo_classifier
25 21
challenge_decider = repoze.who.classifiers:default_challenge_decider
26 22

  
27 23
[identifiers]
......
32 28

  
33 29
[authenticators]
34 30
plugins =
35
    sqlauth
31
    vigilo.turbogears.repoze.plugins.sqlauth:plugin
36 32

  
37 33
[challengers]
38 34
plugins =
......
41 37

  
42 38
[mdproviders]
43 39
plugins =
44
    vigilo.turbogears.repoze_plugins:md_plugin
45
    vigilo.turbogears.repoze_plugins:md_group_plugin
40
    vigilo.turbogears.repoze.plugins.mduser:plugin
41
    vigilo.turbogears.repoze.plugins.mdgroups:plugin
development.ini
25 25
db_basename=vigilo_
26 26
password_hashing_function=md5
27 27
lang=fr
28
use_kerberos=False
29 28
help_link=http://foo.bar/help
30 29
logo_link = /
31 30

  
vigigraph/config/middleware.py
11 11
from pkg_resources import resource_filename, working_set
12 12
from paste.cascade import Cascade
13 13
from paste.urlparser import StaticURLParser
14
from vigilo.turbogears.repoze_who import make_middleware_with_config
15 14
from logging import getLogger
16 15

  
17 16
__all__ = ['make_app']
......
41 40
    """
42 41
    app = make_base_app(global_conf, full_stack=full_stack, **app_conf)
43 42

  
44
    # Ajout du middleware d'authentification.
45
    app = make_middleware_with_config(
46
        app, global_conf,
47
        app_conf.get('auth.config', 'who.ini'),
48
        None,
49
        None,
50
        app_conf.get('skip_authentication')
51
    )
52
    # On force l'utilisation d'un logger nommé "auth"
53
    # pour la compatibilité avec TurboGears.
54
    app.logger = getLogger('auth')
55

  
56 43
    # On définit 2 middlewares pour fichiers statiques qui cherchent
57 44
    # les fichiers dans le thème actuellement chargé.
58 45
    # Le premier va les chercher dans le dossier des fichiers spécifiques
vigigraph/controllers/root.py
12 12
                                    has_permission, in_group
13 13
from pkg_resources import resource_filename
14 14

  
15
from vigilo.turbogears.controllers import BaseController
15
from vigilo.turbogears.controllers.auth import AuthController
16 16
from vigilo.turbogears.controllers.error import ErrorController
17 17
from vigilo.turbogears.controllers.proxy import ProxyController
18 18
from vigilo.turbogears.controllers.api.root import ApiRootController
......
24 24
LOGGER = logging.getLogger(__name__)
25 25

  
26 26
# pylint: disable-msg=R0201
27
class RootController(BaseController):
27
class RootController(AuthController):
28 28
    """
29 29
    The root controller for the vigigraph application.
30 30
    """
......
99 99
            fhandle.close()
100 100

  
101 101
        return translations
102

  
103
    @expose('login.html')
104
    def login(self, came_from='/'):
105
        """Start the user login."""
106
        login_counter = request.environ['repoze.who.logins']
107
        if login_counter > 0:
108
            flash(_('Wrong credentials'), 'warning')
109
        return dict(page='login', login_counter=str(login_counter),
110
                    came_from=came_from)
111

  
112
    @expose()
113
    def post_login(self, came_from='/'):
114
        """
115
        Redirect the user to the initially requested page on successful
116
        authentication or redirect her back to the login page if login failed.
117

  
118
        """
119
        if not request.identity:
120
            login_counter = request.environ['repoze.who.logins'] + 1
121
            redirect('/login', came_from=came_from, __logins=login_counter)
122
        userid = request.identity['repoze.who.userid']
123
        LOGGER.info(_('"%(username)s" logged in (from %(IP)s)') % {
124
                'username': userid,
125
                'IP': request.remote_addr,
126
            })
127
        flash(_('Welcome back, %s!') % userid)
128
        redirect(came_from)
129

  
130
    @expose()
131
    def post_logout(self, came_from='/'):
132
        """
133
        Redirect the user to the initially requested page on logout and say
134
        goodbye as well.
135

  
136
        """
137
        LOGGER.info(_('Some user logged out (from %(IP)s)') % {
138
                'IP': request.remote_addr,
139
            })
140
        flash(_('We hope to see you soon!'))
141
        redirect(came_from)
who.ini
5 5

  
6 6
[plugin:basicauth]
7 7
use = repoze.who.plugins.basicauth:make_plugin
8
realm=Vigilo
8
realm = Vigilo
9 9

  
10 10
[plugin:friendlyform]
11 11
use = repoze.who.plugins.friendlyform:FriendlyFormPlugin
......
16 16
post_login_url = /post_login
17 17
post_logout_url = /post_logout
18 18

  
19
[plugin:sqlauth]
20
use = vigilo.turbogears.repoze_plugins:auth_plugin
21

  
22 19
[general]
23
;request_classifier = repoze.who.classifiers:default_request_classifier
24
request_classifier = vigilo.turbogears.repoze_plugins:vigilo_api_classifier
20
request_classifier = vigilo.turbogears.repoze.classifier:vigilo_classifier
25 21
challenge_decider = repoze.who.classifiers:default_challenge_decider
26 22

  
27 23
[identifiers]
......
32 28

  
33 29
[authenticators]
34 30
plugins =
35
    sqlauth
31
    vigilo.turbogears.repoze.plugins.sqlauth:plugin
36 32

  
37 33
[challengers]
38 34
plugins =
......
41 37

  
42 38
[mdproviders]
43 39
plugins =
44
    vigilo.turbogears.repoze_plugins:md_plugin
45
    vigilo.turbogears.repoze_plugins:md_group_plugin
40
    vigilo.turbogears.repoze.plugins.mduser:plugin
41
    vigilo.turbogears.repoze.plugins.mdgroups:plugin

Also available in: Unified diff