Skip to content

Commit

Permalink
Merge branch 'anti-dos-research' of github.com:globaleaks/GlobaLeaks …
Browse files Browse the repository at this point in the history
…into anti-dos-research
  • Loading branch information
vecna committed Sep 1, 2015
2 parents d37d5c1 + 381b035 commit a191456
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 24 deletions.
3 changes: 2 additions & 1 deletion backend/globaleaks/anomaly.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,11 +389,12 @@ def _notification_suppressed():
if Alarm.last_alarm_email and not emergency_notification:
if not is_expired(Alarm.last_alarm_email,
minutes=do_not_stress_admin_with_more_than_an_email_every_minutes):
defer.returnValue(None)
# This is skipped then:
log.debug("Alert [%s] want be sent, but the threshold of %d minutes still unexpired %s" % (
Alarm.stress_levels,
do_not_stress_admin_with_more_than_an_email_every_minutes,
datetime_to_ISO8601(Alarm.last_alarm_email)))
defer.returnValue(None)

admin_email = yield _get_node_admin_email()
admin_language = yield _get_admin_user_language()
Expand Down
62 changes: 45 additions & 17 deletions client/Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -299,10 +299,27 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-saucelabs');

var readDynamicStrings = function() {
var filecontent = grunt.file.read('app/data/dynamic_strings.json'),

ret = {};
ret['mapping'] = JSON.parse(filecontent);
ret['inverse_mapping'] = {}
console.log(ret['mapping']);
for (var key in ret['mapping']) {
ret['inverse_mapping'][(ret['mapping'][key])] = key;
};

return ret;
}

var path = require('path'),
superagent = require('superagent'),
fs = require('fs'),
Gettext = require("node-gettext")
Gettext = require("node-gettext"),
dynamic_strings = readDynamicStrings();

console.log(dynamic_strings);

