From bd87db19319eeff772d15b3228f96841217c6630 Mon Sep 17 00:00:00 2001 From: Djamil Legato Date: Fri, 20 Nov 2020 17:27:01 -0800 Subject: [PATCH] Fixed KeepAlive issue where too large of a session value would fire the keep alive immediately (fixes #1860) --- CHANGELOG.md | 1 + themes/grav/app/utils/keepalive.js | 4 +++- themes/grav/js/admin.min.js | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a62b9a7b..bf2c4051 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ * Fixed folder auto-naming in Add Module [#1937](https://github.com/getgrav/grav-plugin-admin/issues/1937) * Fixed remodal issue triggering close when selecting a dropdown item ending outside of scope [#1682](https://github.com/getgrav/grav-plugin-admin/issues/1682) * Reworked how collapsed lists work so the tooltip is not cut off [#1928](https://github.com/getgrav/grav-plugin-admin/issues/1928) + * Fixed KeepAlive issue where too large of a session value would fire the keep alive immediately [#1860](https://github.com/getgrav/grav-plugin-admin/issues/1860) # v1.10.0-rc.17 ## 10/07/2020 diff --git a/themes/grav/app/utils/keepalive.js b/themes/grav/app/utils/keepalive.js index b99d9e13..86ae1481 100644 --- a/themes/grav/app/utils/keepalive.js +++ b/themes/grav/app/utils/keepalive.js @@ -1,6 +1,8 @@ import { config } from 'grav-config'; import { userFeedbackError } from './response'; +const MAX_SAFE_DELAY = 2147483647; + class KeepAlive { constructor() { this.active = false; @@ -8,7 +10,7 @@ class KeepAlive { start() { let timeout = config.admin_timeout / 1.5 * 1000; - this.timer = setInterval(() => this.fetch(), timeout); + this.timer = setInterval(() => this.fetch(), Math.min(timeout, MAX_SAFE_DELAY)); this.active = true; } diff --git a/themes/grav/js/admin.min.js b/themes/grav/js/admin.min.js index 7ae7fda7..4fe0fc1a 100644 --- a/themes/grav/js/admin.min.js +++ b/themes/grav/js/admin.min.js @@ -963,7 +963,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jque /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _response__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./response */ \"./app/utils/response.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\nvar KeepAlive = /*#__PURE__*/function () {\n function KeepAlive() {\n _classCallCheck(this, KeepAlive);\n\n this.active = false;\n }\n\n _createClass(KeepAlive, [{\n key: \"start\",\n value: function start() {\n var _this = this;\n\n var timeout = grav_config__WEBPACK_IMPORTED_MODULE_0__.config.admin_timeout / 1.5 * 1000;\n this.timer = setInterval(function () {\n return _this.fetch();\n }, timeout);\n this.active = true;\n }\n }, {\n key: \"stop\",\n value: function stop() {\n clearInterval(this.timer);\n this.active = false;\n }\n }, {\n key: \"fetch\",\n value: function (_fetch) {\n function fetch() {\n return _fetch.apply(this, arguments);\n }\n\n fetch.toString = function () {\n return _fetch.toString();\n };\n\n return fetch;\n }(function () {\n var data = new FormData();\n data.append('admin-nonce', grav_config__WEBPACK_IMPORTED_MODULE_0__.config.admin_nonce);\n fetch(\"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_0__.config.base_url_relative, \"/task\").concat(grav_config__WEBPACK_IMPORTED_MODULE_0__.config.param_sep, \"keepAlive\"), {\n credentials: 'same-origin',\n method: 'post',\n body: data\n })[\"catch\"](_response__WEBPACK_IMPORTED_MODULE_1__.userFeedbackError);\n })\n }]);\n\n return KeepAlive;\n}();\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new KeepAlive());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3V0aWxzL2tlZXBhbGl2ZS5qcz9jNWNhIl0sIm5hbWVzIjpbIktlZXBBbGl2ZSIsImFjdGl2ZSIsInRpbWVvdXQiLCJjb25maWciLCJ0aW1lciIsInNldEludGVydmFsIiwiZmV0Y2giLCJjbGVhckludGVydmFsIiwiZGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJib2R5IiwidXNlckZlZWRiYWNrRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztJQUVNQSxTO0FBQ0YsdUJBQWM7QUFBQTs7QUFDVixTQUFLQyxNQUFMLEdBQWMsS0FBZDtBQUNIOzs7OzRCQUVPO0FBQUE7O0FBQ0osVUFBSUMsT0FBTyxHQUFHQyw2REFBQSxHQUF1QixHQUF2QixHQUE2QixJQUEzQztBQUNBLFdBQUtDLEtBQUwsR0FBYUMsV0FBVyxDQUFDO0FBQUEsZUFBTSxLQUFJLENBQUNDLEtBQUwsRUFBTjtBQUFBLE9BQUQsRUFBcUJKLE9BQXJCLENBQXhCO0FBQ0EsV0FBS0QsTUFBTCxHQUFjLElBQWQ7QUFDSDs7OzJCQUVNO0FBQ0hNLG1CQUFhLENBQUMsS0FBS0gsS0FBTixDQUFiO0FBQ0EsV0FBS0gsTUFBTCxHQUFjLEtBQWQ7QUFDSDs7Ozs7Ozs7Ozs7OztrQkFFTztBQUNKLFVBQUlPLElBQUksR0FBRyxJQUFJQyxRQUFKLEVBQVg7QUFDQUQsVUFBSSxDQUFDRSxNQUFMLENBQVksYUFBWixFQUEyQlAsMkRBQTNCO0FBRUFHLFdBQUssV0FBSUgsaUVBQUosa0JBQW9DQSx5REFBcEMsZ0JBQWlFO0FBQ2xFUSxtQkFBVyxFQUFFLGFBRHFEO0FBRWxFQyxjQUFNLEVBQUUsTUFGMEQ7QUFHbEVDLFlBQUksRUFBRUw7QUFINEQsT0FBakUsQ0FBTCxVQUlTTSx3REFKVDtBQUtILEs7Ozs7OztBQUdMLGlFQUFlLElBQUlkLFNBQUosRUFBZiIsImZpbGUiOiIuL2FwcC91dGlscy9rZWVwYWxpdmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25maWcgfSBmcm9tICdncmF2LWNvbmZpZyc7XG5pbXBvcnQgeyB1c2VyRmVlZGJhY2tFcnJvciB9IGZyb20gJy4vcmVzcG9uc2UnO1xuXG5jbGFzcyBLZWVwQWxpdmUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXJ0KCkge1xuICAgICAgICBsZXQgdGltZW91dCA9IGNvbmZpZy5hZG1pbl90aW1lb3V0IC8gMS41ICogMTAwMDtcbiAgICAgICAgdGhpcy50aW1lciA9IHNldEludGVydmFsKCgpID0+IHRoaXMuZmV0Y2goKSwgdGltZW91dCk7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdG9wKCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZldGNoKCkge1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBkYXRhLmFwcGVuZCgnYWRtaW4tbm9uY2UnLCBjb25maWcuYWRtaW5fbm9uY2UpO1xuXG4gICAgICAgIGZldGNoKGAke2NvbmZpZy5iYXNlX3VybF9yZWxhdGl2ZX0vdGFzayR7Y29uZmlnLnBhcmFtX3NlcH1rZWVwQWxpdmVgLCB7XG4gICAgICAgICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgYm9keTogZGF0YVxuICAgICAgICB9KS5jYXRjaCh1c2VyRmVlZGJhY2tFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgS2VlcEFsaXZlKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./app/utils/keepalive.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _response__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./response */ \"./app/utils/response.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\nvar MAX_SAFE_DELAY = 2147483647;\n\nvar KeepAlive = /*#__PURE__*/function () {\n function KeepAlive() {\n _classCallCheck(this, KeepAlive);\n\n this.active = false;\n }\n\n _createClass(KeepAlive, [{\n key: \"start\",\n value: function start() {\n var _this = this;\n\n var timeout = grav_config__WEBPACK_IMPORTED_MODULE_0__.config.admin_timeout / 1.5 * 1000;\n this.timer = setInterval(function () {\n return _this.fetch();\n }, Math.min(timeout, MAX_SAFE_DELAY));\n this.active = true;\n }\n }, {\n key: \"stop\",\n value: function stop() {\n clearInterval(this.timer);\n this.active = false;\n }\n }, {\n key: \"fetch\",\n value: function (_fetch) {\n function fetch() {\n return _fetch.apply(this, arguments);\n }\n\n fetch.toString = function () {\n return _fetch.toString();\n };\n\n return fetch;\n }(function () {\n var data = new FormData();\n data.append('admin-nonce', grav_config__WEBPACK_IMPORTED_MODULE_0__.config.admin_nonce);\n fetch(\"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_0__.config.base_url_relative, \"/task\").concat(grav_config__WEBPACK_IMPORTED_MODULE_0__.config.param_sep, \"keepAlive\"), {\n credentials: 'same-origin',\n method: 'post',\n body: data\n })[\"catch\"](_response__WEBPACK_IMPORTED_MODULE_1__.userFeedbackError);\n })\n }]);\n\n return KeepAlive;\n}();\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new KeepAlive());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3V0aWxzL2tlZXBhbGl2ZS5qcz9jNWNhIl0sIm5hbWVzIjpbIk1BWF9TQUZFX0RFTEFZIiwiS2VlcEFsaXZlIiwiYWN0aXZlIiwidGltZW91dCIsImNvbmZpZyIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJmZXRjaCIsIk1hdGgiLCJtaW4iLCJjbGVhckludGVydmFsIiwiZGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJib2R5IiwidXNlckZlZWRiYWNrRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUEsSUFBTUEsY0FBYyxHQUFHLFVBQXZCOztJQUVNQyxTO0FBQ0YsdUJBQWM7QUFBQTs7QUFDVixTQUFLQyxNQUFMLEdBQWMsS0FBZDtBQUNIOzs7OzRCQUVPO0FBQUE7O0FBQ0osVUFBSUMsT0FBTyxHQUFHQyw2REFBQSxHQUF1QixHQUF2QixHQUE2QixJQUEzQztBQUNBLFdBQUtDLEtBQUwsR0FBYUMsV0FBVyxDQUFDO0FBQUEsZUFBTSxLQUFJLENBQUNDLEtBQUwsRUFBTjtBQUFBLE9BQUQsRUFBcUJDLElBQUksQ0FBQ0MsR0FBTCxDQUFTTixPQUFULEVBQWtCSCxjQUFsQixDQUFyQixDQUF4QjtBQUNBLFdBQUtFLE1BQUwsR0FBYyxJQUFkO0FBQ0g7OzsyQkFFTTtBQUNIUSxtQkFBYSxDQUFDLEtBQUtMLEtBQU4sQ0FBYjtBQUNBLFdBQUtILE1BQUwsR0FBYyxLQUFkO0FBQ0g7Ozs7Ozs7Ozs7Ozs7a0JBRU87QUFDSixVQUFJUyxJQUFJLEdBQUcsSUFBSUMsUUFBSixFQUFYO0FBQ0FELFVBQUksQ0FBQ0UsTUFBTCxDQUFZLGFBQVosRUFBMkJULDJEQUEzQjtBQUVBRyxXQUFLLFdBQUlILGlFQUFKLGtCQUFvQ0EseURBQXBDLGdCQUFpRTtBQUNsRVUsbUJBQVcsRUFBRSxhQURxRDtBQUVsRUMsY0FBTSxFQUFFLE1BRjBEO0FBR2xFQyxZQUFJLEVBQUVMO0FBSDRELE9BQWpFLENBQUwsVUFJU00sd0RBSlQ7QUFLSCxLOzs7Ozs7QUFHTCxpRUFBZSxJQUFJaEIsU0FBSixFQUFmIiwiZmlsZSI6Ii4vYXBwL3V0aWxzL2tlZXBhbGl2ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ2dyYXYtY29uZmlnJztcbmltcG9ydCB7IHVzZXJGZWVkYmFja0Vycm9yIH0gZnJvbSAnLi9yZXNwb25zZSc7XG5cbmNvbnN0IE1BWF9TQUZFX0RFTEFZID0gMjE0NzQ4MzY0NztcblxuY2xhc3MgS2VlcEFsaXZlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGFydCgpIHtcbiAgICAgICAgbGV0IHRpbWVvdXQgPSBjb25maWcuYWRtaW5fdGltZW91dCAvIDEuNSAqIDEwMDA7XG4gICAgICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmZldGNoKCksIE1hdGgubWluKHRpbWVvdXQsIE1BWF9TQUZFX0RFTEFZKSk7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdG9wKCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZldGNoKCkge1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBkYXRhLmFwcGVuZCgnYWRtaW4tbm9uY2UnLCBjb25maWcuYWRtaW5fbm9uY2UpO1xuXG4gICAgICAgIGZldGNoKGAke2NvbmZpZy5iYXNlX3VybF9yZWxhdGl2ZX0vdGFzayR7Y29uZmlnLnBhcmFtX3NlcH1rZWVwQWxpdmVgLCB7XG4gICAgICAgICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgYm9keTogZGF0YVxuICAgICAgICB9KS5jYXRjaCh1c2VyRmVlZGJhY2tFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgS2VlcEFsaXZlKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./app/utils/keepalive.js\n"); /***/ }),