mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
fixdevelop
This commit is contained in:
parent
aeacaf914c
commit
753de38595
797 changed files with 70531 additions and 22374 deletions
11
luci-app-sysupgrade/Makefile
Executable file
11
luci-app-sysupgrade/Makefile
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
# See /LICENSE for more information.
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI support for sysupgrades
|
||||
LUCI_DEPENDS:=+luci-base +uhttpd-mod-ubus +rpcd +rpcd-mod-rpcsys +cgi-io
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
126
luci-app-sysupgrade/luasrc/view/sysupgrade.htm
Executable file
126
luci-app-sysupgrade/luasrc/view/sysupgrade.htm
Executable file
|
|
@ -0,0 +1,126 @@
|
|||
<%
|
||||
-- all lua code provided by https://github.com/jow-/
|
||||
-- thank you very much!
|
||||
|
||||
function apply_acls(filename, session)
|
||||
local json = require "luci.jsonc"
|
||||
local util = require "luci.util"
|
||||
local fs = require "nixio.fs"
|
||||
|
||||
local grants = { }
|
||||
|
||||
local acl = json.parse(fs.readfile(filename))
|
||||
if type(acl) ~= "table" then
|
||||
return
|
||||
end
|
||||
|
||||
local group, perms
|
||||
for group, perms in pairs(acl) do
|
||||
local perm, scopes
|
||||
for perm, scopes in pairs(perms) do
|
||||
if type(scopes) == "table" then
|
||||
local scope, objects
|
||||
for scope, objects in pairs(scopes) do
|
||||
if type(objects) == "table" then
|
||||
if not grants[scope] then
|
||||
grants[scope] = { }
|
||||
end
|
||||
|
||||
if next(objects) == 1 then
|
||||
local _, object
|
||||
for _, object in ipairs(objects) do
|
||||
if not grants[scope][object] then
|
||||
grants[scope][object] = { }
|
||||
end
|
||||
table.insert(grants[scope][object], perm)
|
||||
end
|
||||
else
|
||||
local object, funcs
|
||||
for object, funcs in pairs(objects) do
|
||||
if type(funcs) == "table" then
|
||||
local _, func
|
||||
for _, func in ipairs(funcs) do
|
||||
if not grants[scope][object] then
|
||||
grants[scope][object] = { }
|
||||
end
|
||||
table.insert(grants[scope][object], func)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local _, scope, object, func
|
||||
for scope, _ in pairs(grants) do
|
||||
local objects = { }
|
||||
for object, _ in pairs(_) do
|
||||
for _, func in ipairs(_) do
|
||||
table.insert(objects, { object, func })
|
||||
end
|
||||
end
|
||||
|
||||
util.ubus("session", "grant", {
|
||||
ubus_rpc_session = session,
|
||||
scope = scope, objects = objects
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
apply_acls("/usr/share/rpcd/acl.d/sysupgrade.json", luci.dispatcher.context.authsession)
|
||||
%>
|
||||
<%+header%>
|
||||
<h2 name="content"><%:Sysupgrade%></h2>
|
||||
<div class="cbi-map-descr">
|
||||
<%:Easily search and install new releases and package upgrades.%>
|
||||
</div>
|
||||
<div style="display: none" id="status_box" class="alert-message info"></div>
|
||||
<div style="display: none" id="packages" class="alert-message success"></div>
|
||||
<p>
|
||||
<textarea style="display: none; width: 100%;" id="edit_packages" rows="15"></textarea>
|
||||
</p>
|
||||
<fieldset class="cbi-section">
|
||||
<form method="post" action="">
|
||||
<div class="cbi-selection-node">
|
||||
<div class="cbi-value" id="keep_container" style="display: none">
|
||||
<div class="cbi-section-descr">
|
||||
<%:Check "Keep settings" to retain the current configuration.%>
|
||||
</div>
|
||||
<label class="cbi-value-title" for="keep"><%:Keep settings:%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input name="keep" id="keep" checked="checked" type="checkbox">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="edit_button" style="display: none">
|
||||
<div class="cbi-value-field">
|
||||
<input class="cbi-button" value="<%:Edit installed packages%>" onclick="edit_packages()" type="button">
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value cbi-value" id="server_div" style="display:none">
|
||||
<!--
|
||||
<label class="cbi-value-title" for="server"><%:Server:%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input onclick="edit_server()" class="cbi-button cbi-button-edit" value="" type="button" id="server" name="server">
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
<input type="hidden" value="" id="server" name="server">
|
||||
<div class="cbi-value cbi-value-last">
|
||||
<div class="cbi-value-field">
|
||||
<input class="cbi-button cbi-button-apply" value="<%:Search for upgrades%>" style="display: none" onclick="upgrade_check()" type="button" id="upgrade_button">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</fieldset>
|
||||
<script type="text/javascript">
|
||||
data = {};
|
||||
data["ubus_rpc_session"] = "<%=luci.dispatcher.context.authsession%>"
|
||||
origin = document.location.href.replace(location.pathname, "")
|
||||
ubus_url = origin + "/ubus/"
|
||||
</script>
|
||||
<script type="text/javascript" src="<%=resource%>/sysupgrade.js"></script>
|
||||
<%+footer%>
|
||||
97
luci-app-sysupgrade/po/fr/sysupgrade.po
Executable file
97
luci-app-sysupgrade/po/fr/sysupgrade.po
Executable file
|
|
@ -0,0 +1,97 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2021-03-31 15:07+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationssysupgrade/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.5.2\n"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:90
|
||||
msgid "Check \"Keep settings\" to retain the current configuration."
|
||||
msgstr ""
|
||||
"Cochez \"Conserver les paramètres\" pour conserver la configuration actuelle."
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:344
|
||||
msgid "Downloading firmware to web browser memory"
|
||||
msgstr "Téléchargement du micrologiciel dans la mémoire du navigateur Web"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:78
|
||||
msgid "Easily search and install new releases and package upgrades."
|
||||
msgstr ""
|
||||
"Recherchez et installez facilement les nouvelles versions et les mises à "
|
||||
"niveau des paquets."
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:99
|
||||
msgid "Edit installed packages"
|
||||
msgstr "Modifier les packages installés"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:269
|
||||
msgid "Flashing firmware. Don't unpower device"
|
||||
msgstr "Mise à jour du micrologiciel. Ne débranchez pas l'appareil"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:192
|
||||
msgid "Installed version:"
|
||||
msgstr "Version installée :"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:92
|
||||
msgid "Keep settings:"
|
||||
msgstr "Conserver les paramètres :"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:215
|
||||
msgid "No upgrades available"
|
||||
msgstr "Pas de mise à jour disponible"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:285
|
||||
msgid "Rebooting device - please wait!"
|
||||
msgstr "Redémarrage de l'appareil - veuillez patienter !"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:209
|
||||
msgid "Request firmware"
|
||||
msgstr "Demander le micrologiciel"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:113
|
||||
msgid "Search for upgrades"
|
||||
msgstr "Rechercher des mises à jour"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:165
|
||||
msgid "Searching for upgrades"
|
||||
msgstr "Recherche des mises à jour"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:104
|
||||
msgid "Server:"
|
||||
msgstr "Serveur :"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:289
|
||||
msgid "Success! Please reload web interface"
|
||||
msgstr "Succès ! Veuillez recharger l'interface Web"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:76
|
||||
#: luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json:3
|
||||
msgid "Sysupgrade"
|
||||
msgstr "Mise à jour système"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:320
|
||||
msgid "Upload of firmware failed, please retry by reloading web interface"
|
||||
msgstr ""
|
||||
"Le téléchargement du micrologiciel a échoué, veuillez réessayer en "
|
||||
"rechargeant l'interface Web"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:305
|
||||
msgid "Uploading firmware to device"
|
||||
msgstr "Téléchargement du micrologiciel sur l'appareil"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:299
|
||||
msgid ""
|
||||
"Web interface could not reconnect to your device. Please reload web "
|
||||
"interface or check device manually"
|
||||
msgstr ""
|
||||
"L'interface Web n'a pas pu se reconnecter à votre appareil. Recharger "
|
||||
"l'interface"
|
||||
|
||||
#: luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json:3
|
||||
msgid "sysupgrade via rpcd and luci"
|
||||
msgstr "Mise à jour système via rpcd et luci"
|
||||
94
luci-app-sysupgrade/po/ru/sysupgrade.po
Executable file
94
luci-app-sysupgrade/po/ru/sysupgrade.po
Executable file
|
|
@ -0,0 +1,94 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2021-06-16 10:51+0000\n"
|
||||
"Last-Translator: Dmitry Galenko <d@monteops.com>\n"
|
||||
"Language-Team: Russian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationssysupgrade/ru/>\n"
|
||||
"Language: ru\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.6.1\n"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:90
|
||||
msgid "Check \"Keep settings\" to retain the current configuration."
|
||||
msgstr ""
|
||||
"Поставьте \"Сохранить настройки\", чтобы сохранить текущую конфигурацию."
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:344
|
||||
msgid "Downloading firmware to web browser memory"
|
||||
msgstr "Загружаем ПО в память вашего браузера"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:78
|
||||
msgid "Easily search and install new releases and package upgrades."
|
||||
msgstr "Легко ищите и устанавливайте новые версии ПО и обновления пакетов."
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:99
|
||||
msgid "Edit installed packages"
|
||||
msgstr "Редактировать список установленных пакетов"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:269
|
||||
msgid "Flashing firmware. Don't unpower device"
|
||||
msgstr "Обновляем ПО маршрутизатора. Не выключайте питание вашего устройства"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:192
|
||||
msgid "Installed version:"
|
||||
msgstr "Установленная версия:"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:92
|
||||
msgid "Keep settings:"
|
||||
msgstr "Сохранить настройки:"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:215
|
||||
msgid "No upgrades available"
|
||||
msgstr "Обновления не найдены"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:285
|
||||
msgid "Rebooting device - please wait!"
|
||||
msgstr "Перезагружаем роутер, пожалуйста подождите!"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:209
|
||||
msgid "Request firmware"
|
||||
msgstr "Загрузить ПО"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:113
|
||||
msgid "Search for upgrades"
|
||||
msgstr "Поиск обновлений"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:165
|
||||
msgid "Searching for upgrades"
|
||||
msgstr "Поиск обновлений"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:104
|
||||
msgid "Server:"
|
||||
msgstr "Сервер:"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:289
|
||||
msgid "Success! Please reload web interface"
|
||||
msgstr "Успешно! Пожалуйста обновите страницу"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:76
|
||||
#: luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json:3
|
||||
msgid "Sysupgrade"
|
||||
msgstr "sysupgrade"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:320
|
||||
msgid "Upload of firmware failed, please retry by reloading web interface"
|
||||
msgstr ""
|
||||
"Ошибка при загрузке обновлений ПО. Для продолжения, пожалуйста обновите "
|
||||
"страницу"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:305
|
||||
msgid "Uploading firmware to device"
|
||||
msgstr "Загружаем обновления ПО в память роутера"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:299
|
||||
msgid ""
|
||||
"Web interface could not reconnect to your device. Please reload web "
|
||||
"interface or check device manually"
|
||||
msgstr "Проблема при подключении к роутеру. Пожалуйста обновите страницу"
|
||||
|
||||
#: luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json:3
|
||||
msgid "sysupgrade via rpcd and luci"
|
||||
msgstr "sysupgrade с использованием RPCd и LUCI"
|
||||
81
luci-app-sysupgrade/po/templates/sysupgrade.pot
Executable file
81
luci-app-sysupgrade/po/templates/sysupgrade.pot
Executable file
|
|
@ -0,0 +1,81 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:90
|
||||
msgid "Check \"Keep settings\" to retain the current configuration."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:344
|
||||
msgid "Downloading firmware to web browser memory"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:78
|
||||
msgid "Easily search and install new releases and package upgrades."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:99
|
||||
msgid "Edit installed packages"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:269
|
||||
msgid "Flashing firmware. Don't unpower device"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:192
|
||||
msgid "Installed version:"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:92
|
||||
msgid "Keep settings:"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:215
|
||||
msgid "No upgrades available"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:285
|
||||
msgid "Rebooting device - please wait!"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:209
|
||||
msgid "Request firmware"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:113
|
||||
msgid "Search for upgrades"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:165
|
||||
msgid "Searching for upgrades"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:104
|
||||
msgid "Server:"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:289
|
||||
msgid "Success! Please reload web interface"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:76
|
||||
#: luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json:3
|
||||
msgid "Sysupgrade"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:320
|
||||
msgid "Upload of firmware failed, please retry by reloading web interface"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:305
|
||||
msgid "Uploading firmware to device"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:299
|
||||
msgid ""
|
||||
"Web interface could not reconnect to your device. Please reload web "
|
||||
"interface or check device manually"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json:3
|
||||
msgid "sysupgrade via rpcd and luci"
|
||||
msgstr ""
|
||||
90
luci-app-sysupgrade/po/zh_Hans/sysupgrade.po
Executable file
90
luci-app-sysupgrade/po/zh_Hans/sysupgrade.po
Executable file
|
|
@ -0,0 +1,90 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2021-05-03 07:27+0000\n"
|
||||
"Last-Translator: niergouge <1150108426@qq.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <http://weblate.openmptcprouter.com/"
|
||||
"projects/omr/luciapplicationssysupgrade/zh_Hans/>\n"
|
||||
"Language: zh_Hans\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.5.2\n"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:90
|
||||
msgid "Check \"Keep settings\" to retain the current configuration."
|
||||
msgstr "勾选保持当前配置。"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:344
|
||||
msgid "Downloading firmware to web browser memory"
|
||||
msgstr "下载固件到网页浏览器内存"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:78
|
||||
msgid "Easily search and install new releases and package upgrades."
|
||||
msgstr "轻松搜索和安装新版本升级固件包。"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:99
|
||||
msgid "Edit installed packages"
|
||||
msgstr "编辑安装包"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:269
|
||||
msgid "Flashing firmware. Don't unpower device"
|
||||
msgstr "设备升级中。请不要断开电源"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:192
|
||||
msgid "Installed version:"
|
||||
msgstr "安装的版本:"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:92
|
||||
msgid "Keep settings:"
|
||||
msgstr "保持设置:"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:215
|
||||
msgid "No upgrades available"
|
||||
msgstr "没有升级"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:285
|
||||
msgid "Rebooting device - please wait!"
|
||||
msgstr "正在重启设备-请稍候!"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:209
|
||||
msgid "Request firmware"
|
||||
msgstr "请求固件"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:113
|
||||
msgid "Search for upgrades"
|
||||
msgstr "搜索升级"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:165
|
||||
msgid "Searching for upgrades"
|
||||
msgstr "搜索升级"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:104
|
||||
msgid "Server:"
|
||||
msgstr "服务器:"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:289
|
||||
msgid "Success! Please reload web interface"
|
||||
msgstr "成功!请重新加载web界面"
|
||||
|
||||
#: luci-app-sysupgrade/luasrc/view/sysupgrade.htm:76
|
||||
#: luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json:3
|
||||
msgid "Sysupgrade"
|
||||
msgstr "系统升级"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:320
|
||||
msgid "Upload of firmware failed, please retry by reloading web interface"
|
||||
msgstr "轻松搜索和安装新版本的系统进行升级"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:305
|
||||
msgid "Uploading firmware to device"
|
||||
msgstr "上传固件到设备"
|
||||
|
||||
#: luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js:299
|
||||
msgid ""
|
||||
"Web interface could not reconnect to your device. Please reload web "
|
||||
"interface or check device manually"
|
||||
msgstr "网络界面无法重新连接到您的设备。请重新加载web界面或手动检查设备"
|
||||
|
||||
#: luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json:3
|
||||
msgid "sysupgrade via rpcd and luci"
|
||||
msgstr "通过RPCD和luci进行升级"
|
||||
20
luci-app-sysupgrade/root/etc/init.d/sysupgrade
Executable file
20
luci-app-sysupgrade/root/etc/init.d/sysupgrade
Executable file
|
|
@ -0,0 +1,20 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2020-2021 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
# Released under GPL 3. See LICENSE for the full terms.
|
||||
|
||||
{
|
||||
START=99
|
||||
STOP=10
|
||||
USE_PROCD=1
|
||||
}
|
||||
|
||||
start_service()
|
||||
{
|
||||
if [ -f /etc/backup/installed_packages.txt ]; then
|
||||
if [ "$(opkg -V0 update 2>&1)" = "" ]; then
|
||||
grep "\toverlay" /etc/backup/installed_packages.txt | cut -f1 | xargs -r opkg -V0 install
|
||||
rm /etc/backup/installed_packages.txt
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
20
luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade
Executable file
20
luci-app-sysupgrade/root/etc/uci-defaults/40_luci-sysupgrade
Executable file
|
|
@ -0,0 +1,20 @@
|
|||
#!/bin/sh
|
||||
|
||||
/etc/init.d/uhttpd restart
|
||||
/etc/init.d/rpcd reload
|
||||
|
||||
[ -e /etc/config/sysupgrade ] && return 0
|
||||
|
||||
touch /etc/config/sysupgrade
|
||||
|
||||
uci -q batch <<EOF
|
||||
set sysupgrade.server=server
|
||||
set sysupgrade.server.url='https://download.openmptcprouter.com'
|
||||
set sysupgrade.client=client
|
||||
set sysupgrade.client.upgrade_packages='0'
|
||||
set sysupgrade.client.auto_search='0'
|
||||
set sysupgrade.client.advanced_mode='0'
|
||||
commit sysupgrade
|
||||
EOF
|
||||
|
||||
return 0
|
||||
13
luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json
Executable file
13
luci-app-sysupgrade/root/usr/share/luci/menu.d/luci-app-sysupgrade.json
Executable file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"admin/system/sysupgrade": {
|
||||
"title": "Sysupgrade",
|
||||
"order": 1,
|
||||
"action": {
|
||||
"type": "template",
|
||||
"path": "sysupgrade"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [ "sysupgrade" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
34
luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json
Executable file
34
luci-app-sysupgrade/root/usr/share/rpcd/acl.d/sysupgrade.json
Executable file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"sysupgrade": {
|
||||
"description": "sysupgrade via rpcd and luci",
|
||||
"read": {
|
||||
"ubus": {
|
||||
"rpc-sys": [
|
||||
"upgrade_start",
|
||||
"packagelist"
|
||||
],
|
||||
"system": [
|
||||
"board",
|
||||
"info"
|
||||
],
|
||||
"openmptcprouter": [
|
||||
"rootfs"
|
||||
],
|
||||
"uci": [
|
||||
"get", "set", "commit"
|
||||
]
|
||||
},
|
||||
"uci": [
|
||||
"sysupgrade"
|
||||
]
|
||||
},
|
||||
"write": {
|
||||
"cgi-io": [
|
||||
"upload"
|
||||
],
|
||||
"uci": [
|
||||
"sysupgrade"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
389
luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js
Executable file
389
luci-app-sysupgrade/root/www/luci-static/resources/sysupgrade.js
Executable file
|
|
@ -0,0 +1,389 @@
|
|||
'require ui';
|
||||
function $(s) {
|
||||
return document.getElementById(s.substring(1));
|
||||
}
|
||||
|
||||
function show(s) {
|
||||
$(s).style.display = 'block';
|
||||
}
|
||||
|
||||
function hide(s) {
|
||||
$(s).style.display = 'none';
|
||||
}
|
||||
|
||||
function set_server() {
|
||||
hide("#status_box");
|
||||
data.url = $("#server").value;
|
||||
ubus_call("uci", "set", {
|
||||
"config": "sysupgrade",
|
||||
"section": "server",
|
||||
values: {
|
||||
"url": data.url
|
||||
}
|
||||
})
|
||||
ubus_call("uci", "commit", {
|
||||
"config": "sysupgrade"
|
||||
})
|
||||
var server_button = $("#server")
|
||||
server_button.type = 'button';
|
||||
server_button.className = 'cbi-button cbi-button-edit';
|
||||
server_button.parentElement.removeChild($("#button_set"));
|
||||
server_button.onclick = edit_server;
|
||||
}
|
||||
|
||||
function edit_server() {
|
||||
$("#server").type = 'text';
|
||||
$("#server").onkeydown = function(event) {
|
||||
if (event.key === 'Enter') {
|
||||
set_server();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
$("#server").className = '';
|
||||
$("#server").onclick = null;
|
||||
|
||||
var button_set = document.createElement("input");
|
||||
button_set.type = "button";
|
||||
button_set.value = "Save";
|
||||
button_set.name = "button_set";
|
||||
button_set.id = "button_set";
|
||||
button_set.className = 'cbi-button cbi-button-save';
|
||||
button_set.onclick = set_server
|
||||
$("#server").parentElement.appendChild(button_set);
|
||||
}
|
||||
|
||||
function edit_packages() {
|
||||
data.edit_packages = true
|
||||
hide("#edit_button");
|
||||
$("#edit_packages").value = data.packages.join("\n");
|
||||
show("#edit_packages");
|
||||
}
|
||||
|
||||
// initial setup, get system information
|
||||
function setup() {
|
||||
ubus_call("rpc-sys", "packagelist", {}, "packages");
|
||||
ubus_call("system", "board", {}, "release");
|
||||
ubus_call("system", "board", {}, "board_name");
|
||||
ubus_call("system", "info", {}, "memory");
|
||||
ubus_call("openmptcprouter", "getrootfs", {}, "format");
|
||||
ubus_call("openmptcprouter", "getefi", {}, "efi_enabled");
|
||||
uci_get({
|
||||
"config": "sysupgrade",
|
||||
"section": "server",
|
||||
"option": "url"
|
||||
})
|
||||
uci_get({
|
||||
"config": "sysupgrade",
|
||||
"section": "client",
|
||||
"option": "upgrade_packages"
|
||||
})
|
||||
uci_get({
|
||||
"config": "sysupgrade",
|
||||
"section": "client",
|
||||
"option": "advanced_mode"
|
||||
})
|
||||
uci_get({
|
||||
"config": "sysupgrade",
|
||||
"section": "client",
|
||||
"option": "auto_search"
|
||||
})
|
||||
setup_ready();
|
||||
}
|
||||
|
||||
function setup_ready() {
|
||||
// checks if a async ubus calls have finished
|
||||
if (ubus_counter != ubus_closed) {
|
||||
setTimeout(setup_ready, 300)
|
||||
} else {
|
||||
if (data.auto_search == 1) {
|
||||
upgrade_check();
|
||||
} else {
|
||||
show("#upgrade_button");
|
||||
//show("#server_div");
|
||||
$("#server").value = data.url;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function uci_get(option) {
|
||||
// simple wrapper to get a uci value store in data.<option>
|
||||
ubus_call("uci", "get", option, option["option"])
|
||||
}
|
||||
|
||||
ubus_counter = 0;
|
||||
ubus_closed = 0;
|
||||
|
||||
function ubus_call(command, argument, params, variable) {
|
||||
var request_data = {};
|
||||
request_data.jsonrpc = "2.0";
|
||||
request_data.id = ubus_counter;
|
||||
request_data.method = "call";
|
||||
request_data.params = [data.ubus_rpc_session, command, argument, params]
|
||||
var request_json = JSON.stringify(request_data)
|
||||
ubus_counter++;
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("POST", ubus_url, true);
|
||||
request.setRequestHeader("Content-type", "application/json");
|
||||
request.onload = function(event) {
|
||||
if (request.status === 200) {
|
||||
var response = JSON.parse(request.responseText)
|
||||
if (!("error" in response) && "result" in response) {
|
||||
if (response.result.length === 2) {
|
||||
if (command === "uci") {
|
||||
data[variable] = response.result[1].value
|
||||
} else {
|
||||
data[variable] = response.result[1][variable]
|
||||
}
|
||||
}
|
||||
} else {
|
||||
set_status("danger", "<b>Ubus call failed:</b><br />Request: " + request_json + "<br />Response: " + JSON.stringify(response))
|
||||
}
|
||||
ubus_closed++;
|
||||
}
|
||||
}
|
||||
request.send(request_json);
|
||||
}
|
||||
|
||||
function set_status(type, message, loading, show_log) {
|
||||
$("#status_box").className = "alert-message " + type;
|
||||
var loading_image = '';
|
||||
if (loading) {
|
||||
loading_image = '<img src="/luci-static/resources/icons/loading.gif" alt="Loading" style="vertical-align:middle"> ';
|
||||
}
|
||||
if (data.buildlog_url && show_log) {
|
||||
message += ' <p><a target="_blank" href="' + data.buildlog_url + '">Build log</a></p>'
|
||||
}
|
||||
$("#status_box").innerHTML = loading_image + message;
|
||||
show("#status_box")
|
||||
}
|
||||
|
||||
function upgrade_check() {
|
||||
var current_version = data.release.version.toLowerCase();
|
||||
var current_branch = current_version.split('-')[0].split('.').slice(0, 2).join('.')
|
||||
var candidates = []
|
||||
hide("#status_box");
|
||||
hide("#server_div");
|
||||
set_status("info", _("Searching for upgrades"), true);
|
||||
fetch(data.url + "/api/versions?v=" + Date.now())
|
||||
.then(response => response.json())
|
||||
.then(response => {
|
||||
var branches = response["branches"]
|
||||
for (i in branches) {
|
||||
// handle snapshots in a special way - as always
|
||||
if (current_version == "snapshot" && branches[i]["latest"] == "snapshot") {
|
||||
candidates.unshift(branches[i])
|
||||
break
|
||||
}
|
||||
|
||||
if (current_version == branches[i]["latest"]) {
|
||||
break
|
||||
}
|
||||
if (current_branch != branches[i]["name"]) {
|
||||
branches[i]["warn_branch_jump"] = true
|
||||
}
|
||||
candidates.unshift(branches[i])
|
||||
if (current_branch == branches[i]["name"]) {
|
||||
// don't offer branches older than the current
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (candidates.length > 0) {
|
||||
var info_output = "<h3>New release <b>" + candidates[0].latest + "</b> available</h3>"
|
||||
info_output += _('Installed version:') + " " + data.release.version
|
||||
|
||||
// tell server the currently installed version
|
||||
request_dict.current_version = request_dict.version;
|
||||
// tell server what version to install
|
||||
request_dict.version = candidates[0].latest;
|
||||
// tell server to diff the requested packages with the default packages
|
||||
// this allows to not automatically re-install default packages which
|
||||
// where dropped in later releases
|
||||
request_dict.diff_packages = true;
|
||||
|
||||
set_status("success", info_output)
|
||||
|
||||
if (data.advanced_mode == 1) {
|
||||
show("#edit_button");
|
||||
}
|
||||
var upgrade_button = $("#upgrade_button")
|
||||
upgrade_button.value = _("Request firmware");
|
||||
upgrade_button.style.display = "block";
|
||||
upgrade_button.disabled = false;
|
||||
upgrade_button.onclick = upgrade_request;
|
||||
|
||||
} else {
|
||||
set_status("success", _("No upgrades available"))
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function upgrade_request() {
|
||||
// Request firmware using the following parameters
|
||||
// distro, version, target, board_name, packages
|
||||
$("#upgrade_button").disabled = true;
|
||||
hide("#edit_packages");
|
||||
hide("#edit_button");
|
||||
hide("#keep_container");
|
||||
|
||||
// add board info to let server determine profile
|
||||
request_dict.target = data.release.target
|
||||
request_dict.profile = data.board_name
|
||||
request_dict.rootfs = data.format
|
||||
request_dict.efi = data.efi_enabled
|
||||
|
||||
if (data.edit_packages == true) {
|
||||
request_dict.packages = $("#edit_packages").value.split("\n")
|
||||
} else {
|
||||
request_dict.packages = Object.keys(data.packages);
|
||||
}
|
||||
server_request()
|
||||
}
|
||||
|
||||
function upgrade_request_callback(response) {
|
||||
var sysupgrade_file = "";
|
||||
console.log(response)
|
||||
for (i in response.images) {
|
||||
if (response.images[i].type == "sysupgrade") {
|
||||
sysupgrade_file = response.images[i].name;
|
||||
}
|
||||
}
|
||||
if (sysupgrade_file != "") {
|
||||
data.sysupgrade_url = data.url + '/release/' + response.bin_dir + '/' + sysupgrade_file
|
||||
var info_output = '<h3>Firmware searched</h3><p>File: <a href="' + data.sysupgrade_url + '">' + sysupgrade_file + '</p></a>'
|
||||
set_status("success", info_output, false, true);
|
||||
|
||||
show("#keep_container");
|
||||
var upgrade_button = $("#upgrade_button")
|
||||
upgrade_button.disabled = false;
|
||||
upgrade_button.style.display = "block";
|
||||
upgrade_button.value = "Flash firmware";
|
||||
upgrade_button.onclick = download_image;
|
||||
} else {
|
||||
set_status("danger", "Device not sysupgrade compatible!")
|
||||
}
|
||||
}
|
||||
|
||||
function flash_image() {
|
||||
// Flash image via rpc-sys upgrade_start
|
||||
set_status("warning", _("Flashing firmware. Don't unpower device"), true)
|
||||
ubus_call("rpc-sys", "upgrade_start", {
|
||||
"keep": $("#keep").checked
|
||||
}, 'message');
|
||||
ping_max = 3600; // in seconds
|
||||
setTimeout(ping_ubus, 10000)
|
||||
}
|
||||
|
||||
function ping_ubus() {
|
||||
// Tries to connect to ubus. If the connection fails the device is likely still rebooting.
|
||||
// If more time than ping_max passes update may failed
|
||||
if (ping_max > 0) {
|
||||
ping_max--;
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("GET", ubus_url, true);
|
||||
request.addEventListener('error', function(event) {
|
||||
set_status("warning", _("Rebooting device - please wait!"), true);
|
||||
setTimeout(ping_ubus, 5000)
|
||||
});
|
||||
request.addEventListener('load', function(event) {
|
||||
set_status("success", _("Success! Please reload web interface"));
|
||||
$("#upgrade_button").value = "Reload page";
|
||||
show("#upgrade_button");
|
||||
$("#upgrade_button").disabled = false;
|
||||
$("#upgrade_button").onclick = function() {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
request.send();
|
||||
} else {
|
||||
set_status("danger", _("Web interface could not reconnect to your device. Please reload web interface or check device manually"))
|
||||
}
|
||||
}
|
||||
|
||||
function upload_image(blob) {
|
||||
// Uploads received blob data to the server using cgi-io
|
||||
set_status("info", _("Uploading firmware to device"), true);
|
||||
var request = new XMLHttpRequest();
|
||||
var form_data = new FormData();
|
||||
|
||||
form_data.append("sessionid", data.ubus_rpc_session)
|
||||
form_data.append("filename", "/tmp/firmware.bin")
|
||||
form_data.append("filemode", 755) // insecure?
|
||||
form_data.append("filedata", blob)
|
||||
|
||||
request.addEventListener('load', function(event) {
|
||||
request_json = JSON.parse(request.responseText)
|
||||
flash_image();
|
||||
});
|
||||
|
||||
request.addEventListener('error', function(event) {
|
||||
set_status("danger", _("Upload of firmware failed, please retry by reloading web interface"))
|
||||
});
|
||||
|
||||
request.open('POST', origin + '/cgi-bin/cgi-upload');
|
||||
request.send(form_data);
|
||||
}
|
||||
|
||||
|
||||
function download_image() {
|
||||
// Download image from server once the url was received by upgrade_request
|
||||
hide("#keep_container");
|
||||
hide("#upgrade_button");
|
||||
var download_request = new XMLHttpRequest();
|
||||
download_request.open("GET", data.sysupgrade_url);
|
||||
download_request.responseType = "arraybuffer";
|
||||
|
||||
download_request.onload = function() {
|
||||
if (this.status === 200) {
|
||||
var blob = new Blob([download_request.response], {
|
||||
type: "application/octet-stream"
|
||||
});
|
||||
upload_image(blob)
|
||||
}
|
||||
};
|
||||
set_status("info", _("Downloading firmware to web browser memory"), true);
|
||||
download_request.send();
|
||||
}
|
||||
|
||||
function server_request() {
|
||||
fetch(data.url + "/api/build?v=" + Date.now(), {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(request_dict)
|
||||
})
|
||||
.then(response => {
|
||||
switch (response.status) {
|
||||
case 200:
|
||||
response.json()
|
||||
.then(response => {
|
||||
upgrade_request_callback(response)
|
||||
});
|
||||
break;
|
||||
case 202:
|
||||
set_status("info", "Processing request", true);
|
||||
setTimeout(function() {
|
||||
server_request()
|
||||
}, 5000)
|
||||
break;
|
||||
case 400: // bad request
|
||||
case 422: // bad package
|
||||
case 500: // build failed
|
||||
console.log('error (' + response.status + ')');
|
||||
response.json()
|
||||
.then(response => {
|
||||
if (response.buildlog) {
|
||||
data.buildlog_url = data.url + '/' + response.bin_dir + '/buildlog.txt';
|
||||
}
|
||||
set_status("danger", response.message);
|
||||
});
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
request_dict = {}
|
||||
document.onload = setup()
|
||||
Loading…
Add table
Add a link
Reference in a new issue