summaryrefslogtreecommitdiffstats
path: root/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php')
-rw-r--r--apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php462
1 files changed, 462 insertions, 0 deletions
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php b/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php
new file mode 100644
index 00000000000..498d3a8e9dd
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php
@@ -0,0 +1,462 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Check for the required json and curl extensions, the Google APIs PHP Client
+// won't function without them.
+if (! function_exists('curl_init')) {
+ throw new Exception('Google PHP API Client requires the CURL PHP extension');
+}
+
+if (! function_exists('json_decode')) {
+ throw new Exception('Google PHP API Client requires the JSON PHP extension');
+}
+
+if (! function_exists('http_build_query')) {
+ throw new Exception('Google PHP API Client requires http_build_query()');
+}
+
+if (! ini_get('date.timezone') && function_exists('date_default_timezone_set')) {
+ date_default_timezone_set('UTC');
+}
+
+// hack around with the include paths a bit so the library 'just works'
+set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path());
+
+require_once "config.php";
+// If a local configuration file is found, merge it's values with the default configuration
+if (file_exists(dirname(__FILE__) . '/local_config.php')) {
+ $defaultConfig = $apiConfig;
+ require_once (dirname(__FILE__) . '/local_config.php');
+ $apiConfig = array_merge($defaultConfig, $apiConfig);
+}
+
+// Include the top level classes, they each include their own dependencies
+require_once 'service/Google_Model.php';
+require_once 'service/Google_Service.php';
+require_once 'service/Google_ServiceResource.php';
+require_once 'auth/Google_AssertionCredentials.php';
+require_once 'auth/Google_Signer.php';
+require_once 'auth/Google_P12Signer.php';
+require_once 'service/Google_BatchRequest.php';
+require_once 'external/URITemplateParser.php';
+require_once 'auth/Google_Auth.php';
+require_once 'cache/Google_Cache.php';
+require_once 'io/Google_IO.php';
+require_once('service/Google_MediaFileUpload.php');
+
+/**
+ * The Google API Client
+ * http://code.google.com/p/google-api-php-client/
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_Client {
+ /**
+ * @static
+ * @var Google_Auth $auth
+ */
+ static $auth;
+
+ /**
+ * @static
+ * @var Google_IO $io
+ */
+ static $io;
+
+ /**
+ * @static
+ * @var Google_Cache $cache
+ */
+ static $cache;
+
+ /**
+ * @static
+ * @var boolean $useBatch
+ */
+ static $useBatch = false;
+
+ /** @var array $scopes */
+ protected $scopes = array();
+
+ /** @var bool $useObjects */
+ protected $useObjects = false;
+
+ // definitions of services that are discovered.
+ protected $services = array();
+
+ // Used to track authenticated state, can't discover services after doing authenticate()
+ private $authenticated = false;
+
+ public function __construct($config = array()) {
+ global $apiConfig;
+ $apiConfig = array_merge($apiConfig, $config);
+ self::$cache = new $apiConfig['cacheClass']();
+ self::$auth = new $apiConfig['authClass']();
+ self::$io = new $apiConfig['ioClass']();
+ }
+
+ /**
+ * Add a service
+ */
+ public function addService($service, $version = false) {
+ global $apiConfig;
+ if ($this->authenticated) {
+ throw new Google_Exception('Cant add services after having authenticated');
+ }
+ $this->services[$service] = array();
+ if (isset($apiConfig['services'][$service])) {
+ // Merge the service descriptor with the default values
+ $this->services[$service] = array_merge($this->services[$service], $apiConfig['services'][$service]);
+ }
+ }
+
+ public function authenticate($code = null) {
+ $service = $this->prepareService();
+ $this->authenticated = true;
+ return self::$auth->authenticate($service, $code);
+ }
+
+ /**
+ * @return array
+ * @visible For Testing
+ */
+ public function prepareService() {
+ $service = array();
+ $scopes = array();
+ if ($this->scopes) {
+ $scopes = $this->scopes;
+ } else {
+ foreach ($this->services as $key => $val) {
+ if (isset($val['scope'])) {
+ if (is_array($val['scope'])) {
+ $scopes = array_merge($val['scope'], $scopes);
+ } else {
+ $scopes[] = $val['scope'];
+ }
+ } else {
+ $scopes[] = 'https://www.googleapis.com/auth/' . $key;
+ }
+ unset($val['discoveryURI']);
+ unset($val['scope']);
+ $service = array_merge($service, $val);
+ }
+ }
+ $service['scope'] = implode(' ', $scopes);
+ return $service;
+ }
+
+ /**
+ * Set the OAuth 2.0 access token using the string that resulted from calling authenticate()
+ * or Google_Client#getAccessToken().
+ * @param string $accessToken JSON encoded string containing in the following format:
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
+ * "expires_in":3600, "id_token":"TOKEN", "created":1320790426}
+ */
+ public function setAccessToken($accessToken) {
+ if ($accessToken == null || 'null' == $accessToken) {
+ $accessToken = null;
+ }
+ self::$auth->setAccessToken($accessToken);
+ }
+
+ /**
+ * Set the type of Auth class the client should use.
+ * @param string $authClassName
+ */
+ public function setAuthClass($authClassName) {
+ self::$auth = new $authClassName();
+ }
+
+ /**
+ * Construct the OAuth 2.0 authorization request URI.
+ * @return string
+ */
+ public function createAuthUrl() {
+ $service = $this->prepareService();
+ return self::$auth->createAuthUrl($service['scope']);
+ }
+
+ /**
+ * Get the OAuth 2.0 access token.
+ * @return string $accessToken JSON encoded string in the following format:
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
+ * "expires_in":3600,"id_token":"TOKEN", "created":1320790426}
+ */
+ public function getAccessToken() {
+ $token = self::$auth->getAccessToken();
+ return (null == $token || 'null' == $token) ? null : $token;
+ }
+
+ /**
+ * Returns if the access_token is expired.
+ * @return bool Returns True if the access_token is expired.
+ */
+ public function isAccessTokenExpired() {
+ return self::$auth->isAccessTokenExpired();
+ }
+
+ /**
+ * Set the developer key to use, these are obtained through the API Console.
+ * @see http://code.google.com/apis/console-help/#generatingdevkeys
+ * @param string $developerKey
+ */
+ public function setDeveloperKey($developerKey) {
+ self::$auth->setDeveloperKey($developerKey);
+ }
+
+ /**
+ * Set OAuth 2.0 "state" parameter to achieve per-request customization.
+ * @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
+ * @param string $state
+ */
+ public function setState($state) {
+ self::$auth->setState($state);
+ }
+
+ /**
+ * @param string $accessType Possible values for access_type include:
+ * {@code "offline"} to request offline access from the user. (This is the default value)
+ * {@code "online"} to request online access from the user.
+ */
+ public function setAccessType($accessType) {
+ self::$auth->setAccessType($accessType);
+ }
+
+ /**
+ * @param string $approvalPrompt Possible values for approval_prompt include:
+ * {@code "force"} to force the approval UI to appear. (This is the default value)
+ * {@code "auto"} to request auto-approval when possible.
+ */
+ public function setApprovalPrompt($approvalPrompt) {
+ self::$auth->setApprovalPrompt($approvalPrompt);
+ }
+
+ /**
+ * Set the application name, this is included in the User-Agent HTTP header.
+ * @param string $applicationName
+ */
+ public function setApplicationName($applicationName) {
+ global $apiConfig;
+ $apiConfig['application_name'] = $applicationName;
+ }
+
+ /**
+ * Set the OAuth 2.0 Client ID.
+ * @param string $clientId
+ */
+ public function setClientId($clientId) {
+ global $apiConfig;
+ $apiConfig['oauth2_client_id'] = $clientId;
+ self::$auth->clientId = $clientId;
+ }
+
+ /**
+ * Get the OAuth 2.0 Client ID.
+ */
+ public function getClientId() {
+ return self::$auth->clientId;
+ }
+
+ /**
+ * Set the OAuth 2.0 Client Secret.
+ * @param string $clientSecret
+ */
+ public function setClientSecret($clientSecret) {
+ global $apiConfig;
+ $apiConfig['oauth2_client_secret'] = $clientSecret;
+ self::$auth->clientSecret = $clientSecret;
+ }
+
+ /**
+ * Get the OAuth 2.0 Client Secret.
+ */
+ public function getClientSecret() {
+ return self::$auth->clientSecret;
+ }
+
+ /**
+ * Set the OAuth 2.0 Redirect URI.
+ * @param string $redirectUri
+ */
+ public function setRedirectUri($redirectUri) {
+ global $apiConfig;
+ $apiConfig['oauth2_redirect_uri'] = $redirectUri;
+ self::$auth->redirectUri = $redirectUri;
+ }
+
+ /**
+ * Get the OAuth 2.0 Redirect URI.
+ */
+ public function getRedirectUri() {
+ return self::$auth->redirectUri;
+ }
+
+ /**
+ * Fetches a fresh OAuth 2.0 access token with the given refresh token.
+ * @param string $refreshToken
+ * @return void
+ */
+ public function refreshToken($refreshToken) {
+ self::$auth->refreshToken($refreshToken);
+ }
+
+ /**
+ * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
+ * token, if a token isn't provided.
+ * @throws Google_AuthException
+ * @param string|null $token The token (access token or a refresh token) that should be revoked.
+ * @return boolean Returns True if the revocation was successful, otherwise False.
+ */
+ public function revokeToken($token = null) {
+ self::$auth->revokeToken($token);
+ }
+
+ /**
+ * Verify an id_token. This method will verify the current id_token, if one
+ * isn't provided.
+ * @throws Google_AuthException
+ * @param string|null $token The token (id_token) that should be verified.
+ * @return Google_LoginTicket Returns an apiLoginTicket if the verification was
+ * successful.
+ */
+ public function verifyIdToken($token = null) {
+ return self::$auth->verifyIdToken($token);
+ }
+
+ /**
+ * @param Google_AssertionCredentials $creds
+ * @return void
+ */
+ public function setAssertionCredentials(Google_AssertionCredentials $creds) {
+ self::$auth->setAssertionCredentials($creds);
+ }
+
+ /**
+ * This function allows you to overrule the automatically generated scopes,
+ * so that you can ask for more or less permission in the auth flow
+ * Set this before you call authenticate() though!
+ * @param array $scopes, ie: array('https://www.googleapis.com/auth/plus.me', 'https://www.googleapis.com/auth/moderator')
+ */
+ public function setScopes($scopes) {
+ $this->scopes = is_string($scopes) ? explode(" ", $scopes) : $scopes;
+ }
+
+ /**
+ * Returns the list of scopes set on the client
+ * @return array the list of scopes
+ *
+ */
+ public function getScopes() {
+ return $this->scopes;
+ }
+
+ /**
+ * Declare if objects should be returned by the api service classes.
+ *
+ * @param boolean $useObjects True if objects should be returned by the service classes.
+ * False if associative arrays should be returned (default behavior).
+ * @experimental
+ */
+ public function setUseObjects($useObjects) {
+ global $apiConfig;
+ $apiConfig['use_objects'] = $useObjects;
+ }
+
+ /**
+ * Declare if objects should be returned by the api service classes.
+ *
+ * @param boolean $useBatch True if the experimental batch support should
+ * be enabled. Defaults to False.
+ * @experimental
+ */
+ public function setUseBatch($useBatch) {
+ self::$useBatch = $useBatch;
+ }
+
+ /**
+ * @static
+ * @return Google_Auth the implementation of apiAuth.
+ */
+ public static function getAuth() {
+ return Google_Client::$auth;
+ }
+
+ /**
+ * @static
+ * @return Google_IO the implementation of apiIo.
+ */
+ public static function getIo() {
+ return Google_Client::$io;
+ }
+
+ /**
+ * @return Google_Cache the implementation of apiCache.
+ */
+ public function getCache() {
+ return Google_Client::$cache;
+ }
+}
+
+// Exceptions that the Google PHP API Library can throw
+class Google_Exception extends Exception {}
+class Google_AuthException extends Google_Exception {}
+class Google_CacheException extends Google_Exception {}
+class Google_IOException extends Google_Exception {}
+class Google_ServiceException extends Google_Exception {
+ /**
+ * Optional list of errors returned in a JSON body of an HTTP error response.
+ */
+ protected $errors = array();
+
+ /**
+ * Override default constructor to add ability to set $errors.
+ *
+ * @param string $message
+ * @param int $code
+ * @param Exception|null $previous
+ * @param [{string, string}] errors List of errors returned in an HTTP
+ * response. Defaults to [].
+ */
+ public function __construct($message, $code = 0, Exception $previous = null,
+ $errors = array()) {
+ if(version_compare(PHP_VERSION, '5.3.0') >= 0) {
+ parent::__construct($message, $code, $previous);
+ } else {
+ parent::__construct($message, $code);
+ }
+
+ $this->errors = $errors;
+ }
+
+ /**
+ * An example of the possible errors returned.
+ *
+ * {
+ * "domain": "global",
+ * "reason": "authError",
+ * "message": "Invalid Credentials",
+ * "locationType": "header",
+ * "location": "Authorization",
+ * }
+ *
+ * @return [{string, string}] List of errors return in an HTTP response or [].
+ */
+ public function getErrors() {
+ return $this->errors;
+ }
+}