From 67944aa4f57c44ea0997789f8da7b966c452fdc3 Mon Sep 17 00:00:00 2001 From: Oliver Hader Date: Wed, 13 May 2020 16:29:48 +0200 Subject: [PATCH] [BUGFIX] Check for existence of `t3js-login-url` id in Login dialog HTML element with identifier `t3js-login-url` is used to check whether referrer handling is activated and suported. In case the `Login.html` template has been overridden, mentioned element might not be given at all - which leads to a corresponding JavaScript error. Resolves: #91385 Releases: master, 9.5 Change-Id: Ie986a94209809c32cdfb217aa00b42f4369c525a Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64484 Tested-by: TYPO3com Tested-by: Susanne Moog Tested-by: Andreas Fernandez Reviewed-by: Susanne Moog Reviewed-by: Andreas Fernandez --- .../TypeScript/backend/Resources/Public/TypeScript/Login.ts | 5 ++++- typo3/sysext/backend/Resources/Public/JavaScript/Login.js | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/Login.ts b/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/Login.ts index bb8641c1e3b8..72e60ef4274d 100644 --- a/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/Login.ts +++ b/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/Login.ts @@ -114,7 +114,10 @@ class BackendLogin { const referrerRefresh = '#referrer-refresh'; const referrerRefreshed = document.location.hash === referrerRefresh; const loginUrlWrapper = document.getElementById(this.options.loginUrlWrapper) as HTMLAnchorElement; - if (typeof loginUrlWrapper.dataset.referrerCheckEnabled === 'undefined' || parseInt(loginUrlWrapper.dataset.referrerCheckEnabled, 10) !== 1) { + if (loginUrlWrapper === null + || typeof loginUrlWrapper.dataset.referrerCheckEnabled === 'undefined' + || loginUrlWrapper.dataset.referrerCheckEnabled !== '1' + ) { return; } diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/Login.js b/typo3/sysext/backend/Resources/Public/JavaScript/Login.js index 339a070a7ac2..3c48ea98521e 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/Login.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/Login.js @@ -10,4 +10,4 @@ * * The TYPO3 project - inspiring people to share! */ -define(["require","exports","jquery","bootstrap","TYPO3/CMS/Backend/Input/Clearable"],(function(e,o,t){"use strict";return new class{constructor(){this.ready=!0,this.options={error:".t3js-login-error",errorNoCookies:".t3js-login-error-nocookies",errorNoReferrer:".t3js-login-error-noreferrer",formFields:".t3js-login-formfields",interfaceField:".t3js-login-interface-field",loginForm:"#typo3-login-form",loginUrlWrapper:"t3js-login-url",submitButton:".t3js-login-submit",submitHandler:null,useridentField:".t3js-login-userident-field"},this.checkCookieSupport(),this.checkForInterfaceCookie(),this.checkDocumentReferrerSupport(),this.initializeEvents(),top.location.href!==location.href&&(this.ready=!1,top.location.href=location.href),this.ready&&document.body.setAttribute("data-typo3-login-ready","true")}showLoginProcess(){this.showLoadingIndicator(),t(this.options.error).addClass("hidden"),t(this.options.errorNoCookies).addClass("hidden")}showLoadingIndicator(){t(this.options.submitButton).button("loading")}handleSubmit(e){this.showLoginProcess(),"function"==typeof this.options.submitHandler&&this.options.submitHandler(e)}interfaceSelectorChanged(){const e=new Date,o=new Date(e.getTime()+31536e6);document.cookie="typo3-login-interface="+t(this.options.interfaceField).val()+"; expires="+o.toUTCString()+";"}checkForInterfaceCookie(){if(t(this.options.interfaceField).length){const e=document.cookie.indexOf("typo3-login-interface=");if(-1!==e){let o=document.cookie.substr(e+22);o=o.substr(0,o.indexOf(";")),t(this.options.interfaceField).val(o)}}}checkDocumentReferrerSupport(){const e="#referrer-refresh"===document.location.hash,o=document.getElementById(this.options.loginUrlWrapper);void 0!==o.dataset.referrerCheckEnabled&&1===parseInt(o.dataset.referrerCheckEnabled,10)&&("string"!=typeof document.referrer||""===document.referrer?e?document.querySelectorAll(this.options.errorNoReferrer).forEach(e=>e.classList.remove("hidden")):(this.ready=!1,o.href+="#referrer-refresh",o.click()):e&&(this.ready=!1,document.location.href=document.location.href.replace(/#[^#]*$/,"")))}showCookieWarning(){t(this.options.formFields).addClass("hidden"),t(this.options.errorNoCookies).removeClass("hidden")}hideCookieWarning(){t(this.options.formFields).removeClass("hidden"),t(this.options.errorNoCookies).addClass("hidden")}checkCookieSupport(){const e=navigator.cookieEnabled;!1===e?this.showCookieWarning():document.cookie||null!==e||(document.cookie="typo3-login-cookiecheck=1",document.cookie?document.cookie="typo3-login-cookiecheck=; expires="+new Date(0).toUTCString():this.showCookieWarning())}initializeEvents(){t(document).ajaxStart(this.showLoadingIndicator.bind(this)),t(this.options.loginForm).on("submit",this.handleSubmit.bind(this)),t(this.options.interfaceField).length>0&&t(document).on("change blur",this.options.interfaceField,this.interfaceSelectorChanged.bind(this)),document.querySelectorAll(".t3js-clearable").forEach(e=>e.clearable()),t(".t3js-login-news-carousel").on("slide.bs.carousel",e=>{const o=t(e.relatedTarget).height();t(e.target).find("div.active").parent().animate({height:o},500)})}}})); \ No newline at end of file +define(["require","exports","jquery","bootstrap","TYPO3/CMS/Backend/Input/Clearable"],(function(e,o,t){"use strict";return new class{constructor(){this.ready=!0,this.options={error:".t3js-login-error",errorNoCookies:".t3js-login-error-nocookies",errorNoReferrer:".t3js-login-error-noreferrer",formFields:".t3js-login-formfields",interfaceField:".t3js-login-interface-field",loginForm:"#typo3-login-form",loginUrlWrapper:"t3js-login-url",submitButton:".t3js-login-submit",submitHandler:null,useridentField:".t3js-login-userident-field"},this.checkCookieSupport(),this.checkForInterfaceCookie(),this.checkDocumentReferrerSupport(),this.initializeEvents(),top.location.href!==location.href&&(this.ready=!1,top.location.href=location.href),this.ready&&document.body.setAttribute("data-typo3-login-ready","true")}showLoginProcess(){this.showLoadingIndicator(),t(this.options.error).addClass("hidden"),t(this.options.errorNoCookies).addClass("hidden")}showLoadingIndicator(){t(this.options.submitButton).button("loading")}handleSubmit(e){this.showLoginProcess(),"function"==typeof this.options.submitHandler&&this.options.submitHandler(e)}interfaceSelectorChanged(){const e=new Date,o=new Date(e.getTime()+31536e6);document.cookie="typo3-login-interface="+t(this.options.interfaceField).val()+"; expires="+o.toUTCString()+";"}checkForInterfaceCookie(){if(t(this.options.interfaceField).length){const e=document.cookie.indexOf("typo3-login-interface=");if(-1!==e){let o=document.cookie.substr(e+22);o=o.substr(0,o.indexOf(";")),t(this.options.interfaceField).val(o)}}}checkDocumentReferrerSupport(){const e="#referrer-refresh"===document.location.hash,o=document.getElementById(this.options.loginUrlWrapper);null!==o&&void 0!==o.dataset.referrerCheckEnabled&&"1"===o.dataset.referrerCheckEnabled&&("string"!=typeof document.referrer||""===document.referrer?e?document.querySelectorAll(this.options.errorNoReferrer).forEach(e=>e.classList.remove("hidden")):(this.ready=!1,o.href+="#referrer-refresh",o.click()):e&&(this.ready=!1,document.location.href=document.location.href.replace(/#[^#]*$/,"")))}showCookieWarning(){t(this.options.formFields).addClass("hidden"),t(this.options.errorNoCookies).removeClass("hidden")}hideCookieWarning(){t(this.options.formFields).removeClass("hidden"),t(this.options.errorNoCookies).addClass("hidden")}checkCookieSupport(){const e=navigator.cookieEnabled;!1===e?this.showCookieWarning():document.cookie||null!==e||(document.cookie="typo3-login-cookiecheck=1",document.cookie?document.cookie="typo3-login-cookiecheck=; expires="+new Date(0).toUTCString():this.showCookieWarning())}initializeEvents(){t(document).ajaxStart(this.showLoadingIndicator.bind(this)),t(this.options.loginForm).on("submit",this.handleSubmit.bind(this)),t(this.options.interfaceField).length>0&&t(document).on("change blur",this.options.interfaceField,this.interfaceSelectorChanged.bind(this)),document.querySelectorAll(".t3js-clearable").forEach(e=>e.clearable()),t(".t3js-login-news-carousel").on("slide.bs.carousel",e=>{const o=t(e.relatedTarget).height();t(e.target).find("div.active").parent().animate({height:o},500)})}}})); \ No newline at end of file