#2277: Authz notification (WebFlash) messages are broken when TG2 doesn't
configures Repoze auth software
------------------------+---------------------------------------------------
 Reporter:  Gustavo     |       Owner:                        
     Type:  defect      |      Status:  new                   
 Priority:  high        |   Milestone:  2.0rc1                
Component:  TurboGears  |     Version:  2.0b7                 
 Severity:  critical    |    Keywords:  WebFlash, repoze, auth
------------------------+---------------------------------------------------
 If I configure repoze.who and repoze.what manually, when authorization is
 denied I can't see the reason flashed anymore.

 Everything else works perfectly, I can even see the reason printed in the
 logs, but !WebFlash's cookie isn't set and thus that message is not
 printed in the page.

 To reproduce it:
  1. Tell TG not to configure Repoze auth middleware by removing/commenting
 the following line in yourapp/config/app_cfg.py:
 {{{
 base_config.auth_backend = 'sqlalchemy'
 }}}
  1. Add the middleware through the following function (define it in
 yourapp/config/auth.py):
 {{{
 from logging import INFO, getLogger

 from repoze.who.plugins.auth_tkt import AuthTktCookiePlugin
 from repoze.who.plugins.sa import (SQLAlchemyUserMDPlugin,
                             SQLAlchemyAuthenticatorPlugin)
 from repoze.who.plugins.friendlyform import FriendlyFormPlugin

 from repoze.what.middleware import setup_auth
 from repoze.what.plugins.sql import SqlGroupsAdapter,
 SqlPermissionsAdapter

 from yourapp.model import User, Group, Permission, DBSession

 def add_auth(app):
     """Add Repoze auth middleware to ``app``"""
     # --- Configuring repoze.who:
     who_args = {}
     # Adding the identifier plugins:
     cookie = AuthTktCookiePlugin(secret='secret',
                                  cookie_name='authtkt')
     form = FriendlyFormPlugin(
         login_form_url='/login',
         login_handler_path='/login_handler',
         post_login_url='/post_login',
         logout_handler_path='/logout_handler',
         post_logout_url='/post_logout',
         rememberer_name='cookie')
     who_args['identifiers'] = [
         ('cookie', cookie),
         ('main_identifier', form)]
     # Adding authenticators:
     sql_authn = SQLAlchemyAuthenticatorPlugin(User,
                                               DBSession)
     who_args['authenticators'] = [
         ('sql_authn', sql_authn)]
     # Our form is also a challenger:
     who_args['challengers'] = [
         ('form', form)]
     # Adding metadata providers:
     sql_user_md = SQLAlchemyUserMDPlugin(User, DBSession)
     who_args['mdproviders'] = [
         ('sql_user', sql_user_md)]
     # Setting the logs up:
     who_args['log_stream'] = getLogger('auth')
     who_args['log_level'] = INFO

     # --- Configuring repoze.what:
     # Adding group source adapters:
     groups_in_db = SqlGroupsAdapter(Group, User, DBSession)
     group_adapters = {'sql_groups': groups_in_db}
     # Adding permission source adapters:
     perms_in_db = SqlPermissionsAdapter(Permission, Group,
                                         DBSession)
     permission_adapters = {'sql_perms': perms_in_db}

     app_with_mw = setup_auth(app, group_adapters,
                              permission_adapters,
                              **who_args)
     return app_with_mw

 }}}
  1. Go to yourapp/config/middleware and add the middleware:
 {{{
 from yourapp.config.app_cfg import base_config
 from yourapp.config.environment import load_environment
 from yourapp.config.auth import add_auth

 __all__ = ['make_app']

 make_base_app = base_config.setup_tg_wsgi_app(load_environment)

 def make_app(global_conf, full_stack=True, **app_conf):
     app = make_base_app(global_conf, full_stack=True, **app_conf)

     # Wrap your base TurboGears 2 application with custom middleware here
     app = add_auth(app)
     return app
 }}}

 Finally, visit a protected page like
 http://127.0.0.1:8080/manage_permission_only and you'll see that the
 reason why authorization was denied is no longer flashed.

 I already tried to find what's wrong, but I couldn't. I have the feeling
 that it's something microscopical.

-- 
Ticket URL: <http://trac.turbogears.org/ticket/2277>
TurboGears <http://www.turbogears.org/>
TurboGears front-to-back web development

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "TurboGears Tickets" group.
This group is read-only. No posting by normal members allowed.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/turbogears-tickets?hl=en?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to