From a3d6dba69f46f956fbb97e8f68c8ceae4de194af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 29 Aug 2023 19:05:37 -0400 Subject: [PATCH] feat: add a filter hook to login so async checks can be made by plugins like showing custom dialogs before login etc. setting cancel=true in plugin returns back to login page throwing errors will show it once #11969 is fixed --- public/src/client/login.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/public/src/client/login.js b/public/src/client/login.js index 1a09f09e25..d569202160 100644 --- a/public/src/client/login.js +++ b/public/src/client/login.js @@ -11,10 +11,11 @@ define('forum/login', ['hooks', 'translator', 'jquery-form'], function (hooks, t const submitEl = $('#login'); const formEl = $('#login-form'); - submitEl.on('click', function (e) { + submitEl.on('click', async function (e) { e.preventDefault(); - - if (!$('#username').val() || !$('#password').val()) { + const username = $('#username').val(); + const password = $('#password').val(); + if (!username || !password) { errorEl.find('p').translateText('[[error:invalid-username-or-password]]'); errorEl.show(); } else { @@ -26,6 +27,23 @@ define('forum/login', ['hooks', 'translator', 'jquery-form'], function (hooks, t submitEl.addClass('disabled'); + try { + const hookData = await hooks.fire('filter:app.login', { + username, + password, + cancel: false, + }); + if (hookData.cancel) { + submitEl.removeClass('disabled'); + return; + } + } catch (err) { + errorEl.find('p').translateText(err.message); + errorEl.show(); + submitEl.removeClass('disabled'); + return; + } + hooks.fire('action:app.login'); formEl.ajaxSubmit({ headers: {