diff --git a/app/assets/javascripts/discourse/controllers/preferences/second-factor.js.es6 b/app/assets/javascripts/discourse/controllers/preferences/second-factor.js.es6 index 1559d59eba1..f09263712d9 100644 --- a/app/assets/javascripts/discourse/controllers/preferences/second-factor.js.es6 +++ b/app/assets/javascripts/discourse/controllers/preferences/second-factor.js.es6 @@ -1,6 +1,7 @@ import { default as computed } from 'ember-addons/ember-computed-decorators'; import { default as DiscourseURL, userPath } from 'discourse/lib/url'; import { popupAjaxError } from 'discourse/lib/ajax-error'; +import { LOGIN_METHODS } from 'discourse/models/login-method'; export default Ember.Controller.extend({ loading: false, @@ -20,6 +21,13 @@ export default Ember.Controller.extend({ return loading ? 'loading' : 'submit'; }, + @computed + displayOAuthWarning() { + return LOGIN_METHODS.some(name => { + return this.siteSettings[`enable_${name}_logins`]; + }); + }, + toggleSecondFactor(enable) { if (!this.get('secondFactorToken')) return; this.set('loading', true); diff --git a/app/assets/javascripts/discourse/models/login-method.js.es6 b/app/assets/javascripts/discourse/models/login-method.js.es6 index 509fe402074..866c657f6b8 100644 --- a/app/assets/javascripts/discourse/models/login-method.js.es6 +++ b/app/assets/javascripts/discourse/models/login-method.js.es6 @@ -22,19 +22,21 @@ const LoginMethod = Ember.Object.extend({ let methods; let preRegister; +export const LOGIN_METHODS = [ + "google_oauth2", + "facebook", + "twitter", + "yahoo", + "instagram", + "github" +]; + export function findAll(siteSettings, capabilities, isMobileDevice) { if (methods) { return methods; } methods = []; - [ - "google_oauth2", - "facebook", - "twitter", - "yahoo", - "instagram", - "github" - ].forEach(name => { + LOGIN_METHODS.forEach(name => { if (siteSettings["enable_" + name + "_logins"]) { const params = { name }; if (name === "google_oauth2") { diff --git a/app/assets/javascripts/discourse/templates/preferences-second-factor.hbs b/app/assets/javascripts/discourse/templates/preferences-second-factor.hbs index 9df31c26656..d8c58a6ff85 100644 --- a/app/assets/javascripts/discourse/templates/preferences-second-factor.hbs +++ b/app/assets/javascripts/discourse/templates/preferences-second-factor.hbs @@ -40,6 +40,10 @@
{{{i18n 'user.second_factor.enable_description'}}} + + {{#if displayOAuthWarning}} + {{i18n 'user.second_factor.oauth_enabled_warning'}} + {{/if}}
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index b9c4b83a79d..7a3f86ab745 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -728,6 +728,7 @@ en: requiring a one-time token in addition to your password. These tokens can be generated on Android and iOS by Google Authenticator and on Windows Phone by Authenticator. + oauth_enabled_warning: "Note that logins via social methods will be disabled once Two Factor Authentication has been enabled on your account." change_about: title: "Change About Me" diff --git a/test/javascripts/controllers/preferences-second-factor-test.js.es6 b/test/javascripts/controllers/preferences-second-factor-test.js.es6 new file mode 100644 index 00000000000..ce9b39c37a8 --- /dev/null +++ b/test/javascripts/controllers/preferences-second-factor-test.js.es6 @@ -0,0 +1,27 @@ +moduleFor("controller:preferences/second-factor"); + +QUnit.test("displayOAuthWarning when OAuth login methods are disabled", assert => { + let controller = this.subject({ + siteSettings: { + enable_google_oauth2_logins: false + } + }); + + assert.equal( + controller.get('displayOAuthWarning'), + false + ); +}); + +QUnit.test("displayOAuthWarning when OAuth login methods are enabled", assert => { + let controller = this.subject({ + siteSettings: { + enable_google_oauth2_logins: true + } + }); + + assert.equal( + controller.get('displayOAuthWarning'), + true + ); +});