initial upload
[catagits/Catalyst-Authentication-Credential-FBConnect.git] / lib / Catalyst / Authentication / Credential / FBConnect.pm
diff --git a/lib/Catalyst/Authentication/Credential/FBConnect.pm b/lib/Catalyst/Authentication/Credential/FBConnect.pm
new file mode 100644 (file)
index 0000000..779c486
--- /dev/null
@@ -0,0 +1,152 @@
+package Catalyst::Authentication::Credential::FBConnect;
+use strict;
+use warnings;
+
+use Moose;
+
+has _config => ( is => 'rw' );
+has debug => ( is => 'rw' );
+has key => ( is => 'rw' );
+has secret => ( is => 'rw' );
+has app_name => ( is => 'rw' );
+has fbconnect => ( is => 'rw' );
+
+use WWW::Facebook::API;
+use Catalyst::Exception ();
+
+sub new {
+       my ($class, $config, $c, $realm) = @_;
+
+       my $self = { _config => {
+               %{ $config },
+               %{ $realm->{config} }
+       } };
+
+       bless $self, $class;
+
+       $self->debug( $self->_config->{debug} );
+
+       $self->key( $self->_config->{key} );
+       $self->secret( $self->_config->{secret} );
+       $self->app_name( $self->_config->{app_name} );
+
+       $self->fbconnect( WWW::Facebook::API->new(
+               desktop => 0,
+               app_name => $self->app_name,
+               api_key => $self->key,
+               secret => $self->secret
+       ) );
+       
+       return $self;
+}
+
+sub authenticate {
+       my ($self, $c, $realm, $auth_info) = @_;
+
+       my $token = $c->req->method eq 'GET'
+               ? $c->req->query_params->{'auth_token'}
+               : $c->req->body_params->{'auth_token'};
+
+       if( defined $token ) {
+
+               $self->fbconnect->auth->get_session( $token );
+
+               my $user = +{
+                       session_uid => $self->fbconnect->session_uid,
+                       session_key => $self->fbconnect->session_key,
+                       session_expires => $self->fbconnect->session_expires
+               };      
+
+               my $user_obj = $realm->find_user( $user, $c );
+               
+               return $user_obj if ref $user_obj;
+
+               $c->log->debug( 'Verified FBConnect itentity failed' ) if $self->debug;
+
+               return;
+       }
+       else {
+
+               $c->res->redirect( $self->fbconnect->get_login_url( next => $c->uri_for( $c->action ) ) );
+       }
+
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Catalyst::Authentication::Credential::FBConnect - Facebook credential for Catalyst::Plugin::Authentication framework.
+
+=head1 VERSION
+
+0.01
+
+=head1 SYNOPSIS
+
+In MyApp.pm
+
+ use Catalyst qw/
+      Authentication
+      Session
+      Session::Store::FastMmap
+      Session::State::Cookie
+ /;
+
+
+In myapp.conf
+
+ <Plugin::Authentication>
+      default_realm    facebook
+      <realms>
+           <facebook>
+                <credential>
+                     class     FBConnect
+               </credential>
+               key my_app_key
+                secret my_app_secret
+                app_name my_app_name
+           </facebook>
+      </realms>
+</Plugin::Authentication>
+
+
+In controller code,
+
+  sub facebook : Local {
+       my ($self, $c) = @_;
+
+       if( $c->authenticate() ) {
+             #do something with $c->user
+       }
+  }
+
+
+
+=head1 USER METHODS
+
+=over 4
+
+=item $c->user->session_uid
+
+=item $c->user->session_key
+
+=item $c->user->session_expires
+
+=back
+
+=head1 AUTHOR
+
+Cosmin Budrica E<lt>cosmin@sinapticode.comE<gt>
+
+Bogdan Lucaciu E<lt>bogdan@sinapticode.comE<gt>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2009 Sinapticode. All rights reserved 
+
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=cut