import App from '../base' App.controller( 'AccountSettingsController', function ( $scope, $http, $modal, // eslint-disable-next-line camelcase eventTracking, UserAffiliationsDataService ) { $scope.subscribed = true $scope.unsubscribe = function () { $scope.unsubscribing = true return $http({ method: 'DELETE', url: '/user/newsletter/unsubscribe', headers: { 'X-CSRF-Token': window.csrfToken, }, }) .then(function () { $scope.unsubscribing = false $scope.subscribed = false }) .catch(() => ($scope.unsubscribing = true)) } $scope.deleteAccount = function () { $modal.open({ templateUrl: 'deleteAccountModalTemplate', controller: 'DeleteAccountModalController', resolve: { userDefaultEmail() { return UserAffiliationsDataService.getUserDefaultEmail() .then( defaultEmailDetails => (defaultEmailDetails != null ? defaultEmailDetails.email : undefined) || null ) .catch(() => null) }, }, }) } $scope.upgradeIntegration = service => eventTracking.send('subscription-funnel', 'settings-page', service) } ) App.controller( 'DeleteAccountModalController', function ($scope, $modalInstance, $timeout, $http, userDefaultEmail) { $scope.state = { isValid: false, deleteText: '', password: '', confirmSharelatexDelete: false, inflight: false, error: null, } $scope.userDefaultEmail = userDefaultEmail $modalInstance.opened.then(() => $timeout(() => $scope.$broadcast('open'), 700) ) $scope.checkValidation = () => ($scope.state.isValid = userDefaultEmail != null && $scope.state.deleteText.toLowerCase() === userDefaultEmail.toLowerCase() && $scope.state.password.length > 0 && $scope.state.confirmSharelatexDelete) $scope.delete = function () { $scope.state.inflight = true $scope.state.error = null return $http({ method: 'POST', url: '/user/delete', headers: { 'X-CSRF-Token': window.csrfToken, 'Content-Type': 'application/json', }, data: { password: $scope.state.password, }, disableAutoLoginRedirect: true, // we want to handle errors ourselves }) .then(function () { $modalInstance.close() $scope.state.inflight = false $scope.state.error = null setTimeout(() => (window.location = '/login'), 1000) }) .catch(function (response) { const { data, status } = response $scope.state.inflight = false if (status === 403) { $scope.state.error = { code: 'InvalidCredentialsError' } } else if (data.error) { $scope.state.error = { code: data.error } } else { $scope.state.error = { code: 'UserDeletionError' } } }) } $scope.cancel = () => $modalInstance.dismiss('cancel') } )