diff --git a/resources/assets/src/js/__tests__/admin.test.js b/resources/assets/src/js/__tests__/admin.test.js
index f7a37121..ba49b924 100644
--- a/resources/assets/src/js/__tests__/admin.test.js
+++ b/resources/assets/src/js/__tests__/admin.test.js
@@ -2,6 +2,11 @@
const $ = require('jquery');
window.$ = window.jQuery = $;
+$.fn.dataTable = {
+ defaults: {},
+ ext: { errMode: '' },
+ render: { text: () => ({ filter: text => text }) }
+};
jest.useFakeTimers();
@@ -1318,7 +1323,6 @@ describe('tests for "common" module', () => {
const fetch = jest.fn()
.mockReturnValue(Promise.resolve({ errno: 0, msg: 'Recorded.' }));
- $.fn.dataTable = { defaults: {}, ext: { errMode: '' } };
window.document.cookie = '';
window.fetch = fetch;
window.blessing = {
@@ -1347,7 +1351,6 @@ describe('tests for "common" module', () => {
const showModal = jest.fn();
window.trans = jest.fn(t => t);
window.showModal = showModal;
- $.fn.dataTable = { defaults: {}, ext: { errMode: '' } };
handleDataTablesAjaxError(undefined, undefined, '{}');
expect(showModal).not.toBeCalled();
diff --git a/resources/assets/src/js/__tests__/skinlib.test.js b/resources/assets/src/js/__tests__/skinlib.test.js
index e2be2ea3..c9b495d7 100644
--- a/resources/assets/src/js/__tests__/skinlib.test.js
+++ b/resources/assets/src/js/__tests__/skinlib.test.js
@@ -2,6 +2,7 @@
const $ = require('jquery');
window.$ = window.jQuery = $;
+$.fn.dataTable = { render: { text: () => ({ filter: text => text }) } };
window.getQueryString = jest.fn((key, defaultValue) => defaultValue);
diff --git a/resources/assets/src/js/__tests__/user.test.js b/resources/assets/src/js/__tests__/user.test.js
index 722081a3..70f5a493 100644
--- a/resources/assets/src/js/__tests__/user.test.js
+++ b/resources/assets/src/js/__tests__/user.test.js
@@ -2,6 +2,7 @@
const $ = require('jquery');
window.$ = window.jQuery = $;
+$.fn.dataTable = { render: { text: () => ({ filter: text => text }) } };
describe('tests for "verification" module', () => {
const modulePath = '../user/verification';
diff --git a/resources/assets/src/js/admin/market.js b/resources/assets/src/js/admin/market.js
index 88caeaa5..ec57255b 100644
--- a/resources/assets/src/js/admin/market.js
+++ b/resources/assets/src/js/admin/market.js
@@ -19,30 +19,38 @@ const marketTableColumnDefs = [
targets: 0,
title: trans('admin.pluginTitle'),
data: 'title',
- render: (title, type, row) => `${ title }
${ row.name }
`
+ render: (title, type, row) => {
+ return $.fn.dataTable.render.text().filter(`
+ ${ title }
+ ${ row.name }
+ `);
+ }
},
{
targets: 1,
title: trans('admin.pluginDescription'),
data: 'description',
+ render: $.fn.dataTable.render.text(),
orderable: false
},
{
targets: 2,
title: trans('admin.pluginAuthor'),
data: 'author',
+ render: $.fn.dataTable.render.text(),
orderable: false
},
{
targets: 3,
title: trans('admin.pluginVersion'),
data: 'version',
+ render: $.fn.dataTable.render.text(),
orderable: false
},
{
targets: 4,
- data: 'dependencies',
title: trans('admin.pluginDependencies'),
+ data: 'dependencies',
searchable: false,
orderable: false,
render: data => {
diff --git a/resources/assets/src/js/admin/players.js b/resources/assets/src/js/admin/players.js
index 5d6e85e7..663fb0c1 100644
--- a/resources/assets/src/js/admin/players.js
+++ b/resources/assets/src/js/admin/players.js
@@ -31,7 +31,8 @@ const playersTableColumnDefs = [
},
{
targets: 2,
- data: 'player_name'
+ data: 'player_name',
+ render: $.fn.dataTable.render.text()
},
{
targets: 3,
diff --git a/resources/assets/src/js/admin/plugins.js b/resources/assets/src/js/admin/plugins.js
index 1119e8ea..4acdbdbc 100644
--- a/resources/assets/src/js/admin/plugins.js
+++ b/resources/assets/src/js/admin/plugins.js
@@ -36,7 +36,7 @@ const pluginsTableColumnDefs = [
}
return `
- ${ title }
+ ${ $.fn.dataTable.render.text().filter(title) }
${ actions.join(' | ') }
`;
}
@@ -48,7 +48,7 @@ const pluginsTableColumnDefs = [
orderable: false,
render: (description, type, row) => {
return `
-
+ ${ $.fn.dataTable.render.text().filter(description) }
${ trans('admin.pluginVersion') }
${ row.version } |
${ trans('admin.pluginAuthor') }
${ row.author } |
diff --git a/resources/assets/src/js/admin/users.js b/resources/assets/src/js/admin/users.js
index 5752afa2..797e97df 100644
--- a/resources/assets/src/js/admin/users.js
+++ b/resources/assets/src/js/admin/users.js
@@ -38,7 +38,8 @@ const usersTableColumnDefs = [
},
{
targets: 2,
- data: 'nickname'
+ data: 'nickname',
+ render: $.fn.dataTable.render.text()
},
{
targets: 3,
diff --git a/resources/assets/src/js/skinlib/index.js b/resources/assets/src/js/skinlib/index.js
index 9922f727..2341e9a2 100644
--- a/resources/assets/src/js/skinlib/index.js
+++ b/resources/assets/src/js/skinlib/index.js
@@ -105,6 +105,8 @@ function renderSkinlibItemComponent(item) {
title = item.liked ? trans('skinlib.removeFromCloset') : trans('skinlib.addToCloset');
}
+ item.name = $.fn.dataTable.render.text().filter(item.name);
+
return `
diff --git a/resources/assets/src/js/user/closet.js b/resources/assets/src/js/user/closet.js
index 798b29ae..652ada65 100644
--- a/resources/assets/src/js/user/closet.js
+++ b/resources/assets/src/js/user/closet.js
@@ -115,26 +115,30 @@ async function initCloset() {
* @param {{ name: string, tid: number, type: 'steve' | 'alex' | 'cape' }} item
*/
function renderClosetItemComponent(item) {
+ // Prevent XSS
+ item.name = $.fn.dataTable.render.text().filter(item.name);
+
return `
-
-
}preview/${item.tid}.png)
-
-
-
`;
+ `;
}
/**