This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository coselmar. See http://git.codelutin.com/coselmar.git commit cf69dca56579074d6e26eb5e33c1e02d58217018 Author: Yannick Martel <martel@©odelutin.com> Date: Fri Nov 21 16:22:10 2014 +0100 Add two default users in applications Fix mail support on user account creation --- .../src/main/xmi/coselmar-model.zargo | Bin 6024 -> 6029 bytes .../coselmar/beans/UserAccountCreatedMail.java | 4 +- .../coselmar/converter/BeanEntityConverter.java | 6 +-- .../services/CoselmarRestRequestContext.java | 4 +- .../CoselmarServicesApplicationContext.java | 8 ++++ .../services/CoselmarSimpleServiceSupport.java | 40 ++++++++++++++++ .../services/CoselmarWebServiceSupport.java | 6 +-- .../services/v1/InitialisationService.java | 52 +++++++++++++++++++++ .../coselmar/services/v1/UsersWebService.java | 27 ++++++----- .../i18n/coselmar-services_en_GB.properties | 1 + .../i18n/coselmar-services_fr_FR.properties | 1 + .../resources/mail/UserAccountCreatedMail.mustache | 2 +- .../mail/UserAccountCreatedMail_fr.mustache | 2 +- 13 files changed, 127 insertions(+), 26 deletions(-) diff --git a/coselmar-persistence/src/main/xmi/coselmar-model.zargo b/coselmar-persistence/src/main/xmi/coselmar-model.zargo index bcd73e2..11e04de 100644 Binary files a/coselmar-persistence/src/main/xmi/coselmar-model.zargo and b/coselmar-persistence/src/main/xmi/coselmar-model.zargo differ diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/UserAccountCreatedMail.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/UserAccountCreatedMail.java index 4c82196..dab6969 100644 --- a/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/UserAccountCreatedMail.java +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/UserAccountCreatedMail.java @@ -40,9 +40,9 @@ public class UserAccountCreatedMail { public String getSubject() { String fullname = Strings.nullToEmpty(user.getFirstName()) + " " + Strings.nullToEmpty(user.getName()); if (StringUtils.isBlank(fullname)) { - return I18n.l(locale, "coselmar.service.mail.UserAccountCreatedEmail.subject", user.getMail()); + return I18n.l(locale, "coselmar.service.mail.UserAccountCreatedMail.subject", user.getMail()); } - return I18n.l(locale, "coselmar.service.mail.UserAccountCreatedEmail.subject", fullname); + return I18n.l(locale, "coselmar.service.mail.UserAccountCreatedMail.subject", fullname); } @Override diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/converter/BeanEntityConverter.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/converter/BeanEntityConverter.java index 5475788..f024037 100644 --- a/coselmar-rest/src/main/java/fr/ifremer/coselmar/converter/BeanEntityConverter.java +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/converter/BeanEntityConverter.java @@ -28,8 +28,8 @@ import java.util.Date; import fr.ifremer.coselmar.beans.DocumentBean; import fr.ifremer.coselmar.beans.UserBean; +import fr.ifremer.coselmar.persistence.entity.CoselmarUser; import fr.ifremer.coselmar.persistence.entity.Document; -import fr.ifremer.coselmar.persistence.entity.User; /** * @author ymartel <martel@codelutin.com> @@ -48,8 +48,8 @@ public class BeanEntityConverter { document.getMimeType()); } - public static UserBean toBean(User user) { - String userLightId = user.getTopiaId().replace(User.class.getCanonicalName() + "_", ""); + public static UserBean toBean(CoselmarUser user) { + String userLightId = user.getTopiaId().replace(CoselmarUser.class.getCanonicalName() + "_", ""); return new UserBean(userLightId, user.getFirstname(), user.getName(), diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarRestRequestContext.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarRestRequestContext.java index b00fd11..a6eab47 100644 --- a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarRestRequestContext.java +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarRestRequestContext.java @@ -41,8 +41,8 @@ public class CoselmarRestRequestContext { } public static void setRequestContext(HttpContext httpContext, - CoselmarRestRequestContext serviceContext) { - httpContext.getRequest().setAttribute(REQUEST_COSELMAR_REQUEST_CONTEXT, serviceContext); + CoselmarRestRequestContext requestContext) { + httpContext.getRequest().setAttribute(REQUEST_COSELMAR_REQUEST_CONTEXT, requestContext); } protected CoselmarServicesContext servicesContext; diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarServicesApplicationContext.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarServicesApplicationContext.java index ab7e88d..3ebc006 100644 --- a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarServicesApplicationContext.java +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarServicesApplicationContext.java @@ -36,6 +36,7 @@ import fr.ifremer.coselmar.persistence.CoselmarPersistenceContext; import fr.ifremer.coselmar.persistence.CoselmarTopiaApplicationContext; import fr.ifremer.coselmar.persistence.CoselmarTopiaPersistenceContext; import fr.ifremer.coselmar.services.config.CoselmarServicesConfig; +import fr.ifremer.coselmar.services.v1.InitialisationService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.log4j.LogManager; @@ -218,6 +219,13 @@ public class CoselmarServicesApplicationContext implements CoselmarApplicationCo I18n.init(initializer, Locale.FRANCE); + {//Init some users + CoselmarTopiaPersistenceContext persistenceContext = newPersistenceContext(); + CoselmarServicesContext serviceContext = newServiceContext(persistenceContext, Locale.FRANCE); + serviceContext.newService(InitialisationService.class).createDefaultUsers(); + persistenceContext.close(); + } + started.set(true); } diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarSimpleServiceSupport.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarSimpleServiceSupport.java new file mode 100644 index 0000000..74edaef --- /dev/null +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarSimpleServiceSupport.java @@ -0,0 +1,40 @@ +package fr.ifremer.coselmar.services; + +import fr.ifremer.coselmar.persistence.CoselmarPersistenceContext; +import fr.ifremer.coselmar.persistence.entity.CoselmarUserTopiaDao; +import fr.ifremer.coselmar.services.config.CoselmarServicesConfig; + +/** + * @author ymartel <martel@codelutin.com> + */ +public class CoselmarSimpleServiceSupport implements CoselmarService { + + protected CoselmarServicesContext servicesContext; + + @Override + public void setServicesContext(CoselmarServicesContext servicesContext) { + this.servicesContext = servicesContext; + } + + protected CoselmarPersistenceContext getPersistenceContext() { + return servicesContext.getPersistenceContext(); + } + + protected CoselmarServicesConfig getCoselmarServicesConfig() { + return servicesContext.getCoselmarServicesConfig(); + } + + protected CoselmarUserTopiaDao getCoselmarUserDao() { + return getPersistenceContext().getCoselmarUserDao(); + } + + public void commit() { + getPersistenceContext().commit(); + } + + public void rollback() { + getPersistenceContext().rollback(); + } + + +} diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarWebServiceSupport.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarWebServiceSupport.java index 386619f..8e24e97 100644 --- a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarWebServiceSupport.java +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/CoselmarWebServiceSupport.java @@ -28,8 +28,8 @@ import java.util.Date; import java.util.Locale; import fr.ifremer.coselmar.persistence.CoselmarPersistenceContext; +import fr.ifremer.coselmar.persistence.entity.CoselmarUserTopiaDao; import fr.ifremer.coselmar.persistence.entity.DocumentTopiaDao; -import fr.ifremer.coselmar.persistence.entity.UserTopiaDao; import fr.ifremer.coselmar.services.config.CoselmarServicesConfig; import fr.ifremer.coselmar.services.v1.DocumentsWebService; import org.debux.webmotion.server.WebMotionController; @@ -94,8 +94,8 @@ public abstract class CoselmarWebServiceSupport extends WebMotionController impl return getPersistenceContext().getDocumentDao(); } - protected UserTopiaDao getUserDao() { - return getPersistenceContext().getUserDao(); + protected CoselmarUserTopiaDao getCoselmarUserDao() { + return getPersistenceContext().getCoselmarUserDao(); } public void commit() { diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/InitialisationService.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/InitialisationService.java new file mode 100644 index 0000000..98b9834 --- /dev/null +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/InitialisationService.java @@ -0,0 +1,52 @@ +package fr.ifremer.coselmar.services.v1; + +import fr.ifremer.coselmar.persistence.entity.CoselmarUser; +import fr.ifremer.coselmar.persistence.entity.CoselmarUserRole; +import fr.ifremer.coselmar.services.CoselmarSimpleServiceSupport; + +/** + * @author ymartel <martel@codelutin.com> + */ +public class InitialisationService extends CoselmarSimpleServiceSupport { + + /** + * Create Two default users for the application <strong>if there is no users in application</strong>. + * So, this operation is called in {@link fr.ifremer.coselmar.services.CoselmarApplicationContext#init()}, when application is starting. + * + */ + public void createDefaultUsers() { + + if (getCoselmarUserDao().count() == 0) { + + // set an admin user + CoselmarUser admin = getCoselmarUserDao().create(); + admin.setFirstname("Admin"); + admin.setMail("admin@temporary.coselmar"); + admin.setOrganization("Coselmar"); + admin.setRole(CoselmarUserRole.ADMIN); + + String salt = servicesContext.generateSalt(); + String encodedPassword = servicesContext.encodePassword(salt, "manager1234"); + admin.setPassword(encodedPassword); + admin.setSalt(salt); + + commit(); + + // Set a lambda expert + CoselmarUser user = getCoselmarUserDao().create(); + user.setFirstname("Lambda"); + user.setName("Expert"); + user.setMail("lambda.expert@temporary.coselmar"); + user.setRole(CoselmarUserRole.EXPERT); + + String lambdaSalt = servicesContext.generateSalt(); + String lambdaPassword = servicesContext.encodePassword(lambdaSalt, "manager1234"); + admin.setPassword(lambdaPassword); + admin.setSalt(lambdaSalt); + + commit(); + + } + } + +} diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/UsersWebService.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/UsersWebService.java index 433c7c4..6e99a34 100644 --- a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/UsersWebService.java +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/UsersWebService.java @@ -17,8 +17,8 @@ import com.google.common.base.Preconditions; import fr.ifremer.coselmar.beans.UserAccountCreatedMail; import fr.ifremer.coselmar.beans.UserBean; import fr.ifremer.coselmar.converter.BeanEntityConverter; -import fr.ifremer.coselmar.persistence.entity.User; -import fr.ifremer.coselmar.persistence.entity.UserRole; +import fr.ifremer.coselmar.persistence.entity.CoselmarUser; +import fr.ifremer.coselmar.persistence.entity.CoselmarUserRole; import fr.ifremer.coselmar.services.CoselmarTechnicalException; import fr.ifremer.coselmar.services.CoselmarWebServiceSupport; import fr.ifremer.coselmar.services.config.CoselmarServicesConfig; @@ -43,25 +43,25 @@ public class UsersWebService extends CoselmarWebServiceSupport { public UserBean getUser(String userId) { // reconstitute full id - String fullId = User.class.getCanonicalName() + "_" + userId; + String fullId = CoselmarUser.class.getCanonicalName() + "_" + userId; - User user = getUserDao().forTopiaIdEquals(fullId).findUnique(); + CoselmarUser user = getCoselmarUserDao().forTopiaIdEquals(fullId).findUnique(); UserBean userBean = BeanEntityConverter.toBean(user); return userBean; } public List<UserBean> getUsers(String searchKey) { - List<User> userList; + List<CoselmarUser> userList; if (StringUtils.isNotBlank(searchKey)) { //TODO find on all parts ? userList = new ArrayList<>(); } else { - userList = getUserDao().findAll(); + userList = getCoselmarUserDao().findAll(); } List<UserBean> result = new ArrayList<>(userList.size()); - for (User user : userList) { + for (CoselmarUser user : userList) { UserBean userBean = BeanEntityConverter.toBean(user); result.add(userBean); } @@ -72,13 +72,13 @@ public class UsersWebService extends CoselmarWebServiceSupport { public void addUser(UserBean user) { Preconditions.checkNotNull(user); - User userEntity = getUserDao().create(); + CoselmarUser userEntity = getCoselmarUserDao().create(); userEntity.setFirstname(user.getFirstName()); userEntity.setName(user.getName()); String mail = getCleanMail(user.getMail()); userEntity.setMail(mail); - userEntity.setRole(UserRole.valueOf(user.getRole().toUpperCase())); + userEntity.setRole(CoselmarUserRole.valueOf(user.getRole().toUpperCase())); userEntity.setQualification(user.getQualification()); String password = user.getPassword(); @@ -111,7 +111,7 @@ public class UsersWebService extends CoselmarWebServiceSupport { Preconditions.checkNotNull(mail); Preconditions.checkNotNull(password); - User user = getUserDao().forMailEquals(getCleanMail(mail)).findAny(); + CoselmarUser user = getCoselmarUserDao().forMailEquals(getCleanMail(mail)).findAny(); String salt = user.getSalt(); String encodedPassword = getServicesContext().encodePassword(salt, password); @@ -141,15 +141,14 @@ public class UsersWebService extends CoselmarWebServiceSupport { public void deleteUser(String userId) { // reconstitute full id - String fullId = User.class.getCanonicalName() + "_" + userId; + String fullId = CoselmarUser.class.getCanonicalName() + "_" + userId; - User user = getUserDao().forTopiaIdEquals(fullId).findUnique(); - getUserDao().delete(user); + CoselmarUser user = getCoselmarUserDao().forTopiaIdEquals(fullId).findUnique(); + getCoselmarUserDao().delete(user); commit(); } - ///////////////////////////////////////////// /////////////// MAIL PART /////////////// ///////////////////////////////////////////// diff --git a/coselmar-rest/src/main/resources/i18n/coselmar-services_en_GB.properties b/coselmar-rest/src/main/resources/i18n/coselmar-services_en_GB.properties new file mode 100644 index 0000000..4fbad7d --- /dev/null +++ b/coselmar-rest/src/main/resources/i18n/coselmar-services_en_GB.properties @@ -0,0 +1 @@ +coselmar.service.mail.UserAccountCreatedMail.subject=[Coselmar] Account creation %s \ No newline at end of file diff --git a/coselmar-rest/src/main/resources/i18n/coselmar-services_fr_FR.properties b/coselmar-rest/src/main/resources/i18n/coselmar-services_fr_FR.properties new file mode 100644 index 0000000..a445de0 --- /dev/null +++ b/coselmar-rest/src/main/resources/i18n/coselmar-services_fr_FR.properties @@ -0,0 +1 @@ +coselmar.service.mail.UserAccountCreatedMail.subject=[Coselmar] Création du compte %s \ No newline at end of file diff --git a/coselmar-rest/src/main/resources/mail/UserAccountCreatedMail.mustache b/coselmar-rest/src/main/resources/mail/UserAccountCreatedMail.mustache index 10265c0..cc66848 100644 --- a/coselmar-rest/src/main/resources/mail/UserAccountCreatedMail.mustache +++ b/coselmar-rest/src/main/resources/mail/UserAccountCreatedMail.mustache @@ -2,7 +2,7 @@ Welcome {{user.name}}, An account has been created for you on the web application Coselmar. -Email: {{user.email}} +Email: {{user.mail}} Password: {{password}} You can now access to your account by logging on the <a href="{{coselmarUrl}}">Coselmar</a> website. \ No newline at end of file diff --git a/coselmar-rest/src/main/resources/mail/UserAccountCreatedMail_fr.mustache b/coselmar-rest/src/main/resources/mail/UserAccountCreatedMail_fr.mustache index ec531e4..c573235 100644 --- a/coselmar-rest/src/main/resources/mail/UserAccountCreatedMail_fr.mustache +++ b/coselmar-rest/src/main/resources/mail/UserAccountCreatedMail_fr.mustache @@ -2,7 +2,7 @@ Bonjour {{user.name}}, Un compte vous a été ouvert sur l'application Coselmar. -Courriel: {{user.email}} +Courriel: {{user.mail}} Password: {{password}} Vous pouvez dès à présent accéder à l'application en vous connectant sur <a href="{{coselmarUrl}}">Coselmar</a>. \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.