diff --git a/package/gluon-core/check_site.lua b/package/gluon-core/check_site.lua index 03439328..ed3f0337 100644 --- a/package/gluon-core/check_site.lua +++ b/package/gluon-core/check_site.lua @@ -2,6 +2,9 @@ need_string(in_site('site_code')) need_string(in_site('site_name')) need_string_match(in_site('site_seed'), '^' .. ('%x'):rep(64) .. '$') +-- TODO: it should be checked for existance! +need_string(in_site('default_domain_code')) + if need_table('opkg', nil, false) then need_string('opkg.lede', false) diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/site.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/site.lua index 56491763..38d6ad67 100644 --- a/package/gluon-core/luasrc/usr/lib/lua/gluon/site.lua +++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/site.lua @@ -1,11 +1,10 @@ -local site = (function() - local config = '/lib/gluon/site.json' +local function read_json(path) local json = require 'luci.jsonc' local decoder = json.new() local sink = decoder:sink() - local file = assert(io.open(config)) + local file = assert(io.open(path)) while true do local chunk = file:read(2048) @@ -16,11 +15,36 @@ local site = (function() file:close() return assert(decoder:get()) -end)() +end + +local site = read_json('/lib/gluon/site.json') +local domain = (function(site) + local uci = require('simple-uci').cursor() + local fs = require "nixio.fs" + local sname = uci:get_first('gluon', 'system') + + local dc = uci:get('gluon', sname, 'domain_code') or '' + + if fs.stat('/lib/gluon/domains/'..dc..'.json', 'type')~='reg' then + dc = site['default_domain_code'] + end + + return read_json('/lib/gluon/domains/'..dc..'.json') +end)(site) local wrap +local function merge(t1, t2) + for k, v in pairs(t2) do + if (type(v) == "table") and (type(t1[k] or false) == "table") then + merge(t1[k], t2[k]) + else + t1[k] = v + end + end + return t1 +end local function index(t, k) local v = getmetatable(t).value @@ -58,4 +82,4 @@ end module 'gluon.site' -return wrap(site, _M) +return wrap(merge(site, domain), _M)