![]() |
|
shell script to LUA - Printable Version +- LogicMachine Forum (https://forum.logicmachine.net) +-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1) +--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8) +--- Thread: shell script to LUA (/showthread.php?tid=2450) |
shell script to LUA - edos - 03.02.2020 Hello, Can anyone tell me if this sample script can be "transplanted" to LM? Code: #!/bin/bash
username=user
password=password
baseurl=https://IP:8443
cookie=/tmp/unifi_cookie
curl_cmd="curl --silent --cookie ${cookie} --cookie-jar ${cookie} --insecure "
#login
${curl_cmd} --data "{'username':'$username', 'password':'$password'}" $baseurl/api/login > /dev/null 2>&1
${curl_cmd} $baseurl/api/s/default/stat/sta > /var/www/scripts/unifi-users.json
#logout
${curl_cmd} $baseurl/logout > /dev/null 2>&1RE: shell script to LUA - admin - 04.02.2020 See this thread for a similar example: https://forum.logicmachine.net/showthread.php?tid=1921 First request is POST so you need to pass data like this: Code: data = "{'username':'user', 'password':'1234'}"
res, err, hdrs = socket.http.request(url1, data)If running an older FW you might also need to change socket.http to ssl.https in order to use https. Newer FW will detect https automatically. RE: shell script to LUA - edos - 04.02.2020 Thanks I looked an example! Here is the result: Code: require('socket.http')
socket.http.TIMEOUT = 5
data = "{'username':'user', 'password':'12345'}"
url1 = 'https://10.10.11.2:8443/api/login'
url2 = 'https://10.10.11.2:8443/api/s/default/stat/sta'
res, err, hdrs = socket.http.request(url1,data)
if res then
tbl = {}
res, err = socket.http.request({
url = url2,
headers = {
cookie = hdrs['set-cookie']
},
sink = ltn12.sink.table(tbl),
})
if res then
resp = table.concat(tbl)
log(resp)
else
alert('request 2 failed: ' .. tostring(err))
end
else
alert('request 1 failed: ' .. tostring(err))
endBut it still gives an error. Code: * string: {"meta":{"rc":"error","msg":"api.err.LoginRequired"},"data":[]}I am not good at scripts, may you help me ? Thanks a lot! RE: shell script to LUA - admin - 05.02.2020 Log what you get during login request. I've also changed data variable to contain valid JSON: Code: require('json')
http = require('socket.http')
http.TIMEOUT = 5
data = json.encode({
username = 'user',
password = '12345'
})
url1 = 'https://10.10.11.2:8443/api/login'
url2 = 'https://10.10.11.2:8443/api/s/default/stat/sta'
res, err, hdrs = http.request(url1, data)
log(res, err, hdrs)
if res then
tbl = {}
res, err = http.request({
url = url2,
headers = {
cookie = hdrs['set-cookie']
},
sink = ltn12.sink.table(tbl),
})
if res then
resp = table.concat(tbl)
log(resp)
else
alert('request 2 failed: ' .. tostring(err))
end
else
alert('request 1 failed: ' .. tostring(err))
endRE: shell script to LUA - edos - 05.02.2020 Yes, now authorization is ok. After changing the data variable to store valid JSON Here is the log: Code: * arg: 1
* string: {"meta":{"rc":"ok"},"data":[]}
* arg: 2
* number: 200
* arg: 3
* table:
["access-control-expose-headers"]
* string: Access-Control-Allow-Origin,Access-Control-Allow-Credentials
["content-type"]
* string: application/json;charset=UTF-8
["connection"]
* string: close
["content-length"]
* string: 30
["access-control-allow-credentials"]
* string: true
["date"]
* string: Wed, 05 Feb 2020 08:42:18 GMT
["x-frame-options"]
* string: DENY
["set-cookie"]
* string: unifises=ghgjhghtYTfghjgGHjhFh; Path=/; Secure; HttpOnly, csrf_token=hgYTGHjhg656GHGhghvfr6^ftr; Path=/; Secure
["vary"]
* string: OriginBut I do not see the answer on url2. Thanks RE: shell script to LUA - admin - 05.02.2020 Some extra parsing of cookie header is required. Try this for the second request: Code: cookies = hdrs['set-cookie']
session = cookies:match('(unifises=[^;]+)')
token = cookies:match('(csrf_token=[^;]+)')
cookie = session .. '; ' .. token
res, err = http.request({
url = url2,
headers = {
cookie = cookie,
},
sink = ltn12.sink.table(tbl),
})RE: shell script to LUA - edos - 05.02.2020 Yes, I get everything perfectly. Thank you very much. I will try to parse the resulting JSON. P.S. If I can! For information on the forum, I report that it was an API UNIFI Controller. Getting information about clients: connected or not, online time, and a lot of similar information. I did not find such an implementation on this forum. RE: shell script to LUA - admin - 05.02.2020 Let me know if you have any problems with parsing JSON data. RE: shell script to LUA - benanderson_475 - 23.03.2020 I have the following error, what could it be?, i have also tried ssl.https instead of socket.http, it returns the same error...? arg: 1 * nil * arg: 2 * string: error:1408F10B:lib(20):func(143):reason(267) * arg: 3 * nil Code: http = require("socket.http")
ltn12 = require("ltn12")
require('json')
http.TIMEOUT = 5
data = json.encode({
username = 'user',
password = 'pasword1234'
})
url1 = 'https://192.168.1.10:8443/api/login'
--url2 = 'https://192.168.1.10:8443/api/s/default/stat/sta'
res, err, hdrs = http.request(url1, data)
log(res, err, hdrs)RE: shell script to LUA - admin - 23.03.2020 See this: https://forum.logicmachine.net/showthread.php?tid=427&pid=15575#pid15575 |