Release of v4.0.0-alpha8

Add power path override option on component level. Fix the sql build feature. #1032.
This commit is contained in:
2024-04-06 23:29:23 +02:00
parent 23af2f0b29
commit 359b4dd92b
761 changed files with 1893 additions and 1235 deletions

View File

@@ -0,0 +1,98 @@
<?php
/**
* @package Joomla.Component.Builder
*
* @created 4th September, 2022
* @author Llewellyn van der Merwe <https://dev.vdm.io>
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace VDM\Joomla\Gitea\Utilities;
use Joomla\CMS\Http\Http as JoomlaHttp;
use Joomla\Registry\Registry;
/**
* The Gitea Http
*
* @since 3.2.0
*/
final class Http extends JoomlaHttp
{
/**
* The token
*
* @var string
* @since 3.2.0
*/
protected string $_token_; // to avoid collusions (but allow swapping)
/**
* Constructor.
*
* @param string|null $token The Gitea API token.
*
* @since 3.2.0
* @throws \InvalidArgumentException
**/
public function __construct(?string $token)
{
// setup config
$config = [
'userAgent' => 'JoomlaGitea/3.0',
'headers' => [
'Content-Type' => 'application/json'
]
];
// add the token if given
if (is_string($token))
{
$config['headers']['Authorization'] = $token;
$this->_token_ = $token;
}
$options = new Registry($config);
// run parent constructor
parent::__construct($options);
}
/**
* Change the Token.
*
* @param string $token The Gitea API token.
*
* @since 3.2.0
**/
public function setToken(string $token): void
{
// get the current headers
$headers = (array) $this->getOption('headers', [
'Content-Type' => 'application/json'
]
);
// add the token
$headers['Authorization'] = $token;
$this->_token_ = $token;
$this->setOption('headers', $headers);
}
/**
* Get the Token.
*
* @return string|null
* @since 3.2.0
**/
public function getToken(): ?string
{
return $this->_token_ ?? null;
}
}

View File

@@ -0,0 +1,144 @@
<?php
/**
* @package Joomla.Component.Builder
*
* @created 4th September, 2022
* @author Llewellyn van der Merwe <https://dev.vdm.io>
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace VDM\Joomla\Gitea\Utilities;
use Joomla\Http\Response as JoomlaResponse;
use VDM\Joomla\Utilities\JsonHelper;
use VDM\Joomla\Utilities\StringHelper;
/**
* The Gitea Response
*
* @since 3.2.0
*/
final class Response
{
/**
* Process the response and decode it.
*
* @param JoomlaResponse $response The response.
* @param integer $expectedCode The expected "good" code.
* @param mixed $default The default if body not have length
*
* @return mixed
*
* @since 3.2.0
* @throws \DomainException
**/
public function get($response, int $expectedCode = 200, $default = null)
{
// Validate the response code.
if ($response->code != $expectedCode)
{
// Decode the error response and throw an exception.
$message = $this->error($response);
throw new \DomainException("Invalid response received from API. $message", $response->code);
}
return $this->body($response, $default);
}
/**
* Process the response and decode it. (when we have multiple success codes)
*
* @param JoomlaResponse $response The response.
* @param array [$expectedCode => $default] The expected "good" code. and The default if body not have length
*
* @return mixed
*
* @since 3.2.0
* @throws \DomainException
**/
public function get_($response, array $validate = [200 => null])
{
// Validate the response code.
if (!isset($validate[$response->code]))
{
// Decode the error response and throw an exception.
$message = $this->error($response);
throw new \DomainException("Invalid response received from API. $message", $response->code);
}
return $this->body($response, $validate[$response->code]);
}
/**
* Return the body from the response
*
* @param JoomlaResponse $response The response.
* @param mixed $default The default if body not have length
*
* @return mixed
* @since 3.2.0
**/
protected function body($response, $default = null)
{
$body = $response->body ?? null;
// check that we have a body
if (StringHelper::check($body))
{
if (JsonHelper::check($body))
{
$body = json_decode((string) $body);
if (isset($body->content_base64))
{
$body->content = base64_decode((string) $body->content_base64);
}
}
return $body;
}
return $default;
}
/**
* Get the error message from the return object
*
* @param JoomlaResponse $response The response.
*
* @return string
* @since 3.2.0
**/
protected function error($response): string
{
// do we have a json string
if (isset($response->body) && JsonHelper::check($response->body))
{
$error = json_decode($response->body);
}
else
{
return '';
}
// check
if (isset($error->error))
{
return $error->error;
}
elseif (isset($error->message))
{
return $error->message;
}
return '';
}
}

View File

@@ -0,0 +1,150 @@
<?php
/**
* @package Joomla.Component.Builder
*
* @created 4th September, 2022
* @author Llewellyn van der Merwe <https://dev.vdm.io>
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace VDM\Joomla\Gitea\Utilities;
use Joomla\Uri\Uri as JoomlaUri;
/**
* The Gitea Uri
*
* @since 3.2.0
*/
final class Uri
{
/**
* The api endpoint
*
* @var string
* @since 3.2.0
*/
private string $endpoint;
/**
* The api version
*
* @var string
* @since 3.2.0
*/
private string $version;
/**
* The api URL
*
* @var string
* @since 3.2.0
*/
private string $url;
/**
* Constructor
*
* @param string $url URL to the gitea system
* example: https://git.vdm.dev
* @param string $endpoint Endpoint to the gitea system
* @param string $version Version to the gitea system
*
* @since 3.2.0
**/
public function __construct(
string $url = 'https://git.vdm.dev',
string $endpoint = 'api',
string $version = 'v1')
{
// set the API details
$this->setUrl($url);
$this->setEndpoint($endpoint);
$this->setVersion($version);
}
/**
* Method to build and return a full request URL for the request. This method will
* add appropriate pagination details if necessary and also prepend the API url
* to have a complete URL for the request.
*
* @param string $path URL to inflect
*
* @return JoomlaUri
* @since 3.2.0
**/
public function get(string $path): JoomlaUri
{
// Get a new Uri object focusing the api url and given path.
$uri = new JoomlaUri($this->api() . $path);
return $uri;
}
/**
* Get the full API URL
*
* @return string
* @since 3.2.0
**/
public function api(): string
{
return $this->url . '/' . $this->endpoint . '/' . $this->version;
}
/**
* Set the URL of the API
*
* @param string $url URL to your gitea system
* example: https://git.vdm.dev
*
* @return void
* @since 3.2.0
**/
public function setUrl(string $url)
{
$this->url = $url;
}
/**
* Get the URL of the API
*
* @return string|null
* @since 3.2.0
**/
public function getUrl(): ?string
{
return $this->url ?? null;
}
/**
* Set the endpoint of the API
*
* @param string $endpoint endpoint to your gitea API
*
* @return void
* @since 3.2.0
**/
private function setEndpoint(string $endpoint)
{
$this->endpoint = $endpoint;
}
/**
* Set the version of the API
*
* @param string $version version to your gitea API
*
* @return void
* @since 3.2.0
**/
private function setVersion($version)
{
$this->version = $version;
}
}

View File

@@ -0,0 +1 @@
<html><body bgcolor="#FFFFFF"></body></html>