-
Notifications
You must be signed in to change notification settings - Fork 2.6k
JsonRpcHowTo
LuCI provides some of its libraries to external applications through a JSON-RPC API. This Howto shows how to use it and provides information about available functions.
See also
To enable the API, install the following package and restart uhttpd
:
opkg install luci-mod-rpc luci-lib-ipkg luci-compat
/etc/init.d/uhttpd restart
LuCI comes with an efficient JSON De-/Encoder together with a JSON-RPC-Server which implements the JSON-RPC 1.0 and 2.0 (partly) specifications.
The LuCI JSON-RPC server offers several independent APIs.
Therefore you have to use different URLs for every exported library.
Assuming your LuCI-Installation can be reached through /cgi-bin/luci
, any exported library can be reached via /cgi-bin/luci/rpc/LIBRARY
.
Most exported libraries will require a valid authentication to be called with.
If you get an HTTP 403 Forbidden
status code you are probably missing a valid authentication token.
To get such a token you have to call the login
method of the RPC-Library auth
.
Following our example from above this login function would be provided at /cgi-bin/luci/rpc/auth
.
The function accepts 2 parameters: username
and password
(of a valid user account on the host system) and returns an authentication token.
Example:
curl http://<hostname>/cgi-bin/luci/rpc/auth --data '
{
"id": 1,
"method": "login",
"params": [
"youruser",
"somepassword"
]
}'
response:
{"id":1,"result":"65e60c5a93b2f2c05e61681bf5e94b49","error":null}
If you want to call any exported library which requires an authentication token you have to append it as an URL parameter auth to the RPC-Server URL.
E.g. instead of calling /cgi-bin/luci/rpc/LIBRARY
you should call /cgi-bin/luci/rpc/LIBRARY?auth=TOKEN
.
If your JSON-RPC client is Cookie-aware (like most browsers are) you will receive the authentication token also with a session cookie and probably don't have to append it to the RPC-Server URL.
The UCI-Library /rpc/uci
offers functionality to interact with the Universal Configuration Interface.
Exported Functions:
- (string) add(config, type)
- (integer) apply(config)
- (object) changes([config])
- (boolean) commit(config)
- (boolean) delete(config, section[, option])
- (boolean) delete_all(config[, type])
- (array) foreach(config[, type])
- (mixed) get(config, section[, option])
- (object) get_all(config[, section])
- (mixed) get_state(config, section[, option])
- (boolean) revert(config)
- (name) section(config, type, name, values)
- (boolean) set(config, section, option, value)
- (boolean) tset(config, section, values)
Example:
curl http://<hostname>/cgi-bin/luci/rpc/uci?auth=yourtoken --data '
{
"method": "get_all",
"params": [ "network" ]
}'
The Filesystem library /rpc/fs
offers functionality to interact with the filesystem on the host machine.
Exported Functions:
Note: All functions are exported as they are except for readfile
which encodes its return value in Base64 and writefile
which only accepts Base64 encoded data as second argument.
Note that both functions will only be available when the luasocket
packet is installed on the host system.
The System library /rpc/sys
offers functionality to interact with the operating system on the host machine.
Exported Functions:
- Complete luci.sys library
-
Complete luci.sys.group library prefixing the method name with
group.methodname
. -
Complete luci.sys.net library prefixing the method name with
net.methodname
. -
Complete luci.sys.process library prefixing the method name with
process.methodname
. -
Complete luci.sys.user library with prefix
user
. -
Complete luci.sys.wifi library with prefix
wifi
.
Example:
curl http://<hostname>/cgi-bin/luci/rpc/sys?auth=yourtoken --data '
{
"method": "net.conntrack"
}'
The IPKG library /rpc/ipkg
offers functionality to interact with the package manager (IPKG or OPKG) on the host machine.
Exported Functions: