2
0
Fork 0

Added input filtering and validation

This commit is contained in:
Willem 2016-01-21 22:17:22 +01:00
parent bb9a04aa2f
commit d63a4a6f9f
2 changed files with 57 additions and 10 deletions

View file

@ -92,10 +92,16 @@ A javascript library providing server defined loading of assets for a single pag
* question.title = The question ui title. (default: 'Server')
* question.text = The question ui text. (default: 'Please provide the server name;')
* question.style = The question ui css style.(note: pending change) (default: green border box)
* cache.meta = The cache backend for the meta information(server.url+content), null is auto select. (default: null)
* cache.js = The cache backend for for js, null is auto select. (default: null)
* cache.css = The cache backend for for css, null is auto select. (default: null)
* cache.cssData = The cache backend for for cssData, null is auto select. (default: null)
* question.validate.min.value = The minimal hostname length, false is disabled (default: 3)
* question.validate.min.message = The error message (default: 'Server name is to short.')
* question.validate.max.value = The maximal hostname length, false is disabled (default: 255)
* question.validate.max.message =The error message (default: 'Server name is to long.')
* question.validate.regex.value = The regex to validate the hostname, false is disabled. (default: '^([a-zA-Z0-9\.\:])*$')
* question.validate.regex.message = The error message (default: 'Server name is invalid.')
* cache.meta = The cache backend for the meta information(server.url+content), null is auto select,false is disable. (default: null)
* cache.js = The cache backend for for js, null is auto select,false is disable. (default: null)
* cache.css = The cache backend for for css, null is auto select,false is disable. (default: null)
* cache.cssData = The cache backend for for cssData, null is auto select,false is disable. (default: null)
## Factory
@ -166,6 +172,10 @@ Add unit tests for any new or changed functionality. Lint and test your code.
### 0.1.0
* Moved options.server.question to options.question
* Added question.validate.[min|max|regex].value|message options.
* Strip question value to hostname+port before use and validating.
* Allow user upgrade to https in question input from default of transport option.
### 0.0.4
* Added auto cache clean code

View file

@ -80,7 +80,21 @@
transport: 'http://',
title: 'Server',
text: 'Please provide the server name;', // TODO: rename .ffAskUrl
style: '.ffAskUrl { font-size: 1em;margin: auto;width: 90%;border: 3px solid #73AD21;padding-left: 1em;padding-bottom: 1em;} .ffAskUrl > div {font-size: 0.8em;color: #ccc;} .ffAskUrl > div > * {} .ffAskUrl > div > input {} .ffAskUrlError{ color: red}',
style: '.ffAskUrl { font-size: 1em;margin: auto;width: 90%;border: 3px solid #73AD21;padding-left: 1em;padding-bottom: 1em;} .ffAskUrl > div {font-size: 0.8em;color: #ccc;} .ffAskUrl > div > * {} .ffAskUrl > div > input {} .ffAskUrlError{ color: red}',
validate: {
min: {
value: 3,
message: 'Server name is to short.'
},
max: {
value: 255,
message: 'Server name is to long.'
},
regex: {
value: '^([a-zA-Z0-9\.\:])*$',
message: 'Server name is invalid.'
}
}
},
cache: {
meta: null,
@ -583,17 +597,40 @@
var askUrlValidate = function (cb,deleteTag) {
var inputTag = document.getElementById('serverInput');
var inputErrorTag = document.getElementById('serverInputError');
var inputValueRaw = inputTag.value;
while (inputErrorTag.firstChild) {
inputErrorTag.removeChild(inputErrorTag.firstChild); // clear error
}
options.server.url = '';
if (inputTag.value.indexOf('http') === -1) {
options.server.url += options.question.transport;
var inputValueHost = null;
if (inputValueRaw.indexOf("://") >= 0) {
inputValueHost = inputValueRaw.split('/')[2];
} else {
inputValueHost = inputValueRaw.split('/')[0];
}
if (options.question.validate.min.value !== false && inputValueHost.length < options.question.validate.min.value) {
inputErrorTag.appendChild(document.createTextNode(options.question.validate.min.message));
return;
}
if (options.question.validate.max.value !== false && inputValueHost.length > options.question.validate.max.value) {
inputErrorTag.appendChild(document.createTextNode(options.question.validate.max.message));
return;
}
if (options.question.validate.regex.value !== false && options.question.validate.regex.value.length !== 0) {
var regex = new RegExp(options.question.validate.regex.value);
if (inputValueHost.match(regex) === null) {
inputErrorTag.appendChild(document.createTextNode(options.question.validate.regex.message));
return;
}
}
if (inputValueRaw.indexOf('https') === 0) {
options.server.url = 'https://' + inputValueHost; // allow user to upgrade to https but not to downgrade to http
} else {
options.server.url = options.question.transport + inputValueHost;
}
options.server.url += inputTag.value;
// TODO: auto rm ending /
var resourcesUrl = options.server.url + options.server.assets;
utilDebug('askUrlStart check assets '+resourcesUrl);