summaryrefslogtreecommitdiff
path: root/plugins/FBConnect
diff options
context:
space:
mode:
authorZach Copley <zach@status.net>2009-10-21 01:07:03 +0000
committerZach Copley <zach@status.net>2009-10-21 01:07:03 +0000
commitd07c9d87504c3909466e2c99a1265af15aba3c3d (patch)
treefefc9a03987083fa713ca5d8d90b17d427deb67f /plugins/FBConnect
parent78e5a5980a21c04cfdacb993ca3c37bf65d21783 (diff)
Gather all the Facebook stuff together in one place
Diffstat (limited to 'plugins/FBConnect')
-rw-r--r--plugins/FBConnect/FBCLoginGroupNav.php114
-rw-r--r--plugins/FBConnect/FBCSettingsNav.php115
-rw-r--r--plugins/FBConnect/FBC_XDReceiver.php68
-rw-r--r--plugins/FBConnect/FBConnectAuth.php461
-rw-r--r--plugins/FBConnect/FBConnectLogin.php67
-rw-r--r--plugins/FBConnect/FBConnectPlugin.css36
-rw-r--r--plugins/FBConnect/FBConnectPlugin.php367
-rw-r--r--plugins/FBConnect/FBConnectSettings.php203
-rw-r--r--plugins/FBConnect/README76
-rw-r--r--plugins/FBConnect/fbfavicon.icobin1150 -> 0 bytes
10 files changed, 0 insertions, 1507 deletions
diff --git a/plugins/FBConnect/FBCLoginGroupNav.php b/plugins/FBConnect/FBCLoginGroupNav.php
deleted file mode 100644
index 81b2520a4..000000000
--- a/plugins/FBConnect/FBCLoginGroupNav.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Menu for login group of actions
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Menu
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @author Zach Copley <zach@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
-
-require_once INSTALLDIR . '/lib/widget.php';
-
-/**
- * Menu for login group of actions
- *
- * @category Output
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @author Zach Copley <zach@status.net>
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- *
- * @see Widget
- */
-
-class FBCLoginGroupNav extends Widget
-{
- var $action = null;
-
- /**
- * Construction
- *
- * @param Action $action current action, used for output
- */
-
- function __construct($action=null)
- {
- parent::__construct($action);
- $this->action = $action;
- }
-
- /**
- * Show the menu
- *
- * @return void
- */
-
- function show()
- {
- $this->action->elementStart('dl', array('id' => 'site_nav_local_views'));
- $this->action->element('dt', null, _('Local views'));
- $this->action->elementStart('dd');
-
- // action => array('prompt', 'title')
- $menu = array();
-
- if (!common_config('site','openidonly')) {
- $menu['login'] = array(_('Login'),
- _('Login with a username and password'));
-
- if (!(common_config('site','closed') || common_config('site','inviteonly'))) {
- $menu['register'] = array(_('Register'),
- _('Sign up for a new account'));
- }
- }
-
- if (common_config('openid', 'enabled')) {
- $menu['openidlogin'] = array(_('OpenID'),
- _('Login or register with OpenID'));
- }
-
- $menu['FBConnectLogin'] = array(_('Facebook'),
- _('Login or register using Facebook'));
-
- $action_name = $this->action->trimmed('action');
- $this->action->elementStart('ul', array('class' => 'nav'));
-
- foreach ($menu as $menuaction => $menudesc) {
- $this->action->menuItem(common_local_url($menuaction),
- $menudesc[0],
- $menudesc[1],
- $action_name === $menuaction);
- }
-
- $this->action->elementEnd('ul');
-
- $this->action->elementEnd('dd');
- $this->action->elementEnd('dl');
- }
-}
diff --git a/plugins/FBConnect/FBCSettingsNav.php b/plugins/FBConnect/FBCSettingsNav.php
deleted file mode 100644
index ed02371e2..000000000
--- a/plugins/FBConnect/FBCSettingsNav.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Menu for login group of actions
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Menu
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @author Zach Copley <zach@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
-
-require_once INSTALLDIR . '/lib/widget.php';
-
-/**
- * A widget for showing the connect group local nav menu
- *
- * @category Output
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @author Zach Copley <zach@status.net>
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- *
- * @see Widget
- */
-
-class FBCSettingsNav extends Widget
-{
- var $action = null;
-
- /**
- * Construction
- *
- * @param Action $action current action, used for output
- */
-
- function __construct($action=null)
- {
- parent::__construct($action);
- $this->action = $action;
- }
-
- /**
- * Show the menu
- *
- * @return void
- */
-
- function show()
- {
-
- $this->action->elementStart('dl', array('id' => 'site_nav_local_views'));
- $this->action->element('dt', null, _('Local views'));
- $this->action->elementStart('dd');
-
- # action => array('prompt', 'title')
- $menu = array();
- if (common_config('xmpp', 'enabled')) {
- $menu['imsettings'] =
- array(_('IM'),
- _('Updates by instant messenger (IM)'));
- }
- if (common_config('sms', 'enabled')) {
- $menu['smssettings'] =
- array(_('SMS'),
- _('Updates by SMS'));
- }
- if (common_config('twitter', 'enabled')) {
- $menu['twittersettings'] =
- array(_('Twitter'),
- _('Twitter integration options'));
- }
- $menu['FBConnectSettings'] =
- array(_('Facebook'),
- _('Facebook Connect settings'));
-
- $action_name = $this->action->trimmed('action');
- $this->action->elementStart('ul', array('class' => 'nav'));
-
- foreach ($menu as $menuaction => $menudesc) {
- $this->action->menuItem(common_local_url($menuaction),
- $menudesc[0],
- $menudesc[1],
- $action_name === $menuaction);
- }
-
- $this->action->elementEnd('ul');
-
- $this->action->elementEnd('dd');
- $this->action->elementEnd('dl');
- }
-}
diff --git a/plugins/FBConnect/FBC_XDReceiver.php b/plugins/FBConnect/FBC_XDReceiver.php
deleted file mode 100644
index 2bc790d5a..000000000
--- a/plugins/FBConnect/FBC_XDReceiver.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
-
-/*
- * Generates the cross domain communication channel file
- * (xd_receiver.html). By generating it we can add some caching
- * instructions.
- *
- * See: http://wiki.developers.facebook.com/index.php/Cross_Domain_Communication_Channel
- */
-class FBC_XDReceiverAction extends Action
-{
-
- /**
- * Do we need to write to the database?
- *
- * @return boolean true
- */
-
- function isReadonly()
- {
- return true;
- }
-
- /**
- * Handle a request
- *
- * @param array $args Arguments from $_REQUEST
- *
- * @return void
- */
-
- function handle($args)
- {
- // Parent handling, including cache check
- parent::handle($args);
- $this->showPage();
- }
-
- function showPage()
- {
- // cache the xd_receiver
- header('Cache-Control: max-age=225065900');
- header('Expires:');
- header('Pragma:');
-
- $this->startXML('html');
-
- $language = $this->getLanguage();
-
- $this->elementStart('html', array('xmlns' => 'http://www.w3.org/1999/xhtml',
- 'xml:lang' => $language,
- 'lang' => $language));
- $this->elementStart('head');
- $this->element('title', null, 'cross domain receiver page');
- $this->script('http://static.ak.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.debug.js');
- $this->elementEnd('head');
- $this->elementStart('body');
- $this->elementEnd('body');
-
- $this->elementEnd('html');
- }
-
-}
-
diff --git a/plugins/FBConnect/FBConnectAuth.php b/plugins/FBConnect/FBConnectAuth.php
deleted file mode 100644
index 647d5def8..000000000
--- a/plugins/FBConnect/FBConnectAuth.php
+++ /dev/null
@@ -1,461 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to enable Facebook Connect
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Plugin
- * @package StatusNet
- * @author Zach Copley <zach@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-require_once INSTALLDIR . '/plugins/FBConnect/FBConnectPlugin.php';
-
-class FBConnectauthAction extends Action
-{
- var $fbuid = null;
- var $fb_fields = null;
-
- function prepare($args) {
- parent::prepare($args);
-
- $this->fbuid = getFacebook()->get_loggedin_user();
-
- if ($this->fbuid > 0) {
- $this->fb_fields = $this->getFacebookFields($this->fbuid,
- array('first_name', 'last_name', 'name'));
- } else {
- list($proxy, $ip) = common_client_ip();
-
- common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
- "Failed auth attempt, proxy = $proxy, ip = $ip.");
-
- $this->clientError(_('You must be logged into Facebook to ' .
- 'use Facebook Connect.'));
- }
-
- return true;
- }
-
- function handle($args)
- {
- parent::handle($args);
-
- if (common_is_real_login()) {
-
- // User is already logged in. Does she already have a linked Facebook acct?
- $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_CONNECT_SERVICE);
-
- if (!empty($flink)) {
-
- // User already has a linked Facebook account and shouldn't be here
- common_debug('Facebook Connect Plugin - ' .
- 'There is already a local user (' . $flink->user_id .
- ') linked with this Facebook (' . $this->fbuid . ').');
-
- // We don't want these cookies
- getFacebook()->clear_cookie_state();
-
- $this->clientError(_('There is already a local user linked with this Facebook.'));
-
- } else {
-
- // User came from the Facebook connect settings tab, and
- // probably just wants to link/relink their Facebook account
- $this->connectUser();
- }
-
- } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
-
- $token = $this->trimmed('token');
- if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. Try again, please.'));
- return;
- }
- if ($this->arg('create')) {
- if (!$this->boolean('license')) {
- $this->showForm(_('You can\'t register if you don\'t agree to the license.'),
- $this->trimmed('newname'));
- return;
- }
- $this->createNewUser();
- } else if ($this->arg('connect')) {
- $this->connectNewUser();
- } else {
- common_debug('Facebook Connect Plugin - ' .
- print_r($this->args, true));
- $this->showForm(_('Something weird happened.'),
- $this->trimmed('newname'));
- }
- } else {
- $this->tryLogin();
- }
- }
-
- function showPageNotice()
- {
- if ($this->error) {
- $this->element('div', array('class' => 'error'), $this->error);
- } else {
- $this->element('div', 'instructions',
- sprintf(_('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
- }
- }
-
- function title()
- {
- return _('Facebook Account Setup');
- }
-
- function showForm($error=null, $username=null)
- {
- $this->error = $error;
- $this->username = $username;
-
- $this->showPage();
- }
-
- function showPage()
- {
- parent::showPage();
- }
-
- function showContent()
- {
- if (!empty($this->message_text)) {
- $this->element('p', null, $this->message);
- return;
- }
-
- $this->elementStart('form', array('method' => 'post',
- 'id' => 'form_settings_facebook_connect',
- 'class' => 'form_settings',
- 'action' => common_local_url('FBConnectAuth')));
- $this->elementStart('fieldset', array('id' => 'settings_facebook_connect_options'));
- $this->element('legend', null, _('Connection options'));
- $this->elementStart('ul', 'form_data');
- $this->elementStart('li');
- $this->element('input', array('type' => 'checkbox',
- 'id' => 'license',
- 'class' => 'checkbox',
- 'name' => 'license',
- 'value' => 'true'));
- $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
- $this->text(_('My text and files are available under '));
- $this->element('a', array('href' => common_config('license', 'url')),
- common_config('license', 'title'));
- $this->text(_(' except this private data: password, email address, IM address, phone number.'));
- $this->elementEnd('label');
- $this->elementEnd('li');
- $this->elementEnd('ul');
-
- $this->elementStart('fieldset');
- $this->hidden('token', common_session_token());
- $this->element('legend', null,
- _('Create new account'));
- $this->element('p', null,
- _('Create a new user with this nickname.'));
- $this->elementStart('ul', 'form_data');
- $this->elementStart('li');
- $this->input('newname', _('New nickname'),
- ($this->username) ? $this->username : '',
- _('1-64 lowercase letters or numbers, no punctuation or spaces'));
- $this->elementEnd('li');
- $this->elementEnd('ul');
- $this->submit('create', _('Create'));
- $this->elementEnd('fieldset');
-
- $this->elementStart('fieldset');
- $this->element('legend', null,
- _('Connect existing account'));
- $this->element('p', null,
- _('If you already have an account, login with your username and password to connect it to your Facebook.'));
- $this->elementStart('ul', 'form_data');
- $this->elementStart('li');
- $this->input('nickname', _('Existing nickname'));
- $this->elementEnd('li');
- $this->elementStart('li');
- $this->password('password', _('Password'));
- $this->elementEnd('li');
- $this->elementEnd('ul');
- $this->submit('connect', _('Connect'));
- $this->elementEnd('fieldset');
-
- $this->elementEnd('fieldset');
- $this->elementEnd('form');
- }
-
- function message($msg)
- {
- $this->message_text = $msg;
- $this->showPage();
- }
-
- function createNewUser()
- {
- if (common_config('site', 'closed')) {
- $this->clientError(_('Registration not allowed.'));
- return;
- }
-
- $invite = null;
-
- if (common_config('site', 'inviteonly')) {
- $code = $_SESSION['invitecode'];
- if (empty($code)) {
- $this->clientError(_('Registration not allowed.'));
- return;
- }
-
- $invite = Invitation::staticGet($code);
-
- if (empty($invite)) {
- $this->clientError(_('Not a valid invitation code.'));
- return;
- }
- }
-
- $nickname = $this->trimmed('newname');
-
- if (!Validate::string($nickname, array('min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT))) {
- $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
- return;
- }
-
- if (!User::allowed_nickname($nickname)) {
- $this->showForm(_('Nickname not allowed.'));
- return;
- }
-
- if (User::staticGet('nickname', $nickname)) {
- $this->showForm(_('Nickname already in use. Try another one.'));
- return;
- }
-
- $fullname = trim($this->fb_fields['firstname'] .
- ' ' . $this->fb_fields['lastname']);
-
- $args = array('nickname' => $nickname, 'fullname' => $fullname);
-
- if (!empty($invite)) {
- $args['code'] = $invite->code;
- }
-
- $user = User::register($args);
-
- $result = $this->flinkUser($user->id, $this->fbuid);
-
- if (!$result) {
- $this->serverError(_('Error connecting user to Facebook.'));
- return;
- }
-
- common_set_user($user);
- common_real_login(true);
-
- common_debug('Facebook Connect Plugin - ' .
- "Registered new user $user->id from Facebook user $this->fbuid");
-
- common_redirect(common_local_url('showstream', array('nickname' => $user->nickname)),
- 303);
- }
-
- function connectNewUser()
- {
- $nickname = $this->trimmed('nickname');
- $password = $this->trimmed('password');
-
- if (!common_check_user($nickname, $password)) {
- $this->showForm(_('Invalid username or password.'));
- return;
- }
-
- $user = User::staticGet('nickname', $nickname);
-
- if (!empty($user)) {
- common_debug('Facebook Connect Plugin - ' .
- "Legit user to connect to Facebook: $nickname");
- }
-
- $result = $this->flinkUser($user->id, $this->fbuid);
-
- if (!$result) {
- $this->serverError(_('Error connecting user to Facebook.'));
- return;
- }
-
- common_debug('Facebook Connnect Plugin - ' .
- "Connected Facebook user $this->fbuid to local user $user->id");
-
- common_set_user($user);
- common_real_login(true);
-
- $this->goHome($user->nickname);
- }
-
- function connectUser()
- {
- $user = common_current_user();
-
- $result = $this->flinkUser($user->id, $this->fbuid);
-
- if (empty($result)) {
- $this->serverError(_('Error connecting user to Facebook.'));
- return;
- }
-
- common_debug('Facebook Connect Plugin - ' .
- "Connected Facebook user $this->fbuid to local user $user->id");
-
- // Return to Facebook connection settings tab
- common_redirect(common_local_url('FBConnectSettings'), 303);
- }
-
- function tryLogin()
- {
- common_debug('Facebook Connect Plugin - ' .
- "Trying login for Facebook user $this->fbuid.");
-
- $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_CONNECT_SERVICE);
-
- if (!empty($flink)) {
- $user = $flink->getUser();
-
- if (!empty($user)) {
-
- common_debug('Facebook Connect Plugin - ' .
- "Logged in Facebook user $flink->foreign_id as user $user->id ($user->nickname)");
-
- common_set_user($user);
- common_real_login(true);
- $this->goHome($user->nickname);
- }
-
- } else {
-
- common_debug('Facebook Connect Plugin - ' .
- "No flink found for fbuid: $this->fbuid - new user");
-
- $this->showForm(null, $this->bestNewNickname());
- }
- }
-
- function goHome($nickname)
- {
- $url = common_get_returnto();
- if ($url) {
- // We don't have to return to it again
- common_set_returnto(null);
- } else {
- $url = common_local_url('all',
- array('nickname' =>
- $nickname));
- }
-
- common_redirect($url, 303);
- }
-
- function flinkUser($user_id, $fbuid)
- {
- $flink = new Foreign_link();
- $flink->user_id = $user_id;
- $flink->foreign_id = $fbuid;
- $flink->service = FACEBOOK_CONNECT_SERVICE;
- $flink->created = common_sql_now();
-
- $flink_id = $flink->insert();
-
- return $flink_id;
- }
-
- function bestNewNickname()
- {
- if (!empty($this->fb_fields['name'])) {
- $nickname = $this->nicknamize($this->fb_fields['name']);
- if ($this->isNewNickname($nickname)) {
- return $nickname;
- }
- }
-
- // Try the full name
-
- $fullname = trim($this->fb_fields['firstname'] .
- ' ' . $this->fb_fields['lastname']);
-
- if (!empty($fullname)) {
- $fullname = $this->nicknamize($fullname);
- if ($this->isNewNickname($fullname)) {
- return $fullname;
- }
- }
-
- return null;
- }
-
- // Given a string, try to make it work as a nickname
-
- function nicknamize($str)
- {
- $str = preg_replace('/\W/', '', $str);
- return strtolower($str);
- }
-
- function isNewNickname($str)
- {
- if (!Validate::string($str, array('min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT))) {
- return false;
- }
- if (!User::allowed_nickname($str)) {
- return false;
- }
- if (User::staticGet('nickname', $str)) {
- return false;
- }
- return true;
- }
-
- // XXX: Consider moving this to lib/facebookutil.php
- function getFacebookFields($fb_uid, $fields) {
- try {
-
- $facebook = getFacebook();
-
- $infos = $facebook->api_client->users_getInfo($fb_uid, $fields);
-
- if (empty($infos)) {
- return null;
- }
- return reset($infos);
-
- } catch (Exception $e) {
- common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
- "Facebook client failure when requesting " .
- join(",", $fields) . " on uid " . $fb_uid .
- " : ". $e->getMessage());
- return null;
- }
- }
-
-}
diff --git a/plugins/FBConnect/FBConnectLogin.php b/plugins/FBConnect/FBConnectLogin.php
deleted file mode 100644
index 5696d8848..000000000
--- a/plugins/FBConnect/FBConnectLogin.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-/*
- * StatusNet - a distributed open-source microblogging tool
- * Copyright (C) 2008, Controlez-Vous, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
-
-require_once INSTALLDIR . '/plugins/FBConnect/FBConnectPlugin.php';
-
-class FBConnectLoginAction extends Action
-{
- function handle($args)
- {
- parent::handle($args);
-
- if (common_is_real_login()) {
- $this->clientError(_('Already logged in.'));
- }
-
- $this->showPage();
- }
-
- function getInstructions()
- {
- return _('Login with your Facebook Account');
- }
-
- function showPageNotice()
- {
- $instr = $this->getInstructions();
- $output = common_markup_to_html($instr);
- $this->elementStart('div', 'instructions');
- $this->raw($output);
- $this->elementEnd('div');
- }
-
- function title()
- {
- return _('Facebook Login');
- }
-
- function showContent() {
-
- $this->elementStart('fieldset');
- $this->element('fb:login-button', array('onlogin' => 'goto_login()',
- 'length' => 'long'));
-
- $this->elementEnd('fieldset');
- }
-
-}
diff --git a/plugins/FBConnect/FBConnectPlugin.css b/plugins/FBConnect/FBConnectPlugin.css
deleted file mode 100644
index 49217bf13..000000000
--- a/plugins/FBConnect/FBConnectPlugin.css
+++ /dev/null
@@ -1,36 +0,0 @@
-/** Styles for Facebook logo and Facebook user profile avatar.
- *
- * @package StatusNet
- * @author Sarven Capadisli <csarven@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-#site_nav_global_primary #nav_fb {
-position:relative;
-margin-left:18px;
-}
-
-#nav_fb #fbc_profile-pic {
-position:absolute;
-top:-3px;
-left:-18px;
-display:inline;
-border:1px solid #3B5998;
-padding:1px;
-}
-
-#nav_fb #fb_favicon {
-position:absolute;
-top:-13px;
-left:-25px;
-display:inline;
-}
-
-#settings_facebook_connect_options legend {
-display:none;
-}
-#form_settings_facebook_connect fieldset fieldset legend {
-display:block;
-}
diff --git a/plugins/FBConnect/FBConnectPlugin.php b/plugins/FBConnect/FBConnectPlugin.php
deleted file mode 100644
index 0dacf9012..000000000
--- a/plugins/FBConnect/FBConnectPlugin.php
+++ /dev/null
@@ -1,367 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to enable Facebook Connect
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Plugin
- * @package StatusNet
- * @author Zach Copley <zach@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
-
-define("FACEBOOK_CONNECT_SERVICE", 3);
-
-require_once INSTALLDIR . '/lib/facebookutil.php';
-require_once INSTALLDIR . '/plugins/FBConnect/FBConnectAuth.php';
-require_once INSTALLDIR . '/plugins/FBConnect/FBConnectLogin.php';
-require_once INSTALLDIR . '/plugins/FBConnect/FBConnectSettings.php';
-require_once INSTALLDIR . '/plugins/FBConnect/FBCLoginGroupNav.php';
-require_once INSTALLDIR . '/plugins/FBConnect/FBCSettingsNav.php';
-require_once INSTALLDIR . '/plugins/FBConnect/FBC_XDReceiver.php';
-
-/**
- * Plugin to enable Facebook Connect
- *
- * @category Plugin
- * @package StatusNet
- * @author Zach Copley <zach@status.net>
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-class FBConnectPlugin extends Plugin
-{
- function __construct()
- {
- parent::__construct();
- }
-
- // Hook in new actions
- function onRouterInitialized(&$m) {
- $m->connect('main/facebookconnect', array('action' => 'FBConnectAuth'));
- $m->connect('main/facebooklogin', array('action' => 'FBConnectLogin'));
- $m->connect('settings/facebook', array('action' => 'FBConnectSettings'));
- $m->connect('xd_receiver.html', array('action' => 'FBC_XDReceiver'));
- }
-
- // Add in xmlns:fb
- function onStartShowHTML($action)
- {
-
- if ($this->reqFbScripts($action)) {
-
- // XXX: Horrible hack to make Safari, FF2, and Chrome work with
- // Facebook Connect. These browser cannot use Facebook's
- // DOM parsing routines unless the mime type of the page is
- // text/html even though Facebook Connect uses XHTML. This is
- // A bug in Facebook Connect, and this is a temporary solution
- // until they fix their JavaScript libs.
- header('Content-Type: text/html');
-
- $action->extraHeaders();
-
- $action->startXML('html');
-
- $language = $action->getLanguage();
-
- $action->elementStart('html',
- array('xmlns' => 'http://www.w3.org/1999/xhtml',
- 'xmlns:fb' => 'http://www.facebook.com/2008/fbml',
- 'xml:lang' => $language,
- 'lang' => $language));
-
- return false;
-
- } else {
-
- return true;
- }
- }
-
- // Note: this script needs to appear in the <body>
-
- function onEndShowScripts($action)
- {
- if ($this->reqFbScripts($action)) {
-
- $apikey = common_config('facebook', 'apikey');
- $plugin_path = common_path('plugins/FBConnect');
-
- $login_url = common_local_url('FBConnectAuth');
- $logout_url = common_local_url('logout');
-
- // XXX: Facebook says we don't need this FB_RequireFeatures(),
- // but we actually do, for IE and Safari. Gar.
-
- $js = '<script type="text/javascript">';
- $js .= ' $(document).ready(function () {';
- $js .= ' FB_RequireFeatures(';
- $js .= ' ["XFBML"], function() {';
- $js .= ' FB.init("%1$s", "../xd_receiver.html");';
- $js .= ' }';
- $js .= ' );';
- $js .= ' });';
-
- $js .= ' function goto_login() {';
- $js .= ' window.location = "%2$s";';
- $js .= ' }';
-
- // The below function alters the logout link so that it logs the user out
- // of Facebook Connect as well as the site. However, for some pages
- // (FB Connect Settings) we need to output the FB Connect scripts (to
- // show an existing FB connection even if the user isn't authenticated
- // with Facebook connect) but NOT alter the logout link. And the only
- // way to reliably do that is with the FB Connect .js libs. Crazy.
-
- $js .= ' FB.ensureInit(function() {';
- $js .= ' FB.Connect.ifUserConnected(';
- $js .= ' function() { ';
- $js .= ' $(\'#nav_logout a\').attr(\'href\', \'#\');';
- $js .= ' $(\'#nav_logout a\').click(function() {';
- $js .= ' FB.Connect.logoutAndRedirect(\'%3$s\');';
- $js .= ' return false;';
- $js .= ' })';
- $js .= ' },';
- $js .= ' function() {';
- $js .= ' return false;';
- $js .= ' }';
- $js .= ' );';
- $js .= ' });';
- $js .= '</script>';
-
- $js = sprintf($js, $apikey, $login_url, $logout_url);
-
- // Compress the bugger down a bit
- $js = str_replace(' ', '', $js);
-
- $action->raw(" $js"); // leading two spaces to make it line up
- }
-
- }
-
- // Note: this script needs to appear as close as possible to </body>
-
- function onEndShowFooter($action)
- {
- if ($this->reqFbScripts($action)) {
- $action->script('http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php');
- }
- }
-
- function onEndShowStatusNetStyles($action)
- {
- if ($this->reqFbScripts($action)) {
- $action->cssLink('plugins/FBConnect/FBConnectPlugin.css');
- }
- }
-
- /**
- * Does the Action we're plugged into require the FB Scripts? We only
- * want to output FB namespace, scripts, CSS, etc. on the pages that
- * really need them.
- *
- * @param Action the action in question
- *
- * @return boolean true
- */
-
- function reqFbScripts($action) {
-
- // If you're logged in w/FB Connect, you always need the FB stuff
-
- $fbuid = $this->loggedIn();
-
- if (!empty($fbuid)) {
- return true;
- }
-
- // List of actions that require FB stuff
-
- $needy = array('FBConnectLoginAction',
- 'FBConnectauthAction',
- 'FBConnectSettingsAction');
-
- if (in_array(get_class($action), $needy)) {
- return true;
- }
-
- return false;
-
- }
-
- /**
- * Is the user currently logged in with FB Connect?
- *
- * @return mixed $fbuid the Facebook ID of the logged in user, or null
- */
-
- function loggedIn()
- {
- $user = common_current_user();
-
- if (!empty($user)) {
-
- $flink = Foreign_link::getByUserId($user->id,
- FACEBOOK_CONNECT_SERVICE);
- $fbuid = 0;
-
- if (!empty($flink)) {
-
- try {
-
- $facebook = getFacebook();
- $fbuid = $facebook->get_loggedin_user();
-
- } catch (Exception $e) {
- common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
- 'Problem getting Facebook user: ' .
- $e->getMessage());
- }
-
- if ($fbuid > 0) {
- return $fbuid;
- }
- }
- }
-
- return null;
- }
-
- function onStartPrimaryNav($action)
- {
-
- $user = common_current_user();
- $connect = 'FBConnectSettings';
- if (common_config('xmpp', 'enabled')) {
- $connect = 'imsettings';
- } else if (common_config('sms', 'enabled')) {
- $connect = 'smssettings';
- } else if (common_config('twitter', 'enabled')) {
- $connect = 'twittersettings';
- }
-
- if (!empty($user)) {
-
- $fbuid = $this->loggedIn();
-
- if (!empty($fbuid)) {
-
- /* Default FB silhouette pic for FB users who haven't
- uploaded a profile pic yet. */
-
- $silhouetteUrl =
- 'http://static.ak.fbcdn.net/pics/q_silhouette.gif';
-
- $url = $this->getProfilePicURL($fbuid);
-
- $action->elementStart('li', array('id' => 'nav_fb'));
-
- $action->element('img', array('id' => 'fbc_profile-pic',
- 'src' => (!empty($url)) ? $url : $silhouetteUrl,
- 'alt' => 'Facebook Connect User',
- 'width' => '16'), '');
-
- $iconurl = common_path('plugins/FBConnect/fbfavicon.ico');
- $action->element('img', array('id' => 'fb_favicon',
- 'src' => $iconurl));
-
- $action->elementEnd('li');
-
- }
- }
-
- return true;
- }
-
- function onStartShowLocalNavBlock($action)
- {
- $action_name = get_class($action);
-
- $login_actions = array('LoginAction', 'RegisterAction',
- 'OpenidloginAction', 'FBConnectLoginAction');
-
- if (in_array($action_name, $login_actions)) {
- $nav = new FBCLoginGroupNav($action);
- $nav->show();
- return false;
- }
-
- $connect_actions = array('SmssettingsAction', 'ImsettingsAction',
- 'TwittersettingsAction', 'FBConnectSettingsAction');
-
- if (in_array($action_name, $connect_actions)) {
- $nav = new FBCSettingsNav($action);
- $nav->show();
- return false;
- }
-
- return true;
- }
-
- function onStartLogout($action)
- {
- $action->logout();
- $fbuid = $this->loggedIn();
-
- if (!empty($fbuid)) {
- try {
- $facebook = getFacebook();
- $facebook->expire_session();
- } catch (Exception $e) {
- common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
- 'Could\'t logout of Facebook: ' .
- $e->getMessage());
- }
- }
-
- return true;
- }
-
- function getProfilePicURL($fbuid)
- {
-
- $facebook = getFacebook();
- $url = null;
-
- try {
-
- $fqry = 'SELECT pic_square FROM user WHERE uid = %s';
-
- $result = $facebook->api_client->fql_query(sprintf($fqry, $fbuid));
-
- if (!empty($result)) {
- $url = $result[0]['pic_square'];
- }
-
- } catch (Exception $e) {
- common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
- "Facebook client failure requesting profile pic!");
- }
-
- return $url;
-
- }
-
-}
diff --git a/plugins/FBConnect/FBConnectSettings.php b/plugins/FBConnect/FBConnectSettings.php
deleted file mode 100644
index 911c56787..000000000
--- a/plugins/FBConnect/FBConnectSettings.php
+++ /dev/null
@@ -1,203 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Facebook Connect settings
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Settings
- * @package StatusNet
- * @author Zach Copley <zach@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
-
-require_once INSTALLDIR.'/lib/connectsettingsaction.php';
-
-/**
- * Facebook Connect settings action
- *
- * @category Settings
- * @package StatusNet
- * @author Zach Copley <zach@status.net>
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-class FBConnectSettingsAction extends ConnectSettingsAction
-{
- /**
- * Title of the page
- *
- * @return string Title of the page
- */
-
- function title()
- {
- return _('Facebook Connect Settings');
- }
-
- /**
- * Instructions for use
- *
- * @return instructions for use
- */
-
- function getInstructions()
- {
- return _('Manage how your account connects to Facebook');
- }
-
- /**
- * Content area of the page
- *
- * Shows a form for uploading an avatar.
- *
- * @return void
- */
-
- function showContent()
- {
- $user = common_current_user();
- $flink = Foreign_link::getByUserID($user->id, FACEBOOK_CONNECT_SERVICE);
-
- $this->elementStart('form', array('method' => 'post',
- 'id' => 'form_settings_facebook',
- 'class' => 'form_settings',
- 'action' =>
- common_local_url('FBConnectSettings')));
-
- if (!$flink) {
-
- $this->element('p', 'instructions',
- _('There is no Facebook user connected to this account.'));
-
- $this->element('fb:login-button', array('onlogin' => 'goto_login()',
- 'length' => 'long'));
-
- } else {
-
- $this->element('p', 'form_note',
- _('Connected Facebook user'));
-
- $this->elementStart('p', array('class' => 'facebook-user-display'));
- $this->elementStart('fb:profile-pic',
- array('uid' => $flink->foreign_id,
- 'size' => 'small',
- 'linked' => 'true',
- 'facebook-logo' => 'true'));
- $this->elementEnd('fb:profile-pic');
-
- $this->elementStart('fb:name', array('uid' => $flink->foreign_id,
- 'useyou' => 'false'));
- $this->elementEnd('fb:name');
- $this->elementEnd('p');
-
- $this->hidden('token', common_session_token());
-
- $this->elementStart('fieldset');
-
- $this->element('legend', null, _('Disconnect my account from Facebook'));
-
- if (!$user->password) {
-
- $this->elementStart('p', array('class' => 'form_guide'));
- $this->text(_('Disconnecting your Faceboook ' .
- 'would make it impossible to log in! Please '));
- $this->element('a',
- array('href' => common_local_url('passwordsettings')),
- _('set a password'));
-
- $this->text(_(' first.'));
- $this->elementEnd('p');
- } else {
-
- $note = 'Keep your %s account but disconnect from Facebook. ' .
- 'You\'ll use your %s password to log in.';
-
- $site = common_config('site', 'name');
-
- $this->element('p', 'instructions',
- sprintf($note, $site, $site));
-
- $this->submit('disconnect', _('Disconnect'));
- }
-
- $this->elementEnd('fieldset');
- }
-
- $this->elementEnd('form');
- }
-
- /**
- * Handle post
- *
- * Disconnects the current Facebook user from the current user's account
- *
- * @return void
- */
-
- function handlePost()
- {
- // CSRF protection
- $token = $this->trimmed('token');
- if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. '.
- 'Try again, please.'));
- return;
- }
-
- if ($this->arg('disconnect')) {
-
- $user = common_current_user();
-
- $flink = Foreign_link::getByUserID($user->id, FACEBOOK_CONNECT_SERVICE);
- $result = $flink->delete();
-
- if ($result === false) {
- common_log_db_error($user, 'DELETE', __FILE__);
- $this->serverError(_('Couldn\'t delete link to Facebook.'));
- return;
- }
-
- try {
-
- // Clear FB Connect cookies out
- $facebook = getFacebook();
- $facebook->clear_cookie_state();
-
- } catch (Exception $e) {
- common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
- 'Couldn\'t clear Facebook cookies: ' .
- $e->getMessage());
- }
-
- $this->showForm(_('You have disconnected from Facebook.'), true);
-
- } else {
- $this->showForm(_('Not sure what you\'re trying to do.'));
- return;
- }
-
- }
-
-}
diff --git a/plugins/FBConnect/README b/plugins/FBConnect/README
deleted file mode 100644
index 77d57eff9..000000000
--- a/plugins/FBConnect/README
+++ /dev/null
@@ -1,76 +0,0 @@
-This plugin allows you to utilize Facebook Connect with StatusNet.
-Supported Facebook Connect features:
-
-- Authenticate (register/login/logout -- works similar to OpenID)
-- Associate an existing StatusNet account with a Facebook account
-- Disconnect a Facebook account from a StatusNet account
-
-Future planned functionality:
-
-- Invite Facebook friends to use your StatusNet installation
-- Auto-subscribe Facebook friends already using StatusNet
-- Share StatusNet favorite notices to your Facebook stream
-
-To use the plugin you will need to configure a Facebook application
-to point to your StatusNet installation (see the Installation section
-below).
-
-Installation
-============
-
-If you don't already have the built-in Facebook application configured,
-you'll need to log into Facebook and create/configure a new application.
-Please follow the instructions in the section titled, "Setting Up Your
-Application and Getting an API Key," on the following page of the
-Facebook developer wiki:
-
- http://wiki.developers.facebook.com/index.php/Connect/Setting_Up_Your_Site
-
-If you already are using the build-in StatusNet Facebook application,
-you can modify your existing application's configuration using the
-Facebook Developer Application on Facebook. Use it to edit your
-application settings, and under the 'Connect' tab, change the 'Connect
-URL' to be the main URL for your StatusNet site. E.g.:
-
- http://SITE/PATH_TO_STATUSNET/
-
-After you application is created and configured, you'll need to add its
-API key and secret to your StatusNet config.php file:
-
- $config['facebook']['apikey'] = 'APIKEY';
- $config['facebook']['secret'] = 'SECRET';
-
-Finally, to enable the plugin, add the following stanza to your
-config.php:
-
- addPlugin('FBConnect');
-
-To try out the plugin, fire up your browser and connect to:
-
- http://SITE/PATH_TO_STATUSNET/main/facebooklogin
-
-or, if you do not have fancy URLs turned on:
-
- http://SITE/PATH_TO_STATUSNET/index.php/main/facebooklogin
-
-You should see a page with a blue button that says: "Connect with
-Facebook".
-
-Connect/Disconnect existing account
-===================================
-
-If the Facebook Connect plugin is enabled, there will be a new Facebook
-Connect Settings tab under each user's Connect menu. Users can connect
-and disconnect to their Facebook accounts from it. Note: Before a user
-can disconnect from Facebook, she must set a normal StatusNet password.
-Otherwise, she might not be able to login in to her account in the
-future. This is usually only required for users who have used Facebook
-Connect to register their StatusNet account, and therefore haven't
-already set a local password.
-
-Helpful links
-=============
-
-Facebook Connect Homepage:
-http://developers.facebook.com/connect.php
-
diff --git a/plugins/FBConnect/fbfavicon.ico b/plugins/FBConnect/fbfavicon.ico
deleted file mode 100644
index c57c0342f..000000000
--- a/plugins/FBConnect/fbfavicon.ico
+++ /dev/null
Binary files differ