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 "

Unable to work

"; + print "This server isn't well configured. Contact your administrator."; + print ""; + } + +=head1 DESCRIPTION + +This library just overload few methods of Lemonldap::NG::Portal::Simple to use +Facebook authentication mechanism. + +See L for usage and other methods. + +=head1 SEE ALSO + +L, L, +L, L +L + +=head1 AUTHOR + +=over + +=item Xavier Guimard, Ex.guimard@free.frE + +=back + +=head1 BUG REPORT + +Use OW2 system to report bug or ask for features: +L + +=head1 DOWNLOAD + +Lemonldap::NG is available at +L + +=head1 COPYRIGHT AND LICENSE + +=over + +=item Copyright (C) 2013 by Xavier Guimard, Ex.guimard@free.frE + +=back + +This library is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see L. + +=cut +