remove she-bang lines.
[catagits/Catalyst-Plugin-Authentication.git] / lib / Catalyst / Plugin / Authentication.pm
index 2c4bc66..5c9c880 100644 (file)
@@ -1,5 +1,3 @@
-#!/usr/bin/perl
-
 package Catalyst::Plugin::Authentication;
 
 use base qw/Class::Accessor::Fast Class::Data::Inheritable/;
@@ -21,7 +19,7 @@ use Class::Inspector;
 #      constant->import(have_want => eval { require Want });
 #}
 
-our $VERSION = "0.09999_02";
+our $VERSION = "0.10002";
 
 sub set_authenticated {
     my ( $c, $user, $realmname ) = @_;
@@ -40,32 +38,10 @@ sub set_authenticated {
         $c->save_user_in_session($user, $realmname);
     }
     $user->auth_realm($realmname);
-    $user->store(ref($c->auth_realms->{$realmname}{'store'}));
     
     $c->NEXT::set_authenticated($user, $realmname);
 }
 
-sub _should_save_user_in_session {
-    my ( $c, $user ) = @_;
-
-    $c->_auth_sessions_supported
-    and $c->config->{authentication}{use_session}
-    and $user->supports("session");
-}
-
-sub _should_load_user_from_session {
-    my ( $c, $user ) = @_;
-
-    $c->_auth_sessions_supported
-    and $c->config->{authentication}{use_session}
-    and $c->session_is_valid;
-}
-
-sub _auth_sessions_supported {
-    my $c = shift;
-    $c->isa("Catalyst::Plugin::Session");
-}
-
 sub user {
     my $c = shift;
 
@@ -149,7 +125,10 @@ sub find_user {
 sub _user_in_session {
     my $c = shift;
 
-    return unless $c->_should_load_user_from_session;
+    return unless
+        $c->isa("Catalyst::Plugin::Session")
+        and $c->config->{authentication}{use_session}
+        and $c->session_is_valid;
 
     return $c->session->{__user};
 }
@@ -168,10 +147,7 @@ sub auth_restore_user {
     
     # this sets the realm the user originated in.
     $user->auth_realm($realmname);
-    ## compatibility - some pre 0.10 store / credentials may need the store name,
-    ## this is not used by the current api in any form.
-    $user->store(ref($c->auth_realms->{$realmname}{'store'}));
-    
+        
     return $user;
 
 }
@@ -210,12 +186,19 @@ sub _authentication_initialize {
         }
     } else {
         
-        ## BACKWARDS COMPATIBILITY - if realm is not defined - then we are probably dealing
+        ## BACKWARDS COMPATIBILITY - if realms is not defined - then we are probably dealing
         ## with an old-school config.  The only caveat here is that we must add a classname
         
+        ## also - we have to treat {store} as {stores}{default} - because 
+        ## while it is not a clear as a valid config in the docs, it 
+        ## is functional with the old api. Whee!
+        if (exists($cfg->{'store'}) && !exists($cfg->{'stores'}{'default'})) {
+            $cfg->{'stores'}{'default'} = $cfg->{'store'};
+        }
+
         foreach my $storename (keys %{$cfg->{'stores'}}) {
             my $realmcfg = {
-                store => $cfg->{'stores'}{$storename},
+                store => { class => $cfg->{'stores'}{$storename} },
             };
             $app->setup_auth_realm($storename, $realmcfg);
         }
@@ -246,7 +229,7 @@ sub setup_auth_realm {
 
     # a little niceness - since most systems seem to use the password credential class, 
     # if no credential class is specified we use password.
-    $config->{credential}{class} ||= "Catalyst::Plugin::Authentication::Credential::Password";
+    $config->{credential}{class} ||= '+Catalyst::Plugin::Authentication::Credential::Password';
 
     my $credentialclass = $config->{'credential'}{'class'};
     
@@ -274,8 +257,20 @@ sub setup_auth_realm {
                                             };
     }
     
-    $app->auth_realms->{$realmname}{'store'} = $storeclass->new($config->{'store'}, $app);
-    $app->auth_realms->{$realmname}{'credential'} = $credentialclass->new($config->{'credential'}, $app);
+    ## a little cruft to stay compatible with some poorly written stores / credentials
+    ## we'll remove this soon.
+    if ($storeclass->can('new')) {
+        $app->auth_realms->{$realmname}{'store'} = $storeclass->new($config->{'store'}, $app);
+    } else {
+        $app->log->error("THIS IS DEPRECATED: $storeclass has no new() method - Attempting to use uninstantiated");
+        $app->auth_realms->{$realmname}{'store'} = $storeclass;
+    }
+    if ($credentialclass->can('new')) {
+        $app->auth_realms->{$realmname}{'credential'} = $credentialclass->new($config->{'credential'}, $app);
+    } else {
+        $app->log->error("THIS IS DEPRECATED: $credentialclass has no new() method - Attempting to use uninstantiated");
+        $app->auth_realms->{$realmname}{'credential'} = $credentialclass;
+    }
 }
 
 sub auth_realms {
@@ -356,7 +351,13 @@ sub default_auth_store {
 
     if ( my $new = shift ) {
         $self->auth_realms->{'default'}{'store'} = $new;
-        my $storeclass = ref($new);
+        
+        my $storeclass;
+        if (ref($new)) {
+            $storeclass = ref($new);
+        } else {
+            $storeclass = $new;
+        }
         
         # BACKWARDS COMPATIBILITY - if the store class does not define find_user, we define it in terms 
         # of get_user and add it to the class.  this is because the auth routines use find_user,