mirror of
https://github.com/flarum/framework.git
synced 2025-02-28 02:05:26 +08:00
The CookieFactory now also works if no configuration exists (#1258)
* Returning the $default value if there's no config This is especially important for the CookieFactory which accesses the configuration before the application is installed * Injecting the configuration values into the CookieFactory
This commit is contained in:
parent
eeed7c20e1
commit
1b7cb3bec2
@ -143,7 +143,7 @@ class Application extends Container implements ApplicationContract
|
|||||||
*/
|
*/
|
||||||
public function config($key, $default = null)
|
public function config($key, $default = null)
|
||||||
{
|
{
|
||||||
return array_get($this->make('flarum.config'), $key, $default);
|
return $this->isInstalled() ? array_get($this->make('flarum.config'), $key, $default) : $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,16 +17,46 @@ use Flarum\Foundation\Application;
|
|||||||
class CookieFactory
|
class CookieFactory
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var Application
|
* The prefix for the cookie names.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $app;
|
protected $prefix;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A path scope for the cookies.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A domain scope for the cookies.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $domain;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the cookie(s) can be requested only over HTTPS.
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $secure;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Application $app
|
* @param Application $app
|
||||||
*/
|
*/
|
||||||
public function __construct(Application $app)
|
public function __construct(Application $app)
|
||||||
{
|
{
|
||||||
$this->app = $app;
|
// Parse the forum's base URL so that we can determine the optimal cookie settings
|
||||||
|
$url = parse_url(rtrim($app->url(), '/'));
|
||||||
|
|
||||||
|
// Get the cookie settings from the config or use the default values
|
||||||
|
$this->prefix = $app->config('cookie.name', 'flarum');
|
||||||
|
$this->path = $app->config('cookie.path', array_get($url, 'path') ?: '/');
|
||||||
|
$this->domain = $app->config('cookie.domain');
|
||||||
|
$this->secure = $app->config('cookie.secure', array_get($url, 'scheme') === 'https');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,9 +72,6 @@ class CookieFactory
|
|||||||
*/
|
*/
|
||||||
public function make($name, $value = null, $maxAge = null)
|
public function make($name, $value = null, $maxAge = null)
|
||||||
{
|
{
|
||||||
// Parse the forum's base URL so that we can determine the optimal cookie settings
|
|
||||||
$url = parse_url(rtrim($this->app->url(), '/'));
|
|
||||||
|
|
||||||
$cookie = SetCookie::create($this->getName($name), $value);
|
$cookie = SetCookie::create($this->getName($name), $value);
|
||||||
|
|
||||||
// Make sure we send both the MaxAge and Expires parameters (the former
|
// Make sure we send both the MaxAge and Expires parameters (the former
|
||||||
@ -55,16 +82,13 @@ class CookieFactory
|
|||||||
->withExpires(time() + $maxAge);
|
->withExpires(time() + $maxAge);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($domain = $this->app->config('cookie.domain')) {
|
if ($this->domain != null) {
|
||||||
$cookie = $cookie->withDomain($domain);
|
$cookie = $cookie->withDomain($this->domain);
|
||||||
}
|
}
|
||||||
|
|
||||||
$path = $this->app->config('cookie.path', array_get($url, 'path') ?: '/');
|
|
||||||
$secure = $this->app->config('cookie.secure', array_get($url, 'scheme') === 'https');
|
|
||||||
|
|
||||||
return $cookie
|
return $cookie
|
||||||
->withPath($path)
|
->withPath($this->path)
|
||||||
->withSecure($secure)
|
->withSecure($this->secure)
|
||||||
->withHttpOnly(true);
|
->withHttpOnly(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,6 +111,6 @@ class CookieFactory
|
|||||||
*/
|
*/
|
||||||
public function getName($name)
|
public function getName($name)
|
||||||
{
|
{
|
||||||
return $this->app->config('cookie.name', 'flarum').'_'.$name;
|
return $this->prefix.'_'.$name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user