luci-base: only render theme specific sysauth template when it exists

Avoid displaying non-fatal "File not found" exceptions when a theme is not
shipping an own sysauth template.

Fixes: #6118
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2022-11-25 15:30:20 +01:00
parent 885e3a5f0b
commit bed67dc000
2 changed files with 15 additions and 7 deletions

View file

@ -922,16 +922,18 @@ dispatch = function(_http, path) {
http.header('X-LuCI-Login-Required', 'yes');
let scope = { duser: 'root', fuser: user };
let theme_sysauth = `themes/${basename(runtime.env.media)}/sysauth`;
try {
runtime.render(`themes/${basename(runtime.env.media)}/sysauth`, scope);
}
catch (e) {
runtime.env.media_error = `${e}`;
runtime.render('sysauth', scope);
if (runtime.is_ucode_template(theme_sysauth) || runtime.is_lua_template(theme_sysauth)) {
try {
return runtime.render(theme_sysauth, scope);
}
catch (e) {
runtime.env.media_error = `${e}`;
}
}
return;
return runtime.render('sysauth', scope);
}
let cookie_name = (http.getenv('HTTPS') == 'on') ? 'sysauth_https' : 'sysauth_http',

View file

@ -65,6 +65,12 @@ const Class = {
return access(`${template_directory}/${path}.ut`);
},
is_lua_template: function(path) {
let vm = this.init_lua(true);
return vm && access(`${vm.get('_G', 'luci', 'template', 'viewdir')}/${path}.htm`);
},
render_ucode: function(path, scope) {
let tmplfunc = loadfile(path, { raw_mode: false });