treewide: rework rollback/apply workflow
authorJo-Philipp Wich <jo@mein.io>
Thu, 26 Jul 2018 20:12:45 +0000 (22:12 +0200)
committerJo-Philipp Wich <jo@mein.io>
Sat, 28 Jul 2018 15:14:22 +0000 (17:14 +0200)
commit7e5331f154a5e442b42a029dabf4362518d30bd5
tree937d8b60b75c22473f38c2b3a37a2194753af45f
parent64e3fe9f6bc54c8100852aee9aad403795658b85
treewide: rework rollback/apply workflow

Rework the apply confirmation mechanism to be session agnostic in order to
circumvent cross domain restrictions which prevent the JS code from issuing
apply confirm requests in some cases, e.g. when changing the LAN IP.

Confirmation calls may now be done from unauthenticated pages, as long as a
matching confirmation token is sent along with the request.

The reasoning behind this is that there is little security impact in
confirming pending apply sessions, especially since those sessions can only
be initiated while being authenticated.

After this change, LuCI will now launch a confirmation process on every
rendered page when a rollback is pending. The confirmation will happen
regardless of whether the user is logged in or not, or if the current page
is a CBI form or static template.

A confirmation request now also requires a random one-time token which is
rendered along with the confirmation JavaScript code in order to succeed.

This token is not meant to provide security but to ensure that the confirm
was triggered from an interactive browser session and not some background
HTTP requests that happened to end up in the admin ui.

As a consequence, the different apply/confirm/rollback code paths in CBI
maps and the UCI change/revert pages have been consolidated into one common
implementation residing in the common global theme agnostic footer template.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit e5a1ac02289e8fde8ddbd05bbb21ac448c661ae3)
modules/luci-base/luasrc/dispatcher.lua
modules/luci-base/luasrc/model/uci.lua
modules/luci-base/luasrc/view/cbi/apply_widget.htm
modules/luci-base/luasrc/view/cbi/map.htm
modules/luci-base/luasrc/view/footer.htm
modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua
modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm
modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm