Browse Source

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.
Matthias Schiffer 7 years ago
parent
commit
819c7d59f1

+ 2 - 2
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 "
-"(<em><%=hostname%></em>) an "
+"(<em><%=escape(hostname)%></em>) an "
 "<a href=\"mailto:keys@entenhausen.freifunk.net\">keys@entenhausen.freifunk.net</a>."
 "</p>"
 "<div class=\"the-key\">"
-" # <%= hostname %>"
+" # <%= escape(hostname) %>"
 " <br/>"
 "<%= pubkey %>"
 "</div>"

+ 2 - 2
docs/site-example/i18n/en.po

@@ -20,11 +20,11 @@ msgstr ""
 "<p>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 (<em><%=hostname%></em>) to "
+"To register, send the key together with your node's name (<em><%=escape(hostname)%></em>) to "
 "<a href=\"mailto:keys@entenhausen.freifunk.net\">keys@entenhausen.freifunk.net</a>."
 "</p>"
 "<div class=\"the-key\">"
-" # <%= hostname %>"
+" # <%= escape(hostname) %>"
 " <br/>"
 "<%= pubkey %>"
 "</div>"

+ 2 - 2
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 "
-"(<em><%=hostname%></em>) à "
+"(<em><%=escape(hostname)%></em>) à "
 "<a href=\"mailto:keys@entenhausen.freifunk.net\">keys@entenhausen.freifunk.net</a>."
 "</p>"
 "<div class=\"the-key\">"
-" # <%= hostname %>"
+" # <%= escape(hostname) %>"
 " <br/>"
 "<%= pubkey %>"
 "</div>"

+ 7 - 1
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 @@
 
 <h2><%:Welcome!%></h2>
 <p>
-	<%= 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,
+	}) %>
 </p>
 
 <% if not self.embedded then %>

+ 1 - 1
package/gluon-config-mode-core/files/usr/lib/lua/luci/view/gluon/config-mode/reboot.htm

@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=luci.i18n.context.lang%>" lang="<%=luci.i18n.context.lang%>">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title><%=hostname%> is rebooting</title>
+    <title><%=escape(hostname)%> is rebooting</title>
     <link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
   </head>
   <body>

+ 3 - 0
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,
     }
   )
 

+ 12 - 7
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

+ 34 - 33
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
 -%>
 <h2><%:Information%></h2>
 <% for _, key in ipairs({'hostname', 'primary_mac', 'model', 'version', 'release', 'site', 'pubkey'}) do %>
 <div class="cbi-value">
-  <div class="cbi-value-title"><%=keys[key]%></div><div class="cbi-value-field"><%=values[key] or 'n/a'%></div>
+  <div class="cbi-value-title"><%=keys[key]%></div><div class="cbi-value-field"><%=gluon_luci.escape(values[key] or 'n/a')%></div>
 </div>
 <% end %>