mirror of
https://github.com/shlinkio/shlink.git
synced 2024-12-28 09:51:40 -06:00
Replaced in_array by contains
This commit is contained in:
parent
ebf2e459e8
commit
e55dbef2fc
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||||||
namespace Shlinkio\Shlink\Common;
|
namespace Shlinkio\Shlink\Common;
|
||||||
|
|
||||||
use function getenv;
|
use function getenv;
|
||||||
|
use function in_array;
|
||||||
use function strtolower;
|
use function strtolower;
|
||||||
use function trim;
|
use function trim;
|
||||||
|
|
||||||
@ -43,5 +44,5 @@ function env($key, $default = null)
|
|||||||
|
|
||||||
function contains($needle, array $haystack)
|
function contains($needle, array $haystack)
|
||||||
{
|
{
|
||||||
return \in_array($needle, $haystack, true);
|
return in_array($needle, $haystack, true);
|
||||||
}
|
}
|
||||||
|
@ -6,15 +6,17 @@ namespace Shlinkio\Shlink\Common\Factory;
|
|||||||
use Doctrine\Common\Cache;
|
use Doctrine\Common\Cache;
|
||||||
use Interop\Container\ContainerInterface;
|
use Interop\Container\ContainerInterface;
|
||||||
use Interop\Container\Exception\ContainerException;
|
use Interop\Container\Exception\ContainerException;
|
||||||
use Shlinkio\Shlink\Common;
|
use Memcached;
|
||||||
use Shlinkio\Shlink\Core\Options\AppOptions;
|
use Shlinkio\Shlink\Core\Options\AppOptions;
|
||||||
use Zend\ServiceManager\Exception\ServiceNotCreatedException;
|
use Zend\ServiceManager\Exception\ServiceNotCreatedException;
|
||||||
use Zend\ServiceManager\Exception\ServiceNotFoundException;
|
use Zend\ServiceManager\Exception\ServiceNotFoundException;
|
||||||
use Zend\ServiceManager\Factory\FactoryInterface;
|
use Zend\ServiceManager\Factory\FactoryInterface;
|
||||||
|
use function Shlinkio\Shlink\Common\contains;
|
||||||
|
use function Shlinkio\Shlink\Common\env;
|
||||||
|
|
||||||
class CacheFactory implements FactoryInterface
|
class CacheFactory implements FactoryInterface
|
||||||
{
|
{
|
||||||
const VALID_CACHE_ADAPTERS = [
|
private const VALID_CACHE_ADAPTERS = [
|
||||||
Cache\ApcuCache::class,
|
Cache\ApcuCache::class,
|
||||||
Cache\ArrayCache::class,
|
Cache\ArrayCache::class,
|
||||||
Cache\FilesystemCache::class,
|
Cache\FilesystemCache::class,
|
||||||
@ -51,14 +53,12 @@ class CacheFactory implements FactoryInterface
|
|||||||
{
|
{
|
||||||
// Try to get the adapter from config
|
// Try to get the adapter from config
|
||||||
$config = $container->get('config');
|
$config = $container->get('config');
|
||||||
if (isset($config['cache'], $config['cache']['adapter'])
|
if (isset($config['cache']['adapter']) && contains($config['cache']['adapter'], self::VALID_CACHE_ADAPTERS)) {
|
||||||
&& in_array($config['cache']['adapter'], self::VALID_CACHE_ADAPTERS)
|
|
||||||
) {
|
|
||||||
return $this->resolveCacheAdapter($config['cache']);
|
return $this->resolveCacheAdapter($config['cache']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the adapter has not been set in config, create one based on environment
|
// If the adapter has not been set in config, create one based on environment
|
||||||
return Common\env('APP_ENV', 'pro') === 'pro' ? new Cache\ApcuCache() : new Cache\ArrayCache();
|
return env('APP_ENV', 'pro') === 'pro' ? new Cache\ApcuCache() : new Cache\ArrayCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,8 +75,8 @@ class CacheFactory implements FactoryInterface
|
|||||||
case Cache\PhpFileCache::class:
|
case Cache\PhpFileCache::class:
|
||||||
return new $cacheConfig['adapter']($cacheConfig['options']['dir']);
|
return new $cacheConfig['adapter']($cacheConfig['options']['dir']);
|
||||||
case Cache\MemcachedCache::class:
|
case Cache\MemcachedCache::class:
|
||||||
$memcached = new \Memcached();
|
$memcached = new Memcached();
|
||||||
$servers = isset($cacheConfig['options']['servers']) ? $cacheConfig['options']['servers'] : [];
|
$servers = $cacheConfig['options']['servers'] ?? [];
|
||||||
|
|
||||||
foreach ($servers as $server) {
|
foreach ($servers as $server) {
|
||||||
if (! isset($server['host'])) {
|
if (! isset($server['host'])) {
|
||||||
|
@ -7,6 +7,11 @@ use Cake\Chronos\Chronos;
|
|||||||
use Doctrine\ORM\EntityRepository;
|
use Doctrine\ORM\EntityRepository;
|
||||||
use Doctrine\ORM\QueryBuilder;
|
use Doctrine\ORM\QueryBuilder;
|
||||||
use Shlinkio\Shlink\Core\Entity\ShortUrl;
|
use Shlinkio\Shlink\Core\Entity\ShortUrl;
|
||||||
|
use function array_column;
|
||||||
|
use function array_key_exists;
|
||||||
|
use function is_array;
|
||||||
|
use function key;
|
||||||
|
use function Shlinkio\Shlink\Common\contains;
|
||||||
|
|
||||||
class ShortUrlRepository extends EntityRepository implements ShortUrlRepositoryInterface
|
class ShortUrlRepository extends EntityRepository implements ShortUrlRepositoryInterface
|
||||||
{
|
{
|
||||||
@ -55,19 +60,19 @@ class ShortUrlRepository extends EntityRepository implements ShortUrlRepositoryI
|
|||||||
'shortCode' => 'shortCode',
|
'shortCode' => 'shortCode',
|
||||||
'dateCreated' => 'dateCreated',
|
'dateCreated' => 'dateCreated',
|
||||||
];
|
];
|
||||||
$fieldName = \is_array($orderBy) ? \key($orderBy) : $orderBy;
|
$fieldName = is_array($orderBy) ? key($orderBy) : $orderBy;
|
||||||
$order = \is_array($orderBy) ? $orderBy[$fieldName] : 'ASC';
|
$order = is_array($orderBy) ? $orderBy[$fieldName] : 'ASC';
|
||||||
|
|
||||||
if (\in_array($fieldName, ['visits', 'visitsCount', 'visitCount'], true)) {
|
if (contains($fieldName, ['visits', 'visitsCount', 'visitCount'])) {
|
||||||
$qb->addSelect('COUNT(DISTINCT v) AS totalVisits')
|
$qb->addSelect('COUNT(DISTINCT v) AS totalVisits')
|
||||||
->leftJoin('s.visits', 'v')
|
->leftJoin('s.visits', 'v')
|
||||||
->groupBy('s')
|
->groupBy('s')
|
||||||
->orderBy('totalVisits', $order);
|
->orderBy('totalVisits', $order);
|
||||||
|
|
||||||
return \array_column($qb->getQuery()->getResult(), 0);
|
return array_column($qb->getQuery()->getResult(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\array_key_exists($fieldName, $fieldNameMap)) {
|
if (array_key_exists($fieldName, $fieldNameMap)) {
|
||||||
$qb->orderBy('s.' . $fieldNameMap[$fieldName], $order);
|
$qb->orderBy('s.' . $fieldNameMap[$fieldName], $order);
|
||||||
}
|
}
|
||||||
return $qb->getQuery()->getResult();
|
return $qb->getQuery()->getResult();
|
||||||
|
@ -9,6 +9,9 @@ use Psr\Http\Message\ServerRequestInterface;
|
|||||||
use Psr\Http\Server\RequestHandlerInterface;
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
use Zend\Diactoros\Response;
|
use Zend\Diactoros\Response;
|
||||||
use Zend\Expressive\Template\TemplateRendererInterface;
|
use Zend\Expressive\Template\TemplateRendererInterface;
|
||||||
|
use function array_shift;
|
||||||
|
use function explode;
|
||||||
|
use function Shlinkio\Shlink\Common\contains;
|
||||||
|
|
||||||
class NotFoundHandler implements RequestHandlerInterface
|
class NotFoundHandler implements RequestHandlerInterface
|
||||||
{
|
{
|
||||||
@ -39,12 +42,12 @@ class NotFoundHandler implements RequestHandlerInterface
|
|||||||
*/
|
*/
|
||||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||||
{
|
{
|
||||||
$accepts = \explode(',', $request->getHeaderLine('Accept'));
|
$accepts = explode(',', $request->getHeaderLine('Accept'));
|
||||||
$accept = \array_shift($accepts);
|
$accept = array_shift($accepts);
|
||||||
$status = StatusCodeInterface::STATUS_NOT_FOUND;
|
$status = StatusCodeInterface::STATUS_NOT_FOUND;
|
||||||
|
|
||||||
// If the first accepted type is json, return a json response
|
// If the first accepted type is json, return a json response
|
||||||
if (\in_array($accept, ['application/json', 'text/json', 'application/x-json'], true)) {
|
if (contains($accept, ['application/json', 'text/json', 'application/x-json'])) {
|
||||||
return new Response\JsonResponse([
|
return new Response\JsonResponse([
|
||||||
'error' => 'NOT_FOUND',
|
'error' => 'NOT_FOUND',
|
||||||
'message' => 'Not found',
|
'message' => 'Not found',
|
||||||
|
@ -21,7 +21,7 @@ use Zend\Diactoros\Response\JsonResponse;
|
|||||||
use Zend\Expressive\Router\RouteResult;
|
use Zend\Expressive\Router\RouteResult;
|
||||||
use Zend\I18n\Translator\TranslatorInterface;
|
use Zend\I18n\Translator\TranslatorInterface;
|
||||||
use function implode;
|
use function implode;
|
||||||
use function in_array;
|
use function Shlinkio\Shlink\Common\contains;
|
||||||
use function sprintf;
|
use function sprintf;
|
||||||
|
|
||||||
class AuthenticationMiddleware implements MiddlewareInterface, StatusCodeInterface, RequestMethodInterface
|
class AuthenticationMiddleware implements MiddlewareInterface, StatusCodeInterface, RequestMethodInterface
|
||||||
@ -72,7 +72,7 @@ class AuthenticationMiddleware implements MiddlewareInterface, StatusCodeInterfa
|
|||||||
if ($routeResult === null
|
if ($routeResult === null
|
||||||
|| $routeResult->isFailure()
|
|| $routeResult->isFailure()
|
||||||
|| $request->getMethod() === self::METHOD_OPTIONS
|
|| $request->getMethod() === self::METHOD_OPTIONS
|
||||||
|| in_array($routeResult->getMatchedRouteName(), $this->routesWhitelist, true)
|
|| contains($routeResult->getMatchedRouteName(), $this->routesWhitelist)
|
||||||
) {
|
) {
|
||||||
return $handler->handle($request);
|
return $handler->handle($request);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,15 @@ use Psr\Http\Message\ServerRequestInterface as Request;
|
|||||||
use Psr\Http\Server\MiddlewareInterface;
|
use Psr\Http\Server\MiddlewareInterface;
|
||||||
use Psr\Http\Server\RequestHandlerInterface;
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
use Shlinkio\Shlink\Rest\Exception\RuntimeException;
|
use Shlinkio\Shlink\Rest\Exception\RuntimeException;
|
||||||
|
use function array_shift;
|
||||||
|
use function explode;
|
||||||
|
use function json_decode;
|
||||||
|
use function json_last_error;
|
||||||
|
use function json_last_error_msg;
|
||||||
|
use function parse_str;
|
||||||
|
use function Shlinkio\Shlink\Common\contains;
|
||||||
|
use function sprintf;
|
||||||
|
use function trim;
|
||||||
|
|
||||||
class BodyParserMiddleware implements MiddlewareInterface, RequestMethodInterface
|
class BodyParserMiddleware implements MiddlewareInterface, RequestMethodInterface
|
||||||
{
|
{
|
||||||
@ -27,17 +36,17 @@ class BodyParserMiddleware implements MiddlewareInterface, RequestMethodInterfac
|
|||||||
$currentParams = $request->getParsedBody();
|
$currentParams = $request->getParsedBody();
|
||||||
|
|
||||||
// In requests that do not allow body or if the body has already been parsed, continue to next middleware
|
// In requests that do not allow body or if the body has already been parsed, continue to next middleware
|
||||||
if (! empty($currentParams) || \in_array($method, [
|
if (! empty($currentParams) || contains($method, [
|
||||||
self::METHOD_GET,
|
self::METHOD_GET,
|
||||||
self::METHOD_HEAD,
|
self::METHOD_HEAD,
|
||||||
self::METHOD_OPTIONS,
|
self::METHOD_OPTIONS,
|
||||||
], true)) {
|
])) {
|
||||||
return $handler->handle($request);
|
return $handler->handle($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the accepted content is JSON, try to parse the body from JSON
|
// If the accepted content is JSON, try to parse the body from JSON
|
||||||
$contentType = $this->getRequestContentType($request);
|
$contentType = $this->getRequestContentType($request);
|
||||||
if (\in_array($contentType, ['application/json', 'text/json', 'application/x-json'], true)) {
|
if (contains($contentType, ['application/json', 'text/json', 'application/x-json'])) {
|
||||||
return $handler->handle($this->parseFromJson($request));
|
return $handler->handle($this->parseFromJson($request));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,8 +60,8 @@ class BodyParserMiddleware implements MiddlewareInterface, RequestMethodInterfac
|
|||||||
private function getRequestContentType(Request $request): string
|
private function getRequestContentType(Request $request): string
|
||||||
{
|
{
|
||||||
$contentType = $request->getHeaderLine('Content-type');
|
$contentType = $request->getHeaderLine('Content-type');
|
||||||
$contentTypes = \explode(';', $contentType);
|
$contentTypes = explode(';', $contentType);
|
||||||
return \trim(\array_shift($contentTypes));
|
return trim(array_shift($contentTypes));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,9 +76,9 @@ class BodyParserMiddleware implements MiddlewareInterface, RequestMethodInterfac
|
|||||||
return $request;
|
return $request;
|
||||||
}
|
}
|
||||||
|
|
||||||
$parsedJson = \json_decode($rawBody, true);
|
$parsedJson = json_decode($rawBody, true);
|
||||||
if (\json_last_error() !== JSON_ERROR_NONE) {
|
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||||
throw new RuntimeException(\sprintf('Error when parsing JSON request body: %s', \json_last_error_msg()));
|
throw new RuntimeException(sprintf('Error when parsing JSON request body: %s', json_last_error_msg()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $request->withParsedBody($parsedJson);
|
return $request->withParsedBody($parsedJson);
|
||||||
|
Loading…
Reference in New Issue
Block a user