mirrored from git://git.moodle.org/moodle.git
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDL-58126 googledocs: Re-implement the google docs repo
Use latest REST API (v3) - but avoid the google client libraries (too big, too much to update, not integrated with auth). Part of MDL-58220
- Loading branch information
Damyon Wiese
committed
Apr 3, 2017
1 parent
2991124
commit 0e59638
Showing
10 changed files
with
372 additions
and
167 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
<?php | ||
// This file is part of Moodle - http://moodle.org/ | ||
// | ||
// Moodle is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
// | ||
// Moodle 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 General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU General Public License | ||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
/** | ||
* Rest API base class mapping rest api methods to endpoints with http methods, args and post body. | ||
* | ||
* @package core | ||
* @copyright 2017 Damyon Wiese | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
namespace core\oauth2; | ||
|
||
use curl; | ||
use coding_exception; | ||
|
||
defined('MOODLE_INTERNAL') || die(); | ||
|
||
require_once($CFG->libdir . '/filelib.php'); | ||
|
||
/** | ||
* Rest API base class mapping rest api methods to endpoints with http methods, args and post body. | ||
* | ||
* @copyright 2017 Damyon Wiese | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
abstract class rest { | ||
|
||
/** @var curl $curl */ | ||
private $curl; | ||
|
||
/** | ||
* Constructor. | ||
* | ||
* @param curl $curl | ||
*/ | ||
public function __construct(curl $curl) { | ||
$this->curl = $curl; | ||
} | ||
|
||
/** | ||
* Abstract function to define the functions of the rest API. | ||
* | ||
* @return array Example: | ||
* [ 'listFiles' => [ 'method' => 'get', 'args' => [ 'folder' => PARAM_STRING ], 'response' => 'json' ] ] | ||
*/ | ||
public abstract function get_api_functions(); | ||
|
||
/** | ||
* Call a function from the Api with a set of arguments and optional data. | ||
* | ||
* @param string $functionname | ||
* @param array $functionargs | ||
*/ | ||
public function call($functionname, $functionargs) { | ||
$functions = $this->get_api_functions(); | ||
$supportedmethods = [ 'get', 'put', 'post', 'patch', 'head', 'delete' ]; | ||
if (empty($functions[$functionname])) { | ||
throw new coding_exception('unsupported api functionname: ' . $functionname); | ||
} | ||
|
||
$method = $functions[$functionname]['method']; | ||
$endpoint = $functions[$functionname]['endpoint']; | ||
$responsetype = $functions[$functionname]['response']; | ||
if (!in_array($method, $supportedmethods)) { | ||
throw new coding_exception('unsupported api method: ' . $method); | ||
} | ||
|
||
$args = $functions[$functionname]['args']; | ||
$callargs = []; | ||
foreach ($args as $argname => $argtype) { | ||
if (isset($functionargs[$argname])) { | ||
$callargs[$argname] = clean_param($functionargs[$argname], $argtype); | ||
} | ||
} | ||
|
||
$response = $this->curl->$method($endpoint, $callargs); | ||
|
||
if ($this->curl->errno == 0) { | ||
if ($responsetype == 'json') { | ||
$json = json_decode($response); | ||
|
||
if (!empty($json->error)) { | ||
throw new rest_exception($json->error->message, $json->error->code); | ||
} | ||
return $json; | ||
} | ||
return $response; | ||
} else { | ||
throw new rest_exception($this->curl->error, $this->curl->errno); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<?php | ||
// This file is part of Moodle - http://moodle.org/ | ||
// | ||
// Moodle is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
// | ||
// Moodle 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 General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU General Public License | ||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
/** | ||
* Rest Exception class containing error code and message. | ||
* | ||
* @package core | ||
* @copyright 2017 Damyon Wiese | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
namespace core\oauth2; | ||
|
||
use Exception; | ||
|
||
defined('MOODLE_INTERNAL') || die(); | ||
|
||
require_once($CFG->libdir . '/filelib.php'); | ||
|
||
/** | ||
* Rest Exception class containing error code and message. | ||
* | ||
* @copyright 2017 Damyon Wiese | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
class rest_exception extends Exception { | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
<?php | ||
// This file is part of Moodle - http://moodle.org/ | ||
// | ||
// Moodle is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
// | ||
// Moodle 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 General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU General Public License | ||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
/** | ||
* Google Drive Rest API. | ||
* | ||
* @package repository_googledocs | ||
* @copyright 2017 Damyon Wiese | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
namespace repository_googledocs; | ||
|
||
defined('MOODLE_INTERNAL') || die(); | ||
|
||
/** | ||
* Google Drive Rest API. | ||
* | ||
* @copyright 2017 Damyon Wiese | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
class rest extends \core\oauth2\rest { | ||
|
||
/** | ||
* Define the functions of the rest API. | ||
* | ||
* @return array Example: | ||
* [ 'listFiles' => [ 'method' => 'get', 'endpoint' => 'http://...', 'args' => [ 'folder' => PARAM_STRING ] ] ] | ||
*/ | ||
public function get_api_functions() { | ||
return [ | ||
'list' => [ | ||
'endpoint' => 'https://www.googleapis.com/drive/v3/files', | ||
'method' => 'get', | ||
'args' => [ | ||
'corpus' => PARAM_RAW, | ||
'orderBy' => PARAM_RAW, | ||
'fields' => PARAM_RAW, | ||
'pageSize' => PARAM_INT, | ||
'pageToken' => PARAM_RAW, | ||
'q' => PARAM_RAW, | ||
'spaces' => PARAM_RAW | ||
], | ||
'response' => 'json' | ||
] | ||
]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.