Skip to content

Commit

Permalink
luci-base: fallback to a simple text editor if uci config cannot be l…
Browse files Browse the repository at this point in the history
…oaded

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
  • Loading branch information
jow- committed May 26, 2015
1 parent 03610ce commit fe14cd5
Show file tree
Hide file tree
Showing 27 changed files with 249 additions and 8 deletions.
26 changes: 24 additions & 2 deletions modules/luci-base/luasrc/cbi.lua
Expand Up @@ -12,6 +12,7 @@ require("luci.http")
local fs = require("nixio.fs")
local uci = require("luci.model.uci")
local datatypes = require("luci.cbi.datatypes")
local dispatcher = require("luci.dispatcher")
local class = util.class
local instanceof = util.instanceof

Expand Down Expand Up @@ -307,8 +308,29 @@ function Map.__init__(self, config, ...)

self.changed = false

if not self.uci:load(self.config) then
error("Unable to read UCI data: " .. self.config)
local path = "%s/%s" %{ self.uci:get_confdir(), self.config }
if fs.stat(path, "type") ~= "reg" then
fs.writefile(path, "")
end

local ok, err = self.uci:load(self.config)
if not ok then
local url = dispatcher.build_url(unpack(dispatcher.context.request))
local source = self:formvalue("cbi.source")
if type(source) == "string" then
fs.writefile(path, source:gsub("\r\n", "\n"))
ok, err = self.uci:load(self.config)
if ok then
luci.http.redirect(url)
end
end
end

if not ok then
self.template = "cbi/error"
self.error = err
self.source = fs.readfile(path) or ""
self.pageaction = false
end
end

Expand Down
19 changes: 19 additions & 0 deletions modules/luci-base/luasrc/view/cbi/error.htm
@@ -0,0 +1,19 @@
<div class="cbi-map" id="cbi-<%=self.config%>">
<% if self.title and #self.title > 0 then %><h2><a id="content" name="content"><%=self.title%></a></h2><% end %>
<% if self.description and #self.description > 0 then %><div class="cbi-map-descr"><%=self.description%></div><% end %>

<p class="alert-message danger">
<%: The configuration file could not be loaded due to the following error: %><br />
<code><%=pcdata(self.error)%></code>
</p>

<textarea name="cbi.source" style="width:100%; margin-bottom:1em" rows="<%=math.max(self.source:cmatch("\n"), 10)%>"><%=pcdata(self.source)%></textarea>

<p class="alert-message">
<%: Edit the raw configuration data above to fix any error and hit "Save" to reload the page. %>
</p>

<div class="cbi-page-actions">
<input class="cbi-button cbi-button-apply" type="submit" name="cbi.save" value="<%:Save%>" />
</div>
</div>
8 changes: 8 additions & 0 deletions modules/luci-base/po/ca/base.po
Expand Up @@ -775,6 +775,11 @@ msgstr "Mètode EAP"
msgid "Edit"
msgstr "Edita"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Edita aquesta interfície"

Expand Down Expand Up @@ -2474,6 +2479,9 @@ msgstr ""
"Els caràcters permets són: <code>A-Z</code>, <code>a-z</code>, <code>0-9</"
"code> i <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/cs/base.po
Expand Up @@ -785,6 +785,11 @@ msgstr "Metoda EAP"
msgid "Edit"
msgstr "Upravit"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Upravit toto rozhraní"

Expand Down Expand Up @@ -2529,6 +2534,9 @@ msgstr ""
"Povolené znaky jsou: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> a "
"<code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/de/base.po
Expand Up @@ -781,6 +781,11 @@ msgstr "EAP-Methode"
msgid "Edit"
msgstr "Bearbeiten"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Diese Schnittstelle bearbeiten"

Expand Down Expand Up @@ -2544,6 +2549,9 @@ msgstr ""
"Erlaubte Buchstaben sind: <code>A-Z</code>, <code>a-z</code>, <code>0-9</"
"code> and <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/el/base.po
Expand Up @@ -797,6 +797,11 @@ msgstr "Μέθοδος EAP"
msgid "Edit"
msgstr "Επεξεργασία"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Επεξεργασία αυτής της διεπαφής"

