shell bypass 403
<?php
namespace Rennokki\QueryCache\Traits;
use Rennokki\QueryCache\FlushQueryCacheObserver;
use Rennokki\QueryCache\Query\Builder;
/**
* @method static bool flushQueryCache(string[] $array = [])
* @method static bool flushQueryCacheWithTag(string $string)
* @method static \Illuminate\Database\Query\Builder|static cacheForever()
* @method static \Illuminate\Database\Query\Builder|static dontCache()
* @method static \Illuminate\Database\Query\Builder|static doNotCache()
*/
trait QueryCacheable
{
/**
* Boot the trait.
*
* @return void
*/
public static function bootQueryCacheable()
{
if (isset(static::$flushCacheOnUpdate) && static::$flushCacheOnUpdate) {
static::observe(
static::getFlushQueryCacheObserver()
);
}
}
/**
* Get the observer class name that will
* observe the changes and will invalidate the cache
* upon database change.
*
* @return string
*/
protected static function getFlushQueryCacheObserver()
{
return FlushQueryCacheObserver::class;
}
/**
* When invalidating automatically on update, you can specify
* which tags to invalidate.
*
* @return array
*/
public function getCacheTagsToInvalidateOnUpdate(): array
{
return $this->getCacheBaseTags();
}
/**
* {@inheritdoc}
*/
protected function newBaseQueryBuilder()
{
$connection = $this->getConnection();
$builder = new Builder(
$connection,
$connection->getQueryGrammar(),
$connection->getPostProcessor()
);
$builder->dontCache();
if ($this->cacheFor) {
$builder->cacheFor($this->cacheFor);
}
if ($this->cacheTags) {
$builder->cacheTags($this->cacheTags);
}
if ($this->cachePrefix) {
$builder->cachePrefix($this->cachePrefix);
}
if ($this->cacheDriver) {
$builder->cacheDriver($this->cacheDriver);
}
if ($this->cacheUsePlainKey) {
$builder->withPlainKey();
}
return $builder->cacheBaseTags($this->getCacheBaseTags());
}
/**
* Set the base cache tags that will be present
* on all queries.
*
* @return array
*/
protected function getCacheBaseTags(): array
{
return [
(string) static::class,
];
}
}