From 427979e7e51bb9bc858eb6ad2456ce0075fdc643 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Thu, 9 May 2019 10:03:01 +0530 Subject: [PATCH] FEATURE: use full screen login by default for social login methods (#7481) --- app/assets/javascripts/discourse.js.es6 | 1 - .../discourse/components/login-buttons.js.es6 | 6 +----- .../controllers/create-account.js.es6 | 2 +- .../discourse/controllers/invites-show.js.es6 | 8 +------ .../discourse/controllers/login.js.es6 | 21 ++++++++++++------- .../controllers/preferences/account.js.es6 | 14 +++---------- .../discourse/models/login-method.js.es6 | 15 +++---------- .../discourse/routes/application.js.es6 | 10 ++++----- .../discourse/routes/new-message.js.es6 | 1 - .../discourse/routes/new-topic.js.es6 | 1 - 10 files changed, 26 insertions(+), 53 deletions(-) diff --git a/app/assets/javascripts/discourse.js.es6 b/app/assets/javascripts/discourse.js.es6 index 9d4b5d40ee9..a05df2f5ae6 100644 --- a/app/assets/javascripts/discourse.js.es6 +++ b/app/assets/javascripts/discourse.js.es6 @@ -11,7 +11,6 @@ const Discourse = Ember.Application.extend({ _docTitle: document.title, RAW_TEMPLATES: {}, __widget_helpers: {}, - useFullScreenLogin: false, customEvents: { paste: "paste" }, diff --git a/app/assets/javascripts/discourse/components/login-buttons.js.es6 b/app/assets/javascripts/discourse/components/login-buttons.js.es6 index 4f0697fc635..3279bda5cce 100644 --- a/app/assets/javascripts/discourse/components/login-buttons.js.es6 +++ b/app/assets/javascripts/discourse/components/login-buttons.js.es6 @@ -12,11 +12,7 @@ export default Ember.Component.extend({ @computed buttons() { - return findAll( - this.siteSettings, - this.capabilities, - this.site.isMobileDevice - ); + return findAll(); }, actions: { diff --git a/app/assets/javascripts/discourse/controllers/create-account.js.es6 b/app/assets/javascripts/discourse/controllers/create-account.js.es6 index 7b88f79927e..c75ed35c85a 100644 --- a/app/assets/javascripts/discourse/controllers/create-account.js.es6 +++ b/app/assets/javascripts/discourse/controllers/create-account.js.es6 @@ -186,7 +186,7 @@ export default Ember.Controller.extend( // Determines whether at least one login button is enabled @computed hasAtLeastOneLoginButton() { - return findAll(this.siteSettings).length > 0; + return findAll().length > 0; }, @on("init") diff --git a/app/assets/javascripts/discourse/controllers/invites-show.js.es6 b/app/assets/javascripts/discourse/controllers/invites-show.js.es6 index b710b3018f4..2182b88e13e 100644 --- a/app/assets/javascripts/discourse/controllers/invites-show.js.es6 +++ b/app/assets/javascripts/discourse/controllers/invites-show.js.es6 @@ -37,13 +37,7 @@ export default Ember.Controller.extend( @computed externalAuthsEnabled() { - return ( - findLoginMethods( - this.siteSettings, - this.capabilities, - this.site.isMobileDevice - ).length > 0 - ); + return findLoginMethods().length > 0; }, @computed( diff --git a/app/assets/javascripts/discourse/controllers/login.js.es6 b/app/assets/javascripts/discourse/controllers/login.js.es6 index bba1b31bcf8..63326b87aa2 100644 --- a/app/assets/javascripts/discourse/controllers/login.js.es6 +++ b/app/assets/javascripts/discourse/controllers/login.js.es6 @@ -69,7 +69,7 @@ export default Ember.Controller.extend(ModalFunctionality, { // Determines whether at least one login button is enabled @computed("canLoginLocalWithEmail") hasAtLeastOneLoginButton(canLoginLocalWithEmail) { - return findAll(this.siteSettings).length > 0 || canLoginLocalWithEmail; + return findAll().length > 0 || canLoginLocalWithEmail; }, @computed("loggingIn") @@ -212,8 +212,17 @@ export default Ember.Controller.extend(ModalFunctionality, { return false; }, - externalLogin(loginMethod) { - loginMethod.doLogin(); + externalLogin(loginMethod, { fullScreenLogin = false } = {}) { + const capabilities = this.capabilities; + // On Mobile, Android or iOS always go with full screen + if ( + this.isMobileDevice || + (capabilities && (capabilities.isIOS || capabilities.isAndroid)) + ) { + fullScreenLogin = true; + } + + loginMethod.doLogin({ fullScreenLogin }); }, createAccount() { @@ -287,11 +296,7 @@ export default Ember.Controller.extend(ModalFunctionality, { @computed("authenticate") authMessage(authenticate) { if (Ember.isEmpty(authenticate)) return ""; - const method = findAll( - this.siteSettings, - this.capabilities, - this.isMobileDevice - ).findBy("name", authenticate); + const method = findAll().findBy("name", authenticate); if (method) { return method.get("message"); } diff --git a/app/assets/javascripts/discourse/controllers/preferences/account.js.es6 b/app/assets/javascripts/discourse/controllers/preferences/account.js.es6 index d97c7202f3b..303e38ed65e 100644 --- a/app/assets/javascripts/discourse/controllers/preferences/account.js.es6 +++ b/app/assets/javascripts/discourse/controllers/preferences/account.js.es6 @@ -73,11 +73,7 @@ export default Ember.Controller.extend( @computed("model.associated_accounts.[]") authProviders(accounts) { - const allMethods = findAll( - this.siteSettings, - this.capabilities, - this.site.isMobileDevice - ); + const allMethods = findAll(); const result = allMethods.map(method => { return { @@ -109,11 +105,7 @@ export default Ember.Controller.extend( if (secondFactorEnabled || !canCheckEmails || isAnonymous) { return false; } - - return ( - findAll(this.siteSettings, this.capabilities, this.site.isMobileDevice) - .length > 0 - ); + return findAll().length > 0; }, @computed("showAllAuthTokens", "model.user_auth_tokens") @@ -256,7 +248,7 @@ export default Ember.Controller.extend( }, connectAccount(method) { - method.doLogin(true); + method.doLogin({ reconnect: true, fullScreenLogin: false }); } } } diff --git a/app/assets/javascripts/discourse/models/login-method.js.es6 b/app/assets/javascripts/discourse/models/login-method.js.es6 index d60b492a54e..b5ad2709006 100644 --- a/app/assets/javascripts/discourse/models/login-method.js.es6 +++ b/app/assets/javascripts/discourse/models/login-method.js.es6 @@ -24,7 +24,7 @@ const LoginMethod = Ember.Object.extend({ ); }, - doLogin(reconnect = false) { + doLogin({ reconnect = false, fullScreenLogin = true } = {}) { const name = this.get("name"); const customLogin = this.get("customLogin"); @@ -37,7 +37,7 @@ const LoginMethod = Ember.Object.extend({ authUrl += "?reconnect=true"; } - if (this.get("full_screen_login")) { + if (fullScreenLogin) { document.cookie = "fsl=true"; window.location = authUrl; } else { @@ -79,7 +79,7 @@ const LoginMethod = Ember.Object.extend({ let methods; -export function findAll(siteSettings, capabilities, isMobileDevice) { +export function findAll() { if (methods) { return methods; } @@ -90,15 +90,6 @@ export function findAll(siteSettings, capabilities, isMobileDevice) { methods.pushObject(LoginMethod.create(provider)); }); - // On Mobile, Android or iOS always go with full screen - if ( - isMobileDevice || - (capabilities && (capabilities.isIOS || capabilities.isAndroid)) || - Discourse.useFullScreenLogin - ) { - methods.forEach(m => m.set("full_screen_login", true)); - } - // exclude FA icon for Google, uses custom SVG methods.forEach(m => m.set("isGoogle", m.get("name") === "google_oauth2")); diff --git a/app/assets/javascripts/discourse/routes/application.js.es6 b/app/assets/javascripts/discourse/routes/application.js.es6 index 5d458c52803..b6874ddf1e9 100644 --- a/app/assets/javascripts/discourse/routes/application.js.es6 +++ b/app/assets/javascripts/discourse/routes/application.js.es6 @@ -252,14 +252,12 @@ const ApplicationRoute = Discourse.Route.extend(OpenComposer, { }, _autoLogin(modal, modalClass, notAuto) { - const methods = findAll( - this.siteSettings, - getOwner(this).lookup("capabilities:main"), - this.site.isMobileDevice - ); + const methods = findAll(); if (!this.siteSettings.enable_local_logins && methods.length === 1) { - this.controllerFor("login").send("externalLogin", methods[0]); + this.controllerFor("login").send("externalLogin", methods[0], { + fullScreenLogin: true + }); } else { showModal(modal); this.controllerFor("modal").set("modalClass", modalClass); diff --git a/app/assets/javascripts/discourse/routes/new-message.js.es6 b/app/assets/javascripts/discourse/routes/new-message.js.es6 index 3dae6597463..bf523924722 100644 --- a/app/assets/javascripts/discourse/routes/new-message.js.es6 +++ b/app/assets/javascripts/discourse/routes/new-message.js.es6 @@ -55,7 +55,6 @@ export default Discourse.Route.extend({ }); } else { $.cookie("destination_url", window.location.href); - Discourse.useFullScreenLogin = true; this.replaceWith("login"); } } diff --git a/app/assets/javascripts/discourse/routes/new-topic.js.es6 b/app/assets/javascripts/discourse/routes/new-topic.js.es6 index 69e705aefac..54a62c9931e 100644 --- a/app/assets/javascripts/discourse/routes/new-topic.js.es6 +++ b/app/assets/javascripts/discourse/routes/new-topic.js.es6 @@ -72,7 +72,6 @@ export default Discourse.Route.extend({ } else { // User is not logged in $.cookie("destination_url", window.location.href); - Discourse.useFullScreenLogin = true; self.replaceWith("login"); } },