Expand Down Expand Up @@ -2506,6 +2511,9 @@ msgstr ""
"Οι επιτρεπόμενοι χαρακτήρες είναι: <code>A-Z</code>, <code>a-z</code>, "
"<code>0-9</code> και <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/en/base.po
Expand Up @@ -776,6 +776,11 @@ msgstr "EAP-Method"
msgid "Edit"
msgstr "Edit"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr ""

Expand Down Expand Up @@ -2466,6 +2471,9 @@ msgid ""
"code> and <code>_</code>"
msgstr ""

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/es/base.po
Expand Up @@ -791,6 +791,11 @@ msgstr "Método EAP"
msgid "Edit"
msgstr "Editar"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Editar esta interfaz"

Expand Down Expand Up @@ -2549,6 +2554,9 @@ msgstr ""
"Los caracteres permitidos son: <code>A-Z</code>, <code>a-z</code>, "
"<code>0-9</code> y <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/fr/base.po
Expand Up @@ -801,6 +801,11 @@ msgstr "Méthode EAP"
msgid "Edit"
msgstr "Éditer"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Éditer cette interface"

Expand Down Expand Up @@ -2561,6 +2566,9 @@ msgstr ""
"Les caractères autorisés sont : <code>A-Z</code>, <code>a-z</code>, "
"<code>0-9</code> et <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/he/base.po
Expand Up @@ -762,6 +762,11 @@ msgstr ""
msgid "Edit"
msgstr "ערוך"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "ערוך ממשק זה"

Expand Down Expand Up @@ -2440,6 +2445,9 @@ msgid ""
"code> and <code>_</code>"
msgstr ""

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/hu/base.po
Expand Up @@ -794,6 +794,11 @@ msgstr "EAP metódus"
msgid "Edit"
msgstr "Szerkesztés"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Interfész szerkesztése"

Expand Down Expand Up @@ -2550,6 +2555,9 @@ msgstr ""
"A következő karakterek használhatók: <code>A-Z</code>, <code>a-z</code>, "
"<code>0-9</code> and <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/it/base.po
Expand Up @@ -795,6 +795,11 @@ msgstr "Metodo EAP"
msgid "Edit"
msgstr "Modifica"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Modifica questa interfaccia"

Expand Down Expand Up @@ -2532,6 +2537,9 @@ msgid ""
"code> and <code>_</code>"
msgstr ""

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/ja/base.po
Expand Up @@ -783,6 +783,11 @@ msgstr "EAPメソッド"
msgid "Edit"
msgstr "編集"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "インターフェースを編集"

Expand Down Expand Up @@ -2523,6 +2528,9 @@ msgstr ""
"使用可能な文字は右記の通りです: <code>A-Z</code>, <code>a-z</code>, "
"<code>0-9</code>, <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/ms/base.po
Expand Up @@ -746,6 +746,11 @@ msgstr "EAP-Kaedah"
msgid "Edit"
msgstr "Sunting"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr ""

Expand Down Expand Up @@ -2441,6 +2446,9 @@ msgstr ""
"Karakter yang diizinkan adalah: <code>A-Z</code>, <code>a-z</code>, "
"<code>0-9</code> dan <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/no/base.po
Expand Up @@ -781,6 +781,11 @@ msgstr "EAP-metode"
msgid "Edit"
msgstr "Endre"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Endre dette grensesnittet"

Expand Down Expand Up @@ -2521,6 +2526,9 @@ msgstr ""
"Gyldige tegn er: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> og "
"<code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/pl/base.po
Expand Up @@ -808,6 +808,11 @@ msgstr "Metoda EAP"
msgid "Edit"
msgstr "Edycja"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Edytuj ten interfejs"

Expand Down Expand Up @@ -2577,6 +2582,9 @@ msgstr ""
"Dozwolone znaki to: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> "
"oraz <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down
8 changes: 8 additions & 0 deletions modules/luci-base/po/pt-br/base.po
Expand Up @@ -804,6 +804,11 @@ msgstr "Método EAP"
msgid "Edit"
msgstr "Editar"

msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""

msgid "Edit this interface"
msgstr "Editar esta interface"

Expand Down Expand Up @@ -2581,6 +2586,9 @@ msgstr ""
"Os caracteres permitidos são: <code>A-Z</code>, <code>a-z</code>, <code>0-9</"
"code> e <code>_</code>"

msgid "The configuration file could not be loaded due to the following error:"
msgstr ""

msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
Expand Down

0 comments on commit fe14cd5

Please sign in to comment.