summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-03-07 11:54:26 +0000
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-03-07 12:00:09 +0000
commit7df3e9fa87497bc65b454dca79f6f4fc133fd24b (patch)
tree219c3b4533f079ffbc9175a9fd35ddb1511943ca
parenta717300296191677eb4fe6e2ebe76827cde41e77 (diff)
downloadaconf-7df3e9fa87497bc65b454dca79f6f4fc133fd24b.tar.bz2
aconf-7df3e9fa87497bc65b454dca79f6f4fc133fd24b.tar.xz
moved range field to generic model library
corrected some errors in validation logic
-rw-r--r--acf/model/init.lua29
-rw-r--r--acf/modules/awall.lua15
2 files changed, 29 insertions, 15 deletions
diff --git a/acf/model/init.lua b/acf/model/init.lua
index 202c0e0..f333886 100644
--- a/acf/model/init.lua
+++ b/acf/model/init.lua
@@ -10,7 +10,7 @@ local Field = fld.Field
local model = require('acf.model.model')
new = model.new
-to_field = model.to_field
+local to_field = model.to_field
node = require('acf.model.node')
@@ -22,6 +22,9 @@ local pth = require('acf.path')
local map = require('acf.util').map
+require 'stringy'
+
+
-- TODO object-specific actions
-- TODO access control
@@ -43,6 +46,7 @@ function String:init(params)
end
function String:validate(txn, path, value)
+ super(self, String):validate(txn, path, value)
if self['max-length'] and string.len(value) > self['max-length'] then
error('Maximum length exceeded: '..value)
end
@@ -63,13 +67,18 @@ function Number:init(params)
end
function Number:_validate(txn, path, value)
- return tonumber(super(self, Number):_validate(txn, path, value))
+ return super(self, Number):_validate(
+ txn,
+ path,
+ value and tonumber(value) or value
+ )
end
Integer = class(Number)
function Integer:validate(txn, path, value)
+ super(self, Integer):validate(txn, path, value)
if math.floor(value) ~= value then error('Not an integer: '..value) end
end
@@ -83,6 +92,22 @@ function Boolean:init(params)
end
+Range = class(String)
+
+function Range:init(params)
+ super(self, Range):init(params)
+ if not self.type then self.type = Integer end
+end
+
+function Range:validate(txn, path, value)
+ local comps = stringy.split(value, '-')
+ if #comps > 2 then error('Invalid range') end
+ for _, v in ipairs(comps) do
+ to_field(self.type):_validate(txn, path, v)
+ end
+end
+
+
Reference = class(Field)
function Reference:init(params)
diff --git a/acf/modules/awall.lua b/acf/modules/awall.lua
index 7d147f4..0b73f9c 100644
--- a/acf/modules/awall.lua
+++ b/acf/modules/awall.lua
@@ -31,18 +31,7 @@ function Port:validate(txn, path, value)
if value < 0 or value > 65535 then error('Invalid port: '..value) end
end
-Range = class(M.String)
-function Range:validate(txn, path, value)
- local comps = stringy.split(value, '-')
- if #comps > 2 then error('Invalid range: '..value) end
- for _, v in ipairs(comps) do
- local num = tonumber(v)
- if not num then error('Invalid range: ' ..value) end
- M.to_field(self.type):validate(txn, path, num)
- end
-end
-
-PortRange = class(Range)
+PortRange = class(M.Range)
function PortRange:init() super(self, PortRange):init{type=Port} end
Direction = class(M.String)
@@ -108,7 +97,7 @@ FilterRule.dnat = IPv4Addr
FilterRule['no-track'] = M.Boolean{default=false}
NATRule = M.new(Rule)
-NATRule['to-addr'] = Range{type=IPv4Addr}
+NATRule['to-addr'] = M.Range{type=IPv4Addr}
NATRule['to-port'] = PortRange
MarkRule = M.new(Rule)