241 lines
5.9 KiB
PHP
241 lines
5.9 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* @package Joomla.Platform
|
||
|
* @subpackage GitHub
|
||
|
*
|
||
|
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
||
|
* @license GNU General Public License version 2 or later; see LICENSE
|
||
|
*/
|
||
|
|
||
|
defined('JPATH_PLATFORM') or die;
|
||
|
|
||
|
/**
|
||
|
* GitHub API Account class for the Joomla Platform.
|
||
|
*
|
||
|
* @package Joomla.Platform
|
||
|
* @subpackage GitHub
|
||
|
* @since 12.3
|
||
|
*/
|
||
|
class JGithubAccount extends JGithubObject
|
||
|
{
|
||
|
/**
|
||
|
* Method to create an authorisation.
|
||
|
*
|
||
|
* @param array $scopes A list of scopes that this authorisation is in.
|
||
|
* @param string $note A note to remind you what the OAuth token is for.
|
||
|
* @param string $url A URL to remind you what app the OAuth token is for.
|
||
|
*
|
||
|
* @return object
|
||
|
*
|
||
|
* @since 12.3
|
||
|
* @throws DomainException
|
||
|
*/
|
||
|
public function createAuthorisation(array $scopes = array(), $note = '', $url = '')
|
||
|
{
|
||
|
// Build the request path.
|
||
|
$path = '/authorizations';
|
||
|
|
||
|
$data = json_encode(
|
||
|
array('scopes' => $scopes, 'note' => $note, 'note_url' => $url)
|
||
|
);
|
||
|
|
||
|
// Send the request.
|
||
|
$response = $this->client->post($this->fetchUrl($path), $data);
|
||
|
|
||
|
// Validate the response code.
|
||
|
if ($response->code != 201)
|
||
|
{
|
||
|
// Decode the error response and throw an exception.
|
||
|
$error = json_decode($response->body);
|
||
|
throw new DomainException($error->message, $response->code);
|
||
|
}
|
||
|
|
||
|
return json_decode($response->body);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to delete an authorisation
|
||
|
*
|
||
|
* @param integer $id ID of the authorisation to delete
|
||
|
*
|
||
|
* @return object
|
||
|
*
|
||
|
* @since 12.3
|
||
|
* @throws DomainException
|
||
|
*/
|
||
|
public function deleteAuthorisation($id)
|
||
|
{
|
||
|
// Build the request path.
|
||
|
$path = '/authorizations/' . $id;
|
||
|
|
||
|
// Send the request.
|
||
|
$response = $this->client->delete($this->fetchUrl($path));
|
||
|
|
||
|
// Validate the response code.
|
||
|
if ($response->code != 204)
|
||
|
{
|
||
|
// Decode the error response and throw an exception.
|
||
|
$error = json_decode($response->body);
|
||
|
throw new DomainException($error->message, $response->code);
|
||
|
}
|
||
|
|
||
|
return json_decode($response->body);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to edit an authorisation.
|
||
|
*
|
||
|
* @param integer $id ID of the authorisation to edit
|
||
|
* @param array $scopes Replaces the authorisation scopes with these.
|
||
|
* @param array $addScopes A list of scopes to add to this authorisation.
|
||
|
* @param array $removeScopes A list of scopes to remove from this authorisation.
|
||
|
* @param string $note A note to remind you what the OAuth token is for.
|
||
|
* @param string $url A URL to remind you what app the OAuth token is for.
|
||
|
*
|
||
|
* @return object
|
||
|
*
|
||
|
* @since 12.3
|
||
|
* @throws DomainException
|
||
|
* @throws RuntimeException
|
||
|
*/
|
||
|
public function editAuthorisation($id, array $scopes = array(), array $addScopes = array(), array $removeScopes = array(), $note = '', $url = '')
|
||
|
{
|
||
|
// Check if more than one scopes array contains data
|
||
|
$scopesCount = 0;
|
||
|
|
||
|
if (!empty($scopes))
|
||
|
{
|
||
|
$scope = 'scopes';
|
||
|
$scopeData = $scopes;
|
||
|
$scopesCount++;
|
||
|
}
|
||
|
if (!empty($addScopes))
|
||
|
{
|
||
|
$scope = 'add_scopes';
|
||
|
$scopeData = $addScopes;
|
||
|
$scopesCount++;
|
||
|
}
|
||
|
if (!empty($removeScopes))
|
||
|
{
|
||
|
$scope = 'remove_scopes';
|
||
|
$scopeData = $removeScopes;
|
||
|
$scopesCount++;
|
||
|
}
|
||
|
|
||
|
// Only allowed to send data for one scope parameter
|
||
|
if ($scopesCount >= 2)
|
||
|
{
|
||
|
throw new RuntimeException('You can only send one scope key in this request.');
|
||
|
}
|
||
|
|
||
|
// Build the request path.
|
||
|
$path = '/authorizations/' . $id;
|
||
|
|
||
|
$data = json_encode(
|
||
|
array(
|
||
|
$scope => $scopeData,
|
||
|
'note' => $note,
|
||
|
'note_url' => $url
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// Send the request.
|
||
|
$response = $this->client->patch($this->fetchUrl($path), $data);
|
||
|
|
||
|
// Validate the response code.
|
||
|
if ($response->code != 200)
|
||
|
{
|
||
|
// Decode the error response and throw an exception.
|
||
|
$error = json_decode($response->body);
|
||
|
throw new DomainException($error->message, $response->code);
|
||
|
}
|
||
|
|
||
|
return json_decode($response->body);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to get details about an authorised application for the authenticated user.
|
||
|
*
|
||
|
* @param integer $id ID of the authorisation to retrieve
|
||
|
*
|
||
|
* @return object
|
||
|
*
|
||
|
* @since 12.3
|
||
|
* @note This method will only accept Basic Authentication
|
||
|
* @throws DomainException
|
||
|
*/
|
||
|
public function getAuthorisation($id)
|
||
|
{
|
||
|
// Build the request path.
|
||
|
$path = '/authorizations/' . $id;
|
||
|
|
||
|
// Send the request.
|
||
|
$response = $this->client->get($this->fetchUrl($path));
|
||
|
|
||
|
// Validate the response code.
|
||
|
if ($response->code != 200)
|
||
|
{
|
||
|
// Decode the error response and throw an exception.
|
||
|
$error = json_decode($response->body);
|
||
|
throw new DomainException($error->message, $response->code);
|
||
|
}
|
||
|
|
||
|
return json_decode($response->body);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to get the authorised applications for the authenticated user.
|
||
|
*
|
||
|
* @return object
|
||
|
*
|
||
|
* @since 12.3
|
||
|
* @throws DomainException
|
||
|
* @note This method will only accept Basic Authentication
|
||
|
*/
|
||
|
public function getAuthorisations()
|
||
|
{
|
||
|
// Build the request path.
|
||
|
$path = '/authorizations';
|
||
|
|
||
|
// Send the request.
|
||
|
$response = $this->client->get($this->fetchUrl($path));
|
||
|
|
||
|
// Validate the response code.
|
||
|
if ($response->code != 200)
|
||
|
{
|
||
|
// Decode the error response and throw an exception.
|
||
|
$error = json_decode($response->body);
|
||
|
throw new DomainException($error->message, $response->code);
|
||
|
}
|
||
|
|
||
|
return json_decode($response->body);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to get the rate limit for the authenticated user.
|
||
|
*
|
||
|
* @return object
|
||
|
*
|
||
|
* @since 12.3
|
||
|
* @throws DomainException
|
||
|
*/
|
||
|
public function getRateLimit()
|
||
|
{
|
||
|
// Build the request path.
|
||
|
$path = '/rate_limit';
|
||
|
|
||
|
// Send the request.
|
||
|
$response = $this->client->get($this->fetchUrl($path));
|
||
|
|
||
|
// Validate the response code.
|
||
|
if ($response->code != 200)
|
||
|
{
|
||
|
// Decode the error response and throw an exception.
|
||
|
$error = json_decode($response->body);
|
||
|
throw new DomainException($error->message, $response->code);
|
||
|
}
|
||
|
|
||
|
return json_decode($response->body);
|
||
|
}
|
||
|
}
|