From c1bc06b0e24ebd587707d423ec0aca97f99dee2d Mon Sep 17 00:00:00 2001
From: vikasrohit <vikas.agarwal@appirio.com>
Date: Wed, 15 Jun 2016 12:52:41 +0530
Subject: [PATCH 1/3] AS#100297043256582, Move all login to link of Members to
 accounts.topcoder.com

-- Fixed trailing slash problem with login route
-- Fixed infinite loop issue with member profile page's public access
---
 app/account/account.routes.js          |  2 +-
 app/layout/header/header.controller.js | 66 ++++++++++++++++----------
 app/services/tcAuth.service.js         |  4 --
 app/topcoder.module.js                 |  6 ++-
 4 files changed, 48 insertions(+), 30 deletions(-)

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..c1caeedcc 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 { getCurrentUser, 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/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
       }
     })
 

From 6927b415bf3bbc525571c5d50772c5cbfef65078 Mon Sep 17 00:00:00 2001
From: vikasrohit <vikas.agarwal@appirio.com>
Date: Wed, 15 Jun 2016 12:53:11 +0530
Subject: [PATCH 2/3] AS#100297043256582, Move all login to link of Members to
 accounts.topcoder.com

-- Fixed error in introduction service
---
 app/services/introduction.service.js | 1 +
 1 file changed, 1 insertion(+)

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

From 58c59989a00f4b91058f2a182d2f217a75bc1cd2 Mon Sep 17 00:00:00 2001
From: vikasrohit <vikas.agarwal@appirio.com>
Date: Wed, 15 Jun 2016 12:59:49 +0530
Subject: [PATCH 3/3] AS#100297043256582, Move all login to link of Members to
 accounts.topcoder.com

-- lint error fixed
---
 app/layout/header/header.controller.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/layout/header/header.controller.js b/app/layout/header/header.controller.js
index c1caeedcc..6a43ed9c8 100644
--- a/app/layout/header/header.controller.js
+++ b/app/layout/header/header.controller.js
@@ -1,6 +1,6 @@
 import angular from 'angular'
 import _ from 'lodash'
-import { getCurrentUser, loadUser } from '../../services/userv3.service.js'
+import { loadUser } from '../../services/userv3.service.js'
 
 (function() {
   'use strict'