From 819c7d59f156eb974ad067cafc3e608be0e8ff21 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 27 Aug 2016 12:58:00 +0200 Subject: [PATCH] gluon-config-mode-*, gluon-luci-*: add escaping for many user- or site-defined strings Allows weird release numbers, models and site names, and prepares support for pretty hostnames. --- docs/site-example/i18n/de.po | 4 +- docs/site-example/i18n/en.po | 4 +- docs/site-example/i18n/fr.po | 4 +- .../lua/luci/view/gluon/cbi/config-mode.htm | 8 ++- .../luci/view/gluon/config-mode/reboot.htm | 2 +- .../controller/gluon-config-mode/index.lua | 3 + .../config-mode/reboot/0100-mesh-vpn.lua | 19 ++++-- .../usr/lib/lua/luci/view/admin/info.htm | 67 ++++++++++--------- 8 files changed, 63 insertions(+), 48 deletions(-) diff --git a/docs/site-example/i18n/de.po b/docs/site-example/i18n/de.po index 69cf1dd8..30f5c838 100644 --- a/docs/site-example/i18n/de.po +++ b/docs/site-example/i18n/de.po @@ -22,11 +22,11 @@ msgstr "" "er auf den Servern des Entenhausener Freifunk-Projektes eingetragen wurde, " "kann sich dein Knoten mit dem Entenhausener Mesh-VPN verbinden. Bitte " "schicke dazu diesen Schlüssel und den Namen deines Knotens " -"(<%=hostname%>) an " +"(<%=escape(hostname)%>) an " "keys@entenhausen.freifunk.net." "

" "
" -" # <%= hostname %>" +" # <%= escape(hostname) %>" "
" "<%= pubkey %>" "
" diff --git a/docs/site-example/i18n/en.po b/docs/site-example/i18n/en.po index 13273230..e6d1e672 100644 --- a/docs/site-example/i18n/en.po +++ b/docs/site-example/i18n/en.po @@ -20,11 +20,11 @@ msgstr "" "

This is your Freifunk node's public key. The node won't be able to " "connect to the mesh VPN until the key has been registered on the Freifunk " "Duckburg servers. " -"To register, send the key together with your node's name (<%=hostname%>) to " +"To register, send the key together with your node's name (<%=escape(hostname)%>) to " "keys@entenhausen.freifunk.net." "

" "
" -" # <%= hostname %>" +" # <%= escape(hostname) %>" "
" "<%= pubkey %>" "
" diff --git a/docs/site-example/i18n/fr.po b/docs/site-example/i18n/fr.po index 30e21c50..1462fdbf 100644 --- a/docs/site-example/i18n/fr.po +++ b/docs/site-example/i18n/fr.po @@ -22,11 +22,11 @@ msgstr "" "entrée sur les serveurs de votre groupe de Freifunk votre nœud pourra se connecter " "sur les serveur Mesh-VPN de votre groupe Freifunk. Veuillez envoyer la clé avec le " "nom de votre nœud " -"(<%=hostname%>) à " +"(<%=escape(hostname)%>) à " "keys@entenhausen.freifunk.net." "

" "
" -" # <%= hostname %>" +" # <%= escape(hostname) %>" "
" "<%= pubkey %>" "
" diff --git a/package/gluon-config-mode-core/files/usr/lib/lua/luci/view/gluon/cbi/config-mode.htm b/package/gluon-config-mode-core/files/usr/lib/lua/luci/view/gluon/cbi/config-mode.htm index d2210eca..b4aca92e 100644 --- a/package/gluon-config-mode-core/files/usr/lib/lua/luci/view/gluon/cbi/config-mode.htm +++ b/package/gluon-config-mode-core/files/usr/lib/lua/luci/view/gluon/cbi/config-mode.htm @@ -1,4 +1,5 @@ <%- + local gluon_luci = require 'gluon.luci' local sysconfig = require 'gluon.sysconfig' local i18n = require 'luci.i18n' local template = require 'luci.template' @@ -6,7 +7,12 @@

<%:Welcome!%>

- <%= template.render_string(i18n.translate('gluon-config-mode:welcome'), {hostname=hostname, sysconfig=sysconfig}) %> + <%= template.render_string(i18n.translate('gluon-config-mode:welcome'), { + hostname = hostname, + sysconfig = sysconfig, + escape = gluon_luci.escape, + urlescape = gluon_luci.urlescape, + }) %>

