diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index 9df183727..e80553457 100644 --- a/cmd/syncthing/gui.go +++ b/cmd/syncthing/gui.go @@ -305,6 +305,9 @@ func (s *apiService) Serve() { } mux.Handle("/", assets) + // Handle the special meta.js path + mux.HandleFunc("/meta.js", s.getJSMetadata) + s.cfg.Subscribe(assets) guiCfg := s.cfg.GUI() @@ -525,6 +528,14 @@ func (s *apiService) restPing(w http.ResponseWriter, r *http.Request) { sendJSON(w, map[string]string{"ping": "pong"}) } +func (s *apiService) getJSMetadata(w http.ResponseWriter, r *http.Request) { + meta, _ := json.Marshal(map[string]string{ + "deviceID": s.id.String(), + }) + w.Header().Set("Content-Type", "application/javascript") + fmt.Fprintf(w, "var metadata = %s;\n", meta) +} + func (s *apiService) getSystemVersion(w http.ResponseWriter, r *http.Request) { sendJSON(w, map[string]string{ "version": Version, diff --git a/gui/default/index.html b/gui/default/index.html index 91c7a8dba..a30641ad1 100644 --- a/gui/default/index.html +++ b/gui/default/index.html @@ -664,6 +664,7 @@ + diff --git a/gui/default/syncthing/app.js b/gui/default/syncthing/app.js index e9ea4f374..5df81b391 100644 --- a/gui/default/syncthing/app.js +++ b/gui/default/syncthing/app.js @@ -23,31 +23,9 @@ var syncthing = angular.module('syncthing', [ var urlbase = 'rest'; syncthing.config(function ($httpProvider, $translateProvider, LocaleServiceProvider) { - $httpProvider.interceptors.push(function xHeadersResponseInterceptor() { - var deviceId = null; - - return { - response: function onResponse(response) { - var headers = response.headers(); - - // angular template cache sends no headers - if(Object.keys(headers).length === 0) { - return response; - } - - if (!deviceId) { - deviceId = headers['x-syncthing-id']; - if (deviceId) { - var deviceIdShort = deviceId.substring(0, 5); - $httpProvider.defaults.xsrfHeaderName = 'X-CSRF-Token-' + deviceIdShort; - $httpProvider.defaults.xsrfCookieName = 'CSRF-Token-' + deviceIdShort; - } - } - - return response; - } - }; - }); + var deviceIDShort = metadata.deviceID.substr(0, 5); + $httpProvider.defaults.xsrfHeaderName = 'X-CSRF-Token-' + deviceIDShort; + $httpProvider.defaults.xsrfCookieName = 'CSRF-Token-' + deviceIDShort; // language and localisation @@ -59,7 +37,6 @@ syncthing.config(function ($httpProvider, $translateProvider, LocaleServiceProvi LocaleServiceProvider.setAvailableLocales(validLangs); LocaleServiceProvider.setDefaultLocale('en'); - }); // @TODO: extract global level functions into separate service(s)