diff --git a/.circleci/config.yml b/.circleci/config.yml index 48625fbc..24fb76f3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -99,7 +99,7 @@ workflows: context : org-global filters: branches: - only: [ dev, "new_ui_style"] + only: [ dev, "new_ui_style", 'feature/RS256-backward-compatibility'] - build-qa: context : org-global filters: diff --git a/app/scripts/directives/validate-confirm-password.directive.js b/app/scripts/directives/validate-confirm-password.directive.js new file mode 100644 index 00000000..173277c0 --- /dev/null +++ b/app/scripts/directives/validate-confirm-password.directive.js @@ -0,0 +1,21 @@ +import angular from 'angular' + +(function () { + 'use strict' + + angular.module('accounts.directives').directive('validConfirmPassword', validConfirmPassword) + + function validConfirmPassword() { + return { + require: 'ngModel', + link: function (scope, element, attrs, ctrl) { + ctrl.$validators.validConfirmPassword = function (modelValue, viewValue) { + if (modelValue === ctrl.$$parentForm.password.$modelValue) { + return true + } + return false + } + } + } + } +})() diff --git a/app/views/directives/toggle-confirm-password.directive.jade b/app/views/directives/toggle-confirm-password.directive.jade index 950b065f..483e9d1a 100644 --- a/app/views/directives/toggle-confirm-password.directive.jade +++ b/app/views/directives/toggle-confirm-password.directive.jade @@ -18,7 +18,9 @@ aria-describedby="tp-help-password", aria-required="false", class="input input-btn {{ vm.hasPasswordError() ? 'error' : ''}}" - required) + required, + valid-confirm-password + ) button.tc-btn.tc-btn-sm.show-password-btn(type="button", id="toggleInputTypeBtn", tabIndex="0", ng-click="vm.toggleTypeAttribute()") img(src=logoViewPassword, alt="View Password") \ No newline at end of file diff --git a/app/views/tc/register.jade b/app/views/tc/register.jade index 0690583e..8a9e3c98 100644 --- a/app/views/tc/register.jade +++ b/app/views/tc/register.jade @@ -104,7 +104,7 @@ p.form-error(ng-message="required" role="alert") Please enter an email address. - .validation-bar + .validation-bar(ng-class="{ 'error-bar': (vm.registerForm.password.$dirty && vm.registerForm.password.$invalid) }") md-input-container.md-block label(for="password-input") Password toggle-password-with-tips(ng-if="!vm.isSocialRegistration && !vm.ssoForced && !vm.ssoUser") @@ -121,7 +121,7 @@ p(ng-class="{ 'has-symbol-or-number': (vm.registerForm.password.$dirty && !vm.registerForm.password.$error.hasSymbolOrNumber) }") At least one number or symbol - .validation-bar.confirm-password + .validation-bar.confirm-password(ng-class="{ 'error-bar': (vm.registerForm.confirmPassword.$dirty && vm.registerForm.confirmPassword.$invalid) }") md-input-container.md-block label(for="confirm-password-input") Confirm password toggle-confirm-password(ng-if="!vm.isSocialRegistration && !vm.ssoForced && !vm.ssoUser") diff --git a/core/token.js b/core/token.js index 5756ea5a..5d1c8cff 100644 --- a/core/token.js +++ b/core/token.js @@ -1,5 +1,6 @@ import { V3_JWT, AUTH0_REFRESH, AUTH0_JWT, V2_JWT, V2_SSO, ZENDESK_JWT, DOMAIN } from './constants.js' import fromPairs from 'lodash/fromPairs' +import _ from 'lodash' export function clearTokens() { removeToken(V3_JWT) @@ -34,8 +35,22 @@ export function decodeToken(token) { if (!decoded) { throw new Error('Cannot decode the token') } - - return JSON.parse(decoded) + + // covert base64 token in JSON object + let t = JSON.parse(decoded) + + // tweaking for custom claim for RS256 id-token + t.userId = _.parseInt(_.find(t, (value, key) => { + return (key.indexOf('userId') !== -1) + })) + t.handle = _.find(t, (value, key) => { + return (key.indexOf('handle') !== -1) + }) + t.roles = _.find(t, (value, key) => { + return (key.indexOf('roles') !== -1) + }) + + return t } export function isTokenExpired(token, offsetSeconds = 0) {