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]