diff options
Diffstat (limited to 'libs/lucid-rpc/luasrc/lucid/rpc.lua')
-rw-r--r-- | libs/lucid-rpc/luasrc/lucid/rpc.lua | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/libs/lucid-rpc/luasrc/lucid/rpc.lua b/libs/lucid-rpc/luasrc/lucid/rpc.lua new file mode 100644 index 000000000..c89fc2444 --- /dev/null +++ b/libs/lucid-rpc/luasrc/lucid/rpc.lua @@ -0,0 +1,49 @@ +--[[ +LuCI - Lua Development Framework + +Copyright 2009 Steven Barth <steven@midlink.org> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ +]] + +local require, ipairs, pcall = require, ipairs, pcall +local srv = require "luci.lucid.rpc.server" + +module "luci.lucid.rpc" + + +function factory(publisher) + local root = srv.Module() + local server = srv.Server(root) + + for _, r in ipairs(publisher) do + for _, m in ipairs(r.export) do + local s, mod = pcall(require, r.namespace .. "." .. m) + if s and mod then + local module = mod._factory() + + if r.exec then + for _, x in ipairs(r.exec) do + if x:sub(1,1) == ":" then + module:restrict({interface = x:sub(2)}) + else + module:restrict({user = x}) + end + end + end + + root:add(m, module) + else + return nil, mod + end + end + end + + return function(...) return server:process(...) end +end
\ No newline at end of file |