summaryrefslogtreecommitdiffstats
path: root/provisioning-model.lua
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2010-12-09 10:10:16 +0000
committerTed Trask <ttrask01@yahoo.com>2010-12-09 10:10:16 +0000
commit93dd90cec546136f54ea8c6ce137ba94c488819b (patch)
tree294ad3f80ed5c85f45bcfe66ec284e97b16661d6 /provisioning-model.lua
parent919c549a38d3086a1a98254a5b797feb0cf8a49c (diff)
downloadacf-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.lua21
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()