2013-12-20 16:29:46 +01:00
|
|
|
--
|
|
|
|
-- This file is part of the Doodle3D project (http://doodle3d.com).
|
|
|
|
--
|
|
|
|
-- @copyright 2013, Doodle3D
|
|
|
|
-- @license This software is licensed under the terms of the GNU GPL v2 or later.
|
|
|
|
-- See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details.
|
|
|
|
|
|
|
|
|
2013-11-08 18:54:57 +01:00
|
|
|
---
|
|
|
|
-- TODO: document
|
2013-09-27 18:38:31 +02:00
|
|
|
local log = require('util.logger')
|
|
|
|
local utils = require('util.utils')
|
|
|
|
local uci = require('uci').cursor()
|
|
|
|
local iwinfo = require('iwinfo')
|
|
|
|
local settings = require('util.settings')
|
2013-09-30 18:08:02 +02:00
|
|
|
local wifi = require("network.wlanconfig")
|
2013-10-26 01:29:34 +02:00
|
|
|
local urlcode = require('util.urlcode')
|
2013-10-28 13:51:56 +01:00
|
|
|
local status = require('util.status')
|
2013-09-27 18:38:31 +02:00
|
|
|
|
|
|
|
local M = {}
|
|
|
|
|
2013-10-28 13:51:56 +01:00
|
|
|
local STATUS_FILE = "signinstatus"
|
2014-04-25 14:51:29 +02:00
|
|
|
local MOD_ABBR = "NTSI"
|
2013-10-28 13:51:56 +01:00
|
|
|
|
|
|
|
local IDLE_STATUS = 1
|
|
|
|
local SIGNING_IN_STATUS = 2
|
|
|
|
|
2013-09-27 18:38:31 +02:00
|
|
|
--- Signin to connect.doodle3d.com server
|
2013-11-08 18:54:57 +01:00
|
|
|
--
|
2013-09-27 18:38:31 +02:00
|
|
|
function M.signin()
|
2014-05-19 21:37:17 +02:00
|
|
|
log:verbose(MOD_ABBR, "signin:signin");
|
2013-11-08 18:54:57 +01:00
|
|
|
|
2013-10-28 13:51:56 +01:00
|
|
|
local code, msg = M.getStatus()
|
2014-04-25 14:51:29 +02:00
|
|
|
--log:verbose(MOD_ABBR, " status: "..utils.dump(code).." "..utils.dump(msg));
|
2013-11-08 18:54:57 +01:00
|
|
|
|
2013-10-28 13:51:56 +01:00
|
|
|
-- if we are already signin in, skip
|
2013-11-08 18:54:57 +01:00
|
|
|
if(code == SIGNING_IN_STATUS) then
|
2014-05-19 21:37:17 +02:00
|
|
|
log:verbose(MOD_ABBR, " already signing in, skipping")
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local ds = wifi.getDeviceState()
|
|
|
|
log:verbose(MOD_ABBR, " wifi deviceState.mode: "..utils.dump(ds.mode))
|
|
|
|
if ds.mode ~= "sta" then
|
|
|
|
log:verbose(MOD_ABBR, " wifi not in station mode, skipping signin")
|
2013-11-08 18:54:57 +01:00
|
|
|
return
|
2013-10-28 13:51:56 +01:00
|
|
|
end
|
2013-11-08 18:54:57 +01:00
|
|
|
|
2013-10-28 13:51:56 +01:00
|
|
|
M.setStatus(SIGNING_IN_STATUS,"signing in")
|
2013-11-08 18:54:57 +01:00
|
|
|
|
2013-10-03 18:07:58 +02:00
|
|
|
local baseurl = "http://connect.doodle3d.com/api/signin.php"
|
2014-04-17 14:15:36 +02:00
|
|
|
|
2014-01-23 11:33:29 +01:00
|
|
|
local attemptInterval = 1
|
|
|
|
local maxAttempts = 20
|
|
|
|
local attempt = 0
|
2014-04-17 14:15:36 +02:00
|
|
|
|
2014-01-23 11:33:29 +01:00
|
|
|
local nextAttemptTime = os.time()
|
2014-04-17 14:15:36 +02:00
|
|
|
|
2014-01-23 11:33:29 +01:00
|
|
|
local localip = ""
|
|
|
|
local signinResponse = ""
|
|
|
|
while true do
|
|
|
|
if os.time() > nextAttemptTime then
|
2014-05-12 12:22:16 +02:00
|
|
|
log:verbose(MOD_ABBR, " signin attempt "..utils.dump(attempt).."/"..utils.dump(maxAttempts))
|
2014-01-23 11:33:29 +01:00
|
|
|
local signedin = false
|
|
|
|
local localip = wifi.getLocalIP();
|
2014-04-25 14:51:29 +02:00
|
|
|
--log:verbose(MOD_ABBR, " localip: "..utils.dump(localip))
|
2014-01-23 11:33:29 +01:00
|
|
|
if localip ~= nil then
|
2014-04-17 14:15:36 +02:00
|
|
|
|
2014-01-23 11:33:29 +01:00
|
|
|
local wifiboxid = wifi.getSubstitutedSsid(settings.get('network.cl.wifiboxid'))
|
|
|
|
wifiboxid = urlcode.escape(wifiboxid)
|
2014-04-17 14:15:36 +02:00
|
|
|
|
2014-01-23 11:33:29 +01:00
|
|
|
local cmd = "wget -q -T 2 -t 1 -O - "..baseurl.."?wifiboxid="..wifiboxid.."\\&localip="..localip;
|
|
|
|
signinResponse = utils.captureCommandOutput(cmd);
|
2014-04-25 14:51:29 +02:00
|
|
|
log:verbose(MOD_ABBR, " signin response: \n"..utils.dump(signinResponse))
|
2014-01-23 11:33:29 +01:00
|
|
|
local success = signinResponse:match('"status":"success"')
|
2014-04-25 14:51:29 +02:00
|
|
|
log:verbose(MOD_ABBR, " success: "..utils.dump(success))
|
2014-01-23 11:33:29 +01:00
|
|
|
if success ~= nil then
|
|
|
|
signedin = true
|
|
|
|
else
|
2014-05-12 12:22:16 +02:00
|
|
|
log:warning(MOD_ABBR, "signin failed, request failed (response: "..utils.dump(signinResponse)..")")
|
2014-01-23 11:33:29 +01:00
|
|
|
end
|
2014-04-17 14:15:36 +02:00
|
|
|
else
|
2014-05-12 12:22:16 +02:00
|
|
|
log:warning(MOD_ABBR, "signin failed, no local ip found (attempt: "..utils.dump(attempt).."/"..utils.dump(maxAttempts)..")")
|
2014-01-23 11:33:29 +01:00
|
|
|
end
|
2014-04-17 14:15:36 +02:00
|
|
|
|
2014-01-23 11:33:29 +01:00
|
|
|
if signedin then
|
|
|
|
break
|
|
|
|
else
|
|
|
|
attempt = attempt+1
|
|
|
|
if attempt >= maxAttempts then
|
|
|
|
-- still no localIP; fail
|
|
|
|
M.setStatus(IDLE_STATUS,"idle")
|
|
|
|
return false
|
|
|
|
else
|
|
|
|
nextAttemptTime = os.time() + attemptInterval
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2013-09-30 18:08:02 +02:00
|
|
|
end
|
2014-04-17 14:15:36 +02:00
|
|
|
|
2013-10-28 13:51:56 +01:00
|
|
|
M.setStatus(IDLE_STATUS,"idle")
|
2014-01-23 11:33:29 +01:00
|
|
|
return string.len(signinResponse) > 0, signinResponse
|
2013-09-27 18:38:31 +02:00
|
|
|
end
|
|
|
|
|
2013-10-28 13:51:56 +01:00
|
|
|
function M.getStatus()
|
|
|
|
return status.get(STATUS_FILE);
|
|
|
|
end
|
|
|
|
|
|
|
|
function M.setStatus(code,msg)
|
2016-02-23 17:36:17 +01:00
|
|
|
log:verbose(MOD_ABBR, "signin:setStatus: " .. code .. " (" .. msg .. ")")
|
2013-10-28 13:51:56 +01:00
|
|
|
status.set(STATUS_FILE,code,msg);
|
|
|
|
end
|
|
|
|
|
2013-11-08 18:54:57 +01:00
|
|
|
return M
|