AuthFacebook in progress:
* works fine for authentication * TODO: build $self->{user} and get datas
This commit is contained in:
parent
5ca5345f6e
commit
f5049773c7
|
@ -9,18 +9,17 @@ use strict;
|
||||||
use Lemonldap::NG::Portal::Simple;
|
use Lemonldap::NG::Portal::Simple;
|
||||||
use Lemonldap::NG::Common::Regexp;
|
use Lemonldap::NG::Common::Regexp;
|
||||||
use LWP::UserAgent;
|
use LWP::UserAgent;
|
||||||
#use URI::Escape;
|
use URI::Escape;
|
||||||
use Net::Facebook::Oauth2;
|
|
||||||
|
|
||||||
our $VERSION = '1.3.0';
|
our $VERSION = '1.3.0';
|
||||||
#our $initDone;
|
our $initDone;
|
||||||
|
|
||||||
#BEGIN {
|
BEGIN {
|
||||||
# eval {
|
eval {
|
||||||
# require threads::shared;
|
require threads::shared;
|
||||||
# threads::shared::share($initDone);
|
threads::shared::share($initDone);
|
||||||
# };
|
};
|
||||||
#}
|
}
|
||||||
|
|
||||||
## @method LWP::UserAgent ua()
|
## @method LWP::UserAgent ua()
|
||||||
# @return LWP::UserAgent object
|
# @return LWP::UserAgent object
|
||||||
|
@ -29,9 +28,46 @@ sub ua {
|
||||||
return $self->{ua} ||= LWP::UserAgent->new();
|
return $self->{ua} ||= LWP::UserAgent->new();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## @method Net::Facebook::Oauth2 fb()
|
||||||
|
# @return Net::Facebook::Oauth2 object
|
||||||
|
sub fb {
|
||||||
|
my $self = shift;
|
||||||
|
return $self->{_fb} if ( $self->{_fb} );
|
||||||
|
|
||||||
|
# Build callback uri
|
||||||
|
my $sep = '?';
|
||||||
|
my $ret = $self->{portal};
|
||||||
|
foreach my $v (
|
||||||
|
[ $self->{_url}, "url" ],
|
||||||
|
[ $self->param( $self->{authChoiceParam} ), $self->{authChoiceParam} ]
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if ( $v->[0] ) {
|
||||||
|
$ret .= "$sep$v->[1]=$v->[0]";
|
||||||
|
$sep = '&';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build Net::Facebook::Oauth2 object
|
||||||
|
$self->{_fb} = Net::Facebook::Oauth2->new(
|
||||||
|
application_id => '316131503062',
|
||||||
|
application_secret => 'e3979b1a6fa02f4833505ccc80987ae3',
|
||||||
|
callback => $ret,
|
||||||
|
);
|
||||||
|
unless ( $self->{_fb} ) {
|
||||||
|
$self->abort('Unable to build Net::Facebook::Oauth2 object');
|
||||||
|
}
|
||||||
|
return $self->{_fb};
|
||||||
|
}
|
||||||
|
|
||||||
## @apmethod int authInit()
|
## @apmethod int authInit()
|
||||||
# @return Lemonldap::NG::Portal constant
|
# @return Lemonldap::NG::Portal constant
|
||||||
sub authInit {
|
sub authInit {
|
||||||
|
my $self = shift;
|
||||||
|
unless ($initDone) {
|
||||||
|
eval { require Net::Facebook::Oauth2; };
|
||||||
|
$self->abort( 'Unable to load Net::Facebook::Oauth2', $@ ) if ($@);
|
||||||
|
}
|
||||||
PE_OK;
|
PE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,12 +77,39 @@ sub authInit {
|
||||||
sub extractFormInfo {
|
sub extractFormInfo {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
|
# TODO: replace this
|
||||||
|
#
|
||||||
|
# Lemonldap-ng-dev
|
||||||
|
# App ID: **********
|
||||||
|
# App Secret: ************
|
||||||
|
#
|
||||||
|
# Doc : https://developers.facebook.com/tools/explorer
|
||||||
|
#
|
||||||
|
# Other TODO: doc must say that AppID => https://developers.facebook.com/apps
|
||||||
|
#
|
||||||
|
# Datas:
|
||||||
|
# http://graph.facebook.com/100000458059472?fields=id,name,first_name,middle_name,last_name,link,username,gender,locale,timezone,email,location,website
|
||||||
|
|
||||||
# 1. Check Facebook responses
|
# 1. Check Facebook responses
|
||||||
if ( $self->param('code') ) {
|
if ( my $code = $self->param('code') ) {
|
||||||
|
if ( my $access_token = $self->fb()->get_access_token( code => $code ) )
|
||||||
|
{
|
||||||
|
$self->{sessionInfo}->{_facebookToken} = $access_token;
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
$self->{user} = $access_token;
|
||||||
|
return PE_OK;
|
||||||
|
}
|
||||||
|
return PE_BADCREDENTIALS;
|
||||||
}
|
}
|
||||||
|
|
||||||
# 2. Redirect user to Facebook login page:
|
# 2. Else redirect user to Facebook login page:
|
||||||
# * no OpenID response or missing datas
|
|
||||||
|
# Build Facbook redirection
|
||||||
|
my $check_url = $self->fb()->get_authorization_url(
|
||||||
|
scope => [ 'offline_access', 'publish_stream' ],
|
||||||
|
display => 'page',
|
||||||
|
);
|
||||||
print $self->redirect($check_url);
|
print $self->redirect($check_url);
|
||||||
$self->quit();
|
$self->quit();
|
||||||
}
|
}
|
||||||
|
@ -59,7 +122,8 @@ sub setAuthSessionInfo {
|
||||||
|
|
||||||
$self->{sessionInfo}->{'_user'} = $self->{user};
|
$self->{sessionInfo}->{'_user'} = $self->{user};
|
||||||
|
|
||||||
$self->{sessionInfo}->{authenticationLevel} = $self->{facebookAuthnLevel};
|
$self->{sessionInfo}->{authenticationLevel} = $self->{facebookAuthnLevel}
|
||||||
|
|| 1;
|
||||||
|
|
||||||
PE_OK;
|
PE_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user