Skip to content

Commit

Permalink
Check for err msg code instead of using string from login error
Browse files Browse the repository at this point in the history
rancher/rancher#20216

More error message

Always display translation key in the query param
  • Loading branch information
westlywright committed May 21, 2019
1 parent f52a843 commit 592bfd1
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 23 deletions.
20 changes: 18 additions & 2 deletions app/verify-auth/route.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,15 @@ const samlProviders = ['ping', 'adfs', 'keycloak', 'okta'];
const allowedForwards = ['localhost'];

export default Route.extend(VerifyAuth, {
github: service(),
github: service(),
intl: service(),
language: service('user-language'),

beforeModel() {
if (!this.intl.locale) {
return get(this, 'language').initUnauthed();
}
},

model(params/* , transition */) {
const github = get(this, 'github');
Expand Down Expand Up @@ -96,7 +104,15 @@ export default Route.extend(VerifyAuth, {
}

if (get(params, 'errorCode')) {
reply(get(params, 'errorMsg'), get(params, 'errorCode'));
let errorMessageKey = get(params, 'errorMsg') || null;
let errorMessageTranslation = this.intl.t('loginPage.error.unknown');
let locale = this.intl.locale || ['en-us'];

if (errorMessageKey && this.intl.exists(`loginPage.error.${ errorMessageKey }`, locale)) {
errorMessageTranslation = this.intl.t(`loginPage.error.${ errorMessageKey }`);
}

reply(errorMessageTranslation, get(params, 'errorCode'));
}

function reply(err, code) {
Expand Down
38 changes: 23 additions & 15 deletions lib/login/addon/login/controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,8 @@ export default Controller.extend({
},

waiting(provider) {
// setProperties(this, {
// 'waiting': true,
// 'errorMsg': null,
// });
set(this, 'errorMsg', null);

switch (provider) {
case 'local':
this.toggleProperty('localWaiting');
Expand Down Expand Up @@ -116,18 +113,26 @@ export default Controller.extend({
}).catch((err) => {
this.send('waiting', provider);

if ( err && [401, 403].includes(err.status) ) {
let key = 'loginPage.error.authFailed'
if (err) {
let key;

if ( [401, 403].includes(err.status) ) {
key = 'authFailed'

if ( USER_PASS_PROVIDERS.includes(provider) ) {
key = 'loginPage.error.authFailedCreds';
if ( USER_PASS_PROVIDERS.includes(provider) ) {
key = 'authFailedCreds';
}
} else {
key = 'unknown';

if (this.intl.exists(`loginPage.error.${ err.message }`)) {
key = err.message;
}
}

set(this, 'errorMsg', get(this, 'intl').t(key));
} else {
set(this, 'errorMsg', (err ? err.message : 'No response received'));
set(this, 'errorMsg', key);
}
})
});
}, 10);
},

Expand Down Expand Up @@ -202,10 +207,13 @@ export default Controller.extend({
}),

infoMsg: computed('errorMsg', 'errorCode', 'intl.locale', function() {
if ( get(this, 'errorMsg') ) {
return get(this, 'errorMsg');
let { errorMsg: errorMessageKey } = this;


if ( errorMessageKey ) {
return this.intl.t(`loginPage.error.${ errorMessageKey }`);
} else if ( get(this, 'isForbidden') ) {
return get(this, 'intl').t('loginPage.error.authFailed');
return this.intl.t('loginPage.error.authFailed');
} else {
return '';
}
Expand Down
31 changes: 29 additions & 2 deletions lib/login/addon/login/route.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import $ from 'jquery';
import { inject as service } from '@ember/service';
import { get, set } from '@ember/object';
import Route from '@ember/routing/route';
Expand All @@ -7,15 +8,26 @@ export default Route.extend({
access: service(),
cookies: service(),
language: service('user-language'),
intl: service(),

beforeModel() {
this._super(...arguments);

return get(this, 'language').initUnauthed();
},

model() {
const firstLogin = get(this, 'access.firstLogin');
model(params) {
const firstLogin = get(this, 'access.firstLogin');
let overrideErrorMessage = false;
let errorMessageTranslationKey = 'unknown';

if (params.errorMsg) {
overrideErrorMessage = true;

if (this.intl.exists(`loginPage.error.${ params.errorMsg }`)) {
errorMessageTranslationKey = params.errorMsg;
}
}

if ( firstLogin ) {
const code = {
Expand All @@ -28,14 +40,18 @@ export default Route.extend({
expire: 365,
secure: 'auto'
});

set(this, 'access.userCode', code);

this.transitionToExternal('update-password');
}).catch(() => {
return {
firstLogin: true,
user: null,
changePassword: false,
code: null,
overrideErrorMessage,
errorMessageTranslationKey,
};
});
} else {
Expand All @@ -44,10 +60,20 @@ export default Route.extend({
user: null,
changePassword: false,
code: null,
overrideErrorMessage,
errorMessageTranslationKey,
};
}
},

setupController(controller, model) {
this._super(controller, model);

if (get(model, 'overrideErrorMessage')) {
controller.set('errorMsg', get(model, 'errorMessageTranslationKey'));
}
},

resetController(controller, isExisting /* , transition*/ ) {
if (isExisting) {
controller.setProperties({
Expand All @@ -59,6 +85,7 @@ export default Route.extend({
})
}
},

activate() {
$('BODY').addClass('container-farm'); // eslint-disable-line
},
Expand Down
34 changes: 30 additions & 4 deletions lib/login/addon/login/template.hbs
Original file line number Diff line number Diff line change
@@ -1,13 +1,29 @@
<div class="login">
<h1>
<<<<<<< HEAD
{{t 'loginPage.greeting' appName=settings.appName htmlSafe=true}}
=======
{{t
"loginPage.greeting"
appName=settings.appName
htmlSafe=true
}}
>>>>>>> e4d1c281c... Check for err msg code instead of using string from login error
<div class="logo"></div>
</h1>
<section class="pb-0">
{{language-dropdown login=true class='mb-10'}}
<br/>
{{#if isInsecure}}
<<<<<<< HEAD
{{banner-message color='bg-error text-left' icon='icon-certificate' message=(t 'loginPage.insecure' appName=settings.appName htmlSafe=true) }}
=======
{{banner-message
color="bg-error text-left"
icon="icon-certificate"
message=(t "loginPage.insecure" appName=settings.appName htmlSafe=true)
}}
>>>>>>> e4d1c281c... Check for err msg code instead of using string from login error
{{else}}
{{#unless app.initError}}
{{#if (or showLocal onlyLocal)}}
Expand Down Expand Up @@ -93,21 +109,31 @@
{{/if}}

{{#unless onlyLocal}}
<a class="link-text text-small mt-10 hand" {{action 'toggleAuth'}}>
{{t (if showLocal 'loginUserPass.externalProvider' 'loginUserPass.local') externalName=externalProvider}}
<a class="link-text text-small mt-10 hand" {{action "toggleAuth"}}>
{{t
(if showLocal "loginUserPass.externalProvider" "loginUserPass.local")
externalName=externalProvider
}}
</a>
{{/unless}}
{{/unless}}

{{#if infoMsg}}
<div class="banner p-10 {{if errorMsg 'bg-error' 'bg-warning'}}" role="alert">
<div
class="banner p-10 {{if errorMsg "bg-error" "bg-warning"}}"
role="alert"
>
{{infoMsg}}
</div>
{{/if}}
{{/if}}

{{#if app.initError}}
{{banner-message color='bg-error' icon='icon-alert' message=app.initError.message}}
{{banner-message
color="bg-error"
icon="icon-alert"
message=app.initError.message
}}

{{reload-btn}}
{{/if}}
Expand Down
3 changes: 3 additions & 0 deletions translations/en-us.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1401,6 +1401,9 @@ loginPage:
error:
authFailedCreds: "Logging in failed: Check credentials, or your account may not be authorized to log in."
authFailed: "Logging in failed: Your account may not be authorized to log in."
unknown: "An unknown error occured while attempting to login. Please contact your system administrator."
invalidSamlAttrs: "Invalid saml attributes"
noResponse: "No response received"
readableProviders:
ad: Active Directory
azureAd: Azure AD
Expand Down

0 comments on commit 592bfd1

Please sign in to comment.