diff --git a/LibreOffice/README.md b/LibreOffice/README.md index 16866b6..816814f 100644 --- a/LibreOffice/README.md +++ b/LibreOffice/README.md @@ -9,6 +9,9 @@ It support a wide range of documents. ![https://github.com/lxsang/antosdk-apps/blob/master/LibreOffice/libreoffice.png?raw=true](https://github.com/lxsang/antosdk-apps/blob/master/LibreOffice/libreoffice.png?raw=true) ## Change log +- v 0.1.4-a: + * Update backend script to latest API changes + * use luasocket + luasec to fetch LibreOffice service discovery - v 0.1.3-a: * Minor fix to support AntOS v2.0.x - v 0.1.2-a: diff --git a/LibreOffice/api/api.lua b/LibreOffice/api/api.lua index 230edb4..ec4ebf8 100644 --- a/LibreOffice/api/api.lua +++ b/LibreOffice/api/api.lua @@ -6,7 +6,6 @@ if not args then args = REQUEST end local vfs = require("vfs") -local DLCMD="wget --no-check-certificate -O" local handle = {} --local logger = Logger:new{ levels = {INFO = true, ERROR = true, DEBUG = false}} local result = function(data) @@ -17,12 +16,22 @@ local error = function(msg) return {error = msg, result = false} end +local fetch = function(url) + local https = require('ssl.https') + local body, code, headers = https.request(url) + if code~=200 then + LOG_ERROR("Error: ".. (code or '') ) + return nil + end + return body +end + handle.token = function(data) local file = vfs.ospath(data.file) local stat = ulib.file_stat(file) local ret = { sid = "access_token="..SESSION.sessionid, - key = std.sha1(file..":"..stat.mtime) + key = enc.sha1(file..":"..stat.mtime) } return result(ret) end @@ -43,14 +52,9 @@ handle.duplicate = function(data) end handle.discover = function(data) - local tmpfile = "/tmp/libreoffice_discover.xml" - local cmd = DLCMD.." "..tmpfile..' '..data.uri - os.execute(cmd) + content = fetch(url) -- move file to correct position - if ulib.exists(tmpfile) then - local f = assert(io.open(tmpfile, "rb")) - local content = f:read("*all") - f:close() + if content then return result(content) else return error("Unable to discover data") @@ -74,7 +78,7 @@ handle.file = function(data) elseif REQUEST.method == "POST" then --local clen = tonumber(HEADER['Content-Length']) local barr = REQUEST["application/octet-stream"] - bytes.write(barr, path) + barr:fileout(path) return result(true) else return error("Unknown request method") diff --git a/LibreOffice/build/debug/README.md b/LibreOffice/build/debug/README.md index 16866b6..816814f 100644 --- a/LibreOffice/build/debug/README.md +++ b/LibreOffice/build/debug/README.md @@ -9,6 +9,9 @@ It support a wide range of documents. ![https://github.com/lxsang/antosdk-apps/blob/master/LibreOffice/libreoffice.png?raw=true](https://github.com/lxsang/antosdk-apps/blob/master/LibreOffice/libreoffice.png?raw=true) ## Change log +- v 0.1.4-a: + * Update backend script to latest API changes + * use luasocket + luasec to fetch LibreOffice service discovery - v 0.1.3-a: * Minor fix to support AntOS v2.0.x - v 0.1.2-a: diff --git a/LibreOffice/build/debug/api/api.lua b/LibreOffice/build/debug/api/api.lua index 230edb4..ec4ebf8 100644 --- a/LibreOffice/build/debug/api/api.lua +++ b/LibreOffice/build/debug/api/api.lua @@ -6,7 +6,6 @@ if not args then args = REQUEST end local vfs = require("vfs") -local DLCMD="wget --no-check-certificate -O" local handle = {} --local logger = Logger:new{ levels = {INFO = true, ERROR = true, DEBUG = false}} local result = function(data) @@ -17,12 +16,22 @@ local error = function(msg) return {error = msg, result = false} end +local fetch = function(url) + local https = require('ssl.https') + local body, code, headers = https.request(url) + if code~=200 then + LOG_ERROR("Error: ".. (code or '') ) + return nil + end + return body +end + handle.token = function(data) local file = vfs.ospath(data.file) local stat = ulib.file_stat(file) local ret = { sid = "access_token="..SESSION.sessionid, - key = std.sha1(file..":"..stat.mtime) + key = enc.sha1(file..":"..stat.mtime) } return result(ret) end @@ -43,14 +52,9 @@ handle.duplicate = function(data) end handle.discover = function(data) - local tmpfile = "/tmp/libreoffice_discover.xml" - local cmd = DLCMD.." "..tmpfile..' '..data.uri - os.execute(cmd) + content = fetch(url) -- move file to correct position - if ulib.exists(tmpfile) then - local f = assert(io.open(tmpfile, "rb")) - local content = f:read("*all") - f:close() + if content then return result(content) else return error("Unable to discover data") @@ -74,7 +78,7 @@ handle.file = function(data) elseif REQUEST.method == "POST" then --local clen = tonumber(HEADER['Content-Length']) local barr = REQUEST["application/octet-stream"] - bytes.write(barr, path) + barr:fileout(path) return result(true) else return error("Unknown request method") diff --git a/LibreOffice/build/debug/package.json b/LibreOffice/build/debug/package.json index 6f4ce83..6203ff5 100644 --- a/LibreOffice/build/debug/package.json +++ b/LibreOffice/build/debug/package.json @@ -7,7 +7,7 @@ "author": "Dany LE", "email": "contact@iohub.dev" }, - "version":"0.1.3-a", + "version":"0.1.4-a", "category":"Office", "icon":"icon.png", "mimes":[ diff --git a/LibreOffice/build/release/LibreOffice.zip b/LibreOffice/build/release/LibreOffice.zip index 574299c..2b1d691 100644 Binary files a/LibreOffice/build/release/LibreOffice.zip and b/LibreOffice/build/release/LibreOffice.zip differ diff --git a/LibreOffice/package.json b/LibreOffice/package.json index 6f4ce83..6203ff5 100644 --- a/LibreOffice/package.json +++ b/LibreOffice/package.json @@ -7,7 +7,7 @@ "author": "Dany LE", "email": "contact@iohub.dev" }, - "version":"0.1.3-a", + "version":"0.1.4-a", "category":"Office", "icon":"icon.png", "mimes":[ diff --git a/OnlyOffice/README.md b/OnlyOffice/README.md index 26a7286..2f34f2b 100644 --- a/OnlyOffice/README.md +++ b/OnlyOffice/README.md @@ -10,6 +10,7 @@ way to work with multiple documents at the same time. ![https://github.com/lxsang/antosdk-apps/blob/master/OnlyOffice/screenshot.png?raw=true](https://github.com/lxsang/antosdk-apps/blob/master/OnlyOffice/screenshot.png?raw=true) ## Change log +- v 0.1.8a: Use new backend API + luasec + luasocket to manipulate remote file - v 0.1.7a: Allow setting blur overlay on window - v 0.1.6a: Update backend api - v 0.1.5a: Add document versionning support diff --git a/OnlyOffice/api/api.lua b/OnlyOffice/api/api.lua index 9cbd282..e518346 100644 --- a/OnlyOffice/api/api.lua +++ b/OnlyOffice/api/api.lua @@ -1,7 +1,6 @@ local args=... local vfs = require("vfs") -local DLCMD="wget --no-check-certificate -O" if not args then args = REQUEST end @@ -20,6 +19,25 @@ local error = function(data) } end +local download_file = function(src, dest) + local https = require('ssl.https') + local ltn12 = require("ltn12") + local file = io.open(dest, "w") + if not file then + LOG_ERROR("Unable to open file %s to write", dest) + return false + end + local body, code, headers = https.request{ + url = src, + sink = ltn12.sink.file(file) + } + if code~=200 then + LOG_ERROR("Error: ".. (code or '') ) + return false + end + return true +end + local handle = {} handle.token = function(data) @@ -27,17 +45,17 @@ handle.token = function(data) local stat = ulib.file_stat(file) local ret = { sid = "sessionid="..SESSION.sessionid, - key = std.sha1(file..":"..stat.mtime) + key = enc.sha1(file..":"..stat.mtime) } return result(ret) end handle.history = function(data) local file = vfs.ospath(data.file) - local history_file = vfs.ospath("home://.office/"..std.sha1(file).."/history.json") + local history_file = vfs.ospath("home://.office/"..enc.sha1(file).."/history.json") if(ulib.exists(history_file)) then local obj = JSON.decodeFile(history_file) - obj.hash = std.sha1(file) + obj.hash = enc.sha1(file) return result(obj) else return error("No history found") @@ -64,7 +82,7 @@ end handle.restore = function(data) local version = data.version local file = vfs.ospath(data.file) - local basepath = vfs.ospath("home://.office/"..std.sha1(file)) + local basepath = vfs.ospath("home://.office/"..enc.sha1(file)) if ulib.exists(basepath.."/history.json") then local history = JSON.decodeFile(basepath.."/history.json") local obj = handle.clean_up_version(basepath, history,version) @@ -95,22 +113,14 @@ handle.restore = function(data) end handle.duplicate = function(data) local file = vfs.ospath(data.as) - local tmpfile = "/tmp/"..std.sha1(file) - local cmd = DLCMD.." "..tmpfile..' "'..data.remote..'"' - os.execute(cmd) - -- move file to correct position - if ulib.exists(tmpfile) then - cmd = "mv "..tmpfile.." "..file - os.execute(cmd) - print("File "..file.." is duplicated with remote") - else + download_file(data.remote, file) + if not ulib.exists(file) then return error("Unable to duplicate file") end return result("File duplicated") end handle.save = function() - --print(JSON.encode(REQUEST)) if not REQUEST.json then return error("Invalid request") end @@ -123,31 +133,31 @@ handle.save = function() end local file = vfs.ospath(REQUEST.file) if data.status == 2 then - local tmpfile = "/tmp/"..std.sha1(file) - local cmd = DLCMD.." "..tmpfile..' "'..data.url..'"' - os.execute(cmd) + local tmpfile = "/tmp/"..enc.sha1(file) + download_file(data.url, tmpfile) -- move file to correct position if ulib.exists(tmpfile) then + LOG_INFO("Remote file saved to %s", tmpfile) -- back up the file version local history_dir = "home://.office" vfs.mkdir(history_dir) - history_dir = history_dir.."/"..std.sha1(file) + history_dir = history_dir.."/"..enc.sha1(file) vfs.mkdir(history_dir) history_dir = vfs.ospath(history_dir) -- backup old version - cmd = 'cp "'..file..'" "'..history_dir.."/"..data.key..'"' - os.execute(cmd) + ulib.send_file(file,history_dir.."/"..data.key) + LOG_INFO("Backup file saved to %s", history_dir.."/"..data.key) -- create new version local old_stat = ulib.file_stat(file) - cmd = 'mv "'..tmpfile..'" "'..file..'"' - os.execute(cmd) + if not ulib.move(tmpfile, file) then + ulib.send_file(tmpfile, file) + end -- get the new key local stat = ulib.file_stat(file) - local new_key = std.sha1(file..":"..stat.mtime) + local new_key = enc.sha1(file..":"..stat.mtime) -- save changes if(data.changesurl) then - cmd = DLCMD.." "..history_dir.."/"..new_key..'.zip "'..data.changesurl..'"' - os.execute(cmd) + download_file(data.changesurl, history_dir.."/"..new_key..'.zip') end -- now save version object local history_file = history_dir.."/history.json" @@ -177,7 +187,7 @@ handle.save = function() else return error("Cannot save history") end - print("File "..file.." sync with remote") + LOG_INFO("File "..file.." sync with remote") else return error("Unable to download") end diff --git a/OnlyOffice/build/release/OnlyOffice.zip b/OnlyOffice/build/release/OnlyOffice.zip index 362d2a7..e246a20 100644 Binary files a/OnlyOffice/build/release/OnlyOffice.zip and b/OnlyOffice/build/release/OnlyOffice.zip differ diff --git a/OnlyOffice/package.json b/OnlyOffice/package.json index edb3592..7195d02 100644 --- a/OnlyOffice/package.json +++ b/OnlyOffice/package.json @@ -7,7 +7,7 @@ "author": "Xuan Sang LE", "email": "mrsang@iohub.dev" }, - "version":"0.1.7-a", + "version":"0.1.8-a", "category":"Office", "icon":"icon.png", "mimes":[ diff --git a/packages.json b/packages.json index c48ce06..4a5c72d 100644 --- a/packages.json +++ b/packages.json @@ -275,7 +275,7 @@ "description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/LibreOffice/README.md", "category": "Office", "author": "Dany LE", - "version": "0.1.3-a", + "version": "0.1.4-a", "dependencies": [], "download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/LibreOffice/build/release/LibreOffice.zip" }, @@ -335,7 +335,7 @@ "description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/OnlyOffice/README.md", "category": "Office", "author": "Xuan Sang LE", - "version": "0.1.7-a", + "version": "0.1.8-a", "dependencies": [], "download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/OnlyOffice/build/release/OnlyOffice.zip" },