Merge remote-tracking branch 'origin/1.0.x' into 1.0.x
This commit is contained in:
commit
f6430ea131
5
README
5
README
@ -226,7 +226,6 @@ and the URLs are listed here for your convenience.
|
|||||||
- Facebook library. Used for the Facebook application.
|
- Facebook library. Used for the Facebook application.
|
||||||
- PEAR Validate is used for URL and email validation.
|
- PEAR Validate is used for URL and email validation.
|
||||||
- Console_GetOpt for parsing command-line options.
|
- Console_GetOpt for parsing command-line options.
|
||||||
- libomb. a library for implementing OpenMicroBlogging 0.1, the
|
|
||||||
predecessor to OStatus.
|
predecessor to OStatus.
|
||||||
- HTTP_Request2, a library for making HTTP requests.
|
- HTTP_Request2, a library for making HTTP requests.
|
||||||
- PEAR Net_URL2 is an HTTP_Request2 dependency.
|
- PEAR Net_URL2 is an HTTP_Request2 dependency.
|
||||||
@ -484,7 +483,7 @@ On a default installation, your site can broadcast messages using
|
|||||||
XMPP. Users won't be able to post messages using XMPP unless you've
|
XMPP. Users won't be able to post messages using XMPP unless you've
|
||||||
got the XMPP daemon running. See 'Queues and daemons' below for how
|
got the XMPP daemon running. See 'Queues and daemons' below for how
|
||||||
to set that up. Also, once you have a sizable number of users, sending
|
to set that up. Also, once you have a sizable number of users, sending
|
||||||
a lot of SMS, OMB, and XMPP messages whenever someone posts a message
|
a lot of SMS, OStatus, and XMPP messages whenever someone posts a message
|
||||||
can really slow down your site; it may cause posting to timeout.
|
can really slow down your site; it may cause posting to timeout.
|
||||||
|
|
||||||
NOTE: stream_select(), a crucial function for network programming, is
|
NOTE: stream_select(), a crucial function for network programming, is
|
||||||
@ -1111,7 +1110,7 @@ public
|
|||||||
For configuring the public stream.
|
For configuring the public stream.
|
||||||
|
|
||||||
localonly: If set to true, only messages posted by users of this
|
localonly: If set to true, only messages posted by users of this
|
||||||
service (rather than other services, filtered through OMB)
|
service (rather than other services, filtered through OStatus)
|
||||||
are shown in the public stream. Default true.
|
are shown in the public stream. Default true.
|
||||||
blacklist: An array of IDs of users to hide from the public stream.
|
blacklist: An array of IDs of users to hide from the public stream.
|
||||||
Useful if you have someone making excessive Twitterfeed posts
|
Useful if you have someone making excessive Twitterfeed posts
|
||||||
|
@ -111,18 +111,6 @@ class AddpeopletagAction extends Action
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OMB 0.1 doesn't have a mechanism for local-server-
|
|
||||||
// originated tag.
|
|
||||||
|
|
||||||
$omb01 = Remote_profile::staticGet('id', $tagged_id);
|
|
||||||
|
|
||||||
if (!empty($omb01)) {
|
|
||||||
// TRANS: Client error displayed when trying to add an OMB 0.1 remote profile to a list.
|
|
||||||
$this->clientError(_('You cannot list an OMB 0.1 '.
|
|
||||||
'remote profile with this action.'));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
* @category API
|
* @category API
|
||||||
* @package StatusNet
|
* @package StatusNet
|
||||||
* @author Zach Copley <zach@status.net>
|
* @author Zach Copley <zach@status.net>
|
||||||
* @copyright 2010 StatusNet, Inc.
|
* @copyright 2010-2011 StatusNet, Inc.
|
||||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
@ -35,7 +35,7 @@ require_once INSTALLDIR . '/lib/apioauth.php';
|
|||||||
require_once INSTALLDIR . '/lib/info.php';
|
require_once INSTALLDIR . '/lib/info.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authorize an Oputh request token
|
* Authorize an OAuth request token
|
||||||
*
|
*
|
||||||
* @category API
|
* @category API
|
||||||
* @package StatusNet
|
* @package StatusNet
|
||||||
|
@ -32,7 +32,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR . '/lib/applicationlist.php';
|
require_once INSTALLDIR . '/lib/applicationlist.php';
|
||||||
require_once INSTALLDIR . '/lib/apioauthstore.php';
|
require_once INSTALLDIR . '/lib/statusnetoauthstore.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show connected OAuth applications
|
* Show connected OAuth applications
|
||||||
|
@ -112,18 +112,6 @@ class RemovepeopletagAction extends Action
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OMB 0.1 doesn't have a mechanism for local-server-
|
|
||||||
// originated tag.
|
|
||||||
|
|
||||||
$omb01 = Remote_profile::staticGet('id', $tagged_id);
|
|
||||||
|
|
||||||
if (!empty($omb01)) {
|
|
||||||
// TRANS: Client error displayed when trying to (un)list an OMB 0.1 remote profile.
|
|
||||||
$this->clientError(_('You cannot (un)list an OMB 0.1 '.
|
|
||||||
'remote profile with this action.'));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ class ShownoticeAction extends Action
|
|||||||
if ($this->boolean('ajax')) {
|
if ($this->boolean('ajax')) {
|
||||||
$this->showAjax();
|
$this->showAjax();
|
||||||
} else {
|
} else {
|
||||||
if ($this->notice->is_local == Notice::REMOTE_OMB) {
|
if ($this->notice->is_local == Notice::REMOTE) {
|
||||||
if (!empty($this->notice->url)) {
|
if (!empty($this->notice->url)) {
|
||||||
$target = $this->notice->url;
|
$target = $this->notice->url;
|
||||||
} else if (!empty($this->notice->uri) && preg_match('/^https?:/', $this->notice->uri)) {
|
} else if (!empty($this->notice->uri) && preg_match('/^https?:/', $this->notice->uri)) {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008-2010, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* Subscription action.
|
* Subscription action.
|
||||||
*
|
*
|
||||||
@ -111,18 +111,6 @@ class SubscribeAction extends Action
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OMB 0.1 doesn't have a mechanism for local-server-
|
|
||||||
// originated subscription.
|
|
||||||
|
|
||||||
$omb01 = Remote_profile::staticGet('id', $other_id);
|
|
||||||
|
|
||||||
if (!empty($omb01)) {
|
|
||||||
// TRANS: Client error displayed trying to subscribe to an OMB 0.1 remote profile.
|
|
||||||
$this->clientError(_('You cannot subscribe to an OMB 0.1'.
|
|
||||||
' remote profile with this action.'));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011 StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -86,7 +86,7 @@ class Notice extends Memcached_DataObject
|
|||||||
|
|
||||||
/* Notice types */
|
/* Notice types */
|
||||||
const LOCAL_PUBLIC = 1;
|
const LOCAL_PUBLIC = 1;
|
||||||
const REMOTE_OMB = 0;
|
const REMOTE = 0;
|
||||||
const LOCAL_NONPUBLIC = -1;
|
const LOCAL_NONPUBLIC = -1;
|
||||||
const GATEWAY = -2;
|
const GATEWAY = -2;
|
||||||
|
|
||||||
@ -229,11 +229,11 @@ class Notice extends Memcached_DataObject
|
|||||||
* string 'created' timestamp of notice; defaults to now
|
* string 'created' timestamp of notice; defaults to now
|
||||||
* int 'is_local' source/gateway ID, one of:
|
* int 'is_local' source/gateway ID, one of:
|
||||||
* Notice::LOCAL_PUBLIC - Local, ok to appear in public timeline
|
* Notice::LOCAL_PUBLIC - Local, ok to appear in public timeline
|
||||||
* Notice::REMOTE_OMB - Sent from a remote OMB service;
|
* Notice::REMOTE - Sent from a remote service;
|
||||||
* hide from public timeline but show in
|
* hide from public timeline but show in
|
||||||
* local "and friends" timelines
|
* local "and friends" timelines
|
||||||
* Notice::LOCAL_NONPUBLIC - Local, but hide from public timeline
|
* Notice::LOCAL_NONPUBLIC - Local, but hide from public timeline
|
||||||
* Notice::GATEWAY - From another non-OMB service;
|
* Notice::GATEWAY - From another non-OStatus service;
|
||||||
* will not appear in public views
|
* will not appear in public views
|
||||||
* float 'lat' decimal latitude for geolocation
|
* float 'lat' decimal latitude for geolocation
|
||||||
* float 'lon' decimal longitude for geolocation
|
* float 'lon' decimal longitude for geolocation
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -1240,13 +1240,8 @@ class Profile extends Memcached_DataObject
|
|||||||
|
|
||||||
if (!empty($user)) {
|
if (!empty($user)) {
|
||||||
$uri = $user->uri;
|
$uri = $user->uri;
|
||||||
} else {
|
|
||||||
// return OMB profile if any
|
|
||||||
$remote = Remote_profile::staticGet('id', $this->id);
|
|
||||||
if (!empty($remote)) {
|
|
||||||
$uri = $remote->uri;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Event::handle('EndGetProfileUri', array($this, &$uri));
|
Event::handle('EndGetProfileUri', array($this, &$uri));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1291,11 +1286,6 @@ class Profile extends Memcached_DataObject
|
|||||||
$user = User::staticGet('uri', $uri);
|
$user = User::staticGet('uri', $uri);
|
||||||
if (!empty($user)) {
|
if (!empty($user)) {
|
||||||
$profile = $user->getProfile();
|
$profile = $user->getProfile();
|
||||||
} else {
|
|
||||||
$remote_profile = Remote_profile::staticGet('uri', $uri);
|
|
||||||
if (!empty($remote_profile)) {
|
|
||||||
$profile = Profile::staticGet('id', $remote_profile->profile_id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Event::handle('EndGetProfileFromURI', array($uri, $profile));
|
Event::handle('EndGetProfileFromURI', array($uri, $profile));
|
||||||
}
|
}
|
||||||
|
@ -198,29 +198,6 @@ class Subscription extends Memcached_DataObject
|
|||||||
|
|
||||||
assert(!empty($sub));
|
assert(!empty($sub));
|
||||||
|
|
||||||
// @todo: move this block to EndSubscribe handler for
|
|
||||||
// OMB plugin when it exists.
|
|
||||||
|
|
||||||
if (!empty($sub->token)) {
|
|
||||||
|
|
||||||
$token = new Token();
|
|
||||||
|
|
||||||
$token->tok = $sub->token;
|
|
||||||
|
|
||||||
if ($token->find(true)) {
|
|
||||||
|
|
||||||
$result = $token->delete();
|
|
||||||
|
|
||||||
if (!$result) {
|
|
||||||
common_log_db_error($token, 'DELETE', __FILE__);
|
|
||||||
// TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
|
|
||||||
throw new Exception(_('Could not delete subscription OMB token.'));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
common_log(LOG_ERR, "Couldn't find credentials with token {$token->tok}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = $sub->delete();
|
$result = $sub->delete();
|
||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
|
@ -31,7 +31,7 @@ if (!defined('STATUSNET')) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
require_once INSTALLDIR . '/lib/apiaction.php';
|
require_once INSTALLDIR . '/lib/apiaction.php';
|
||||||
require_once INSTALLDIR . '/lib/apioauthstore.php';
|
require_once INSTALLDIR . '/lib/statusnetoauthstore.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base action for API OAuth enpoints. Clean up the
|
* Base action for API OAuth enpoints. Clean up the
|
||||||
|
@ -360,7 +360,7 @@ abstract class MicroAppPlugin extends Plugin
|
|||||||
|
|
||||||
$options = array('uri' => $object->id,
|
$options = array('uri' => $object->id,
|
||||||
'url' => $object->link,
|
'url' => $object->link,
|
||||||
'is_local' => Notice::REMOTE_OMB,
|
'is_local' => Notice::REMOTE,
|
||||||
'source' => 'ostatus');
|
'source' => 'ostatus');
|
||||||
|
|
||||||
// $actor is an ostatus_profile
|
// $actor is an ostatus_profile
|
||||||
@ -418,7 +418,7 @@ abstract class MicroAppPlugin extends Plugin
|
|||||||
|
|
||||||
$options = array('uri' => $object->id,
|
$options = array('uri' => $object->id,
|
||||||
'url' => $object->link,
|
'url' => $object->link,
|
||||||
'is_local' => Notice::REMOTE_OMB,
|
'is_local' => Notice::REMOTE,
|
||||||
'source' => 'ostatus');
|
'source' => 'ostatus');
|
||||||
|
|
||||||
// $actor is an ostatus_profile
|
// $actor is an ostatus_profile
|
||||||
|
@ -289,11 +289,10 @@ class ProfileListItem extends Widget
|
|||||||
$usf = new UnsubscribeForm($this->out, $this->profile);
|
$usf = new UnsubscribeForm($this->out, $this->profile);
|
||||||
$usf->show();
|
$usf->show();
|
||||||
} else {
|
} else {
|
||||||
// We can't initiate sub for a remote OMB profile.
|
if (Event::handle('StartShowProfileListSubscribeButton', array($this))) {
|
||||||
$remote = Remote_profile::staticGet('id', $this->profile->id);
|
|
||||||
if (empty($remote)) {
|
|
||||||
$sf = new SubscribeForm($this->out, $this->profile);
|
$sf = new SubscribeForm($this->out, $this->profile);
|
||||||
$sf->show();
|
$sf->show();
|
||||||
|
Event::handle('EndShowProfileListSubscribeButton', array($this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->out->elementEnd('li');
|
$this->out->elementEnd('li');
|
||||||
|
@ -233,7 +233,6 @@ abstract class QueueManager extends IoManager
|
|||||||
|
|
||||||
if (Event::handle('StartInitializeQueueManager', array($this))) {
|
if (Event::handle('StartInitializeQueueManager', array($this))) {
|
||||||
$this->connect('distrib', 'DistribQueueHandler');
|
$this->connect('distrib', 'DistribQueueHandler');
|
||||||
$this->connect('omb', 'OmbQueueHandler');
|
|
||||||
$this->connect('ping', 'PingQueueHandler');
|
$this->connect('ping', 'PingQueueHandler');
|
||||||
if (common_config('sms', 'enabled')) {
|
if (common_config('sms', 'enabled')) {
|
||||||
$this->connect('sms', 'SmsQueueHandler');
|
$this->connect('sms', 'SmsQueueHandler');
|
||||||
@ -246,9 +245,6 @@ abstract class QueueManager extends IoManager
|
|||||||
$this->connect('acctmove', 'AccountMover');
|
$this->connect('acctmove', 'AccountMover');
|
||||||
$this->connect('actmove', 'ActivityMover');
|
$this->connect('actmove', 'ActivityMover');
|
||||||
|
|
||||||
// Broadcasting profile updates to OMB remote subscribers
|
|
||||||
$this->connect('profile', 'ProfileQueueHandler');
|
|
||||||
|
|
||||||
// For compat with old plugins not registering their own handlers.
|
// For compat with old plugins not registering their own handlers.
|
||||||
$this->connect('plugin', 'PluginQueueHandler');
|
$this->connect('plugin', 'PluginQueueHandler');
|
||||||
}
|
}
|
||||||
|
@ -113,8 +113,6 @@ class Router
|
|||||||
{
|
{
|
||||||
var $m = null;
|
var $m = null;
|
||||||
static $inst = null;
|
static $inst = null;
|
||||||
static $bare = array('requesttoken', 'accesstoken', 'userauthorization',
|
|
||||||
'postnotice', 'updateprofile', 'finishremotesubscribe');
|
|
||||||
|
|
||||||
const REGEX_TAG = '[^\/]+'; // [\pL\pN_\-\.]{1,64} better if we can do unicode regexes
|
const REGEX_TAG = '[^\/]+'; // [\pL\pN_\-\.]{1,64} better if we can do unicode regexes
|
||||||
|
|
||||||
@ -257,15 +255,6 @@ class Router
|
|||||||
$m->connect('main/'.$c.'/:code', array('action' => $c));
|
$m->connect('main/'.$c.'/:code', array('action' => $c));
|
||||||
}
|
}
|
||||||
|
|
||||||
// exceptional
|
|
||||||
|
|
||||||
$m->connect('main/remote', array('action' => 'remotesubscribe'));
|
|
||||||
$m->connect('main/remote?nickname=:nickname', array('action' => 'remotesubscribe'), array('nickname' => '[A-Za-z0-9_-]+'));
|
|
||||||
|
|
||||||
foreach (Router::$bare as $action) {
|
|
||||||
$m->connect('index.php?action=' . $action, array('action' => $action));
|
|
||||||
}
|
|
||||||
|
|
||||||
// settings
|
// settings
|
||||||
|
|
||||||
foreach (array('profile', 'avatar', 'password', 'im', 'oauthconnections',
|
foreach (array('profile', 'avatar', 'password', 'im', 'oauthconnections',
|
||||||
@ -896,8 +885,8 @@ class Router
|
|||||||
$nickname = User::singleUserNickname();
|
$nickname = User::singleUserNickname();
|
||||||
|
|
||||||
foreach (array('subscriptions', 'subscribers',
|
foreach (array('subscriptions', 'subscribers',
|
||||||
'all', 'foaf', 'xrds',
|
'all', 'foaf', 'replies',
|
||||||
'replies', 'microsummary', 'hcard') as $a) {
|
'microsummary', 'hcard') as $a) {
|
||||||
$m->connect($a,
|
$m->connect($a,
|
||||||
array('action' => $a,
|
array('action' => $a,
|
||||||
'nickname' => $nickname));
|
'nickname' => $nickname));
|
||||||
@ -964,8 +953,8 @@ class Router
|
|||||||
$m->connect('rsd.xml', array('action' => 'rsd'));
|
$m->connect('rsd.xml', array('action' => 'rsd'));
|
||||||
|
|
||||||
foreach (array('subscriptions', 'subscribers',
|
foreach (array('subscriptions', 'subscribers',
|
||||||
'nudge', 'all', 'foaf', 'xrds',
|
'nudge', 'all', 'foaf', 'replies',
|
||||||
'replies', 'inbox', 'outbox', 'microsummary', 'hcard') as $a) {
|
'inbox', 'outbox', 'microsummary', 'hcard') as $a) {
|
||||||
$m->connect(':nickname/'.$a,
|
$m->connect(':nickname/'.$a,
|
||||||
array('action' => $a),
|
array('action' => $a),
|
||||||
array('nickname' => Nickname::DISPLAY_FMT));
|
array('nickname' => Nickname::DISPLAY_FMT));
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -19,10 +19,12 @@
|
|||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
require_once INSTALLDIR . '/lib/oauthstore.php';
|
require_once 'OAuth.php';
|
||||||
|
|
||||||
// @todo FIXME: Class documentation missing.
|
/**
|
||||||
class ApiStatusNetOAuthDataStore extends StatusNetOAuthDataStore
|
* @fixme class doc
|
||||||
|
*/
|
||||||
|
class ApiStatusNetOAuthDataStore extends OAuthDataStore
|
||||||
{
|
{
|
||||||
function lookup_consumer($consumerKey)
|
function lookup_consumer($consumerKey)
|
||||||
{
|
{
|
||||||
@ -410,4 +412,95 @@ class ApiStatusNetOAuthDataStore extends StatusNetOAuthDataStore
|
|||||||
return new OAuthToken($t->tok, $t->secret);
|
return new OAuthToken($t->tok, $t->secret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Authorize specified OAuth token
|
||||||
|
*
|
||||||
|
* Authorizes the authorization token specified by $token_key.
|
||||||
|
* Throws exceptions in case of error.
|
||||||
|
*
|
||||||
|
* @param string $token_key The token to be authorized
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
**/
|
||||||
|
public function authorize_token($token_key) {
|
||||||
|
$rt = new Token();
|
||||||
|
$rt->tok = $token_key;
|
||||||
|
$rt->type = 0;
|
||||||
|
$rt->state = 0;
|
||||||
|
if (!$rt->find(true)) {
|
||||||
|
throw new Exception('Tried to authorize unknown token');
|
||||||
|
}
|
||||||
|
$orig_rt = clone($rt);
|
||||||
|
$rt->state = 1; # Authorized but not used
|
||||||
|
if (!$rt->update($orig_rt)) {
|
||||||
|
throw new Exception('Failed to authorize token');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* http://oauth.net/core/1.0/#nonce
|
||||||
|
* "The Consumer SHALL then generate a Nonce value that is unique for
|
||||||
|
* all requests with that timestamp."
|
||||||
|
* XXX: It's not clear why the token is here
|
||||||
|
*
|
||||||
|
* @param type $consumer
|
||||||
|
* @param type $token
|
||||||
|
* @param type $nonce
|
||||||
|
* @param type $timestamp
|
||||||
|
* @return type
|
||||||
|
*/
|
||||||
|
function lookup_nonce($consumer, $token, $nonce, $timestamp)
|
||||||
|
{
|
||||||
|
$n = new Nonce();
|
||||||
|
$n->consumer_key = $consumer->key;
|
||||||
|
$n->ts = common_sql_date($timestamp);
|
||||||
|
$n->nonce = $nonce;
|
||||||
|
if ($n->find(true)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
$n->created = DB_DataObject_Cast::dateTime();
|
||||||
|
$n->insert();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param type $consumer
|
||||||
|
* @param type $token_type
|
||||||
|
* @param type $token_key
|
||||||
|
* @return OAuthToken
|
||||||
|
*/
|
||||||
|
function lookup_token($consumer, $token_type, $token_key)
|
||||||
|
{
|
||||||
|
$t = new Token();
|
||||||
|
if (!is_null($consumer)) {
|
||||||
|
$t->consumer_key = $consumer->key;
|
||||||
|
}
|
||||||
|
$t->tok = $token_key;
|
||||||
|
$t->type = ($token_type == 'access') ? 1 : 0;
|
||||||
|
if ($t->find(true)) {
|
||||||
|
return new OAuthToken($t->tok, $t->secret);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param type $token_key
|
||||||
|
* @return Token
|
||||||
|
*/
|
||||||
|
function getTokenByKey($token_key)
|
||||||
|
{
|
||||||
|
$t = new Token();
|
||||||
|
$t->tok = $token_key;
|
||||||
|
if ($t->find(true)) {
|
||||||
|
return $t;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
26
lib/util.php
26
lib/util.php
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -1501,7 +1501,7 @@ function common_enqueue_notice($notice)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Broadcast profile updates to OMB and other remote subscribers.
|
* Broadcast profile updates to remote subscribers.
|
||||||
*
|
*
|
||||||
* Since this may be slow with a lot of subscribers or bad remote sites,
|
* Since this may be slow with a lot of subscribers or bad remote sites,
|
||||||
* this is run through the background queues if possible.
|
* this is run through the background queues if possible.
|
||||||
@ -2008,20 +2008,20 @@ function common_user_property($property)
|
|||||||
|
|
||||||
function common_profile_uri($profile)
|
function common_profile_uri($profile)
|
||||||
{
|
{
|
||||||
if (!$profile) {
|
$uri = null;
|
||||||
return null;
|
|
||||||
}
|
if (!empty($profile)) {
|
||||||
$user = User::staticGet($profile->id);
|
if (Event::handle('StartCommonProfileURI', array($profile, &$uri))) {
|
||||||
if ($user) {
|
$user = User::staticGet($profile->id);
|
||||||
return $user->uri;
|
if (!empty($user)) {
|
||||||
|
$uri = $user->uri;
|
||||||
|
}
|
||||||
|
Event::handle('EndCommonProfileURI', array($profile, &$uri));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$remote = Remote_profile::staticGet($profile->id);
|
|
||||||
if ($remote) {
|
|
||||||
return $remote->uri;
|
|
||||||
}
|
|
||||||
// XXX: this is a very bad profile!
|
// XXX: this is a very bad profile!
|
||||||
return null;
|
return $uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
function common_canonical_sms($sms)
|
function common_canonical_sms($sms)
|
||||||
|
@ -322,7 +322,7 @@ class BookmarkPlugin extends MicroAppPlugin
|
|||||||
|
|
||||||
$options = array('uri' => $bookmark->id,
|
$options = array('uri' => $bookmark->id,
|
||||||
'url' => $bookmark->link,
|
'url' => $bookmark->link,
|
||||||
'is_local' => Notice::REMOTE_OMB,
|
'is_local' => Notice::REMOTE,
|
||||||
'source' => 'ostatus');
|
'source' => 'ostatus');
|
||||||
|
|
||||||
return self::_postBookmark($author->localProfile(), $activity, $options);
|
return self::_postBookmark($author->localProfile(), $activity, $options);
|
||||||
|
393
plugins/OMB/OMBPlugin.php
Normal file
393
plugins/OMB/OMBPlugin.php
Normal file
@ -0,0 +1,393 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2011, StatusNet, Inc.
|
||||||
|
*
|
||||||
|
* OpenMicroBlogging plugin - add OpenMicroBloggin 0.1 support to
|
||||||
|
* StatusNet.
|
||||||
|
*
|
||||||
|
* Note: the OpenMicroBlogging protocol has been deprecated in favor of OStatus.
|
||||||
|
* This plugin is provided for backwards compatibility and experimentation.
|
||||||
|
*
|
||||||
|
* Please see the README and the OStatus plugin.
|
||||||
|
*
|
||||||
|
* PHP version 5
|
||||||
|
*
|
||||||
|
* 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 Sample
|
||||||
|
* @package StatusNet
|
||||||
|
* @author Zach Copley
|
||||||
|
* @copyright 2011 StatusNet, Inc.
|
||||||
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
|
||||||
|
* @link http://status.net/
|
||||||
|
*/
|
||||||
|
|
||||||
|
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/');
|
||||||
|
|
||||||
|
if (!defined('STATUSNET')) {
|
||||||
|
// This check helps protect against security problems;
|
||||||
|
// your code file can't be executed directly from the web.
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OMB plugin main class
|
||||||
|
*
|
||||||
|
* @category Integration
|
||||||
|
* @package StatusNet
|
||||||
|
* @author Zach Copley <zach@status.net>
|
||||||
|
* @copyright 2011 StatusNet, Inc.
|
||||||
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
|
||||||
|
* @link http://status.net/
|
||||||
|
*/
|
||||||
|
class OMBPlugin extends Plugin
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Load related modules when needed
|
||||||
|
*
|
||||||
|
* @param string $cls Name of the class to be loaded
|
||||||
|
*
|
||||||
|
* @return boolean hook value; true means continue processing, false means stop.
|
||||||
|
*/
|
||||||
|
function onAutoload($cls)
|
||||||
|
{
|
||||||
|
$dir = dirname(__FILE__);
|
||||||
|
|
||||||
|
switch ($cls)
|
||||||
|
{
|
||||||
|
case 'Requesttokenaction':
|
||||||
|
case 'Accesstokenaction':
|
||||||
|
case 'Userauthorizationaction':
|
||||||
|
case 'Postnoticeaction':
|
||||||
|
case 'Updateprofileaction':
|
||||||
|
case 'Finishremotesubscribeaction':
|
||||||
|
case 'Remotesubscribeaction':
|
||||||
|
case 'XrdsAction':
|
||||||
|
include_once $dir . '/action/' . strtolower(mb_substr($cls, 0, -6)) . '.php';
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case 'OmbQueueHandler':
|
||||||
|
case 'ProfileQueueHandler':
|
||||||
|
include_once $dir . '/lib/' . strtolower($cls) . '.php';
|
||||||
|
return false;
|
||||||
|
case 'OMBOAuthDataStore':
|
||||||
|
include_once $dir . '/lib/omboauthstore.php';
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map URLs to actions
|
||||||
|
*
|
||||||
|
* @param Net_URL_Mapper $m path-to-action mapper
|
||||||
|
*
|
||||||
|
* @return boolean hook value; true means continue processing, false means stop.
|
||||||
|
*/
|
||||||
|
function onRouterInitialized($m)
|
||||||
|
{
|
||||||
|
$bare = array(
|
||||||
|
'requesttoken',
|
||||||
|
'accesstoken',
|
||||||
|
'userauthorization',
|
||||||
|
'postnotice',
|
||||||
|
'updateprofile',
|
||||||
|
'finishremotesubscribe'
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($bare as $action) {
|
||||||
|
$m->connect(
|
||||||
|
'index.php?action=' . $action, array('action' => $action)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// exceptional
|
||||||
|
|
||||||
|
$m->connect('main/remote', array('action' => 'remotesubscribe'));
|
||||||
|
$m->connect(
|
||||||
|
'main/remote?nickname=:nickname',
|
||||||
|
array('action' => 'remotesubscribe'),
|
||||||
|
array('nickname' => '[A-Za-z0-9_-]+')
|
||||||
|
);
|
||||||
|
|
||||||
|
$m->connect(
|
||||||
|
'xrds',
|
||||||
|
array('action' => 'xrds', 'nickname' => $nickname)
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put saved notices into the queue for OMB distribution
|
||||||
|
*
|
||||||
|
* @param Notice $notice the notice to broadcast
|
||||||
|
* @param array $transports queuehandler's list of transports
|
||||||
|
* @return boolean true if queing was successful
|
||||||
|
*/
|
||||||
|
function onStartEnqueueNotice($notice, &$transports)
|
||||||
|
{
|
||||||
|
if ($notice->isLocal()) {
|
||||||
|
if ($notice->inScope(null)) {
|
||||||
|
array_unshift($transports, 'omb');
|
||||||
|
common_log(
|
||||||
|
LOG_INFO, "Notice {$notice->id} queued for OMB processing"
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// Note: We don't do privacy-controlled OMB updates.
|
||||||
|
common_log(
|
||||||
|
LOG_NOTICE,
|
||||||
|
"Not queueing notice {$notice->id} for OMB because of "
|
||||||
|
. "privacy; scope = {$notice->scope}",
|
||||||
|
__FILE__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
common_log(
|
||||||
|
LOG_NOTICE,
|
||||||
|
"Not queueing notice {$notice->id} for OMB because it's not "
|
||||||
|
. "local.",
|
||||||
|
__FILE__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set up queue handlers for outgoing OMB pushes
|
||||||
|
*
|
||||||
|
* @param QueueManager $qm
|
||||||
|
* @return boolean hook return
|
||||||
|
*/
|
||||||
|
function onEndInitializeQueueManager(QueueManager $qm)
|
||||||
|
{
|
||||||
|
// Prepare outgoing distributions after notice save.
|
||||||
|
$qm->connect('omb', 'OmbQueueHandler');
|
||||||
|
$qm->connect('profile', 'ProfileQueueHandler');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return OMB remote profile, if any
|
||||||
|
*
|
||||||
|
* @param Profile $profile
|
||||||
|
* @param string $uri
|
||||||
|
* @return boolen false if there's a remote profile
|
||||||
|
*/
|
||||||
|
function onStartGetProfileUri($profile, &$uri)
|
||||||
|
{
|
||||||
|
$remote = Remote_profile::staticGet('id', $this->id);
|
||||||
|
if (!empty($remote)) {
|
||||||
|
$uri = $remote->uri;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We can't initiate subscriptions for a remote OMB profile; don't show
|
||||||
|
* subscribe button
|
||||||
|
*
|
||||||
|
* @param type $action
|
||||||
|
*/
|
||||||
|
function onStartShowProfileListSubscribeButton($action)
|
||||||
|
{
|
||||||
|
$remote = Remote_profile::staticGet('id', $action->profile->id);
|
||||||
|
if (empty($remote)) {
|
||||||
|
false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check for illegal subscription attempts
|
||||||
|
*
|
||||||
|
* @param User $user subscriber
|
||||||
|
* @param Profile $other subscribee
|
||||||
|
* @return hook return value
|
||||||
|
*/
|
||||||
|
function onStartSubscribe($profile, $other)
|
||||||
|
{
|
||||||
|
// OMB 0.1 doesn't have a mechanism for local-server-
|
||||||
|
// originated subscription.
|
||||||
|
|
||||||
|
$omb01 = Remote_profile::staticGet('id', $other_id);
|
||||||
|
|
||||||
|
if (!empty($omb01)) {
|
||||||
|
// TRANS: Client error displayed trying to subscribe to an OMB 0.1 remote profile.
|
||||||
|
throw new ClientException(
|
||||||
|
_m(
|
||||||
|
'You cannot subscribe to an OMB 0.1 '
|
||||||
|
. 'remote profile with this action.'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Throw an error if someone tries to tag a remote profile
|
||||||
|
*
|
||||||
|
* @param Profile $tagger_profile profile of the tagger
|
||||||
|
* @param Profile $tagged_profile profile of the taggee
|
||||||
|
* @param string $tag
|
||||||
|
*
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
function onStartTagProfile($tagger_profile, $tagged_profile, $tag)
|
||||||
|
{
|
||||||
|
// OMB 0.1 doesn't have a mechanism for local-server-
|
||||||
|
// originated tag.
|
||||||
|
|
||||||
|
$omb01 = Remote_profile::staticGet('id', $tagged_profile->id);
|
||||||
|
|
||||||
|
if (!empty($omb01)) {
|
||||||
|
// TRANS: Client error displayed when trying to add an OMB 0.1 remote profile to a list.
|
||||||
|
$this->clientError(
|
||||||
|
_m(
|
||||||
|
'You cannot list an OMB 0.1 '
|
||||||
|
.'remote profile with this action.')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check to make sure we're not tryng to untag an OMB profile
|
||||||
|
*
|
||||||
|
* // XXX: Should this ever happen?
|
||||||
|
*
|
||||||
|
* @param Profile_tag $ptag the profile tag
|
||||||
|
*/
|
||||||
|
function onUntagProfile($ptag)
|
||||||
|
{
|
||||||
|
// OMB 0.1 doesn't have a mechanism for local-server-
|
||||||
|
// originated tag.
|
||||||
|
|
||||||
|
$omb01 = Remote_profile::staticGet('id', $ptag->tagged);
|
||||||
|
|
||||||
|
if (!empty($omb01)) {
|
||||||
|
// TRANS: Client error displayed when trying to (un)list an OMB 0.1 remote profile.
|
||||||
|
$this->clientError(
|
||||||
|
_m(
|
||||||
|
'You cannot (un)list an OMB 0.1 '
|
||||||
|
. 'remote profile with this action.')
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove old OMB subscription tokens
|
||||||
|
*
|
||||||
|
* @param User $user subscriber
|
||||||
|
* @param Profile $other subscribee
|
||||||
|
* @return hook return value
|
||||||
|
*/
|
||||||
|
function onEndUnsubscribe($profile, $other)
|
||||||
|
{
|
||||||
|
$sub = Subscription::pkeyGet(
|
||||||
|
array('subscriber' => $subscriber->id, 'subscribed' => $other->id)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!empty($sub->token)) {
|
||||||
|
|
||||||
|
$token = new Token();
|
||||||
|
|
||||||
|
$token->tok = $sub->token;
|
||||||
|
|
||||||
|
if ($token->find(true)) {
|
||||||
|
|
||||||
|
$result = $token->delete();
|
||||||
|
|
||||||
|
if (!$result) {
|
||||||
|
common_log_db_error($token, 'DELETE', __FILE__);
|
||||||
|
// TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
|
||||||
|
throw new Exception(
|
||||||
|
_m('Could not delete subscription OMB token.')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
common_log(
|
||||||
|
LOG_ERR,
|
||||||
|
"Couldn't find credentials with token {$token->tok}",
|
||||||
|
__FILE__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for an OMB remote profile by URI
|
||||||
|
*
|
||||||
|
* @param string $uri remote profile URI
|
||||||
|
* @param Profile $profile the profile to set
|
||||||
|
* @return boolean hook value
|
||||||
|
*/
|
||||||
|
function onStartGetProfileFromURI($uri, &$profile)
|
||||||
|
{
|
||||||
|
$remote_profile = Remote_profile::staticGet('uri', $uri);
|
||||||
|
if (!empty($remote_profile)) {
|
||||||
|
$profile = Profile::staticGet('id', $remote_profile->profile_id);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return OMB remote profiles as well as regular profiles
|
||||||
|
* in helper
|
||||||
|
*
|
||||||
|
* @param type $profile
|
||||||
|
* @param type $uri
|
||||||
|
*/
|
||||||
|
function onStartCommonProfileURI($profile, &$uri)
|
||||||
|
{
|
||||||
|
$remote = Remote_profile::staticGet($profile->id);
|
||||||
|
if ($remote) {
|
||||||
|
$uri = $remote->uri;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin version info
|
||||||
|
*
|
||||||
|
* @param array $versions
|
||||||
|
* @return boolean hook value
|
||||||
|
*/
|
||||||
|
function onPluginVersion(&$versions)
|
||||||
|
{
|
||||||
|
$versions[] = array(
|
||||||
|
'name' => 'OpenMicroBlogging',
|
||||||
|
'version' => STATUSNET_VERSION,
|
||||||
|
'author' => 'Zach Copley',
|
||||||
|
'homepage' => 'http://status.net/wiki/Plugin:Sample',
|
||||||
|
'rawdescription' =>
|
||||||
|
// TRANS: Plugin description.
|
||||||
|
_m('A sample plugin to show basics of development for new hackers.')
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
31
plugins/OMB/README
Normal file
31
plugins/OMB/README
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
OMB (OpenMicroBlogging) plugin
|
||||||
|
==============================
|
||||||
|
|
||||||
|
This plugin encapsulates OpenMicroBlogging 0.1 functionality. OMB was the
|
||||||
|
original federation protocol for StatusNet, but has been deprecated
|
||||||
|
in favor of OStatus (see the OStatus plugin). This plugin is provided for
|
||||||
|
backward-compatibility with older sites, and for posterity.
|
||||||
|
|
||||||
|
External libraries
|
||||||
|
------------------
|
||||||
|
|
||||||
|
This is provided with the plugin, but you may wish to use a newer version of
|
||||||
|
the library, if and when it becomes available.
|
||||||
|
|
||||||
|
- libomb. a library for implementing OpenMicroBlogging 0.1
|
||||||
|
http://gitorious.org/libomb
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
[TODO]
|
||||||
|
|
||||||
|
Offline Processing
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Note: once you have a sizable number of users, sending OMB messages whenever
|
||||||
|
someone posts a message can really slow down your site; it may cause posting
|
||||||
|
to timeout. You may wish to enable queuing and handle OMB communication
|
||||||
|
offline. See the "queues and daemons" section of the main StatusNet README.
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*
|
*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -32,8 +32,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/service_provider.php';
|
||||||
require_once INSTALLDIR.'/lib/omb.php';
|
require_once dirname(__FILE__) . '/../lib/omb.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Access token class
|
* Access token class
|
@ -12,7 +12,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*
|
*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
require_once INSTALLDIR.'/extlib/libomb/service_consumer.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/service_consumer.php';
|
||||||
require_once INSTALLDIR.'/lib/omb.php';
|
require_once dirname(__FILE__) . '/../lib/omb.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler for remote subscription finish callback
|
* Handler for remote subscription finish callback
|
@ -12,7 +12,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*
|
*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/omb.php';
|
require_once dirname(__FILE__) . '/../lib/omb.php';
|
||||||
require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/service_provider.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler for postnotice action
|
* Handler for postnotice action
|
@ -12,7 +12,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*
|
*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011 StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -30,9 +30,9 @@
|
|||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/omb.php';
|
require_once dirname(__FILE__) . '/../lib/omb.php';
|
||||||
require_once INSTALLDIR.'/extlib/libomb/service_consumer.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/service_consumer.php';
|
||||||
require_once INSTALLDIR.'/extlib/libomb/profile.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/profile.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handler for remote subscription
|
* Handler for remote subscription
|
@ -12,7 +12,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*
|
*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -32,8 +32,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/omb.php';
|
require_once dirname(__FILE__) . '/../lib/omb.php';
|
||||||
require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/service_provider.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request token action class.
|
* Request token action class.
|
@ -12,7 +12,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*
|
*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/omb.php';
|
require_once dirname(__FILE__) . '/../lib/omb.php';
|
||||||
require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/service_provider.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle an updateprofile action
|
* Handle an updateprofile action
|
@ -12,7 +12,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*
|
*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -30,9 +30,9 @@
|
|||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/omb.php';
|
require_once dirname(__FILE__) . '/../lib/omb.php';
|
||||||
require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/service_provider.php';
|
||||||
require_once INSTALLDIR.'/extlib/libomb/profile.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/profile.php';
|
||||||
define('TIMESTAMP_THRESHOLD', 300);
|
define('TIMESTAMP_THRESHOLD', 300);
|
||||||
|
|
||||||
// @todo FIXME: Missing documentation.
|
// @todo FIXME: Missing documentation.
|
@ -12,7 +12,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*
|
*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -32,10 +32,10 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/omb.php';
|
require_once dirname(__FILE__) . '/../lib/omb.php';
|
||||||
require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/service_provider.php';
|
||||||
require_once INSTALLDIR.'/extlib/libomb/xrds_mapper.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/xrds_mapper.php';
|
||||||
require_once INSTALLDIR.'/lib/xrdsoutputter.php';
|
require_once dirname(__FILE__) . '/../lib/xrdsoutputter.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XRDS for OpenMicroBlogging
|
* XRDS for OpenMicroBlogging
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -19,13 +19,14 @@
|
|||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/oauthstore.php';
|
$dir = dirname(__FILE__);
|
||||||
require_once 'OAuth.php';
|
|
||||||
require_once 'libomb/constants.php';
|
require_once $dir . '/omboauthstore.php';
|
||||||
require_once 'libomb/service_consumer.php';
|
require_once $dir . '/../extlib/libomb/constants.php';
|
||||||
require_once 'libomb/notice.php';
|
require_once $dir . '/../extlib/libomb/service_consumer.php';
|
||||||
require_once 'libomb/profile.php';
|
require_once $dir . '/../extlib/libomb/notice.php';
|
||||||
require_once 'Auth/Yadis/Yadis.php';
|
require_once $dir . '/../extlib/libomb/profile.php';
|
||||||
|
require_once INSTALLDIR . '/extlib/Auth/Yadis/Yadis.php';
|
||||||
|
|
||||||
function omb_oauth_consumer()
|
function omb_oauth_consumer()
|
||||||
{
|
{
|
||||||
@ -48,7 +49,7 @@ function omb_oauth_datastore()
|
|||||||
{
|
{
|
||||||
static $store = null;
|
static $store = null;
|
||||||
if (is_null($store)) {
|
if (is_null($store)) {
|
||||||
$store = new StatusNetOAuthDataStore();
|
$store = new OMBOAuthDataStore();
|
||||||
}
|
}
|
||||||
return $store;
|
return $store;
|
||||||
}
|
}
|
||||||
@ -64,7 +65,6 @@ function omb_hmac_sha1()
|
|||||||
|
|
||||||
function omb_broadcast_notice($notice)
|
function omb_broadcast_notice($notice)
|
||||||
{
|
{
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$omb_notice = notice_to_omb_notice($notice);
|
$omb_notice = notice_to_omb_notice($notice);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
@ -233,4 +233,4 @@ function notice_to_omb_notice($notice)
|
|||||||
|
|
||||||
return $omb_notice;
|
return $omb_notice;
|
||||||
}
|
}
|
||||||
?>
|
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011 StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -19,10 +19,10 @@
|
|||||||
|
|
||||||
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
|
||||||
|
|
||||||
require_once 'libomb/datastore.php';
|
require_once dirname(__FILE__) . '/../extlib/libomb/datastore.php';
|
||||||
|
|
||||||
// @todo FIXME: Class documentation missing.
|
// @todo FIXME: Class documentation missing.
|
||||||
class StatusNetOAuthDataStore extends OAuthDataStore
|
class OMBOAuthDataStore extends OAuthDataStore
|
||||||
{
|
{
|
||||||
// We keep a record of who's contacted us
|
// We keep a record of who's contacted us
|
||||||
function lookup_consumer($consumer_key)
|
function lookup_consumer($consumer_key)
|
||||||
@ -55,17 +55,6 @@ class StatusNetOAuthDataStore extends OAuthDataStore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTokenByKey($token_key)
|
|
||||||
{
|
|
||||||
$t = new Token();
|
|
||||||
$t->tok = $token_key;
|
|
||||||
if ($t->find(true)) {
|
|
||||||
return $t;
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// http://oauth.net/core/1.0/#nonce
|
// http://oauth.net/core/1.0/#nonce
|
||||||
// "The Consumer SHALL then generate a Nonce value that is unique for
|
// "The Consumer SHALL then generate a Nonce value that is unique for
|
||||||
// all requests with that timestamp."
|
// all requests with that timestamp."
|
||||||
@ -234,7 +223,7 @@ class StatusNetOAuthDataStore extends OAuthDataStore
|
|||||||
$profile = Profile::staticGet('id', $remote->id);
|
$profile = Profile::staticGet('id', $remote->id);
|
||||||
if (!$profile) throw new Exception('No profile for remote user');
|
if (!$profile) throw new Exception('No profile for remote user');
|
||||||
|
|
||||||
require_once INSTALLDIR.'/lib/omb.php';
|
require_once dirname(__FILE__) . '/omb.php';
|
||||||
return profile_to_omb_profile($identifier_uri, $profile);
|
return profile_to_omb_profile($identifier_uri, $profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,7 +365,7 @@ class StatusNetOAuthDataStore extends OAuthDataStore
|
|||||||
$notice = Notice::saveNew($author->id,
|
$notice = Notice::saveNew($author->id,
|
||||||
$omb_notice->getContent(),
|
$omb_notice->getContent(),
|
||||||
'omb',
|
'omb',
|
||||||
array('is_local' => Notice::REMOTE_OMB,
|
array('is_local' => Notice::REMOTE,
|
||||||
'uri' => $omb_notice->getIdentifierURI()));
|
'uri' => $omb_notice->getIdentifierURI()));
|
||||||
|
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
* Copyright (C) 2008-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -42,7 +42,7 @@ class OmbQueueHandler extends QueueHandler
|
|||||||
common_log(LOG_DEBUG, 'Ignoring remote notice ' . $notice->id);
|
common_log(LOG_DEBUG, 'Ignoring remote notice ' . $notice->id);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
require_once(INSTALLDIR.'/lib/omb.php');
|
require_once(dirname(__FILE__) . '/omb.php');
|
||||||
omb_broadcast_notice($notice);
|
omb_broadcast_notice($notice);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* StatusNet - the distributed open-source microblogging tool
|
* StatusNet - the distributed open-source microblogging tool
|
||||||
* Copyright (C) 2010, StatusNet, Inc.
|
* Copyright (C) 2010-2011, StatusNet, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -38,7 +38,7 @@ class ProfileQueueHandler extends QueueHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Event::handle('StartBroadcastProfile', array($profile))) {
|
if (Event::handle('StartBroadcastProfile', array($profile))) {
|
||||||
require_once(INSTALLDIR.'/lib/omb.php');
|
require_once(dirname(__FILE__) . '/omb.php');
|
||||||
try {
|
try {
|
||||||
omb_broadcast_profile($profile);
|
omb_broadcast_profile($profile);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
@ -591,7 +591,7 @@ class Ostatus_profile extends Managed_DataObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$options = array('is_local' => Notice::REMOTE_OMB,
|
$options = array('is_local' => Notice::REMOTE,
|
||||||
'url' => $sourceUrl,
|
'url' => $sourceUrl,
|
||||||
'uri' => $sourceUri,
|
'uri' => $sourceUri,
|
||||||
'rendered' => $rendered,
|
'rendered' => $rendered,
|
||||||
|
@ -75,13 +75,9 @@ Administration panel
|
|||||||
|
|
||||||
As of StatusNet 0.9.0 there is a new administration panel that allows
|
As of StatusNet 0.9.0 there is a new administration panel that allows
|
||||||
you to configure Twitter bridge settings within StatusNet itself,
|
you to configure Twitter bridge settings within StatusNet itself,
|
||||||
instead of having to specify them manually in your config.php. To enable
|
instead of having to specify them manually in your config.php.
|
||||||
the administration panel, you will need to add it to the list of active
|
|
||||||
administration panels. You can do this via your config.php. E.g.:
|
|
||||||
|
|
||||||
$config['admin']['panels'][] = 'twitter';
|
To access it, you'll need to use a user with the "administrator"
|
||||||
|
|
||||||
And to access it, you'll need to use a user with the "administrator"
|
|
||||||
role (see: scripts/userrole.php).
|
role (see: scripts/userrole.php).
|
||||||
|
|
||||||
Sign in with Twitter
|
Sign in with Twitter
|
||||||
|
@ -287,6 +287,18 @@ class TwitterBridgePlugin extends Plugin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the plugin's installed, this should be accessible to admins
|
||||||
|
*/
|
||||||
|
function onAdminPanelCheck($name, &$isOK)
|
||||||
|
{
|
||||||
|
if ($name == 'twitter') {
|
||||||
|
$isOK = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a Twitter tab to the admin panel
|
* Add a Twitter tab to the admin panel
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user