diff --git a/app/account/account.routes.js b/app/account/account.routes.js index ed0eebd36..1f5b32b1a 100644 --- a/app/account/account.routes.js +++ b/app/account/account.routes.js @@ -17,7 +17,7 @@ import angular from 'angular' } }, 'login': { - url: '/login?next&code&state&status&userJWTToken&utm_source&utm_medium&utm_campaign', + url: '/login/?next&code&state&status&userJWTToken&utm_source&utm_medium&utm_campaign', views: { 'header@': {}, 'container@': {}, diff --git a/app/layout/header/header.controller.js b/app/layout/header/header.controller.js index 9144cf3d4..6a43ed9c8 100644 --- a/app/layout/header/header.controller.js +++ b/app/layout/header/header.controller.js @@ -1,14 +1,15 @@ import angular from 'angular' import _ from 'lodash' +import { loadUser } from '../../services/userv3.service.js' (function() { 'use strict' angular.module('tc.layout').controller('HeaderController', HeaderController) - HeaderController.$inject = ['$state', 'TcAuthService', 'CONSTANTS', 'logger', '$rootScope', 'UserService', 'ProfileService', 'NavService'] + HeaderController.$inject = ['$scope', '$state', 'TcAuthService', 'CONSTANTS', 'logger', '$rootScope', 'UserService', 'ProfileService', 'NavService'] - function HeaderController($state, TcAuthService, CONSTANTS, logger, $rootScope, UserService, ProfileService, NavService) { + function HeaderController($scope, $state, TcAuthService, CONSTANTS, logger, $rootScope, UserService, ProfileService, NavService) { var vm = this vm.constants = CONSTANTS @@ -31,7 +32,7 @@ import _ from 'lodash' activate() function activate() { - initHeaderProps('default') + validateAndInitHeader('default') // List of events that might force header update angular.forEach([ @@ -40,37 +41,54 @@ import _ from 'lodash' CONSTANTS.EVENT_PROFILE_UPDATED ], function(event) { $rootScope.$on(event, function() { - initHeaderProps(event) + validateAndInitHeader(event) }) }) } - function initHeaderProps(event) { - logger.debug(event + ' triggered header update.') - + /** + * Validates login state and then initiate header update. If user is not loaded yet, i.e., + * page is reloaded or page is loaded for the first time, currentUser is not set yet. In this + * case we try to load user first and if we are able to load user, update header properties + * otherwise it assumes the page to be loaded without login. + */ + function validateAndInitHeader(event) { vm.isAuth = TcAuthService.isAuthenticated() - if (vm.isAuth) { - vm.userHandle = UserService.getUserIdentity().handle - - vm.userMenu = [ - { 'sref': 'dashboard', 'text': 'DASHBOARD', 'icon': require('../../../assets/images/nav/dashboard.svg') }, - { 'sref': 'profile.about', 'srefParams': { 'userHandle': vm.userHandle }, 'text': 'MY PROFILE', 'icon': require('../../../assets/images/nav/profile.svg') }, - { 'href': vm.constants.COMMUNITY_URL + '/PactsMemberServlet?module=PaymentHistory&full_list=false', 'text': 'PAYMENTS', 'icon': require('../../../assets/images/nav/wallet.svg') }, - { 'sref': 'settings.profile', 'text': 'SETTINGS', 'icon': require('../../../assets/images/nav/settings.svg') } - ] - - ProfileService.getUserProfile(vm.userHandle) - .then(function(data) { - vm.profile = data - vm.userHandleColor = ProfileService.getUserHandleColor(vm.profile) - }) - .catch(function(err) { - logger.error('Unable to get user profile data', err) + initHeaderProps(event) + } else { + loadUser().then(function(token) { + // update auth flag + vm.isAuth = TcAuthService.isAuthenticated() + initHeaderProps(event) + }, function(error) { + // do nothing, just show non logged in state of navigation bar }) } } + function initHeaderProps(event) { + logger.debug(event + ' triggered header update.') + + vm.userHandle = UserService.getUserIdentity().handle + + vm.userMenu = [ + { 'sref': 'dashboard', 'text': 'DASHBOARD', 'icon': require('../../../assets/images/nav/dashboard.svg') }, + { 'sref': 'profile.about', 'srefParams': { 'userHandle': vm.userHandle }, 'text': 'MY PROFILE', 'icon': require('../../../assets/images/nav/profile.svg') }, + { 'href': vm.constants.COMMUNITY_URL + '/PactsMemberServlet?module=PaymentHistory&full_list=false', 'text': 'PAYMENTS', 'icon': require('../../../assets/images/nav/wallet.svg') }, + { 'sref': 'settings.profile', 'text': 'SETTINGS', 'icon': require('../../../assets/images/nav/settings.svg') } + ] + + return ProfileService.getUserProfile(vm.userHandle) + .then(function(data) { + vm.profile = data + vm.userHandleColor = ProfileService.getUserHandleColor(vm.profile) + }) + .catch(function(err) { + logger.error('Unable to get user profile data', err) + }) + } + function selectedGroup() { return _.get(NavService, 'selectedTopLevelItem', null) } diff --git a/app/services/introduction.service.js b/app/services/introduction.service.js index 6867e7b8d..1c9a4c7d7 100644 --- a/app/services/introduction.service.js +++ b/app/services/introduction.service.js @@ -40,6 +40,7 @@ import _ from 'lodash' var currentPage = $state.current.name var handleInParams = $stateParams.userHandle ? $stateParams.userHandle.toLowerCase() : null var userIntroJSStats = store.get(userId) + userIntroJSStats = userIntroJSStats ? userIntroJSStats : {} if (!userIntroJSStats.dashboardIntroComplete && _.includes(currentPage, 'dashboard')) { userIntroJSStats.dashboardIntroComplete = true diff --git a/app/services/tcAuth.service.js b/app/services/tcAuth.service.js index ed73bcf6e..e2133a4e5 100644 --- a/app/services/tcAuth.service.js +++ b/app/services/tcAuth.service.js @@ -23,11 +23,7 @@ import { getCurrentUser, logout as doLogout } from './userv3.service.js' } function isAuthenticated() { - logger.debug('AuthTokenService.getV2Token(): ' + AuthTokenService.getV2Token()) - logger.debug('AuthTokenService.getTCSSOToken(): ' + AuthTokenService.getTCSSOToken()) - logger.debug('getCurrentUser(): ' + getCurrentUser()) return !!getCurrentUser() && !!AuthTokenService.getV2Token() && !!AuthTokenService.getTCSSOToken() - } } diff --git a/app/topcoder.module.js b/app/topcoder.module.js index 3be9e2472..d8fdfee83 100644 --- a/app/topcoder.module.js +++ b/app/topcoder.module.js @@ -49,6 +49,9 @@ import { getCurrentUser, loadUser } from './services/userv3.service.js' // check AuthNAuth on change state start $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { logger.debug('checking auth for state: ' + toState.name + ' from state: ' + fromState.name) + if (!toState.data || !toState.data.authRequired) { + return true + } var currentUser = getCurrentUser() if (!currentUser) { event.preventDefault() @@ -66,12 +69,13 @@ import { getCurrentUser, loadUser } from './services/userv3.service.js' var next = $state.href(toState.name, toParams, {absolute: true}) var retUrl = next $window.location = CONSTANTS.ACCOUNTS_APP_URL + '?retUrl=' + encodeURIComponent(retUrl) - } else { + } else { // should never land in this block logger.debug('Going to state: ' + toState.name) $state.go(toState.name, toParams, {notify: false}) $urlRouter.sync() } }) + return false } })