[Repoze-dev] tg.repoze.who and ProxyPass
Chris McDonough
chrism at plope.com
Mon May 12 13:43:04 EDT 2008
percious wrote:
> Ok, so I started digging, because I have to get this working for work
> now....
> Looking at the Tosca source: http://svn.turbogears.org/projects/ToscaWidgets/trunk/tw/mods/base.py
>
> The "url" function:
>
> def url(self, url):
> """
> Returns the absolute path for the given url.
> """
> prefix = self.request_local.environ['toscawidgets.prefix']
> script_name = self.request_local.environ['SCRIPT_NAME']
> return ''.join([script_name, prefix, url])
>
>
> makes a call to a StackedObjectProxy object and pulls out the
> 'mytg2app' from 'SCRIPT_NAME'. Is it possible to create the same
> StackedObjectProxy in the repoze software so that the redirect does a
> similar thing?
I'm not even sure what a StackedObjectProxy is. I'm pretty sure repoze.who
doesn't want to create one, at least in the general case.
I *think* this is really just a matter of cooperating with the paste.urlmap
middleware. You probably want to pay attention to what paste.urlmap.URLMapper
does in its __call__ method:
def __call__(self, environ, start_response):
host = environ.get('HTTP_HOST', environ.get('SERVER_NAME')).lower()
if ':' in host:
host, port = host.split(':', 1)
else:
if environ['wsgi.url_scheme'] == 'http':
port = '80'
else:
port = '443'
path_info = environ.get('PATH_INFO')
path_info = self.normalize_url(path_info, False)[1]
for (domain, app_url), app in self.applications:
if domain and domain != host and domain != host+':'+port:
continue
if (path_info == app_url
or path_info.startswith(app_url + '/')):
environ['SCRIPT_NAME'] += app_url
environ['PATH_INFO'] = path_info[len(app_url):]
return app(environ, start_response)
environ['paste.urlmap_object'] = self
return self.not_found_application(environ, start_response)
E.g. it munges environ['SCRIPT_NAME'] and environ['PATH_INFO']. Joining some
combination of those two plus the login_form_url should get you what you need, I
think, right?
- C
More information about the Repoze-dev
mailing list