86 lines
2.1 KiB
Lua
86 lines
2.1 KiB
Lua
|
--[[
|
||
|
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
|