forked from GNUsocial/gnu-social
		
	Update remotesubscribe for new system
This commit is contained in:
		@@ -23,100 +23,112 @@ require_once(INSTALLDIR.'/lib/omb.php');
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class RemotesubscribeAction extends Action
 | 
					class RemotesubscribeAction extends Action
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    var $nickname;
 | 
				
			||||||
 | 
					    var $profile_url;
 | 
				
			||||||
 | 
					    var $err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function handle($args)
 | 
					    function prepare($args)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        parent::prepare($args);
 | 
				
			||||||
        parent::handle($args);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (common_logged_in()) {
 | 
					        if (common_logged_in()) {
 | 
				
			||||||
            $this->clientError(_('You can use the local subscription!'));
 | 
					            $this->clientError(_('You can use the local subscription!'));
 | 
				
			||||||
            return;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
 | 
					        $this->nickname = $this->trimmed('nickname');
 | 
				
			||||||
 | 
					        $this->profile_url = $this->trimmed('profile_url');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function handle($args)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        parent::handle($args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
 | 
				
			||||||
            # CSRF protection
 | 
					            # CSRF protection
 | 
				
			||||||
            $token = $this->trimmed('token');
 | 
					            $token = $this->trimmed('token');
 | 
				
			||||||
            if (!$token || $token != common_session_token()) {
 | 
					            if (!$token || $token != common_session_token()) {
 | 
				
			||||||
                $this->show_form(_('There was a problem with your session token. Try again, please.'));
 | 
					                $this->showForm(_('There was a problem with your session token. '.
 | 
				
			||||||
 | 
					                                  'Try again, please.'));
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            $this->remoteSubscription();
 | 
				
			||||||
            $this->remote_subscription();
 | 
					 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            $this->show_form();
 | 
					            $this->showForm();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function get_instructions()
 | 
					    function showForm($err=null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return _('To subscribe, you can [login](%%action.login%%),' .
 | 
					        $this->err = $err;
 | 
				
			||||||
                  ' or [register](%%action.register%%) a new ' .
 | 
					        $this->showPage();
 | 
				
			||||||
                  ' account. If you already have an account ' .
 | 
					 | 
				
			||||||
                  ' on a [compatible microblogging site](%%doc.openmublog%%), ' .
 | 
					 | 
				
			||||||
                  ' enter your profile URL below.');
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function show_top($err=null)
 | 
					    function showPageNotice()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if ($err) {
 | 
					        if ($this->err) {
 | 
				
			||||||
            $this->element('div', 'error', $err);
 | 
					            $this->element('div', 'error', $this->err);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            $instructions = $this->get_instructions();
 | 
					            $inst = _('To subscribe, you can [login](%%action.login%%),' .
 | 
				
			||||||
            $output = common_markup_to_html($instructions);
 | 
					                      ' or [register](%%action.register%%) a new ' .
 | 
				
			||||||
 | 
					                      ' account. If you already have an account ' .
 | 
				
			||||||
 | 
					                      ' on a [compatible microblogging site](%%doc.openmublog%%), ' .
 | 
				
			||||||
 | 
					                      ' enter your profile URL below.');
 | 
				
			||||||
 | 
					            $output = common_markup_to_html($inst);
 | 
				
			||||||
            $this->elementStart('div', 'instructions');
 | 
					            $this->elementStart('div', 'instructions');
 | 
				
			||||||
            $this->raw($output);
 | 
					            $this->raw($output);
 | 
				
			||||||
            $this->elementEnd('p');
 | 
					            $this->elementEnd('div');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function show_form($err=null)
 | 
					    function title()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return _('Remote subscribe');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function showContent()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $nickname = $this->trimmed('nickname');
 | 
					 | 
				
			||||||
        $profile = $this->trimmed('profile_url');
 | 
					 | 
				
			||||||
        common_show_header(_('Remote subscribe'), null, $err,
 | 
					 | 
				
			||||||
                           array($this, 'show_top'));
 | 
					 | 
				
			||||||
        # id = remotesubscribe conflicts with the
 | 
					        # id = remotesubscribe conflicts with the
 | 
				
			||||||
        # button on profile page
 | 
					        # button on profile page
 | 
				
			||||||
        $this->elementStart('form', array('id' => 'remsub', 'method' => 'post',
 | 
					        $this->elementStart('form', array('id' => 'remsub', 'method' => 'post',
 | 
				
			||||||
                                           'action' => common_local_url('remotesubscribe')));
 | 
					                                           'action' => common_local_url('remotesubscribe')));
 | 
				
			||||||
        $this->hidden('token', common_session_token());
 | 
					        $this->hidden('token', common_session_token());
 | 
				
			||||||
        $this->input('nickname', _('User nickname'), $nickname,
 | 
					        $this->input('nickname', _('User nickname'), $this->nickname,
 | 
				
			||||||
                     _('Nickname of the user you want to follow'));
 | 
					                     _('Nickname of the user you want to follow'));
 | 
				
			||||||
        $this->input('profile_url', _('Profile URL'), $profile,
 | 
					        $this->input('profile_url', _('Profile URL'), $this->profile_url,
 | 
				
			||||||
                     _('URL of your profile on another compatible microblogging service'));
 | 
					                     _('URL of your profile on another compatible microblogging service'));
 | 
				
			||||||
        $this->submit('submit', _('Subscribe'));
 | 
					        $this->submit('submit', _('Subscribe'));
 | 
				
			||||||
        $this->elementEnd('form');
 | 
					        $this->elementEnd('form');
 | 
				
			||||||
        common_show_footer();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function remote_subscription()
 | 
					    function remoteSubscription()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $user = $this->get_user();
 | 
					        $user = $this->getUser();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!$user) {
 | 
					        if (!$user) {
 | 
				
			||||||
            $this->show_form(_('No such user.'));
 | 
					            $this->showForm(_('No such user.'));
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $profile = $this->trimmed('profile_url');
 | 
					        $this->profile_url = $this->trimmed('profile_url');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!$profile) {
 | 
					        if (!$this->profile_url) {
 | 
				
			||||||
            $this->show_form(_('No such user.'));
 | 
					            $this->showForm(_('No such user.'));
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!Validate::uri($profile, array('allowed_schemes' => array('http', 'https')))) {
 | 
					        if (!Validate::uri($this->profile_url, array('allowed_schemes' => array('http', 'https')))) {
 | 
				
			||||||
            $this->show_form(_('Invalid profile URL (bad format)'));
 | 
					            $this->showForm(_('Invalid profile URL (bad format)'));
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
 | 
					        $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
 | 
				
			||||||
        $yadis = Auth_Yadis_Yadis::discover($profile, $fetcher);
 | 
					        $yadis = Auth_Yadis_Yadis::discover($this->profile_url, $fetcher);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!$yadis || $yadis->failed) {
 | 
					        if (!$yadis || $yadis->failed) {
 | 
				
			||||||
            $this->show_form(_('Not a valid profile URL (no YADIS document).'));
 | 
					            $this->showForm(_('Not a valid profile URL (no YADIS document).'));
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -125,52 +137,50 @@ class RemotesubscribeAction extends Action
 | 
				
			|||||||
        $xrds =& Auth_Yadis_XRDS::parseXRDS(trim($yadis->response_text));
 | 
					        $xrds =& Auth_Yadis_XRDS::parseXRDS(trim($yadis->response_text));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!$xrds) {
 | 
					        if (!$xrds) {
 | 
				
			||||||
            $this->show_form(_('Not a valid profile URL (no XRDS defined).'));
 | 
					            $this->showForm(_('Not a valid profile URL (no XRDS defined).'));
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $omb = $this->getOmb($xrds);
 | 
					        $omb = $this->getOmb($xrds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!$omb) {
 | 
					        if (!$omb) {
 | 
				
			||||||
            $this->show_form(_('Not a valid profile URL (incorrect services).'));
 | 
					            $this->showForm(_('Not a valid profile URL (incorrect services).'));
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (omb_service_uri($omb[OAUTH_ENDPOINT_REQUEST]) ==
 | 
					        if (omb_service_uri($omb[OAUTH_ENDPOINT_REQUEST]) ==
 | 
				
			||||||
            common_local_url('requesttoken'))
 | 
					            common_local_url('requesttoken'))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $this->show_form(_('That\'s a local profile! Login to subscribe.'));
 | 
					            $this->showForm(_('That\'s a local profile! Login to subscribe.'));
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (User::staticGet('uri', omb_local_id($omb[OAUTH_ENDPOINT_REQUEST]))) {
 | 
					        if (User::staticGet('uri', omb_local_id($omb[OAUTH_ENDPOINT_REQUEST]))) {
 | 
				
			||||||
            $this->show_form(_('That\'s a local profile! Login to subscribe.'));
 | 
					            $this->showForm(_('That\'s a local profile! Login to subscribe.'));
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        list($token, $secret) = $this->request_token($omb);
 | 
					        list($token, $secret) = $this->requestToken($omb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!$token || !$secret) {
 | 
					        if (!$token || !$secret) {
 | 
				
			||||||
            $this->show_form(_('Couldn\'t get a request token.'));
 | 
					            $this->showForm(_('Couldn\'t get a request token.'));
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $this->request_authorization($user, $omb, $token, $secret);
 | 
					        $this->requestAuthorization($user, $omb, $token, $secret);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function get_user()
 | 
					    function getUser()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $user = null;
 | 
					        $user = null;
 | 
				
			||||||
        $nickname = $this->trimmed('nickname');
 | 
					        if ($this->nickname) {
 | 
				
			||||||
        if ($nickname) {
 | 
					            $user = User::staticGet('nickname', $this->nickname);
 | 
				
			||||||
            $user = User::staticGet('nickname', $nickname);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return $user;
 | 
					        return $user;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function getOmb($xrds)
 | 
					    function getOmb($xrds)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					 | 
				
			||||||
        static $omb_endpoints = array(OMB_ENDPOINT_UPDATEPROFILE, OMB_ENDPOINT_POSTNOTICE);
 | 
					        static $omb_endpoints = array(OMB_ENDPOINT_UPDATEPROFILE, OMB_ENDPOINT_POSTNOTICE);
 | 
				
			||||||
        static $oauth_endpoints = array(OAUTH_ENDPOINT_REQUEST, OAUTH_ENDPOINT_AUTHORIZE,
 | 
					        static $oauth_endpoints = array(OAUTH_ENDPOINT_REQUEST, OAUTH_ENDPOINT_AUTHORIZE,
 | 
				
			||||||
                                        OAUTH_ENDPOINT_ACCESS);
 | 
					                                        OAUTH_ENDPOINT_ACCESS);
 | 
				
			||||||
@@ -265,7 +275,7 @@ class RemotesubscribeAction extends Action
 | 
				
			|||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function request_token($omb)
 | 
					    function requestToken($omb)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $con = omb_oauth_consumer();
 | 
					        $con = omb_oauth_consumer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -310,7 +320,7 @@ class RemotesubscribeAction extends Action
 | 
				
			|||||||
        return array($return['oauth_token'], $return['oauth_token_secret']);
 | 
					        return array($return['oauth_token'], $return['oauth_token_secret']);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function request_authorization($user, $omb, $token, $secret)
 | 
					    function requestAuthorization($user, $omb, $token, $secret)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        global $config; # for license URL
 | 
					        global $config; # for license URL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -391,9 +401,4 @@ class RemotesubscribeAction extends Action
 | 
				
			|||||||
        common_redirect($req->to_url());
 | 
					        common_redirect($req->to_url());
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    function make_nonce()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return common_good_rand(16);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user