diff options
Diffstat (limited to 'libs/lucid-rpc/luasrc/lucid/rpc/system.lua')
-rw-r--r-- | libs/lucid-rpc/luasrc/lucid/rpc/system.lua | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/libs/lucid-rpc/luasrc/lucid/rpc/system.lua b/libs/lucid-rpc/luasrc/lucid/rpc/system.lua new file mode 100644 index 000000000..4f7f0b5c2 --- /dev/null +++ b/libs/lucid-rpc/luasrc/lucid/rpc/system.lua @@ -0,0 +1,86 @@ +--[[ +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 type, ipairs = type, ipairs +local srv = require "luci.lucid.rpc.server" +local nixio = require "nixio" +local lucid = require "luci.lucid" + +module "luci.lucid.rpc.system" + +function _factory() + local mod = srv.Module("System functions"):register({ + echo = echo, + void = void, + multicall = srv.Method.extended(multicall), + authenticate = srv.Method.extended(authenticate) + }) + mod.checkrestricted = function(self, session, request, ...) + if request ~= "authenticate" then + return srv.Module.checkrestricted(self, session, request, ...) + end + end + return mod +end + + +function echo(object) + return object +end + +function void() + +end + +function multicall(session, ...) + local server, responses, response = session.server, {}, nil + for k, req in ipairs({...}) do + response = nil + if type(req) == "table" and type(req.method) == "string" + and (not req.params or type(req.params) == "table") then + req.params = req.params or {} + result = server.root:process(session, req.method, req.params) + if type(result) == "table" then + if req.id ~= nil then + response = {jsonrpc=req.jsonrpc, id=req.id, + result=result.result, error=result.error} + end + else + if req.id ~= nil then + response = {jsonrpc=req.jsonrpc, id=req.id, + result=nil, error={code=srv.ERRNO_INTERNAL, + message=srv.ERRMSG[ERRNO_INTERNAL]}} + end + end + end + responses[k] = response + end + return responses +end + +function authenticate(session, type, entity, key) + if not type then + session.user = nil + return true + elseif type == "plain" then + local pwe = nixio.getsp and nixio.getsp(entity) or nixio.getpw(entity) + local pwh = pwe and (pwe.pwdp or pwe.passwd) + if not pwh or #pwh < 1 or nixio.crypt(key, pwh) ~= pwh then + return nil + else + session.user = entity + return true + end + end +end
\ No newline at end of file |