Merge pull request #311 from acelaya/feature/improvements

Feature/improvements
This commit is contained in:
Alejandro Celaya 2018-12-07 02:55:27 +01:00 committed by GitHub
commit 7b78bee135
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 45 additions and 63 deletions

View file

@ -214,11 +214,9 @@ Right now, it does not import cached info (like website previews), but it will.
## Using a docker image
Currently there's no official docker image, but there's a work in progress alpha version you can find [here](https://hub.docker.com/r/shlinkio/shlink/).
Starting with version 1.15.0, an official docker image is provided. You can find the docs on how to use it [here](https://hub.docker.com/r/shlinkio/shlink/).
The idea will be that you can just generate a container using the image and provide predefined config files via volumes or CLI arguments, so that you get shlink up and running.
Currently the image does not expose an entry point which let's you interact with shlink's CLI interface, nor allows configuration to be passed.
The idea is that you can just generate a container using the image and provide custom config via env vars.
## Using shlink

View file

@ -8,7 +8,7 @@ return [
'app_options' => [
'name' => 'Shlink',
'version' => '%SHLINK_VERSION%',
'secret_key' => env('SECRET_KEY'),
'secret_key' => env('SECRET_KEY', ''),
'disable_track_param' => null,
],

View file

@ -13,6 +13,7 @@ use Zend\ServiceManager\Exception\ServiceNotFoundException;
use Zend\ServiceManager\Factory\FactoryInterface;
use function Functional\contains;
use function Shlinkio\Shlink\Common\env;
use function sys_get_temp_dir;
class CacheFactory implements FactoryInterface
{
@ -23,6 +24,7 @@ class CacheFactory implements FactoryInterface
Cache\PhpFileCache::class,
Cache\MemcachedCache::class,
];
private const DEFAULT_MEMCACHED_PORT = 11211;
/**
* Create an object
@ -40,7 +42,7 @@ class CacheFactory implements FactoryInterface
{
$appOptions = $container->get(AppOptions::class);
$adapter = $this->getAdapter($container);
$adapter->setNamespace($appOptions->__toString());
$adapter->setNamespace((string) $appOptions);
return $adapter;
}
@ -65,25 +67,35 @@ class CacheFactory implements FactoryInterface
return new $cacheConfig['adapter']();
case Cache\FilesystemCache::class:
case Cache\PhpFileCache::class:
return new $cacheConfig['adapter']($cacheConfig['options']['dir']);
return new $cacheConfig['adapter']($cacheConfig['options']['dir'] ?? sys_get_temp_dir());
case Cache\MemcachedCache::class:
$memcached = new Memcached();
$servers = $cacheConfig['options']['servers'] ?? [];
foreach ($servers as $server) {
if (! isset($server['host'])) {
continue;
}
$port = isset($server['port']) ? (int) $server['port'] : 11211;
$memcached->addServer($server['host'], $port);
}
$cache = new Cache\MemcachedCache();
$cache->setMemcached($memcached);
$cache->setMemcached($this->buildMemcached($cacheConfig));
return $cache;
default:
return new Cache\ArrayCache();
}
}
private function buildMemcached(array $cacheConfig): Memcached
{
$memcached = new Memcached();
$servers = $cacheConfig['options']['servers'] ?? [];
foreach ($servers as $server) {
$this->addMemcachedServer($memcached, $server);
}
return $memcached;
}
private function addMemcachedServer(Memcached $memcached, array $server): void
{
if (! isset($server['host'])) {
return;
}
$port = (int) ($server['port'] ?? self::DEFAULT_MEMCACHED_PORT);
$memcached->addServer($server['host'], $port);
}
}

View file

@ -15,69 +15,48 @@ class AppOptions extends AbstractOptions
private $name = '';
/** @var string */
private $version = '1.0';
/** @var string */
/**
* @var string
* @deprecated
*/
private $secretKey = '';
/** @var string|null */
private $disableTrackParam;
/**
* AppOptions constructor.
* @param array|null|\Traversable $options
*/
public function __construct($options = null)
{
parent::__construct($options);
}
/**
* @return string
*/
public function getName()
public function getName(): string
{
return $this->name;
}
/**
* @param string $name
* @return $this
*/
protected function setName($name)
protected function setName(string $name): self
{
$this->name = $name;
return $this;
}
/**
* @return string
*/
public function getVersion()
public function getVersion(): string
{
return $this->version;
}
/**
* @param string $version
* @return $this
*/
protected function setVersion($version)
protected function setVersion(string $version): self
{
$this->version = $version;
return $this;
}
/**
* @return mixed
* @deprecated
*/
public function getSecretKey()
public function getSecretKey(): string
{
return $this->secretKey;
}
/**
* @param mixed $secretKey
* @return $this
* @deprecated
*/
protected function setSecretKey($secretKey)
protected function setSecretKey(string $secretKey): self
{
$this->secretKey = $secretKey;
return $this;
@ -86,25 +65,18 @@ class AppOptions extends AbstractOptions
/**
* @return string|null
*/
public function getDisableTrackParam()
public function getDisableTrackParam(): ?string
{
return $this->disableTrackParam;
}
/**
* @param string|null $disableTrackParam
* @return $this|self
*/
protected function setDisableTrackParam($disableTrackParam): self
protected function setDisableTrackParam(?string $disableTrackParam): self
{
$this->disableTrackParam = $disableTrackParam;
return $this;
}
/**
* @return string
*/
public function __toString()
public function __toString(): string
{
return sprintf('%s:v%s', $this->name, $this->version);
}