diff --git a/src/main/java/com/commafeed/backend/services/UserService.java b/src/main/java/com/commafeed/backend/services/UserService.java index 48e3c7bb..58cf0551 100644 --- a/src/main/java/com/commafeed/backend/services/UserService.java +++ b/src/main/java/com/commafeed/backend/services/UserService.java @@ -6,10 +6,16 @@ import java.util.Collection; import javax.ejb.Stateless; import javax.inject.Inject; +import com.commafeed.backend.dao.FeedCategoryDAO; +import com.commafeed.backend.dao.FeedEntryStatusDAO; +import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.dao.UserDAO; +import com.commafeed.backend.dao.UserRoleDAO; +import com.commafeed.backend.dao.UserSettingsDAO; import com.commafeed.backend.model.User; import com.commafeed.backend.model.UserRole; import com.commafeed.backend.model.UserRole.Role; +import com.commafeed.backend.model.UserSettings.ReadingOrder; import com.google.common.base.Preconditions; @Stateless @@ -18,6 +24,21 @@ public class UserService { @Inject UserDAO userDAO; + @Inject + FeedEntryStatusDAO feedEntryStatusDAO; + + @Inject + FeedSubscriptionDAO feedSubscriptionDAO; + + @Inject + FeedCategoryDAO feedCategoryDAO; + + @Inject + UserSettingsDAO userSettingsDAO; + + @Inject + UserRoleDAO userRoleDAO; + @Inject PasswordEncryptionService encryptionService; @@ -63,4 +84,14 @@ public class UserService { userDAO.save(user); return user; } + + public void unregister(User user) { + feedEntryStatusDAO.delete(feedEntryStatusDAO.findAll(user, false, + ReadingOrder.desc, false)); + feedSubscriptionDAO.delete(feedSubscriptionDAO.findAll(user)); + feedCategoryDAO.delete(feedCategoryDAO.findAll(user)); + userSettingsDAO.delete(userSettingsDAO.findByUser(user)); + userRoleDAO.delete(userRoleDAO.findAll(user)); + userDAO.delete(user); + } } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java index fe5fb79d..a6ac4d75 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java @@ -18,7 +18,6 @@ import com.commafeed.backend.model.ApplicationSettings; import com.commafeed.backend.model.User; import com.commafeed.backend.model.UserRole; import com.commafeed.backend.model.UserRole.Role; -import com.commafeed.backend.model.UserSettings.ReadingOrder; import com.commafeed.frontend.SecurityCheck; import com.commafeed.frontend.model.UserModel; import com.commafeed.frontend.model.request.IDRequest; @@ -150,14 +149,7 @@ public class AdminREST extends AbstractResourceREST { return Response.status(Status.FORBIDDEN) .entity("You cannot delete the admin user.").build(); } - feedEntryStatusDAO.delete(feedEntryStatusDAO.findAll(user, false, - ReadingOrder.desc, false)); - feedSubscriptionDAO.delete(feedSubscriptionDAO.findAll(user)); - feedCategoryDAO.delete(feedCategoryDAO.findAll(user)); - userSettingsDAO.delete(userSettingsDAO.findByUser(user)); - userRoleDAO.delete(userRoleDAO.findAll(user)); - userDAO.delete(user); - + userService.unregister(user); return Response.ok().build(); } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java b/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java index 44b1eca4..8fe51e18 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/UserREST.java @@ -122,6 +122,18 @@ public class UserREST extends AbstractResourceREST { return Response.ok().build(); } + @Path("/profile/deleteAccount") + @POST + @ApiOperation(value = "Delete the user account") + public Response delete() { + if (StartupBean.USERNAME_ADMIN.equals(getUser().getName()) + || StartupBean.USERNAME_DEMO.equals(getUser().getName())) { + return Response.status(Status.UNAUTHORIZED).build(); + } + userService.unregister(getUser()); + return Response.ok().build(); + } + private String generateKey(User user) { byte[] key = encryptionService.getEncryptedPassword(UUID.randomUUID() .toString(), user.getSalt()); diff --git a/src/main/webapp/js/controllers.js b/src/main/webapp/js/controllers.js index 5e5f9695..bcf63769 100644 --- a/src/main/webapp/js/controllers.js +++ b/src/main/webapp/js/controllers.js @@ -809,8 +809,8 @@ function($scope, $location, SettingsService, AnalyticsService) { }; }]); -module.controller('ProfileCtrl', ['$scope', '$location', 'ProfileService', 'AnalyticsService', -function($scope, $location, ProfileService, AnalyticsService) { +module.controller('ProfileCtrl', ['$scope', '$location', '$dialog', 'ProfileService', 'AnalyticsService', +function($scope, $location, $dialog, ProfileService, AnalyticsService) { AnalyticsService.track(); @@ -832,7 +832,25 @@ function($scope, $location, ProfileService, AnalyticsService) { ProfileService.save(o, function() { $location.path('/'); }); + }; + $scope.deleteAccount = function() { + var title = 'Delete account'; + var msg = 'Delete your acount? There\'s no turning back!'; + var btns = [ { + result : 'cancel', + label : 'Cancel' + }, { + result : 'ok', + label : 'OK', + cssClass : 'btn-primary' + } ]; + $dialog.messageBox(title, msg, btns).open().then(function(result) { + if (result == 'ok') { + ProfileService.deleteAccount(); + window.location.href = 'logout'; + } + }); }; }]); diff --git a/src/main/webapp/js/services.js b/src/main/webapp/js/services.js index 9b0e7e66..3fe362a1 100644 --- a/src/main/webapp/js/services.js +++ b/src/main/webapp/js/services.js @@ -14,7 +14,9 @@ module.service('AnalyticsService', [ '$state', function($state) { module.factory('ProfileService', ['$resource', function($resource) { - return $resource('rest/user/profile/'); + var res = $resource('rest/user/profile/'); + res.deleteAccount = $resource('rest/user/profile/deleteAccount').save; + return res; }]); module.factory('SettingsService', ['$resource', function($resource) { diff --git a/src/main/webapp/templates/profile.html b/src/main/webapp/templates/profile.html index 7f6861fc..16670a89 100644 --- a/src/main/webapp/templates/profile.html +++ b/src/main/webapp/templates/profile.html @@ -50,6 +50,7 @@