--[[ LuCI - Lua Development Framework Copyright 2009 Steven Barth 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