diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthFacebook.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthFacebook.pm new file mode 100644 index 000000000..531bc4297 --- /dev/null +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/AuthFacebook.pm @@ -0,0 +1,186 @@ +##@file +# Facebook authentication backend file + +##@class +# Facebook authentication backend class. +package Lemonldap::NG::Portal::AuthFacebook; + +use strict; +use Lemonldap::NG::Portal::Simple; +use Lemonldap::NG::Common::Regexp; +use LWP::UserAgent; +#use URI::Escape; +use Net::Facebook::Oauth2; + +our $VERSION = '1.3.0'; +#our $initDone; + +#BEGIN { +# eval { +# require threads::shared; +# threads::shared::share($initDone); +# }; +#} + +## @method LWP::UserAgent ua() +# @return LWP::UserAgent object +sub ua { + my $self = shift; + return $self->{ua} ||= LWP::UserAgent->new(); +} + +## @apmethod int authInit() +# @return Lemonldap::NG::Portal constant +sub authInit { + PE_OK; +} + +## @apmethod int extractFormInfo() +# Read username return by Facebook authentication system. +# @return Lemonldap::NG::Portal constant +sub extractFormInfo { + my $self = shift; + + # 1. Check Facebook responses + if ( $self->param('code') ) { + } + + # 2. Redirect user to Facebook login page: + # * no OpenID response or missing datas + print $self->redirect($check_url); + $self->quit(); +} + +## @apmethod int setAuthSessionInfo() +# Set _user and authenticationLevel. +# @return Lemonldap::NG::Portal constant +sub setAuthSessionInfo { + my $self = shift; + + $self->{sessionInfo}->{'_user'} = $self->{user}; + + $self->{sessionInfo}->{authenticationLevel} = $self->{facebookAuthnLevel}; + + PE_OK; +} + +## @apmethod int authenticate() +# Does nothing. +# @return Lemonldap::NG::Portal constant +sub authenticate { + PE_OK; +} + +## @apmethod int authFinish() +# Does nothing. +# @return Lemonldap::NG::Portal constant +sub authFinish { + PE_OK; +} + +## @apmethod int authLogout() +# Does nothing +# @return Lemonldap::NG::Portal constant +sub authLogout { + PE_OK; +} + +## @apmethod boolean authForce() +# Does nothing +# @return result +sub authForce { + return 0; +} + +## @method string getDisplayType +# @return display type +sub getDisplayType { + return "logo"; +} + +1; +__END__ + +=head1 NAME + +=encoding utf8 + +Lemonldap::NG::Portal::AuthFacebook - Perl extension for building Lemonldap::NG +compatible portals with Facebook authentication. + +=head1 SYNOPSIS + + use Lemonldap::NG::Portal::SharedConf; + my $portal = new Lemonldap::NG::Portal::Simple( + configStorage => {...}, # See Lemonldap::NG::Portal + authentication => 'Facebook', + ); + + if($portal->process()) { + # Write here the menu with CGI methods. This page is displayed ONLY IF + # the user was not redirected here. + print $portal->header('text/html; charset=utf8'); # DON'T FORGET THIS (see CGI(3)) + print "..."; + } + else { + # If the user enters here, IT MEANS THAT CAS REDIRECTION DOES NOT WORK + print $portal->header('text/html; charset=utf8'); # DON'T FORGET THIS (see CGI(3)) + print "