Skip to content

Commit 5fa110c

Browse files
authored
Merge pull request #931 from frknbasaran/server-1437
[server-1437] Runtime replacement of word Countly.
2 parents b9c7acf + 2632c48 commit 5fa110c

File tree

7 files changed

+62
-6
lines changed

7 files changed

+62
-6
lines changed

frontend/express/app.js

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ process.title = "countly: dashboard node " + process.argv[1];
33

44
var versionInfo = require('./version.info'),
55
COUNTLY_VERSION = versionInfo.version,
6+
COUNTLY_COMPANY = versionInfo.company || '',
67
COUNTLY_TYPE = versionInfo.type,
78
COUNTLY_PAGE = versionInfo.page = (!versionInfo.title) ? "http://count.ly" : null,
89
COUNTLY_NAME = versionInfo.title = versionInfo.title || "Countly",
@@ -573,6 +574,7 @@ app.use(function(req, res, next) {
573574
req.template.css = "";
574575
req.template.form = "";
575576
req.countly = {
577+
company: COUNTLY_COMPANY,
576578
version: COUNTLY_VERSION,
577579
type: COUNTLY_TYPE,
578580
page: COUNTLY_PAGE,
@@ -785,6 +787,7 @@ function renderDashboard(req, res, next, member, adminOfApps, userOfApps, countl
785787
_.extend(req.config, configs);
786788
var countlyGlobal = {
787789
countlyTitle: req.countly.title,
790+
company: req.countly.company,
788791
languages: languages,
789792
countlyVersion: req.countly.version,
790793
countlyFavicon: req.countly.favicon,

frontend/express/public/javascripts/countly/countly.template.js

+13
Original file line numberDiff line numberDiff line change
@@ -1235,6 +1235,12 @@ var AppRouter = Backbone.Router.extend({
12351235
path: [countlyGlobal.cdn + 'localization/min/'],
12361236
mode: 'map',
12371237
callback: function() {
1238+
for (var key in jQuery.i18n.map) {
1239+
if (countlyGlobal.company) {
1240+
jQuery.i18n.map[key] = jQuery.i18n.map[key].replace(new RegExp("Countly", 'ig'), countlyGlobal.company);
1241+
}
1242+
jQuery.i18n.map[key] = countlyCommon.encodeSomeHtml(jQuery.i18n.map[key]);
1243+
}
12381244
self.origLang = JSON.stringify(jQuery.i18n.map);
12391245
}
12401246
});
@@ -1537,6 +1543,13 @@ var AppRouter = Backbone.Router.extend({
15371543
path: [countlyGlobal.cdn + 'localization/min/'],
15381544
mode: 'map',
15391545
callback: function() {
1546+
for (var key in jQuery.i18n.map) {
1547+
if (countlyGlobal.company) {
1548+
jQuery.i18n.map[key] = jQuery.i18n.map[key].replace(new RegExp("Countly", 'ig'), countlyGlobal.company);
1549+
}
1550+
jQuery.i18n.map[key] = countlyCommon.encodeSomeHtml(jQuery.i18n.map[key]);
1551+
}
1552+
15401553
self.origLang = JSON.stringify(jQuery.i18n.map);
15411554
$.when(countlyLocation.changeLanguage()).then(function() {
15421555
self.activeView.render();

frontend/express/public/javascripts/pre-login.js

+42-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*global store, jQuery, $, document, countlyGlobal*/
1+
/*global store, jQuery, $, document, countlyGlobal, filterXSS */
22

33
/**
44
* Javascript file loaded on pre login pages with some handy global functions
@@ -19,6 +19,36 @@ function showMessage(key, prop) {
1919
$("#message").html(jQuery.i18n.prop(key, prop));
2020
}
2121

22+
var htmlEncodeOptions = {
23+
"whiteList": {"a": ["href", "class", "target"], "b": [], "br": [], "strong": [], "p": [], "span": ["class"], "div": ["class"]},
24+
onTagAttr: function(tag, name, value/* isWhiteAttr*/) {
25+
if (tag === "a") {
26+
if (name === "target" && !(value === "_blank" || value === "_self" || value === "_top" || value === "_parent")) {
27+
return "target='_blank'"; //set _blank if incorrect value
28+
}
29+
30+
if (name === "href" && !(value.substr(0, 1) === "#" || value.substr(0, 1) === "/" || value.substr(0, 4) === "http")) {
31+
return "href='#'"; //set # if incorrect value
32+
}
33+
}
34+
}
35+
};
36+
37+
/**
38+
* Encode some tags, leaving those set in whitelist as they are.
39+
* @param {string} html - value to encode
40+
* @param {object} options for encoding. Optional. If not passed, using default in common.
41+
* @returns {string} encode string
42+
*/
43+
function encodeSomeHtml(html, options) {
44+
if (options) {
45+
return filterXSS(html, options);
46+
}
47+
else {
48+
return filterXSS(html, htmlEncodeOptions);
49+
}
50+
}
51+
2252
/**
2353
* By default only pre-login property file localization is available on prelogin pages, but you can additionally load other localization files, like for example needed for your plugin, using this function
2454
* @param {string} name - base name of the property file without the locale/language. Should be the same name as your plugin
@@ -39,8 +69,12 @@ function addLocalization(name, path, callback) {
3969
language: lang,
4070
callback: function() {
4171
$.each(jQuery.i18n.map, function(key, value) {
42-
langs[key] = value;
72+
if (countlyGlobal.company) {
73+
langs[key] = value.replace(new RegExp("Countly", 'ig'), countlyGlobal.company);
74+
}
75+
langs[key] = encodeSomeHtml(value);
4376
});
77+
4478
jQuery.i18n.map = langs;
4579

4680
$("[data-localize]").each(function() {
@@ -82,10 +116,12 @@ $(document).ready(function() {
82116
mode: 'map',
83117
language: lang,
84118
callback: function() {
85-
// Localization test
86-
//$.each(jQuery.i18n.map, function(key, value) {
87-
// jQuery.i18n.map[key] = key;
88-
//});
119+
$.each(jQuery.i18n.map, function(key, value) {
120+
if (countlyGlobal.company) {
121+
jQuery.i18n.map[key] = value.replace(new RegExp("Countly", 'ig'), countlyGlobal.company);
122+
}
123+
jQuery.i18n.map[key] = encodeSomeHtml(value);
124+
});
89125

90126
$("[data-localize]").each(function() {
91127
var elem = $(this),

frontend/express/views/forgot.html

+1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
<script language="javascript" type="text/javascript" src="javascripts/dom/jquery.noisy.min.js"></script>
8080
<script language="javascript" type="text/javascript" src="javascripts/utils/store+json2.min.js"></script>
8181
<script language="javascript" type="text/javascript" src="javascripts/utils/jquery.i18n.properties-min-1.0.9.js"></script>
82+
<script language="javascript" type="text/javascript" src="javascripts/utils/jquery.xss.js"></script>
8283
<script language="javascript" type="text/javascript" src="javascripts/countly/countly.helpers.js"></script>
8384
<script language="javascript" type="text/javascript" src="javascripts/pre-login.js"></script>
8485
<script>

frontend/express/views/login.html

+1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
<script language="javascript" type="text/javascript" src="javascripts/dom/jquery.noisy.min.js"></script>
8787
<script language="javascript" type="text/javascript" src="javascripts/utils/store+json2.min.js"></script>
8888
<script language="javascript" type="text/javascript" src="javascripts/utils/jquery.i18n.properties-min-1.0.9.js"></script>
89+
<script language="javascript" type="text/javascript" src="javascripts/utils/jquery.xss.js"></script>
8990
<script language="javascript" type="text/javascript" src="javascripts/pre-login.js"></script>
9091
<script>
9192
var countlyTitle = "<%- countlyTitle %>";

frontend/express/views/reset.html

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
<script language="javascript" type="text/javascript" src="../javascripts/dom/jquery.noisy.min.js"></script>
8484
<script language="javascript" type="text/javascript" src="../javascripts/utils/store+json2.min.js"></script>
8585
<script language="javascript" type="text/javascript" src="../javascripts/utils/jquery.i18n.properties-min-1.0.9.js"></script>
86+
<script language="javascript" type="text/javascript" src="../javascripts/utils/jquery.xss.js"></script>
8687
<script language="javascript" type="text/javascript" src="../javascripts/pre-login.js"></script>
8788
<script>
8889
var countlyTitle = "<%- countlyTitle %>";

frontend/express/views/setup.html

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
<script language="javascript" type="text/javascript" src="javascripts/dom/jquery.noisy.min.js"></script>
8282
<script language="javascript" type="text/javascript" src="javascripts/utils/store+json2.min.js"></script>
8383
<script language="javascript" type="text/javascript" src="javascripts/utils/jquery.i18n.properties-min-1.0.9.js"></script>
84+
<script language="javascript" type="text/javascript" src="javascripts/utils/jquery.xss.js"></script>
8485
<script language="javascript" type="text/javascript" src="javascripts/pre-login.js"></script>
8586
<script>
8687
var countlyTitle = "<%- countlyTitle %>";

0 commit comments

Comments
 (0)