Merge pull request #1267 from asherber/shorten-yourls

Allow for shortenviayourls in query params
This commit is contained in:
El RIDO 2024-03-18 07:42:59 +01:00 committed by GitHub
commit db287a10fe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 20 additions and 7 deletions

View file

@ -254,8 +254,8 @@ dir = PATH "data"
; Only use this if you allow short URL creation without credentials. ; Only use this if you allow short URL creation without credentials.
; - Alternatively, using the parameters in this section ("signature" and ; - Alternatively, using the parameters in this section ("signature" and
; "apiurl"), "urlshortener" needs to point to the base URL of your PrivateBin ; "apiurl"), "urlshortener" needs to point to the base URL of your PrivateBin
; instance with "shortenviayourls?link=" appended. For example: ; instance with "?shortenviayourls&link=" appended. For example:
; urlshortener = "${basepath}shortenviayourls?link=" ; urlshortener = "${basepath}?shortenviayourls&link="
; This URL will in turn call YOURLS on the server side, using the URL from ; This URL will in turn call YOURLS on the server side, using the URL from
; "apiurl" and the "access signature" from the "signature" parameters below. ; "apiurl" and the "access signature" from the "signature" parameters below.

View file

@ -143,7 +143,7 @@ class Request
} elseif (array_key_exists('jsonld', $this->_params) && !empty($this->_params['jsonld'])) { } elseif (array_key_exists('jsonld', $this->_params) && !empty($this->_params['jsonld'])) {
$this->_operation = 'jsonld'; $this->_operation = 'jsonld';
} elseif (array_key_exists('link', $this->_params) && !empty($this->_params['link'])) { } elseif (array_key_exists('link', $this->_params) && !empty($this->_params['link'])) {
if (strpos($this->getRequestUri(), '/shortenviayourls') !== false) { if (strpos($this->getRequestUri(), '/shortenviayourls') !== false || array_key_exists('shortenviayourls', $this->_params)) {
$this->_operation = 'yourlsproxy'; $this->_operation = 'yourlsproxy';
} }
} }

View file

@ -285,26 +285,39 @@ class JsonApiTest extends TestCase
/** /**
* @runInSeparateProcess * @runInSeparateProcess
* @dataProvider baseUriProvider
*/ */
public function testShortenViaYourls() public function testShortenViaYourls($baseUri)
{ {
$mock_yourls_service = $this->_path . DIRECTORY_SEPARATOR . 'yourls.json'; $mock_yourls_service = $this->_path . DIRECTORY_SEPARATOR . 'yourls.json';
$options = parse_ini_file(CONF, true); $options = parse_ini_file(CONF, true);
$options['main']['basepath'] = 'https://example.com/path'; // missing slash gets added by Configuration constructor $options['main']['basepath'] = 'https://example.com/path'; // missing slash gets added by Configuration constructor
$options['main']['urlshortener'] = 'https://example.com/path/shortenviayourls?link='; $options['main']['urlshortener'] = 'https://example.com' . $baseUri . 'link=';
$options['yourls']['apiurl'] = $mock_yourls_service; $options['yourls']['apiurl'] = $mock_yourls_service;
Helper::createIniFile(CONF, $options); Helper::createIniFile(CONF, $options);
// the real service answer is more complex, but we only look for the shorturl & statusCode // the real service answer is more complex, but we only look for the shorturl & statusCode
file_put_contents($mock_yourls_service, '{"shorturl":"https:\/\/example.com\/1","statusCode":200}'); file_put_contents($mock_yourls_service, '{"shorturl":"https:\/\/example.com\/1","statusCode":200}');
$_SERVER['REQUEST_URI'] = '/path/shortenviayourls?link=https%3A%2F%2Fexample.com%2Fpath%2F%3Ffoo%23bar'; $_SERVER['REQUEST_URI'] = $baseUri . 'link=https%3A%2F%2Fexample.com%2Fpath%2F%3Ffoo%23bar';
$_GET['link'] = 'https://example.com/path/?foo#bar'; $_GET['link'] = 'https://example.com/path/?foo#bar';
if (strpos($baseUri, '?shortenviayourls') !== false) {
$_GET['shortenviayourls'] = null;
}
ob_start(); ob_start();
new Controller; new Controller;
$content = ob_get_contents(); $content = ob_get_contents();
ob_end_clean(); ob_end_clean();
$this->assertStringContainsString('id="pasteurl" href="https://example.com/1"', $content, 'outputs shortened URL correctly'); $this->assertStringContainsString('id="pasteurl" href="https://example.com/1"', $content, "'{$baseUri}' outputs shortened URL correctly");
}
public function baseUriProvider()
{
return array(
array('/path/shortenviayourls?'),
array('/path/index.php/shortenviayourls?'),
array('/path?shortenviayourls&'),
);
} }
/** /**