(function () { 'use strict'; angular .module('users') .controller('AuthenticationController', AuthenticationController); AuthenticationController.$inject = ['$scope', '$state', 'UsersService', '$location', '$window', 'Authentication', 'PasswordValidator', 'Notification', 'MeanTorrentConfig', 'getStorageLangService', '$rootScope', '$stateParams', 'InvitationsService']; function AuthenticationController($scope, $state, UsersService, $location, $window, Authentication, PasswordValidator, Notification, MeanTorrentConfig, getStorageLangService, $rootScope, $stateParams, InvitationsService) { var vm = this; vm.lang = getStorageLangService.getLang(); vm.signConfig = MeanTorrentConfig.meanTorrentConfig.sign; vm.authentication = Authentication; vm.getPopoverMsg = PasswordValidator.getPopoverMsg; vm.signup = signup; vm.signin = signin; vm.callOauthProvider = callOauthProvider; vm.usernameRegex = /^(?=[\w.-]+$)(?!.*[._-]{2})(?!\.)(?!.*\.$).{3,34}$/; vm.credentials = {}; // Get an eventual error defined in the URL query string: if ($location.search().err) { Notification.error({message: $location.search().err}); } // If user is signed in then redirect back home if (vm.authentication.user) { $location.path('/'); } /** * verifyToken */ vm.verifyToken = function () { if ($stateParams.token) { InvitationsService.verifyToken({ token: $stateParams.token }, function (res) { vm.validToken = res; vm.credentials.email = res.to_email; vm.emailReadonly = true; }, function (res) { vm.validToken = undefined; }); } }; /** * signup * @param isValid * @returns {boolean} */ function signup(isValid) { if (!isValid) { $scope.$broadcast('show-errors-check-validity', 'vm.userForm'); return false; } if ($stateParams.token) { vm.credentials.inviteToken = $stateParams.token; } UsersService.userSignup(vm.credentials) .then(onUserSignupSuccess) .catch(onUserSignupError); } /** * signin * @param isValid * @returns {boolean} */ function signin(isValid) { if (!isValid) { $scope.$broadcast('show-errors-check-validity', 'vm.userForm'); return false; } UsersService.userSignin(vm.credentials) .then(onUserSigninSuccess) .catch(onUserSigninError); } // OAuth provider request /** * callOauthProvider * @param url */ function callOauthProvider(url) { if ($state.previous && $state.previous.href) { url += '?redirect_to=' + encodeURIComponent($state.previous.href); } // Effectively call OAuth authentication route: $window.location.href = url; } // Authentication Callbacks /** * onUserSignupSuccess * @param response */ function onUserSignupSuccess(response) { // If successful we assign the response to the global user model vm.authentication.user = response; $rootScope.$broadcast('auth-user-changed'); $rootScope.$broadcast('user-invitations-changed'); Notification.success({message: ' Signup successful!'}); // And redirect to the previous or home page $state.go($state.previous.state.name || 'home', $state.previous.params); } /** * onUserSignupError * @param response */ function onUserSignupError(response) { Notification.error({message: response.data.message, title: ' Signup Error!', delay: 6000}); } /** * onUserSigninSuccess * @param response */ function onUserSigninSuccess(response) { // If successful we assign the response to the global user model vm.authentication.user = response; $rootScope.$broadcast('auth-user-changed'); $rootScope.$broadcast('user-invitations-changed'); Notification.info({message: 'Welcome ' + response.firstName}); // And redirect to the previous or home page $state.go($state.previous.state.name || 'home', $state.previous.params); } /** * onUserSigninError * @param response */ function onUserSigninError(response) { Notification.error({message: response.data.message, title: ' Signin Error!', delay: 6000}); } /** * markLinkClick * @param evt * @param citem */ vm.markLinkClick = function (evt, citem) { if (evt.originalEvent.srcElement.attributes.href.nodeValue === '/vip') { evt.preventDefault(); $state.go('vip'); } }; } }());