Added input filtering and validation
This commit is contained in:
parent
bb9a04aa2f
commit
d63a4a6f9f
18
README.md
18
README.md
|
@ -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.title = The question ui title. (default: 'Server')
|
||||||
* question.text = The question ui text. (default: 'Please provide the server name;')
|
* 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)
|
* 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)
|
* question.validate.min.value = The minimal hostname length, false is disabled (default: 3)
|
||||||
* cache.js = The cache backend for for js, null is auto select. (default: null)
|
* question.validate.min.message = The error message (default: 'Server name is to short.')
|
||||||
* cache.css = The cache backend for for css, null is auto select. (default: null)
|
* question.validate.max.value = The maximal hostname length, false is disabled (default: 255)
|
||||||
* cache.cssData = The cache backend for for cssData, null is auto select. (default: null)
|
* 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
|
## Factory
|
||||||
|
@ -166,6 +172,10 @@ Add unit tests for any new or changed functionality. Lint and test your code.
|
||||||
|
|
||||||
### 0.1.0
|
### 0.1.0
|
||||||
* Moved options.server.question to options.question
|
* 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
|
### 0.0.4
|
||||||
* Added auto cache clean code
|
* Added auto cache clean code
|
||||||
|
|
|
@ -81,6 +81,20 @@
|
||||||
title: 'Server',
|
title: 'Server',
|
||||||
text: 'Please provide the server name;', // TODO: rename .ffAskUrl
|
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: {
|
cache: {
|
||||||
meta: null,
|
meta: null,
|
||||||
|
@ -583,17 +597,40 @@
|
||||||
var askUrlValidate = function (cb,deleteTag) {
|
var askUrlValidate = function (cb,deleteTag) {
|
||||||
var inputTag = document.getElementById('serverInput');
|
var inputTag = document.getElementById('serverInput');
|
||||||
var inputErrorTag = document.getElementById('serverInputError');
|
var inputErrorTag = document.getElementById('serverInputError');
|
||||||
|
var inputValueRaw = inputTag.value;
|
||||||
|
|
||||||
while (inputErrorTag.firstChild) {
|
while (inputErrorTag.firstChild) {
|
||||||
inputErrorTag.removeChild(inputErrorTag.firstChild); // clear error
|
inputErrorTag.removeChild(inputErrorTag.firstChild); // clear error
|
||||||
}
|
}
|
||||||
|
|
||||||
options.server.url = '';
|
var inputValueHost = null;
|
||||||
if (inputTag.value.indexOf('http') === -1) {
|
if (inputValueRaw.indexOf("://") >= 0) {
|
||||||
options.server.url += options.question.transport;
|
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;
|
var resourcesUrl = options.server.url + options.server.assets;
|
||||||
utilDebug('askUrlStart check assets '+resourcesUrl);
|
utilDebug('askUrlStart check assets '+resourcesUrl);
|
||||||
|
|
Loading…
Reference in a new issue