diff options
author | Ted Trask <ttrask01@yahoo.com> | 2010-12-09 10:10:16 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2010-12-09 10:10:16 +0000 |
commit | 93dd90cec546136f54ea8c6ce137ba94c488819b (patch) | |
tree | 294ad3f80ed5c85f45bcfe66ec284e97b16661d6 /provisioning-model.lua | |
parent | 919c549a38d3086a1a98254a5b797feb0cf8a49c (diff) | |
download | acf-provisioning-93dd90cec546136f54ea8c6ce137ba94c488819b.tar.bz2 acf-provisioning-93dd90cec546136f54ea8c6ce137ba94c488819b.tar.xz |
Added regexp field to provisioning_params for validating text params
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r-- | provisioning-model.lua | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/provisioning-model.lua b/provisioning-model.lua index f624f53..074d253 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -53,8 +53,7 @@ local table_creation_scripts = { }, -- List of each parameter used in any way for any device - mostly for how to display provisioning_params = { - "CREATE TABLE provisioning_params (param_id SERIAL PRIMARY KEY, name VARCHAR(255) UNIQUE, type VARCHAR(255), label VARCHAR(255), descr VARCHAR(255), value VARCHAR(255), seq INTEGER)", --- Add a way to include validation code and/or options list + "CREATE TABLE provisioning_params (param_id SERIAL PRIMARY KEY, name VARCHAR(255) UNIQUE, type VARCHAR(255), label VARCHAR(255), descr VARCHAR(255), value VARCHAR(255), seq INTEGER, regexp VARCHAR(255))", }, -- All of the (non-default) parameter values for all devices are stored here provisioning_values = { @@ -238,6 +237,11 @@ validateparam = function(p) return success elseif p.type == "select" then return modelfunctions.validateselect(p) + elseif p.type == "text" and p.regexp and p.regexp ~= "" then + if not string.match(p.value, p.regexp) then + p.errtxt = "Invalid value" + return false + end end return true end @@ -790,8 +794,9 @@ get_param = function(param_id) retval.type = cfe({type="select", label="Type", option={"text", "boolean", "select"}, seq=3}) retval.label = cfe({label="Label", seq=4}) retval.descr = cfe({label="Description", seq=5}) - retval.value = cfe({label="Default Value", seq=6}) - retval.seq = cfe({label="Sequence", seq=7}) + retval.value = cfe({label="Default Value", descr="Warning, this value is not validated", seq=6}) + retval.regexp = cfe({label="Regular Expression", descr="Lua regular expression for validating the text parameter value", seq=7}) + retval.seq = cfe({label="Sequence", seq=8}) -- FIXME - we should add validation and option stuff here local errtxt local res, err = pcall(function() @@ -852,7 +857,7 @@ update_param = function(param, create) local sql = "BEGIN TRANSACTION" runsqlcommand(sql) if create then - sql = "INSERT INTO provisioning_params VALUES(DEFAULT, '"..escape(param.value.name.value).."', '"..escape(param.value.type.value).."', '"..escape(param.value.label.value).."', '"..escape(param.value.descr.value).."', '"..escape(param.value.value.value).."', '"..escape(param.value.seq.value).."')" + sql = "INSERT INTO provisioning_params VALUES(DEFAULT, '"..escape(param.value.name.value).."', '"..escape(param.value.type.value).."', '"..escape(param.value.label.value).."', '"..escape(param.value.descr.value).."', '"..escape(param.value.value.value).."', '"..escape(param.value.seq.value).."', '"..escape(param.value.regexp.value).."')" runsqlcommand(sql, true) sql = "SELECT param_id FROM provisioning_params WHERE name='"..escape(param.value.name.value).."' AND label='"..escape(param.value.label.value).."'" local tmp = getselectresponse(sql, true) @@ -860,7 +865,7 @@ update_param = function(param, create) param.value.param_id.value = tmp[1].param_id end else - sql = "UPDATE provisioning_params SET (name, type, label, descr, value, seq) = ('"..escape(param.value.name.value).."', '"..escape(param.value.type.value).."', '"..escape(param.value.label.value).."', '"..escape(param.value.descr.value).."', '"..escape(param.value.value.value).."', '"..escape(param.value.seq.value).."') WHERE param_id='"..escape(param.value.param_id.value).."'" + sql = "UPDATE provisioning_params SET (name, type, label, descr, value, seq, regexp) = ('"..escape(param.value.name.value).."', '"..escape(param.value.type.value).."', '"..escape(param.value.label.value).."', '"..escape(param.value.descr.value).."', '"..escape(param.value.value.value).."', '"..escape(param.value.seq.value).."', '"..escape(param.value.regexp.value).."') WHERE param_id='"..escape(param.value.param_id.value).."'" runsqlcommand(sql, true) end @@ -1121,7 +1126,7 @@ get_device_params = function(device_id, editable) retval[g.name].type="group" end -- Then, get all of the parameters for this device - sql = "SELECT g.name AS group, p.param_id, p.name, p.type, p.label, p.descr, p.seq, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS value, g2p.value AS default ".. + sql = "SELECT g.name AS group, p.param_id, p.name, p.type, p.label, p.descr, p.seq, p.regexp, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS value, g2p.value AS default ".. "FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING (class_id) JOIN provisioning_groups g USING(group_id) ".. "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) LEFT JOIN provisioning_values v ON(d2t.device_id=v.device_id AND p.param_id=v.param_id AND g.name=v.group_name ) ".. "WHERE d2t.device_id='"..escape(device_id).."'" @@ -1298,7 +1303,7 @@ search_device_values = function(parameter_id, parameter_value, comparison) retval = {} retval.id = cfe({type="select", value=parameter_id or "name", label="Parameter", option={"name", "label", "template_id", "template"}, seq=1}) retval.comparison = cfe({type="select", value=comparison or "=", label="Comparison", option={"=", "!=", "~", "!~", "~*", "!*~"}, seq=2}) - retval.value = cfe({label="Parameter Value", value=parameter_value, seq=3}) + retval.value = cfe({label="Parameter Value", value=parameter_value, descr="Parameter value or SQL regular expression", seq=3}) retval.result = cfe({type="structure", value={}, label="List of Devices", seq=4 }) local res, err = pcall(function() local connected = databaseconnect() |