Skip to content

Commit 6aadb4c

Browse files
authored
Merge pull request #12 from Countly/next
Next
2 parents f49746b + 5fa110c commit 6aadb4c

File tree

18 files changed

+152
-41
lines changed

18 files changed

+152
-41
lines changed

bin/commands/countly.sh

+10-10
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,29 @@ export LANGUAGE=C ; export LC_ALL=C ;
1717
#stub commands to be overwritten
1818
countly_start (){
1919
echo "start stub";
20-
}
20+
}
2121

2222
countly_stop (){
2323
echo "stop stub";
24-
}
24+
}
2525

2626
countly_restart (){
2727
echo "restart stub";
2828
}
2929

3030
countly_status (){
3131
echo "status stub";
32-
}
32+
}
3333

3434
countly_root (){
3535
if [[ $EUID -ne 0 ]]; then
36-
echo "This command must be run as root"
36+
echo "This command must be run as root"
3737
exit 1
3838
fi
3939
}
4040

4141
#real commands, can also be overwritten
42-
countly_upgrade (){
42+
countly_upgrade (){
4343
countly_root ;
4444
(cd $DIR/../.. ;
4545
echo "Installing dependencies...";
@@ -104,7 +104,7 @@ countly_backupfiles (){
104104
if [ -d $DIR/../../frontend/express/certificates ]; then
105105
cp -a $DIR/../../frontend/express/certificates/. files/frontend/express/certificates/
106106
fi
107-
107+
108108
for d in $DIR/../../plugins/*; do
109109
PLUGIN=$(basename $d);
110110
if [ -f $d/config.js ]; then
@@ -164,12 +164,12 @@ countly_save (){
164164
then
165165
mkdir -p $2
166166
fi
167-
167+
168168
if [ -f $1 ]
169169
then
170170
match=false
171171
files=$(ls $2 | wc -l)
172-
172+
173173
if [ $files -gt 0 ]
174174
then
175175
for d in $2/*; do
@@ -193,7 +193,7 @@ countly_save (){
193193
echo "The file does not exist"
194194
fi
195195
}
196-
196+
197197
countly_restorefiles (){
198198
if [ $# -eq 0 ]
199199
then
@@ -234,7 +234,7 @@ countly_restorefiles (){
234234
if [ -d files/frontend/express/certificates ]; then
235235
cp -a files/frontend/express/certificates/. $DIR/../../frontend/express/certificates/
236236
fi
237-
237+
238238
for d in files/plugins/*; do
239239
PLUGIN=$(basename $d);
240240
if [ -f $d/config.js ]; then

bin/commands/scripts/add_user.sh

+22-5
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,33 @@
22
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
33
usage (){
44
echo "";
5-
echo "countly add_user <username> <password>";
6-
}
5+
echo "countly add_user <username>";
6+
}
77

8-
if [ -z "$1" ] && [ -z "$2" ]
8+
if [ -z "$1" ]
99
then
1010
usage ;
1111
else
1212
if [[ $EUID -ne 0 ]]; then
13-
echo "This command must be run as root"
13+
echo "This command must be run as root"
1414
exit 1
1515
fi
16-
nodejs $DIR/user_mgmt.js register $1 $2 ;
16+
17+
if [ -z "$2" ]
18+
then
19+
read -sp "Enter password: " password
20+
echo ""
21+
read -sp "Enter password again: " password_confirmation
22+
echo ""
23+
24+
if [ "$password" != "$password_confirmation" ]
25+
then
26+
echo "Passwords doesn't match!"
27+
exit 1
28+
fi
29+
else
30+
password=$2
31+
fi
32+
33+
nodejs $DIR/user_mgmt.js register $1 $password ;
1734
fi

bin/commands/scripts/decrypt.sh

+8-5
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
44
usage (){
55
echo "";
66
echo "countly decrypt usage:";
7-
echo " countly decrypt text # decrypts text with configuration provided in api/config.js encryption object";
8-
}
7+
echo " countly decrypt # decrypts text with configuration provided in api/config.js encryption object";
8+
}
9+
910
if [ -z "$1" ]
1011
then
11-
usage ;
12+
read -p "Text to decrypt: " text
1213
else
13-
nodejs $DIR/decrypt.js $1 ;
14-
fi
14+
text=$1
15+
fi
16+
17+
nodejs $DIR/decrypt.js $text ;

bin/commands/scripts/encrypt.sh

+8-5
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
44
usage (){
55
echo "";
66
echo "countly encrypt usage:";
7-
echo " countly encrypt text # encrypts text with configuration provided in api/config.js encryption object";
8-
}
7+
echo " countly encrypt # encrypts text with configuration provided in api/config.js encryption object";
8+
}
9+
910
if [ -z "$1" ]
1011
then
11-
usage ;
12+
read -p "Text to encrypt: " text
1213
else
13-
nodejs $DIR/encrypt.js $1 ;
14-
fi
14+
text=$1
15+
fi
16+
17+
nodejs $DIR/encrypt.js $text ;

bin/commands/scripts/mongo.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ usage (){
55
echo "";
66
echo "countly mongo:";
77
echo " countly mongo <dbname> # outputs mongo cmd params to connect to specified countly db";
8-
}
8+
}
99
if [ -z "$1" ]
1010
then
1111
nodejs $DIR/db.conf.js ;

bin/commands/scripts/remove_user.sh

+13-4
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,25 @@
22
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
33
usage (){
44
echo "";
5-
echo "countly remove_user <username> <password>";
6-
}
5+
echo "countly remove_user <username>";
6+
}
77

88
if [ -z "$1" ] && [ -z "$2" ]
99
then
1010
usage ;
1111
else
1212
if [[ $EUID -ne 0 ]]; then
13-
echo "This command must be run as root"
13+
echo "This command must be run as root"
1414
exit 1
1515
fi
16-
nodejs $DIR/user_mgmt.js delete $1 $2 ;
16+
17+
if [ -z "$2" ]
18+
then
19+
read -sp "Enter password: " password
20+
echo ""
21+
else
22+
password=$2
23+
fi
24+
25+
nodejs $DIR/user_mgmt.js delete $1 $password ;
1726
fi

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/public/stylesheets/main.css

+2
Original file line numberDiff line numberDiff line change
@@ -2663,6 +2663,8 @@ h4 + .mgmt-plugins-row {
26632663

26642664
#view-app .cly-button-menu {
26652665
max-width: 320px;
2666+
top: 50px;
2667+
right: 15px;
26662668
}
26672669

26682670
#view-app .cly-button-menu .item {

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 %>";

plugins/crashes/frontend/public/javascripts/countly.views.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -1996,7 +1996,12 @@ app.route('/crashes/:group', 'crashgroup', function(group) {
19961996
app.addPageScript("/drill#", function() {
19971997
var drillClone;
19981998
var self = app.drillView;
1999-
if (countlyGlobal.record_crashes) {
1999+
var record_crashes = countlyGlobal.record_crashes;
2000+
if (countlyGlobal.apps && countlyGlobal.apps[countlyCommon.ACTIVE_APP_ID] && countlyGlobal.apps[countlyCommon.ACTIVE_APP_ID].plugins && countlyGlobal.apps[countlyCommon.ACTIVE_APP_ID].plugins.drill && typeof countlyGlobal.apps[countlyCommon.ACTIVE_APP_ID].plugins.drill.record_crashes !== "undefined") {
2001+
record_crashes = countlyGlobal.apps[countlyCommon.ACTIVE_APP_ID].plugins.drill.record_crashes;
2002+
}
2003+
2004+
if (record_crashes) {
20002005
$("#drill-types").append('<div id="drill-type-crashes" class="item"><div class="inner"><span class="icon crashes"><i class="material-icons">warning</i></span><span class="text">' + jQuery.i18n.map["crashes.title"] + '</span></div></div>');
20012006
$("#drill-type-crashes").on("click", function() {
20022007
if ($(this).hasClass("active")) {

0 commit comments

Comments
 (0)