MDL-33501 - oauth2lib: improve redirect url handling
authorDan Poltawski <dan@moodle.com>
Mon, 4 Jun 2012 02:51:21 +0000 (10:51 +0800)
committerDan Poltawski <dan@moodle.com>
Mon, 4 Jun 2012 02:57:39 +0000 (10:57 +0800)
Only accept PARAM_LOCALURL for state params and enforce
use of moodle_url param in oauthlib to facilitate that.

admin/oauth2callback.php
lib/oauthlib.php
portfolio/googledocs/lib.php
portfolio/picasa/lib.php
repository/googledocs/lib.php
repository/picasa/lib.php

index 364c002..695353c 100644 (file)
@@ -33,6 +33,6 @@ require_once(dirname(dirname(__FILE__)).'/config.php');
 // The authorization code generated by the authorization server.
 $code = required_param('code', PARAM_RAW);
 // The state parameter we've given (used in moodle as a redirect url).
-$state = required_param('state', PARAM_URL);
+$state = required_param('state', PARAM_LOCALURL);
 
 redirect(new moodle_url($state, array('code' => $code)));
index b4aa15b..88cd53c 100644 (file)
@@ -368,8 +368,8 @@ abstract class oauth2_client extends curl {
     private $clientid = '';
     /** var string The client secret. */
     private $clientsecret = '';
-    /** var string URL to return to after authenticating */
-    private $returnurl = '';
+    /** var moodle_url URL to return to after authenticating */
+    private $returnurl = null;
     /** var string scope of the authentication request */
     private $scope = '';
     /** var stdClass access token object */
@@ -392,10 +392,10 @@ abstract class oauth2_client extends curl {
      *
      * @param string $clientid
      * @param string $clientsecret
-     * @param string $returnurl
+     * @param moodle_url $returnurl
      * @param string $scope
      */
-    public function __construct($clientid, $clientsecret, $returnurl, $scope) {
+    public function __construct($clientid, $clientsecret, moodle_url $returnurl, $scope) {
         parent::__construct();
         $this->clientid = $clientid;
         $this->clientsecret = $clientsecret;
@@ -456,7 +456,7 @@ abstract class oauth2_client extends curl {
                         array('client_id' => $this->clientid,
                               'response_type' => 'code',
                               'redirect_uri' => $callbackurl->out(false),
-                              'state' => $this->returnurl,
+                              'state' => $this->returnurl->out_as_local_url(false),
                               'scope' => $this->scope,
                           ));
 
index 9820246..02ce159 100644 (file)
@@ -124,7 +124,7 @@ class portfolio_plugin_googledocs extends portfolio_plugin_push_base {
         $clientid = $this->get_config('clientid');
         $secret = $this->get_config('secret');
 
-        $this->googleoauth = new google_oauth($clientid, $secret, $returnurl->out(false), google_docs::REALM);
+        $this->googleoauth = new google_oauth($clientid, $secret, $returnurl, google_docs::REALM);
     }
 
     public function instance_sanity_check() {
index d637b54..70200c1 100644 (file)
@@ -124,7 +124,7 @@ class portfolio_plugin_picasa extends portfolio_plugin_push_base {
         $clientid = $this->get_config('clientid');
         $secret = $this->get_config('secret');
 
-        $this->googleoauth = new google_oauth($clientid, $secret, $returnurl->out(false), google_picasa::REALM);
+        $this->googleoauth = new google_oauth($clientid, $secret, $returnurl, google_picasa::REALM);
     }
 
     public function instance_sanity_check() {
index 6ccb33b..22605dc 100644 (file)
@@ -44,7 +44,7 @@ class repository_googledocs extends repository {
 
         $clientid = get_config('googledocs', 'clientid');
         $secret = get_config('googledocs', 'secret');
-        $this->googleoauth = new google_oauth($clientid, $secret, $returnurl->out(false), google_docs::REALM);
+        $this->googleoauth = new google_oauth($clientid, $secret, $returnurl, google_docs::REALM);
 
         $this->check_login();
     }
index 9022380..fb2a83a 100644 (file)
@@ -46,7 +46,7 @@ class repository_picasa extends repository {
 
         $clientid = get_config('picasa', 'clientid');
         $secret = get_config('picasa', 'secret');
-        $this->googleoauth = new google_oauth($clientid, $secret, $returnurl->out(false), google_picasa::REALM);
+        $this->googleoauth = new google_oauth($clientid, $secret, $returnurl, google_picasa::REALM);
 
         $this->check_login();
     }