Re: mod_perl waters too deep

André Warnier <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
Tosh Cooey wrote:
> You may have seen my other recent questions to the list this month, the 
> gist of which is:
> 
> I want to setup an application for multiple clients, each of whom have 
> their own users.
> 
> http://www.site.com/clientA/application.pl
> http://www.site.com/clientB/application.pl
> http://www.site.com/clientX/application.pl
> 
> So the users of "clientA" log in to 
> http://www.site.com/clientA/application.pl and are authenticated with 
> Apache2::AuthCookieDBI
> 
> Now the directories clientA, clientB, etc. do not exist, I'm using 
> mod_rewrite to sort that out, and here starts my problems.  First I'm 
> lost with authenticating since there's no "real" resource to 
> authenticate against, but I seem to have solved that by forcing 
> authentication against all *.pl files which luckily do exist ;)
> 
> It gets more complicated later because some URLs like
> http://www.site.com/clientA/iCal can't use session cookies but have to 
> use BASIC AUTH, and other *.pl files can't have any authentication 
> applied against them.

Hi.  I kind of remember your posts, and kind of remember also that I 
thought that you were going about this the hard way.

I am more than willing to assist you professionally (since that's what I 
do for a living), but in the meantime, what stops you from doing 
something like this :

<Location /clientA>
   AuthType MyOwn
   PerlSetVar MyAuthType "form"
   PerlAuthenHandler my::module::dbi-based
   ...
</Location>
<Location /clientA/iCal>
   AuthType MyOwn
   PerlSetVar MyAuthType "basic"
   PerlAuthenHandler my::module::dbi-based (or whatever)
   ...
</Location>
<Location /clientA/somescript.pl>
   AuthType nothing
   PerlSetVar MyAuthType "auto"
   PerlSetVar MyAutoId "anonymous"
   PerlAuthenHandler my::module::dbi-based (or whatever)
</Location>

<Location /clientB>
   AuthType MyOwn
   PerlSetVar MyAuthType "form"
   PerlAuthenHandler my::module::dbi-based
   ...
</Location>
<Location /clientB/iCal>
   AuthType MyOwn
   PerlSetVar MyAuthType "basic"
   PerlAuthenHandler my::module::dbi-based (or whatever)
   ...
</Location>
etc...

(You can use LocationMatch in case you need finer control)

If you really have only a few different "clientX", then that seems like 
an easy enough configuration.
(If you have many, then it may be easier to do this another way, and 
have your module determine which "clientX" this is and react appropriately.)


Apache itself will pick the "most precise" matching Location section 
applying to the request URL.
Your authentication module should check on $r->dir_config('MyAuthType') 
to determine what kind of authentication to use with the client 
(form-based, basic or none).

Maybe it is not time for a nervous breakdown yet..
;-)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.