<% if not self.embedded then %> diff --git a/package/gluon-config-mode-core/files/usr/lib/lua/luci/view/gluon/config-mode/reboot.htm b/package/gluon-config-mode-core/files/usr/lib/lua/luci/view/gluon/config-mode/reboot.htm index e8f32d99..25ad20bf 100644 --- a/package/gluon-config-mode-core/files/usr/lib/lua/luci/view/gluon/config-mode/reboot.htm +++ b/package/gluon-config-mode-core/files/usr/lib/lua/luci/view/gluon/config-mode/reboot.htm @@ -3,7 +3,7 @@ - <%=hostname%> is rebooting + <%=escape(hostname)%> is rebooting diff --git a/package/gluon-config-mode-core/luasrc/usr/lib/lua/luci/controller/gluon-config-mode/index.lua b/package/gluon-config-mode-core/luasrc/usr/lib/lua/luci/controller/gluon-config-mode/index.lua index 68c14746..43c96340 100644 --- a/package/gluon-config-mode-core/luasrc/usr/lib/lua/luci/controller/gluon-config-mode/index.lua +++ b/package/gluon-config-mode-core/luasrc/usr/lib/lua/luci/controller/gluon-config-mode/index.lua @@ -48,6 +48,7 @@ function action_reboot() uci:save("gluon-setup-mode") uci:commit("gluon-setup-mode") + local gluon_luci = require "gluon.luci" local fs = require "nixio.fs" local util = require "nixio.util" @@ -73,6 +74,8 @@ function action_reboot() { parts = parts, hostname = hostname, + escape = gluon_luci.escape, + urlescape = gluon_luci.urlescape, } ) diff --git a/package/gluon-config-mode-mesh-vpn/luasrc/lib/gluon/config-mode/reboot/0100-mesh-vpn.lua b/package/gluon-config-mode-mesh-vpn/luasrc/lib/gluon/config-mode/reboot/0100-mesh-vpn.lua index c6e06975..da1f6407 100644 --- a/package/gluon-config-mode-mesh-vpn/luasrc/lib/gluon/config-mode/reboot/0100-mesh-vpn.lua +++ b/package/gluon-config-mode-mesh-vpn/luasrc/lib/gluon/config-mode/reboot/0100-mesh-vpn.lua @@ -6,6 +6,8 @@ if meshvpn_enabled ~= "1" then else local i18n = require "luci.i18n" local util = require "luci.util" + + local gluon_luci = require 'gluon.luci' local site = require 'gluon.site_config' local sysconfig = require 'gluon.sysconfig' @@ -16,11 +18,14 @@ else local msg = i18n.translate('gluon-config-mode:pubkey') return function () - luci.template.render_string(msg, { pubkey=pubkey - , hostname=hostname - , site=site - , sysconfig=sysconfig - , contact=contact - }) - end + luci.template.render_string(msg, { + pubkey = pubkey, + hostname = hostname, + site = site, + sysconfig = sysconfig, + contact = contact, + escape = gluon_luci.escape, + urlescape = gluon_luci.urlescape, + }) + end end diff --git a/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/info.htm b/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/info.htm index da403c1b..3fd4fec0 100644 --- a/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/info.htm +++ b/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/info.htm @@ -1,45 +1,46 @@ <%- - local fs = require 'nixio.fs' - local uci = require('luci.model.uci').cursor() - local util = require 'luci.util' - local i18n = require 'luci.i18n' + local fs = require 'nixio.fs' + local uci = require('luci.model.uci').cursor() + local util = require 'luci.util' + local i18n = require 'luci.i18n' - local site = require 'gluon.site_config' - local sysconfig = require 'gluon.sysconfig' - local platform = require 'gluon.platform' + local gluon_luci = require "gluon.luci" + local site = require 'gluon.site_config' + local sysconfig = require 'gluon.sysconfig' + local platform = require 'gluon.platform' - local keys = { - hostname = i18n.translate('Hostname'), - primary_mac = i18n.translate('MAC address'), - model = i18n.translate('Hardware model'), - version = i18n.translate('Gluon version'), - release = i18n.translate('Firmware release'), - site = i18n.translate('Site'), - pubkey = i18n.translate('Public VPN key'), - } + local keys = { + hostname = i18n.translate('Hostname'), + primary_mac = i18n.translate('MAC address'), + model = i18n.translate('Hardware model'), + version = i18n.translate('Gluon version'), + release = i18n.translate('Firmware release'), + site = i18n.translate('Site'), + pubkey = i18n.translate('Public VPN key'), + } - local values = { - hostname = uci:get_first('system', 'system', 'hostname'), - primary_mac = sysconfig.primary_mac, - model = platform.get_model(), - version = util.trim(fs.readfile('/lib/gluon/gluon-version')), - release = util.trim(fs.readfile('/lib/gluon/release')), - site = site.site_name, - pubkey = 'n/a', - } + local values = { + hostname = uci:get_first('system', 'system', 'hostname'), + primary_mac = sysconfig.primary_mac, + model = platform.get_model(), + version = util.trim(fs.readfile('/lib/gluon/gluon-version')), + release = util.trim(fs.readfile('/lib/gluon/release')), + site = site.site_name, + pubkey = 'n/a', + } - local meshvpn_enabled = uci:get("fastd", "mesh_vpn", "enabled", "0") - if meshvpn_enabled == "1" then - local pubkey = util.trim(util.exec('/etc/init.d/fastd show_key mesh_vpn')) - if pubkey ~= '' then - values.pubkey = pubkey - end - end + local meshvpn_enabled = uci:get("fastd", "mesh_vpn", "enabled", "0") + if meshvpn_enabled == "1" then + local pubkey = util.trim(util.exec('/etc/init.d/fastd show_key mesh_vpn')) + if pubkey ~= '' then + values.pubkey = pubkey + end + end -%>

<%:Information%>

<% for _, key in ipairs({'hostname', 'primary_mac', 'model', 'version', 'release', 'site', 'pubkey'}) do %>
-
<%=keys[key]%>
<%=values[key] or 'n/a'%>
+
<%=keys[key]%>
<%=gluon_luci.escape(values[key] or 'n/a')%>
<% end %>