mirror of
https://github.com/MetaProvide/nextcloud-swarm-plugin.git
synced 2024-11-23 08:28:23 +00:00
a3a0b0582e
* add env for swarm access * check access * use storage config from external storage to set access key * Update README.md (#50) updated settings menu in readme * feat(intellisense): (#51) - update: remap the docker volume for main nextcloud to local project directory to access the nc code * add env for swarm access * feat(hooks): - add: entrypoint hooks volume - add: change-owner.sh script * feat(apache): - update: Dockerfile apache user and id - delete: hooks setup - add: .env setup - add: theme volume - update: turn off debugger at start * feat(.env): - add: .env example file * fix(docker): - add: theme volume * fix(docker): - revert: xdebug start config * backend options not persistant * access key works * feat(docker): - update: reduce the volumes to lib and apps * chore(env): - add: swarm api key in example * chore(env): - add: env file instructions - fix: typos * docs(readme): - fix: image path typo * merge(docker): - fix: revert the dev-env folder volumes * chore(main): - add: curl ext to project requirements * feat(util): curl - add: curl helper * feat(swarm): curl - update: request to use new Curl helper - update: check connection using new endpoint of gateway - update: type safety - refactor: remove unused methods * refactor(swarm): - refactor: upload and download methods - update: code style * feat(pay-wall): licence - add: License auth implementation - update: external storage definition - remove: nocodb access token setup - remove: basic auth setup * feat(swarm): - update: disable custom settings page * feat(gitignore): - update: categorize gitignore - add: DS_Store entry =) * refactor(gitignore): - update: url check using regex * fix(swarm): upload - update: remove extra param * fix(swarm): file preview - update: write file to memory to stream * feat(settings): add link - add: script to display link on settings page - update: load script on plugin boot --------- Co-authored-by: Henry Bergstrom <henrybergstrom@protonmail.com> Co-authored-by: rampall <rameshpallikara@gmail.com>
125 lines
2.5 KiB
PHP
125 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace OCA\Files_External_Ethswarm\Utils;
|
|
|
|
use CurlHandle;
|
|
use Safe\Exceptions\CurlException;
|
|
|
|
class Curl
|
|
{
|
|
private const DEFAULT_OPTIONS = [
|
|
CURLOPT_MAXREDIRS => 10,
|
|
CURLOPT_FOLLOWLOCATION => true,
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
];
|
|
|
|
protected CurlHandle $handler;
|
|
protected string $url;
|
|
protected array $options = [];
|
|
protected array $headers = [];
|
|
protected ?string $authorization = null;
|
|
|
|
/**
|
|
* @param string $url
|
|
* @param array $options
|
|
* @param array $headers
|
|
* @param string|null $authorization
|
|
*/
|
|
public function __construct(string $url, array $options = [], array $headers = [], ?string $authorization = null)
|
|
{
|
|
$this->url = $url;
|
|
$this->options = $options + self::DEFAULT_OPTIONS;
|
|
$this->headers = $headers;
|
|
$this->authorization = $authorization;
|
|
|
|
$this->init();
|
|
}
|
|
|
|
/**
|
|
* initializes a curl handler
|
|
* @return void
|
|
*/
|
|
private function init(): void
|
|
{
|
|
$this->handler = curl_init();
|
|
curl_setopt($this->handler, CURLOPT_URL, $this->url);
|
|
}
|
|
|
|
/**
|
|
* set curl options
|
|
*
|
|
* @param array $options
|
|
* @return void
|
|
*/
|
|
private function setOptions(array $options = []): void
|
|
{
|
|
$options = self::DEFAULT_OPTIONS + $this->options + $options;
|
|
curl_setopt_array($this->handler, $options);
|
|
}
|
|
|
|
/**
|
|
* @param array $headers
|
|
* @return void
|
|
*/
|
|
private function setHeaders(array $headers = []): void
|
|
{
|
|
$headers = $this->headers + $headers;
|
|
if ($this->authorization) {
|
|
$headers[] = 'Authorization: ' . $this->authorization;
|
|
}
|
|
curl_setopt($this->handler, CURLOPT_HTTPHEADER, $headers);
|
|
}
|
|
|
|
/**
|
|
* set authorization
|
|
*
|
|
* @param string $authorization
|
|
* @return void
|
|
*/
|
|
public function setAuthorization(string $authorization): void
|
|
{
|
|
$this->authorization = $authorization;
|
|
}
|
|
|
|
/**
|
|
* execute curl request
|
|
*
|
|
* @param bool $array
|
|
* @return string|array
|
|
* @throws CurlException
|
|
*/
|
|
public function exec(bool $array = false): string|array
|
|
{
|
|
$this->setOptions();
|
|
$this->setHeaders();
|
|
$response = curl_exec($this->handler);
|
|
$this->checkResponse();
|
|
return $array ? json_decode($response, true) : $response;
|
|
}
|
|
|
|
/**
|
|
* get curl info
|
|
*
|
|
* @param int|null $option
|
|
* @return mixed
|
|
*/
|
|
public function getInfo(?int $option = null): mixed
|
|
{
|
|
return curl_getinfo($this->handler, $option);
|
|
}
|
|
|
|
/**
|
|
* check response results for error
|
|
*
|
|
* @return void
|
|
* @throws CurlException
|
|
*/
|
|
private function checkResponse(): void
|
|
{
|
|
if (curl_errno($this->handler) !== 0) {
|
|
curl_close($this->handler);
|
|
throw new CurlException(curl_error($this->handler));
|
|
}
|
|
}
|
|
}
|