MM-11420: plugins: compute bundle hash on load (#9172)

* plugins: compute bundle hash on load

Use this hash to bust client caches whenever the plugin bundle changes.

* eliminate redundant pluginHandler

* switch to 64-bit FNV-1a

* Fix test
Этот коммит содержится в:
Jesse Hallam
2018-07-31 16:29:52 -04:00
коммит произвёл GitHub
родитель 8c56f52d17
Коммит 0788cdcadf
5 изменённых файлов: 58 добавлений и 54 удалений

Просмотреть файл

@@ -5,6 +5,7 @@ package model
import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"os"
@@ -151,6 +152,9 @@ type ManifestWebapp struct {
// The path to your webapp bundle. This should be relative to the root of your bundle and the
// location of the manifest file.
BundlePath string `json:"bundle_path" yaml:"bundle_path"`
// BundleHash is the 64-bit FNV-1a hash of the webapp bundle, computed when the plugin is loaded
BundleHash []byte `json:"-"`
}
func (m *Manifest) ToJson() string {
@@ -188,7 +192,7 @@ func (m *Manifest) ClientManifest() *Manifest {
if cm.Webapp != nil {
cm.Webapp = new(ManifestWebapp)
*cm.Webapp = *m.Webapp
cm.Webapp.BundlePath = "/static/" + m.Id + "/" + m.Id + "_bundle.js"
cm.Webapp.BundlePath = "/static/" + m.Id + "/" + fmt.Sprintf("%s_%x_bundle.js", m.Id, m.Webapp.BundleHash)
}
return cm
}

Просмотреть файл

@@ -255,6 +255,7 @@ func TestManifestClientManifest(t *testing.T) {
},
Webapp: &ManifestWebapp{
BundlePath: "thebundlepath",
BundleHash: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
},
SettingsSchema: &PluginSettingsSchema{
Header: "theheadertext",
@@ -281,10 +282,11 @@ func TestManifestClientManifest(t *testing.T) {
sanitized := manifest.ClientManifest()
assert.NotEmpty(t, sanitized.Id)
assert.NotEmpty(t, sanitized.Version)
assert.NotEmpty(t, sanitized.Webapp)
assert.NotEmpty(t, sanitized.SettingsSchema)
assert.Equal(t, manifest.Id, sanitized.Id)
assert.Equal(t, manifest.Version, sanitized.Version)
assert.Equal(t, "/static/theid/theid_000102030405060708090a0b0c0d0e0f_bundle.js", sanitized.Webapp.BundlePath)
assert.Equal(t, manifest.Webapp.BundleHash, sanitized.Webapp.BundleHash)
assert.Equal(t, manifest.SettingsSchema, sanitized.SettingsSchema)
assert.Empty(t, sanitized.Name)
assert.Empty(t, sanitized.Description)
assert.Empty(t, sanitized.Server)