From b7e96ce6bc1009af2b30b805167b091528be2987 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 16 Dec 2024 16:58:13 +0000 Subject: [PATCH] Support custom login message and button --- .../@node-red/editor-api/lib/auth/index.js | 8 +++++ .../@node-red/editor-api/lib/editor/theme.js | 16 +++++++++- .../@node-red/editor-client/src/js/user.js | 31 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-api/lib/auth/index.js b/packages/node_modules/@node-red/editor-api/lib/auth/index.js index 30ff06756..9581983cb 100644 --- a/packages/node_modules/@node-red/editor-api/lib/auth/index.js +++ b/packages/node_modules/@node-red/editor-api/lib/auth/index.js @@ -126,6 +126,14 @@ async function login(req,res) { if (themeContext.login && themeContext.login.image) { response.image = themeContext.login.image; } + if (themeContext.login?.message) { + response.loginMessage = themeContext.login?.message + } + if (themeContext.login?.button) { + response.prompts = [ + { type: "button", ...themeContext.login.button } + ] + } } res.json(response); } diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js index 2bbcbcd97..782a9d173 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js +++ b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js @@ -206,14 +206,28 @@ module.exports = { } if (theme.login) { + let themeContextLogin = {} + let hasLoginTheme = false if (theme.login.image) { url = serveFile(themeApp,"/login/",theme.login.image); if (url) { - themeContext.login = { + themeContextLogin.login = { image: url } + hasLoginTheme = true } } + if (theme.login.message) { + themeContextLogin.message = theme.login.message + hasLoginTheme = true + } + if (theme.login.button) { + themeContextLogin.button = theme.login.button + hasLoginTheme = true + } + if (hasLoginTheme) { + themeContext.login = themeContextLogin + } } themeApp.get("/", async function(req,res) { const themePluginList = await runtimeAPI.plugins.getPluginsByType({type:"node-red-theme"}); diff --git a/packages/node_modules/@node-red/editor-client/src/js/user.js b/packages/node_modules/@node-red/editor-client/src/js/user.js index 2deda8970..e2c3cb577 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/user.js +++ b/packages/node_modules/@node-red/editor-client/src/js/user.js @@ -168,6 +168,37 @@ RED.user = (function() { } + } else { + if (data.prompts) { + if (data.loginMessage) { + const sessionMessages = $("
",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields"); + $('
').text(data.loginMessage).appendTo(sessionMessages); + } + + i = 0; + for (;i",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields"); + var loginButton = $('',{style: "padding: 10px"}).appendTo(row).on("click", function() { + document.location = field.url; + }); + if (field.image) { + $("",{src:field.image}).appendTo(loginButton); + } else if (field.label) { + var label = $('').text(field.label); + if (field.icon) { + $('',{class: "fa fa-2x "+field.icon, style:"vertical-align: middle"}).appendTo(loginButton); + label.css({ + "verticalAlign":"middle", + "marginLeft":"8px" + }); + + } + label.appendTo(loginButton); + } + loginButton.button(); + } + } } if (opts.cancelable) { $("#node-dialog-login-cancel").button().on("click", function( event ) {