From 6739166b04f09d08466aee6ca3f4be801ed75d21 Mon Sep 17 00:00:00 2001 From: Athou Date: Sat, 13 Apr 2013 12:19:59 +0200 Subject: [PATCH] profile page --- .../model/ProfileModificationRequest.java | 24 +++++++++++++ .../commafeed/frontend/model/UserModel.java | 9 +++++ .../frontend/rest/resources/SessionREST.java | 20 +++++++++++ src/main/webapp/js/controllers.js | 24 +++++++++++++ src/main/webapp/js/main.js | 6 ++++ src/main/webapp/js/services.js | 16 ++++++++- src/main/webapp/templates/_toolbar.html | 3 +- src/main/webapp/templates/profile.html | 36 +++++++++++++++++++ 8 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/commafeed/frontend/model/ProfileModificationRequest.java create mode 100644 src/main/webapp/templates/profile.html diff --git a/src/main/java/com/commafeed/frontend/model/ProfileModificationRequest.java b/src/main/java/com/commafeed/frontend/model/ProfileModificationRequest.java new file mode 100644 index 00000000..3ef5788d --- /dev/null +++ b/src/main/java/com/commafeed/frontend/model/ProfileModificationRequest.java @@ -0,0 +1,24 @@ +package com.commafeed.frontend.model; + +public class ProfileModificationRequest { + + private String email; + private String password; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + +} diff --git a/src/main/java/com/commafeed/frontend/model/UserModel.java b/src/main/java/com/commafeed/frontend/model/UserModel.java index 6070737e..27f044a1 100644 --- a/src/main/java/com/commafeed/frontend/model/UserModel.java +++ b/src/main/java/com/commafeed/frontend/model/UserModel.java @@ -7,6 +7,7 @@ public class UserModel implements Serializable { private Long id; private String name; + private String email; private String password; private boolean enabled; private boolean admin; @@ -51,4 +52,12 @@ public class UserModel implements Serializable { this.password = password; } + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/SessionREST.java b/src/main/java/com/commafeed/frontend/rest/resources/SessionREST.java index 3bd2e7d4..1d8d1921 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/SessionREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/SessionREST.java @@ -1,11 +1,16 @@ package com.commafeed.frontend.rest.resources; import javax.ws.rs.GET; +import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.core.Response; + +import org.apache.commons.lang.StringUtils; import com.commafeed.backend.model.User; import com.commafeed.backend.model.UserRole; import com.commafeed.backend.model.UserRole.Role; +import com.commafeed.frontend.model.ProfileModificationRequest; import com.commafeed.frontend.model.UserModel; @Path("session") @@ -18,6 +23,7 @@ public class SessionREST extends AbstractREST { UserModel userModel = new UserModel(); userModel.setId(user.getId()); userModel.setName(user.getName()); + userModel.setEmail(user.getEmail()); userModel.setEnabled(!user.isDisabled()); for (UserRole role : userRoleDAO.findAll(user)) { if (role.getRole() == Role.ADMIN) { @@ -26,4 +32,18 @@ public class SessionREST extends AbstractREST { } return userModel; } + + @Path("save") + @POST + public Response save(ProfileModificationRequest request) { + User user = getUser(); + user.setEmail(request.getEmail()); + if (StringUtils.isNotBlank(request.getPassword())) { + byte[] password = encryptionService.getEncryptedPassword( + request.getPassword(), user.getSalt()); + user.setPassword(password); + } + userDAO.update(user); + return Response.ok().build(); + } } diff --git a/src/main/webapp/js/controllers.js b/src/main/webapp/js/controllers.js index 9f60fc56..a8aa3261 100644 --- a/src/main/webapp/js/controllers.js +++ b/src/main/webapp/js/controllers.js @@ -261,6 +261,9 @@ module.controller('ToolbarCtrl', $scope.toSettings = function() { $location.path('settings'); }; + $scope.toProfile = function() { + $location.path('profile'); + }; }); module.controller('FeedListCtrl', function($scope, $stateParams, $http, $route, @@ -556,6 +559,27 @@ module.controller('SettingsCtrl', function($scope, $location, SettingsService) { }; }); +module.controller('ProfileCtrl', function($scope, $location, SessionService) { + $scope.user = SessionService.get(); + + $scope.cancel = function() { + $location.path('/'); + }; + $scope.save = function() { + if (!$scope.profileForm.$valid) { + return; + } + var o = { + email : $scope.user.email + }; + if ($scope.user.password == $scope.password_c) { + o.password = $scope.user.password; + } + SessionService.save(o); + $location.path('/'); + }; +}); + module.controller('ManageSettingsCtrl', function($scope, $location, $state, AdminSettingsService) { diff --git a/src/main/webapp/js/main.js b/src/main/webapp/js/main.js index 218ff8d5..a0bc2167 100644 --- a/src/main/webapp/js/main.js +++ b/src/main/webapp/js/main.js @@ -50,6 +50,12 @@ app.config(function($routeProvider, $stateProvider, $urlRouterProvider) { templateUrl : 'templates/settings.html', controller : 'SettingsCtrl' }); + + $stateProvider.state('profile', { + url : '/profile', + templateUrl : 'templates/profile.html', + controller : 'ProfileCtrl' + }); $urlRouterProvider.when('/', '/feeds/view/category/all'); $urlRouterProvider.when('/admin', '/admin/settings'); diff --git a/src/main/webapp/js/services.js b/src/main/webapp/js/services.js index a06ddf70..ad4afbdd 100644 --- a/src/main/webapp/js/services.js +++ b/src/main/webapp/js/services.js @@ -1,7 +1,21 @@ var module = angular.module('commafeed.services', [ 'ngResource' ]); module.factory('SessionService', function($resource) { - return $resource('rest/session/get'); + var actions = { + get : { + method : 'GET', + params : { + _method : 'get' + } + }, + save : { + method : 'POST', + params : { + _method : 'save' + } + } + }; + return $resource('rest/session/:_method', {}, actions); }); module.factory('SubscriptionService', function($resource, $http) { diff --git a/src/main/webapp/templates/_toolbar.html b/src/main/webapp/templates/_toolbar.html index c8ab74a9..793904a0 100644 --- a/src/main/webapp/templates/_toolbar.html +++ b/src/main/webapp/templates/_toolbar.html @@ -17,9 +17,10 @@ {{session.name}} diff --git a/src/main/webapp/templates/profile.html b/src/main/webapp/templates/profile.html new file mode 100644 index 00000000..c780dae1 --- /dev/null +++ b/src/main/webapp/templates/profile.html @@ -0,0 +1,36 @@ +
+ + {{user}} + {{profileForm.$valid}} +
+
+ +
+ +
+
+
+ +
+ + Minimum 6 characters +
+
+
+ +
+ + Passwords do not match +
+
+ +
+ + +
+
+
\ No newline at end of file