This commit is contained in:
2024-12-31 11:07:09 +01:00
parent df7915205d
commit e089172b15
1916 changed files with 165422 additions and 271 deletions

View File

@ -0,0 +1,19 @@
<?php
/**
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die;
class nrURLShortBitly extends NRURLShortener
{
function baseURL()
{
return 'http://api.bit.ly/v3/shorten?login='.$this->service->login.'&apiKey='.$this->service->api.'&format=txt&uri='.urlencode($this->url);
}
}

View File

@ -0,0 +1,58 @@
<?php
/**
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die;
use \Joomla\CMS\Http\HttpFactory;
class nrURLShortGoogle extends NRURLShortener
{
function get()
{
if (!$this->validateCredentials())
{
return false;
}
$baseURL = "https://www.googleapis.com/urlshortener/v1/url?key=".$this->service->api;
$data = '{ "longUrl": "'.$this->url.'" }';
$headers['Content-Type'] = 'application/json';
try
{
$response = HttpFactory::getHttp()->post($baseURL, $data, $headers, 5);
if ($response === null || $response->code !== 200)
{
$result = json_decode($response->body);
$this->throwError($result->error->message);
return false;
}
}
catch (RuntimeException $e)
{
$this->throwError($e->getMessage());
return false;
}
$data = json_decode($response->body);
if (!isset($data->id))
{
return false;
}
return $data->id;
}
}

View File

@ -0,0 +1,140 @@
<?php
/**
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Http\HttpFactory;
/**
* Framework URL Shortening Class
* Should be extended. The get() method is required.
*/
class NRURLShortener {
/**
* The Shortener Service
*
* @var object
*/
protected $service;
/**
* The URL to be shortened
*
* @var string
*/
protected $url;
/**
* Sets if the service needs a valid login name
*
* @var boolean
*/
protected $needsLogin = true;
/**
* Sets if the service needs a valid API Key
*
* @var boolean
*/
protected $needsKey = true;
/**
* Constructor of class
*
* @param object $service The Shortener service information
* @param string $url The URL to be shortened
*/
public function __construct($service, $url) {
$this->service = $service;
$this->url = $url;
}
/**
* Throws an exception
*
* @param string $msg
*
* @return void
*/
protected function throwError($msg)
{
throw new Exception(Text::sprintf('NR_URL_SHORTENING_FAILED', $this->url, $this->service->name, $msg));
}
/**
* Checks if credentials are set
*
* @return boolean Returns true if credentials are set
*/
protected function validateCredentials()
{
if ($this->needsKey && !isset($this->service->api))
{
$this->throwError("API Key not set");
return false;
}
if ($this->needsLogin && !isset($this->service->login))
{
$this->throwError("Login not set");
return false;
}
return true;
}
/**
* Shortens the URL
*
* @return string On success returns the shortened URL
*/
public function get()
{
if (!$this->validateCredentials())
{
return false;
}
$baseURL = $this->baseURL();
if (!$baseURL)
{
return false;
}
try
{
$response = HttpFactory::getHttp()->get($baseURL, null, 5);
if ($response === null || $response->code !== 200)
{
$this->throwError($response->body);
return false;
}
}
catch (RuntimeException $e)
{
$this->throwError($e->getMessage());
return false;
}
return trim($response->body);
}
}
?>

View File

@ -0,0 +1,23 @@
<?php
/**
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die;
class nrURLShortTinyURL extends NRURLShortener
{
protected $needsKey = false;
protected $needsLogin = false;
function baseURL()
{
return "http://tinyurl.com/api-create.php?url=".urlencode($this->url);
}
}

View File

@ -0,0 +1,158 @@
<?php
/**
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die;
use \NRFramework\Cache;
class NRURLs {
private $url;
private $shortener;
private $cache;
function __construct($url = null)
{
if (isset($url)) {
$this->set($url);
}
$this->setCache(true);
}
public function set($url)
{
$url = trim(filter_var($url, FILTER_SANITIZE_URL));
return ($this->url = $url);
}
public function setCache($state)
{
$this->cache = (bool) $state;
}
public function setShortener($service)
{
$this->shortener = $service;
}
public function get()
{
return $this->url;
}
public function validate($url_ = null)
{
$url = isset($url_) ? $url_ : $this->url;
if (!$url)
{
return false;
}
// Remove all illegal characters from the URL
$url = filter_var($url, FILTER_SANITIZE_URL);
// Validate URL
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
return true;
}
return false;
}
public function getShort()
{
if (!$this->validate() || !isset($this->shortener))
{
return false;
}
$hash = MD5($this->shortener->name . $this->url);
$cache = Cache::read($hash, true);
if ($cache)
{
return $cache;
}
// Load Shorten Service Class
$file = __DIR__ . "/" . strtolower($this->shortener->name) . '.php';
$class = 'nrURLShort' . $this->shortener->name;
$method = "get";
require_once(__DIR__ . "/shortener.php");
if (!class_exists($class) && file_exists($file)) {
require_once($file);
}
if (!class_exists($class) || !method_exists($class, $method))
{
return false;
}
$class_ = new $class($this->shortener, $this->url);
$data = $class_->$method();
// Return the original URL if we don't have a valid short URL
if (!$this->validate($data))
{
return false;
}
Cache::set($hash, $data);
// Store to cache
if ($this->cache)
{
Cache::write($hash, $data);
}
return $data;
}
/**
* Appends extra parameters to the end of the URL
*
* @param String $url Pass URL
* @param String $params String of parameters (param=1&param=2)
*
* @return string Returns new url
*/
public function appendParams($params)
{
if (!$params)
{
return $this;
}
$url = $this->url;
$query = parse_url($url, PHP_URL_QUERY);
$params = trim($params, "?");
$params = trim($params, "&");
if ($query)
{
$url .= '&' . $params;
} else
{
$url .= '?' . $params;
}
$this->set($url);
return $this;
}
}
?>