grunt.registerTask('cleanupWorkingDirectory', function() {
var rm_rf = function(dir) {
Expand Down Expand Up @@ -541,18 +558,27 @@ module.exports = function(grunt) {

gt.addTextdomain("en");

function addString(str) {
if (str in dynamic_strings['mapping']) {
str = dynamic_strings['mapping'][str];
gt.setTranslation("en", "", str, str);
} else {
gt.setTranslation("en", "", str, str);
}

translationStringCount += 1;
};

function extractPotFromHTMLFile(filepath) {
var filecontent = grunt.file.read(filepath),
result;

while ( (result = translationStringRegexpHTML1.exec(filecontent)) ) {
gt.setTranslation("en", "", result[1], result[1]);
translationStringCount += 1;
while (result = translationStringRegexpHTML1.exec(filecontent)) {
addString(result[1]);
}

while ( (result = translationStringRegexpHTML2.exec(filecontent)) ) {
gt.setTranslation("en", "", result[1], result[1]);
translationStringCount += 1;
while (result = translationStringRegexpHTML2.exec(filecontent)) {
addString(result[1]);
}

};
Expand All @@ -561,9 +587,8 @@ module.exports = function(grunt) {
var filecontent = grunt.file.read(filepath),
result;

while ( (result = translationStringRegexpJSON.exec(filecontent)) ) {
gt.setTranslation("en", "", result[1], result[1]);
translationStringCount += 1;
while (result = translationStringRegexpJSON.exec(filecontent)) {
addString(result[1]);
}
};

Expand All @@ -573,11 +598,9 @@ module.exports = function(grunt) {
result;

for (var i=0; i<lines.length; i++){

// we skip adding empty strings and variable only strings
if (lines[i] != '' && !lines[i].match(/^%[a-zA-Z0-9]+%/g)) {
gt.setTranslation("en", "", lines[i], lines[i]);
translationStringCount += 1;
addString(lines[i]);
}
}
};
Expand Down Expand Up @@ -606,7 +629,6 @@ module.exports = function(grunt) {
console.log("Written " + translationStringCount + " string to pot/en.po.");

updateTxSource(done);

});

grunt.registerTask('makeTranslations', function() {
Expand All @@ -615,6 +637,14 @@ module.exports = function(grunt) {
strings,
fileContents = fs.readFileSync("pot/en.po");

function addTranslation(translations, key, value) {
if (key in dynamic_strings['inverse_mapping']) {
key = dynamic_strings['inverse_mapping'][key];
}

translations[key] = value;
};

fetchTxTranslations(function(supported_languages){

gt.addTextdomain("en", fileContents);
Expand All @@ -626,10 +656,8 @@ module.exports = function(grunt) {
output;

strings.forEach(function(string){

gt.addTextdomain(lang_code, fs.readFileSync("pot/" + lang_code + ".po"));
translations[string] = str_unescape(gt.dgettext(lang_code, str_escape(string)));

addTranslation(translations, string, str_unescape(gt.dgettext(lang_code, str_escape(string))));
});

output = JSON.stringify(translations);
Expand Down
4 changes: 4 additions & 0 deletions client/app/data/dynamic_strings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"FIELD_INPUT_AVAILABLE_CHARS": "{{available_characters_count}} available character(s)",
"FIELD_INPUT_MIN_CHARS": "Please insert an answer at least {{min_characters_limit}} characters long."
}
18 changes: 18 additions & 0 deletions client/app/scripts/controllers/receipt.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
GLClient.controller('ReceiptController', ['$scope', '$location', 'Authentication',
function($scope, $location, Authentication) {
var format_keycode = function(keycode) {
var ret = keycode;
if (keycode && keycode.length === 16) {
ret = keycode.substr(0, 4) + ' ' +
keycode.substr(4, 4) + ' ' +
keycode.substr(8, 4) + ' ' +
keycode.substr(12, 4);
}

return ret;

};

$scope.keycode = format_keycode(Authentication.keycode);
$scope.formatted_keycode = format_keycode($scope.keycode);
}]);
3 changes: 1 addition & 2 deletions client/app/translations.html
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@
<span data-translate>Regular expression validator</span>
<span data-translate>Minimum number of input characters</span>
<span data-translate>Maximum number of input characters</span>
<span data-translate>Characters left:</span>
<span data-translate>0 = auto</span>
<span data-translate>-1 = unlimited</span>
Expand All @@ -214,7 +213,7 @@
<span data-translate>True</span>
<span data-translate>False</span>
<span data-translate>Yes</span>
<span data-translate>No</span
<span data-translate>No</span>
<span data-translate>Full operation will resume shortly.</span>
<span data-translate>Too many requests</span>
Expand Down
28 changes: 24 additions & 4 deletions client/app/views/submission/form_field_input.html
Original file line number Diff line number Diff line change
@@ -1,22 +1,42 @@
<div data-ng-form="f" data-ng-init="state = {}" data-ng-switch="" on="::field.type" class="submissionFieldInput">
<div data-ng-switch-when="inputbox" data-ng-class="{'has-error': f['input-' + $index].$error.required}">
<div data-ng-switch-when="inputbox" data-ng-class="{'has-error': f['input-' + $index].$error.required || f['input-' + $index].$error.minlength}">
<input id="{{::fieldId + '-input-' + $index}}"
name="{{'input-' + $index}}"
class="form-control"
data-ng-model="entry['value']"
maxlength="{{::node.maximum_namesize}}"
data-ng-minlength="field.attrs.min_len.value"
maxlength="{{field.attrs.max_len.value}}"
data-ng-required="field.required"
placeholder="{{::field.placeholder}}"
type="text" />
<div>
<div data-ng-if="field.attrs.max_len.value >= 0 && (field.attrs.max_len.value - entry['value'].length) != field.attrs.max_len.value"
data-translate-values="{available_characters_count: field.attrs.max_len.value - entry['value'].length}"
data-translate>FIELD_INPUT_AVAILABLE_CHARS</div>
<div class="text-red"
data-ng-if="field.attrs.min_len.value >= 0 && (f['input-' + $index].$error.minlength || (field.required && entry['value'].length == undefined))"
data-translate-values="{min_characters_limit: field.attrs.min_len.value}"
data-translate>FIELD_INPUT_MIN_CHARS</div>
</div>
</div>
<div data-ng-switch-when="textarea" data-ng-class="{'has-error': f['input-' + $index].$error.required}">
<div data-ng-switch-when="textarea" data-ng-class="{'has-error': f['input-' + $index].$error.required || f['input-' + $index].$error.minlength}">
<textarea id="{{::fieldId + '-input-' + $index}}"
name="{{'input-' + $index}}"
class="form-control msd-elastic"
data-ng-model="entry['value']"
maxlength="{{::node.maximum_textsize}}"
data-ng-minlength="field.attrs.min_len.value"
maxlength="{{field.attrs.max_len.value}}"
data-ng-required="field.required"
placeholder="{{::field.placeholder}}"></textarea>
<div>
<div data-ng-if="field.attrs.max_len.value >= 0 && (field.attrs.max_len.value - entry['value'].length) != field.attrs.max_len.value"
data-translate-values="{available_characters_count: field.attrs.max_len.value - entry['value'].length}"
data-translate>FIELD_INPUT_AVAILABLE_CHARS</div>
<div class="text-red"
data-ng-if="field.attrs.min_len.value >= 0 && (f['input-' + $index].$error.minlength || (field.required && entry['value'].length == undefined))"
data-translate-values="{min_characters_limit: field.attrs.min_len.value}"
data-translate>FIELD_INPUT_MIN_CHARS</div>
</div>
</div>
<div data-ng-switch-when="selectbox" data-ng-class="{'has-error': f['input-' + $index].$error.required}">
<select id="{{::fieldId + '-input-' + $index}}" name="{{'input-' + $index}}" class="form-control" data-ng-model="entry['value']" data-ng-required="field.required">
Expand Down

0 comments on commit a191456

Please sign in to comment.