diff options
Diffstat (limited to 'dhcp-model.lua')
-rw-r--r-- | dhcp-model.lua | 92 |
1 files changed, 88 insertions, 4 deletions
diff --git a/dhcp-model.lua b/dhcp-model.lua index 90374a9..544f1b4 100644 --- a/dhcp-model.lua +++ b/dhcp-model.lua @@ -84,6 +84,24 @@ subnet_read = function( name ) return net end +read_settings = function() + local filename = cfgdir .. "globalsettings.conf" + local settings = create_new_settings( nil, nil, nil ) + if file_exists( filename ) then + for line in io.lines(filename) do + if (string.sub(line, 1, 15) == "def-lease-time:") then + settings.defleasetime.value = string.sub(line, 17) + elseif (string.sub(line, 1, 15) == "max-lease-time:") then + settings.maxleasetime.value = string.sub(line, 17) + elseif (string.sub(line, 1, 12) == "domain-name:") then + settings.domainname.value = string.sub(line, 14) + end + end + end + + return settings +end + subnet_write = function( net ) msg, fields = validate_network( net ) if #msg > 0 then @@ -106,8 +124,23 @@ subnet_write = function( net ) return cfe({ msg = "", fields = {}}), net end +update_settings = function ( settings ) + + msg, fields = validate_settings ( settings ) + if #msg > 0 then + return cfe({ msg = msg, fields = fields }), settings + end + local filename = cfgdir .. "globalsettings.conf" + local file = io.open( filename, "w+" ) + file:write( "def-lease-time: " .. settings.defleasetime.value .. "\n" ) + file:write( "max-lease-time: " .. settings.maxleasetime.value .. "\n" ) + file:write( "domain-name: " .. settings.domainname.value .. "\n" ) + return cfe({ msg = "", fields = {}}), settings +end + + subnet_create = function( net ) - if file_exists( net.name.value ) then + if file_exists( cfgdir .. net.name.value .. ".subnet" ) then return cfe({ msg = "This subnet already exists!", fields = {}}), net end retcode, net = subnet_write( net ) @@ -123,7 +156,7 @@ _tonumber = function( value ) end validate_network = function( net ) - fields = { "none" } + fields = {} msg = "" if #net.name.value < 4 then table.insert(fields, "name") @@ -181,9 +214,8 @@ end file_exists = function( filename ) retval = false - fn = cfgdir .. net.name.value .. ".subnet" lpos = require "posix" - ptr, msg, code = lpos.access(fn) + ptr, msg, code = lpos.access( filename ) if ptr ~= nil then retval = true end @@ -296,4 +328,56 @@ create_new_net = function( name, defleasetime, maxleasetime, gateway, domainname return net end + +create_new_settings = function( defleasetime, maxleasetime, domainname ) + settings = { domainname = { label="Domainname", type="text", value=nonil(domainname) }, + defleasetime = { label="Default Lease Time", type="text", value=nonil(defleasetime) }, + maxleasetime = { label="Maximum Lease Time", type="text", value=nonil(maxleasetime) } + } + return settings +end + +validate_settings = function ( settings ) + + msg = "" + fields = {} + + if not validator.is_integer_in_range(_tonumber(settings.defleasetime.value), 1800, 86400) then + msg = msg .. "Default Lease Time: Out of range 1800 < x < 86400 or not integer\n" + table.insert( fields, "defleasetime" ) + end + if not validator.is_integer_in_range(_tonumber(settings.maxleasetime.value), 1800, 86400) then + msg = msg .. "Maximum Lease Time: Out of range 1800 < x < 86400 or not integer\n" + table.insert( fields, "maxleasetime" ) + end + if not is_valid_hostname( settings.domainname.value ) then + if #settings.domainname.value > 0 then + msg = msg .. "Invalid domainname: valid chars are 'a..z', '0..9', '.', '-'\n" + table.insert( fields, "domainname" ) + end + end + + return msg, fields +end + +is_valid_hostname = function ( hostname ) + + local retval = true + + name = string.lower( hostname ) + lap = 1 + while lap <= #name do + chr = string.sub(name, lap, lap) + if (chr >= "a" and chr <= "z") or + (chr >= "0" and chr <= "9") or + (chr == ".") or (chr == "-") then + + else + retval = false + end + lap = lap + 1 + end + + return retval +end |