2017 © Pedro Peláez
 

plugin kirby3-fingerprint

File Method and css/js helper to add cachbusting hash and optional Subresource Integrity to file

image

bnomei/kirby3-fingerprint

File Method and css/js helper to add cachbusting hash and optional Subresource Integrity to file

  • Saturday, July 28, 2018
  • by bnomei
  • Repository
  • 0 Watchers
  • 1 Stars
  • 14 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 2 Open issues
  • 10 Versions
  • 0 % Grown

The README.md

Kirby Fingerprint

Kirby 5 PHP 8.2 Release Downloads Coverage Maintainability Discord Buymecoffee, (*1)

File Method and css/js helper to add a cache busting hash and optional Subresource Integrity to files., (*2)

Installation

  • unzip master.zip as folder site/plugins/kirby3-fingerprint or
  • git submodule add https://github.com/bnomei/kirby3-fingerprint.git site/plugins/kirby3-fingerprint or
  • composer require bnomei/kirby3-fingerprint

Usage

[!WARNING] This Plugin does not override the build in js()/css() helpers. Use css_f/Bnomei\Fingerprint::css and js_f/Bnomei\Fingerprint::js when you need them., (*3)

echo css_f('/assets/css/index.css');
echo Bnomei\Fingerprint::css('/assets/css/index.css');
// <style> element with https://../assets/css/index.css?v=1203291283

echo js_f('/assets/js/index.min.js');
echo Bnomei\Fingerprint::js('/assets/js/index.min.js');
// <link> element https://../assets/js/index.min.js?v=1203291283

echo url_f('/assets/css/index.css');
echo Bnomei\Fingerprint::url('/assets/css/index.css');
// raw url https://../assets/css/index.css?v=1203291283

echo $page->file('ukulele.pdf')->fingerprint();
// https://../ukulele.pdf?v=1203291283

echo $page->file('ukulele.pdf')->integrity();
// sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC

// generate sri from local file
echo Bnomei\Fingerprint::js(
    '/assets/js/index.min.js',
    [
        "integrity" => true
    ]
);
/*

*/

echo Bnomei\Fingerprint::js(
    'https://external.cdn/framework.min.js',
    [
        "integrity" => "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
    ]
);
/*

*/

Cache

[!WARNING] If global debug mode is true, the plugin will flush its cache and not write any more caches., (*4)

Hash and SRI values are cached and only updated when the original file is modified., (*5)

For best performance, set either the global or plugin-specific cache driver to one using the server's memory, not the default using files on the hard disk (even on SSDs). If available, I suggest Redis/APCu or leave it at file otherwise., (*6)

site/config/config.php, (*7)

return [
  'cache' => [
    'driver' => 'apcu', // or redis
  ],
  'bnomei.fingerprint.cache' => [
    'type' => 'apcu', // or redis
  ],
];

Similar Plugins

The following plugins can do cache busting, but they do not cache the modified timestamp, nor can they do SRI, nor do cache busting for non-js/CSS files., (*8)

Settings

bnomei.fingerprint. Default Description
hash callback will lead to the hashing logic
integrity callback use it to set option 'integrity' => null,
digest 'sha384' Cryptographic digest to be used for SRI hashes either 'sha256', 'sha384' or 'sha512'.
https true boolean value or callback to force https scheme on all but localhost enviroments.
query true or string or callback myfile.js?v={HASH}, myfile.{HASH}.js or loaded from manifest file

Query option: true (default)

myfile.js?v={HASH}

This is the default since it works without additional changes to your server but be aware that query strings are not perfect., (*9)

Query option: false

If you disable the query option, you also need to add Apache or Nginx rules. These rules will redirect CSS and JS files from with hash to the asset on disk., (*10)

.htaccess - put this directly after the RewriteBase statment, (*11)

# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.([0-9a-z]{32})\.(js|css)$ $1.$3 [L]

Nginx virtual host setup, (*12)

location ~ (.+)\.(?:\w+)\.(js|css)$ {
    try_files $uri $1.$2;
}

Query option: string (Manifest files)

You can also forward the path of a JSON-encoded manifest file, and the plugin will load whatever hash is defined there. This works great for gulp-rev or with laravel mix versioning., (*13)

Disclaimer

This plugin is provided "as is" with no guarantee. You can use it at your own risk and always test it before using it in a production environment. If you find any issues, please create a new issue., (*14)

License

MIT, (*15)

It is discouraged to use this plugin in any project that promotes racism, sexism, homophobia, animal abuse, violence or any other form of hate speech., (*16)

Credits

  • based on @iksi https://github.com/iksi/kirby-fingerprint (Kirby V2)
  • @S1SYPHOS https://github.com/S1SYPHOS/kirby-sri (Kirby V2)

The Versions

28/07 2018

dev-master

9999999-dev

File Method and css/js helper to add cachbusting hash and optional Subresource Integrity to file

  Sources   Download

MIT

The Requires

  • getkirby/cms dev-master as 3.0.0

 

by Bruno Meilick

28/07 2018

2.0.4

2.0.4.0

File Method and css/js helper to add cachbusting hash and optional Subresource Integrity to file

  Sources   Download

MIT

The Requires

  • getkirby/cms dev-master as 3.0.0

 

by Bruno Meilick

28/07 2018

2.0.3

2.0.3.0

File Method and css/js helper to add cachbusting hash and optional Subresource Integrity to file

  Sources   Download

MIT

The Requires

  • getkirby/cms dev-master as 3.0.0

 

by Bruno Meilick

27/07 2018

2.0.1

2.0.1.0

File Method and css/js helper to add cachbusting hash and optional Subresource Integrity to file

  Sources   Download

MIT

The Requires

  • getkirby/cms 3.0.*

 

by Bruno Meilick

26/07 2018

2.0.0

2.0.0.0

File Method and css/js helper to add cachbusting hash and optional Subresource Integrity to file

  Sources   Download

MIT

The Requires

  • getkirby/cms 3.0.*

 

by Bruno Meilick

25/07 2018

1.2.0

1.2.0.0

  Sources   Download

MIT

The Requires

  • getkirby/cms 3.0.*

 

by Bruno Meilick

25/07 2018

1.1.2

1.1.2.0

  Sources   Download

MIT

The Requires

  • getkirby/cms 3.0.*

 

by Bruno Meilick

25/07 2018

1.1.1

1.1.1.0

  Sources   Download

MIT

by Bruno Meilick

25/07 2018

1.1.0

1.1.0.0

  Sources   Download

MIT

by Bruno Meilick

24/07 2018

1.0.0

1.0.0.0

  Sources   Download

by Bruno Meilick