|
1 | 1 | import angular from 'angular' |
| 2 | +import { getCurrentUser, loadUser } from '../../services/userv3.service.js' |
2 | 3 |
|
3 | 4 | (function() { |
4 | 5 | 'use strict' |
5 | 6 |
|
6 | 7 | angular.module('tc.account').controller('LoginController', LoginController) |
7 | 8 |
|
8 | | - LoginController.$inject = ['logger', '$state', '$stateParams', '$location', '$scope', 'TcAuthService', 'UserService', 'Helpers', 'CONSTANTS'] |
| 9 | + LoginController.$inject = ['logger', '$state', '$stateParams', '$window', '$rootScope', 'Helpers', 'CONSTANTS'] |
9 | 10 |
|
10 | | - function LoginController(logger, $state, $stateParams, $location, $scope, TcAuthService, UserService, Helpers, CONSTANTS) { |
| 11 | + function LoginController(logger, $state, $stateParams, $window, $rootScope, Helpers, CONSTANTS) { |
11 | 12 | var vm = this |
12 | 13 | vm.$stateParams = $stateParams |
13 | | - vm.passwordReset = false |
14 | | - vm.loginErrors = { |
15 | | - USERNAME_NONEXISTANT: false, |
16 | | - WRONG_PASSWORD: false, |
17 | | - SOCIAL_LOGIN_ERROR: false |
18 | | - } |
19 | | - |
20 | | - vm.login = login |
21 | | - vm.socialLogin = socialLogin |
22 | | - |
23 | | - // reference for main vm |
24 | | - var mainVm = $scope.$parent.main |
25 | 14 |
|
26 | 15 | activate() |
27 | 16 |
|
28 | | - function activate() {} |
29 | | - |
30 | | - function login() { |
31 | | - vm.loginErrors.USERNAME_NONEXISTANT = false |
32 | | - vm.loginErrors.WRONG_PASSWORD = false |
33 | | - |
34 | | - // TODO ideally it should be done by dedicated directive to handle all outside clicks |
35 | | - mainVm.menuVisible = false |
36 | | - |
37 | | - if (Helpers.isEmail(vm.username)) { |
38 | | - // the user is loggin in using email |
39 | | - vm.emailOrUsername = 'email' |
40 | | - |
41 | | - // ensure email exists |
42 | | - // uses same validity check as registration |
43 | | - // valid => email isn't already used by someone |
44 | | - UserService.validateUserEmail(vm.username).then(function(data) { |
45 | | - if (data.valid) { |
46 | | - // email doesn't exist |
47 | | - vm.loginErrors.USERNAME_NONEXISTANT = true |
48 | | - } else { |
49 | | - _doLogin(vm.username, vm.currentPassword) |
50 | | - } |
51 | | - }).catch(function(resp) { |
52 | | - // TODO handle error |
53 | | - // assume email exists, login would in any case if it didn't |
54 | | - vm.loginErrors.USERNAME_NONEXISTANT = false |
55 | | - _doLogin(vm.username, vm.currentPassword) |
56 | | - }) |
57 | | - } else { |
58 | | - // the user is logging in using a username |
59 | | - vm.emailOrUsername = 'username' |
60 | | - |
61 | | - // username - make sure it exists |
62 | | - UserService.validateUserHandle(vm.username).then(function(data) { |
63 | | - if (data.valid) { |
64 | | - // username doesn't exist |
65 | | - vm.loginErrors.USERNAME_NONEXISTANT = true |
66 | | - } else { |
67 | | - _doLogin(vm.username, vm.currentPassword) |
68 | | - } |
69 | | - }).catch(function(resp) { |
70 | | - // TODO handle error |
71 | | - // assume email exists, login would in any case if it didn't |
72 | | - _doLogin(vm.username, vm.currentPassword) |
73 | | - }) |
74 | | - } |
75 | | - } |
76 | | - |
77 | | - function _doLogin(usernameOrEmail, password) { |
78 | | - return TcAuthService.login(usernameOrEmail, password) |
79 | | - .then(function(data) { |
80 | | - // setup login event for analytics tracking |
81 | | - Helpers.setupLoginEventMetrics(usernameOrEmail) |
82 | | - return Helpers.redirectPostLogin($stateParams.next) |
83 | | - |
84 | | - }) |
85 | | - .catch(function(err) { |
86 | | - logger.warning(err) |
87 | | - |
88 | | - switch (err.status) { |
89 | | - case 'ACCOUNT_INACTIVE': |
90 | | - $state.go('registeredSuccessfully') |
91 | | - // user should already be redirected |
92 | | - break |
93 | | - case 'UNKNOWN_ERROR': |
94 | | - default: |
95 | | - vm.loginErrors.WRONG_PASSWORD = true |
96 | | - vm.password = '' |
97 | | - logger.error('Error logging in: ', err) |
98 | | - } |
| 17 | + function activate() { |
| 18 | + var currentUser = getCurrentUser() |
| 19 | + logger.debug('checking for logged in user...' + currentUser) |
| 20 | + if (!currentUser) { |
| 21 | + logger.debug('loading user...') |
| 22 | + var next = $stateParams.next ? $stateParams.next : 'dashboard' |
| 23 | + loadUser().then(function(token) { |
| 24 | + logger.debug('successful login with token ' + token) |
| 25 | + $rootScope.$broadcast(CONSTANTS.EVENT_USER_LOGGED_IN) |
| 26 | + logger.debug('reidrecting to ' + next) |
| 27 | + Helpers.redirectPostLogin(next) |
| 28 | + }, function() { |
| 29 | + logger.debug('State requires authentication, and user is not logged in, redirecting') |
| 30 | + // setup redirect for post login |
| 31 | + var retUrl = $state.href(next, {}, {absolute: true}) |
| 32 | + logger.debug('redirecting to accounts app for login...') |
| 33 | + $window.location = CONSTANTS.ACCOUNTS_APP_URL + '?retUrl=' + encodeURIComponent(retUrl) |
99 | 34 | }) |
100 | | - } |
101 | | - |
102 | | - function socialLogin(platform) { |
103 | | - // we need to pass on the 'next' param if we have one |
104 | | - var params = {} |
105 | | - if ($stateParams.next) { |
106 | | - params = {next: $stateParams.next} |
107 | 35 | } |
108 | | - |
109 | | - // redirect back to login |
110 | | - var callbackUrl = $state.href('login', params, {absolute: true}) |
111 | | - |
112 | | - TcAuthService.socialLogin(platform, callbackUrl) |
113 | | - .then(function() { |
114 | | - logger.debug('logged in') |
115 | | - return Helpers.redirectPostLogin($stateParams.next) |
116 | | - }) |
117 | | - .catch(function(err) { |
118 | | - /*eslint no-fallthrough:0*/ |
119 | | - switch (err.status) { |
120 | | - case 'ACCOUNT_INACTIVE': |
121 | | - window.location.href = 'https://www.' + CONSTANTS.domain + '/account-inactive/' |
122 | | - case 'USER_NOT_REGISTERED': |
123 | | - default: |
124 | | - vm.socialLoginError = 401 |
125 | | - vm.loginErrors.SOCIAL_LOGIN_ERROR = true |
126 | | - logger.error('Error logging in with social account', err) |
127 | | - } |
128 | | - }) |
129 | 36 | } |
130 | 37 | } |
131 | 38 |
|
|
0 commit comments