Skip to content

Releases: mvc5/mvc5-application

Route Authentication, Login Redirect

02 Jan 03:53
Compare
Choose a tag to compare

Routes that should only be available to logged in users can be protected by setting the authenticate route attribute to true. Child routes are automatically protected and can override the parent value.

'dashboard' => [
    'path' => '/dashboard',
    'authenticate' => true,
    'children' => [
        'add' => [
            'path' => '/add'
        ]
    ]
]

If the user is not logged in, and it is a GET request and not a JSON request, the current URL is stored in the session and the user is redirected to the login page. Once the user has logged in, they are redirected back to the URL that is stored in the session. The default login URL is /login, and it can be changed by adding the URL to the route\match\authenticate service configuration.

'route\match\authenticate' => [Mvc5\Route\Match\Authenticate::class, '/login']

CSRF Token, SameSite Cookie

27 Dec 18:55
Compare
Choose a tag to compare

CSRF Token

A CSRF token is now used to protect routes against CSRF attacks. A new token is generated every time a new PHP session is created for the user. The token is then added to a POST form using a hidden HTML input element. The csrf_token helper function can be used to retrieve the current token.

<input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($this->csrf_token()); ?>">

The HTTP methods GET, HEAD, OPTIONS and TRACE, are considered "safe" and do not require a CSRF token. Safe HTTP methods should not be used to change the state of the application. Any other HTTP method is considered "unsafe" and requires a CSRF token to be sent with the request, either as a POST parameter, or using the X-CSRF-Token HTTP header. A 403 Forbidden HTTP Error is returned when the token is not valid.

new Request([
    'method' => 'POST', 
    'data' => ['csrf_token' => '882023fdc5f837855a...'],
    'headers' => ['X-CSRF-Token' => '882023fdc5f837855a...'],
]);

Routes can be configured not to verify the CSRF token by setting the csrf_token route attribute to false. Child routes inherit the csrf_token value of a parent route.

'api' => [
    'path' => '/api',
    'controller' => Api\Controller::class,
    'csrf_token' => false,
],

SameSite Cookies

The Cookies interface has been updated to match the new setcookie(string $name, string $value = '', array $options = []) method signature available in PHP 7.3, and to support the new SameSite cookie attribute. PHP 7.2 and below can still be used, but without the SameSite cookie attribute. A cookie can now be set in the following ways, and each cookie is stored as an associative array.

$cookies->with('foo', '', ['expires' => 0, ...]);
$cookies->with(['foo', '', 0, ...]);
$cookies->with(['name' => 'foo', 'value' => '', 'expires' => 0, 'raw' => true, ...]);

The PHPCookies::send(array $cookie, array $defaults = []) static method can now set raw cookies by setting the cookie raw attribute to true. To remove a PHP cookie, use PHPCookies::delete($name, array $options = []) or $cookies->without($name, array $options = []). Cookie defaults are now only applied when sending a cookie. The default value for SameSite cookies is lax.

PHP Sessions

To use SameSite session cookies in PHP 7.3, set the cookie_samesite attribute to lax or strict in the session configuration file.

Docker Compose PHP Release Version

18 Dec 04:15
Compare
Choose a tag to compare

The Docker Compose file now uses a configuration variable for the PHP release version, and the Composer directory.

Optional Xdebug Configuration

17 Dec 01:53
Compare
Choose a tag to compare

Make Xdebug optional (for PHP 7.3)

Extra Hosts & Docker Image Name

16 Dec 01:06
Compare
Choose a tag to compare

Add extra hosts and image to docker compose file.

Shared Composer Directory

14 Dec 02:53
Compare
Choose a tag to compare

The Composer directory ~/.composer is now shared with the container so that packages can be cached and reused.

Locale, Time Zone & PHP info

06 Nov 03:32
Compare
Choose a tag to compare

A /phpinfo page has been added. The LOCALE for the project container can be now be set in the docker compose file and the TZ build var has been renamed to TIME_ZONE.

favicon

27 Oct 15:59
Compare
Choose a tag to compare

Add favicon.

Docker Project

13 Oct 20:00
Compare
Choose a tag to compare

A new Docker project has been created for testing the Mvc5 Framework with different versions of PHP. It uses Traefik and Let's Encrypt SSL certificates. There are also some bin scripts to run Composer, PHPUnit, and npm inside the container.

Bootstrap 4.1.3

11 Oct 02:23
Compare
Choose a tag to compare

Bootstrap 4.1.3 (also fixes non https link).