I suspect taking a look at the Paste urlmap composite implementation would give 
you a clue as to what needs to change in the plugin (e.g. figure out how/if it 
signals that a particular prefix is in use).  Even if it doesn't immediately go 
into the repoze.who mainline, you should be able to make a new plugin through 
judicious cut and paste and hack on it.

In particular, its' "challenge" method looks like this:

     # IChallenger
     def challenge(self, environ, status, app_headers, forget_headers):
         url_parts = list(urlparse.urlparse(self.login_form_url))
         query = url_parts[4]
         query_elements = cgi.parse_qs(query)
         came_from = environ.get('came_from', construct_url(environ))
         query_elements['came_from'] = came_from
         url_parts[4] = urllib.urlencode(query_elements, doseq=True)
         login_form_url = urlparse.urlunparse(url_parts)
         headers = [ ('Location', login_form_url) ]
         headers = headers + forget_headers
         return HTTPFound(headers=headers)

The login_form_url should be composed dynamically based on stuff in the 
environment set by the urlmap composite plus whatever is set in the 
configuration of the plugin.

- C

percious wrote:
> Since the tg.repoze.who creates a paster app, I don't really see why
> the page could not know where in the url path it should direct
> people.  I am ccing Alberto in the hopes that he can help us clear
> this stuff up.
> 
> cheers.
> -chris
> 
> On May 9, 5:32 pm, Chris McDonough <[EMAIL PROTECTED]> wrote:
>> It's statically configured now.  The plugin itself would need to change to
>> support redirecting to a dynamic URL.
>>
>> If you weren't up for changing the plugin, you could *try* using the
>> "non-redirecting" form plugin (replace the call to "form = 
>> RedirectingFormPlugin
>> ..." with what's below).  This plugin renders a login form directly without
>> needing to redirect:
>>
>> FORMBODY = """
>> <html>
>> <head>
>>    <title>Log In</title>
>> </head>
>> <body>
>>    <div>
>>       <b>Log In</b>
>>    </div>
>>    <br/>
>>    <form method="POST" action="?__do_login=true">
>>      <table border="0">
>>      <tr>
>>        <td>User Name</td>
>>        <td><input type="text" name="login"></input></td>
>>      </tr>
>>      <tr>
>>        <td>Password</td>
>>       <td><input type="password" name="password"></input></td>
>>      </tr>
>>      <tr>
>>        <td></td>
>>        <td><input type="submit" name="submit" value="Log In"/></td>
>>      </tr>
>>      </table>
>>    </form>
>>    <pre>
>>    </pre>
>> </body>
>> </html>
>> """
>> form = FormPlugin(login_qs='__do_login', rememberer_name='cookie', FORMBODY)
>>
>> - C
>>
>>
>>
>> percious wrote:
>>> Yeah, I realized that.  I was just wondering, how can I get it to
>>> automatically figure out the paste prefix?  This is something that
>>> goes off without a hitch in toscawidgets.
>>> cheers.
>>> -chris
>>> On May 9, 5:15 pm, Chris McDonough <[EMAIL PROTECTED]> wrote:
>>>> I think what you might be seeing if you're using the configuration of 
>>>> repoze.who
>>>> implied 
>>>> byhttp://svn.turbogears.org/projects/tgrepozewho/trunk/tgrepozewho/midd...
>>>> is that the thing that shows the challenge (the form plugin) is configured
>>>> statically, e.g. (from that file):
>>>>      form = RedirectingFormPlugin('/login', '/login_handler', 
>>>> '/logout_handler',
>>>>                                   rememberer_name='cookie')
>>>> The first argument there is the "login_form_url".  That's the URL that
>>>> repoze.who will redirect to when a login is required.  You probably need to
>>>> change this to support your environment.
>>>> - C
>>>> percious wrote:
>>>>> So, I almost have my project up and running on the production server.
>>>>> The thing is, I have a large server with many applications, and they
>>>>> are all mounted at the highest level of the global tree: ie
>>>>> http://my.ip.address.com/plone
>>>>> http://my.ip.address.com/tg2app
>>>>> All the applications are routed with apache using:
>>>>> <VirtualHost *>
>>>>>           DocumentRoot /my/tg2app/public
>>>>>           ProxyPass /tg2app/http://127.0.0.1:8080/
>>>>>           ProxyPassReverse /tg2app/http://127.0.0.1:8080/
>>>>>       ...
>>>>> </VirtualHost>
>>>>> ok, so this all works fine with wsgi, all I have to do is add
>>>>> something like:
>>>>> [filter:proxy-prefix]
>>>>> use = egg:PasteDeploy#prefix
>>>>> prefix = /tg2app
>>>>> [app:main]
>>>>> filter-with = proxy-prefix
>>>>> to my ini file and it works.
>>>>> Until I go to login.
>>>>> For whatever reason, the login script keeps sending me back to the
>>>>> root...  Is there a fix for this?
>>>>> Also, once I have that working, it appears that I will have a
>>>>> requirement to authenticate using Apache's authentication (ick) is
>>>>> there a way to send the Apache Authentication over to repoze.who?
>>>>> cheers.
>>>>> -chris
>>>>> _______________________________________________
>>>>> Repoze-dev mailing list
>>>>> [EMAIL PROTECTED]
>>>>> http://lists.repoze.org/listinfo/repoze-dev
>>>> _______________________________________________
>>>> Repoze-dev mailing list
>>>> [EMAIL PROTECTED]://lists.repoze.org/listinfo/repoze-dev
>>> _______________________________________________
>>> Repoze-dev mailing list
>>> [EMAIL PROTECTED]
>>> http://lists.repoze.org/listinfo/repoze-dev
>> _______________________________________________
>> Repoze-dev mailing list
>> [EMAIL PROTECTED]://lists.repoze.org/listinfo/repoze-dev
> _______________________________________________
> Repoze-dev mailing list
> Repoze-dev@lists.repoze.org
> http://lists.repoze.org/listinfo/repoze-dev
> 

_______________________________________________
Repoze-dev mailing list
Repoze-dev@lists.repoze.org
http://lists.repoze.org/listinfo/repoze-dev

Reply via email to