Oskar Ahner dijo [Wed, Jan 10, 2007 at 08:02:56PM +0100]:
> >Umh... I understand that "clean" is very subjective, but it's cleaner
> >for me sometimes to exit this way. In this specific case, I'm calling
> >exit from my redirect method, in order to _avoid_ going through the
> >rest of the logic - i.e., at user authentication time, if the user is
> >not successfully authenticated, from the Embperl base.pm's init
> >method, I just call $epreq->{webclient}->redirect('login.html'), and
> >that's it.
> >
> Ok, I didn't mean it to do it uncleanly :-) I was thinking about a
> solution where a "message" can be
> passed between the different phases (like $r->notes in mod_perl). In
> such a case You can set a flag to indicate failure for instance,
> and all other sub routines check for this status flag.
I understand you... I might have done this earlier, before getting the
application working ;-) But right now, if I don't have to, I'd rather
not shake the mix too hard ;-)
> Btw, are You
> coding your authentication mechanism
> in embperl or mod perl? I tried to do it in embperl but ended up in mod
> perl by it it's "lower level nature".
> But I'm interrested in authentication modules written purley in embperl.
It depends on what do you want to achieve - I am not a fan of most
authentication methods used in mod_perl (i.e. HTTP basic
authentication), as they usually involve a login/passwd-equivalent
exchange at every request. I prefer doing my authentication against a
(secure enough, of course) cookie stored in the client linked to the
session information which resides only in the server - And that's
precisely what embperl provides. I'm simplifying this from my base.pm
(I can send you the whole system if you are interested anyway - In
this case, it's a simplistic Web-to-SMB read-only gateway). As for
every connection I need to instantiate the SmbGate object (which, in
turn, contains a Filesys::SmbClient) with the user's login and
password, I store them both in %udat. Here it goes:
sub init {
my ($self);
$self = shift;
# Errors and messages should always be arrayrefs, even if empty
$udat{err} = [] unless $udat{err};
$udat{msg} = [] unless $udat{msg};
$epreq->{warnings} = SmbGate::Embperl::Warnings->new($udat{err},
$udat{msg});
# Set up the base SmbGate object
$epreq->{smb} = SmbGate->new();
$epreq->{webclient} = SmbGate::Embperl::WebClient->new($epreq,
\%http_headers_out,
\%udat);
$epreq->{webclient}->content_type('text/html'); # Can be changed later
# Validate user if we get login/passwd
if ($fdat{login} and $fdat{passwd}) {
# Just pass them on to the session - We will check them right away.
# We store both login _and_ password in our session, as we will
# need both to start future Samba sessions
$udat{login} = $fdat{login};
$udat{passwd} = $fdat{passwd};
}
if ($udat{login} and $udat{passwd}) {
$epreq->{smb}->login("smb://iiec/$udat{login}",
$udat{login}, $udat{passwd}) or
$epreq->{warnings}->add_err("Invalid user/password");
}
# Initialize the HTML helper module (this has to happen after the user is
# logged in)
$epreq->{html} = SmbGate::Embperl::HtmlHelper->new(user =>
$udat{login},
base => $epreq->{conf}->base_url);
# Debug mode? Take care of it here. Leave authorization to the
called
# methods.
$epreq->{webclient}->set_debug if $fdat{set_debug};
$epreq->{webclient}->unset_debug if $fdat{unset_debug};
0;
}
Greetings,
--
Gunnar Wolf - [EMAIL PROTECTED] - (+52-55)5623-0154 / 1451-2244
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]