]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/remotesubscribe.php
Update copyright dates in files modified in 2009
[quix0rs-gnu-social.git] / actions / remotesubscribe.php
index b9e29d645ddec9d82064601d620c4729e7b96c91..e658f8d3748ed290159222c5ed13867187e3be3e 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, Controlez-Vous, Inc.
+ * Copyright (C) 2008, 2009, Control Yourself, 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
@@ -23,100 +23,124 @@ require_once(INSTALLDIR.'/lib/omb.php');
 
 class RemotesubscribeAction extends Action
 {
+    var $nickname;
+    var $profile_url;
+    var $err;
 
-    function handle($args)
+    function prepare($args)
     {
-
-        parent::handle($args);
+        parent::prepare($args);
 
         if (common_logged_in()) {
-            common_user_error(_('You can use the local subscription!'));
-            return;
+            $this->clientError(_('You can use the local subscription!'));
+            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
             $token = $this->trimmed('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;
             }
-
-            $this->remote_subscription();
+            $this->remoteSubscription();
         } else {
-            $this->show_form();
+            $this->showForm();
         }
     }
 
-    function get_instructions()
+    function showForm($err=null)
     {
-        return _('To subscribe, you can [login](%%action.login%%),' .
-                  ' 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.');
+        $this->err = $err;
+        $this->showPage();
     }
 
-    function show_top($err=null)
+    function showPageNotice()
     {
-        if ($err) {
-            $this->element('div', 'error', $err);
+        if ($this->err) {
+            $this->element('div', 'error', $this->err);
         } else {
-            $instructions = $this->get_instructions();
-            $output = common_markup_to_html($instructions);
+            $inst = _('To subscribe, you can [login](%%action.login%%),' .
+                      ' 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->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
         # button on profile page
-        $this->elementStart('form', array('id' => 'remsub', 'method' => 'post',
-                                           'action' => common_local_url('remotesubscribe')));
+        $this->elementStart('form', array('id' => 'form_remote_subscribe',
+                                          'method' => 'post',
+                                          'class' => 'form_settings',
+                                          'action' => common_local_url('remotesubscribe')));
+        $this->elementStart('fieldset');
+        $this->element('legend', _('Subscribe to a remote user'));
         $this->hidden('token', common_session_token());
-        $this->input('nickname', _('User nickname'), $nickname,
+
+        $this->elementStart('ul', 'form_data');
+        $this->elementStart('li');
+        $this->input('nickname', _('User nickname'), $this->nickname,
                      _('Nickname of the user you want to follow'));
-        $this->input('profile_url', _('Profile URL'), $profile,
+        $this->elementEnd('li');
+        $this->elementStart('li');
+        $this->input('profile_url', _('Profile URL'), $this->profile_url,
                      _('URL of your profile on another compatible microblogging service'));
+        $this->elementEnd('li');
+        $this->elementEnd('ul');
         $this->submit('submit', _('Subscribe'));
+        $this->elementEnd('fieldset');
         $this->elementEnd('form');
-        common_show_footer();
     }
 
-    function remote_subscription()
+    function remoteSubscription()
     {
-        $user = $this->get_user();
+        $user = $this->getUser();
 
         if (!$user) {
-            $this->show_form(_('No such user.'));
+            $this->showForm(_('No such user.'));
             return;
         }
 
-        $profile = $this->trimmed('profile_url');
+        $this->profile_url = $this->trimmed('profile_url');
 
-        if (!$profile) {
-            $this->show_form(_('No such user.'));
+        if (!$this->profile_url) {
+            $this->showForm(_('No such user.'));
             return;
         }
 
-        if (!Validate::uri($profile, array('allowed_schemes' => array('http', 'https')))) {
-            $this->show_form(_('Invalid profile URL (bad format)'));
+        if (!Validate::uri($this->profile_url, array('allowed_schemes' => array('http', 'https')))) {
+            $this->showForm(_('Invalid profile URL (bad format)'));
             return;
         }
 
         $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) {
-            $this->show_form(_('Not a valid profile URL (no YADIS document).'));
+            $this->showForm(_('Not a valid profile URL (no YADIS document).'));
             return;
         }
 
@@ -125,52 +149,50 @@ class RemotesubscribeAction extends Action
         $xrds =& Auth_Yadis_XRDS::parseXRDS(trim($yadis->response_text));
 
         if (!$xrds) {
-            $this->show_form(_('Not a valid profile URL (no XRDS defined).'));
+            $this->showForm(_('Not a valid profile URL (no XRDS defined).'));
             return;
         }
 
         $omb = $this->getOmb($xrds);
 
         if (!$omb) {
-            $this->show_form(_('Not a valid profile URL (incorrect services).'));
+            $this->showForm(_('Not a valid profile URL (incorrect services).'));
             return;
         }
 
         if (omb_service_uri($omb[OAUTH_ENDPOINT_REQUEST]) ==
             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;
         }
 
         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;
         }
 
-        list($token, $secret) = $this->request_token($omb);
+        list($token, $secret) = $this->requestToken($omb);
 
         if (!$token || !$secret) {
-            $this->show_form(_('Couldn\'t get a request token.'));
+            $this->showForm(_('Couldn\'t get a request token.'));
             return;
         }
 
-        $this->request_authorization($user, $omb, $token, $secret);
+        $this->requestAuthorization($user, $omb, $token, $secret);
     }
 
-    function get_user()
+    function getUser()
     {
         $user = null;
-        $nickname = $this->trimmed('nickname');
-        if ($nickname) {
-            $user = User::staticGet('nickname', $nickname);
+        if ($this->nickname) {
+            $user = User::staticGet('nickname', $this->nickname);
         }
         return $user;
     }
 
     function getOmb($xrds)
     {
-
         static $omb_endpoints = array(OMB_ENDPOINT_UPDATEPROFILE, OMB_ENDPOINT_POSTNOTICE);
         static $oauth_endpoints = array(OAUTH_ENDPOINT_REQUEST, OAUTH_ENDPOINT_AUTHORIZE,
                                         OAUTH_ENDPOINT_ACCESS);
@@ -265,7 +287,7 @@ class RemotesubscribeAction extends Action
         return true;
     }
 
-    function request_token($omb)
+    function requestToken($omb)
     {
         $con = omb_oauth_consumer();
 
@@ -299,8 +321,7 @@ class RemotesubscribeAction extends Action
 
         $result = $fetcher->post($req->get_normalized_http_url(),
                                  $req->to_postdata(),
-                                 array('User-Agent' => 'Laconica/' . LACONICA_VERSION));
-
+                                 array('User-Agent: Laconica/' . LACONICA_VERSION));
         if ($result->status != 200) {
             return null;
         }
@@ -310,10 +331,8 @@ class RemotesubscribeAction extends Action
         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
-
         $con = omb_oauth_consumer();
         $tok = new OAuthToken($token, $secret);
 
@@ -337,25 +356,25 @@ class RemotesubscribeAction extends Action
         $req->set_parameter('omb_listenee', $user->uri);
         $req->set_parameter('omb_listenee_profile', common_profile_url($user->nickname));
         $req->set_parameter('omb_listenee_nickname', $user->nickname);
-        $req->set_parameter('omb_listenee_license', $config['license']['url']);
+        $req->set_parameter('omb_listenee_license', common_config('license', 'url'));
 
         $profile = $user->getProfile();
         if (!$profile) {
             common_log_db_error($user, 'SELECT', __FILE__);
-            $this->server_error(_('User without matching profile'));
+            $this->serverError(_('User without matching profile'));
             return;
         }
 
-        if ($profile->fullname) {
+        if (!is_null($profile->fullname)) {
             $req->set_parameter('omb_listenee_fullname', $profile->fullname);
         }
-        if ($profile->homepage) {
+        if (!is_null($profile->homepage)) {
             $req->set_parameter('omb_listenee_homepage', $profile->homepage);
         }
-        if ($profile->bio) {
+        if (!is_null($profile->bio)) {
             $req->set_parameter('omb_listenee_bio', $profile->bio);
         }
-        if ($profile->location) {
+        if (!is_null($profile->location)) {
             $req->set_parameter('omb_listenee_location', $profile->location);
         }
         $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
@@ -388,12 +407,7 @@ class RemotesubscribeAction extends Action
 
         # Redirect to authorization service
 
-        common_redirect($req->to_url());
+        common_redirect($req->to_url(), 303);
         return;
     }
-
-    function make_nonce()
-    {
-        return common_good_rand(16);
-    }
 }