diff --git a/packages/ui-default/backendlib/template.js b/packages/ui-default/backendlib/template.js index 22f38f56c..29c024cfb 100644 --- a/packages/ui-default/backendlib/template.js +++ b/packages/ui-default/backendlib/template.js @@ -4,6 +4,7 @@ const yaml = require('js-yaml'); const serialize = require('serialize-javascript'); const nunjucks = require('nunjucks'); const { filter } = require('lodash'); +const jsesc = require('jsesc'); const argv = require('cac')().parse(); const { findFileSync } = require('@hydrooj/utils/lib/utils'); const status = require('@hydrooj/utils/lib/status'); @@ -66,6 +67,7 @@ class Nunjucks extends nunjucks.Environment { this.addFilter('ansi', (self) => misc.ansiToHtml(self)); this.addFilter('base64_encode', (s) => Buffer.from(s).toString('base64')); this.addFilter('base64_decode', (s) => Buffer.from(s, 'base64').toString()); + this.addFilter('jsesc', (self) => jsesc(self, { isScriptContext: true })); this.addFilter('bitand', (self, val) => self & val); this.addFilter('replaceBr', (self) => self.toString().replace(/\n/g, '
')); this.addFilter('toString', (self) => (typeof self === 'string' ? self : JSON.stringify(self, replacer))); diff --git a/packages/ui-default/hydro.js b/packages/ui-default/hydro.js index 1dc74aa4e..0d9c79d93 100644 --- a/packages/ui-default/hydro.js +++ b/packages/ui-default/hydro.js @@ -4,11 +4,10 @@ import _ from 'lodash'; import Notification from 'vj/components/notification'; import PageLoader from 'vj/misc/PageLoader'; import delay from 'vj/utils/delay'; -import base64 from 'vj/utils/base64'; const start = new Date(); -window.UiContext = JSON.parse(base64.decode(window.UiContext)); -window.UserContext = JSON.parse(base64.decode(window.UserContext)); +window.UiContext = JSON.parse(window.UiContext); +window.UserContext = JSON.parse(window.UserContext); // eslint-disable-next-line try { __webpack_public_path__ = UiContext.cdn_prefix } catch (e) { } @@ -16,7 +15,7 @@ try { __webpack_public_path__ = UiContext.cdn_prefix } catch (e) { } function buildSequence(pages, type) { if (process.env.NODE_ENV !== 'production') { if (['before', 'after'].indexOf(type) === -1) { - throw new Error(`'type' should be one of 'before' or 'after'`); // eslint-disable-line quotes + throw new Error("'type' should be one of 'before' or 'after'"); } } return pages diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index bb0b75140..090c2b6bd 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.12.28", + "version": "4.13.0", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", @@ -114,6 +114,7 @@ }, "dependencies": { "js-yaml": "^4.1.0", + "jsesc": "^3.0.2", "katex": "^0.13.11", "lodash": "^4.17.21", "markdown-it": "^12.1.0", diff --git a/packages/ui-default/templates/layout/html5.html b/packages/ui-default/templates/layout/html5.html index 8e682ce18..c709a0fee 100644 --- a/packages/ui-default/templates/layout/html5.html +++ b/packages/ui-default/templates/layout/html5.html @@ -41,8 +41,8 @@ {% block body %}{% endblock %} {% if not isIE(handler.request.headers['user-agent']) %}