From 3e1e5e12abe90018650052d1a4cfacf7f79c42df Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Sat, 10 Dec 2022 15:23:31 +0100 Subject: [PATCH] register from dashboard (background functionality) --- .../registration/RegistrationController.java | 2 +- .../registration/RegistrationGateway.java | 88 +++++++++++-------- .../registration/RegistrationService.java | 6 +- .../validate/UnusedUsernameValidator.java | 2 +- .../templates/registration/registration.html | 4 +- 5 files changed, 60 insertions(+), 42 deletions(-) diff --git a/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationController.java b/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationController.java index 373c932..b3faca5 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationController.java +++ b/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationController.java @@ -48,7 +48,7 @@ public class RegistrationController extends CommonController { model.addAttribute("camp", campBean); return "/registration/registration"; } - Boolean result = service.register(bean); + Boolean result = service.register(bean, getCurrentUser(request)); return result ? "/registration/success" : "/error"; } diff --git a/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationGateway.java b/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationGateway.java index 0056156..4db7f11 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationGateway.java +++ b/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationGateway.java @@ -18,6 +18,7 @@ import org.jooq.DeleteConditionStep; import org.jooq.InsertResultStep; import org.jooq.InsertValuesStep12; import org.jooq.InsertValuesStep13; +import org.jooq.Record1; import org.jooq.Record7; import org.jooq.SelectConditionStep; import org.jooq.exception.DataAccessException; @@ -76,7 +77,7 @@ public class RegistrationGateway { * @param login the login * @return true or false */ - public Boolean isLoginAvailable(String login) { + public Boolean isLoginNotYetInUse(String login) { SelectConditionStep sql = jooq // @formatter:off .selectFrom(T_PROFILE) @@ -96,48 +97,61 @@ public class RegistrationGateway { public Boolean register(RegistrationBean bean) { LambdaResultWrapper lrw = new LambdaResultWrapper(); jooq.transaction(t -> { - if (bean.getRegisterInKeycloak()) { - if (!isLoginAvailable(bean.getLogin())) { + if (bean.getLogin() != null && !bean.getLogin().isEmpty()) { + Boolean loginNotYetInUse = isLoginNotYetInUse(bean.getLogin()); + if (bean.getRegisterInKeycloak() && !loginNotYetInUse) { throw new DataAccessException("login already in use: " + bean.getLogin()); } // TODO: check if teacher is at least 2 years older than the camp participants - String oldPassword = new StrongPasswordEncryptor().encryptPassword(bean.getPassword()); - InsertResultStep sql1 = DSL.using(t) - // @formatter:off - .insertInto(T_PROFILE, - T_PROFILE.FORENAME, - T_PROFILE.SURNAME, - T_PROFILE.USERNAME, - T_PROFILE.PASSWORD, - T_PROFILE.DUEDATE, - T_PROFILE.UUID) - .values(bean.getForename(), bean.getSurname(), bean.getLogin(), oldPassword, LocalDateTime.now().plus(356, ChronoUnit.DAYS), UUID.nameUUIDFromBytes(bean.getLogin().getBytes()).toString()) - .returning(T_PROFILE.PK); - // @formatter:on - LOGGER.debug(sql1.toString()); - Integer fkProfile = sql1.fetchOne().getPk(); + Integer fkProfile = null; + if (loginNotYetInUse) { + String oldPassword = new StrongPasswordEncryptor().encryptPassword(bean.getPassword()); + InsertResultStep sql1 = DSL.using(t) + // @formatter:off + .insertInto(T_PROFILE, + T_PROFILE.FORENAME, + T_PROFILE.SURNAME, + T_PROFILE.USERNAME, + T_PROFILE.PASSWORD, + T_PROFILE.DUEDATE, + T_PROFILE.UUID) + .values(bean.getForename(), bean.getSurname(), bean.getLogin(), oldPassword, LocalDateTime.now().plus(356, ChronoUnit.DAYS), UUID.nameUUIDFromBytes(bean.getLogin().getBytes()).toString()) + .returning(T_PROFILE.PK); + // @formatter:on + LOGGER.debug(sql1.toString()); + fkProfile = sql1.fetchOne().getPk(); + } else { + SelectConditionStep> sql1 = DSL.using(t) + // @formatter:off + .select(T_PROFILE.PK) + .from(T_PROFILE) + .where(T_PROFILE.USERNAME.eq(bean.getLogin())); + // @formatter:on + LOGGER.debug(sql1.toString()); + fkProfile = sql1.fetchOne().get(T_PROFILE.PK); + } // register the person for camp participation InsertValuesStep13 sql2 = DSL .using(t) - // @formatter:off - .insertInto(T_PERSON, - T_PERSON.FORENAME, - T_PERSON.SURNAME, - T_PERSON.SEX, - T_PERSON.BIRTHDATE, - T_PERSON.STREET, - T_PERSON.ZIP, - T_PERSON.CITY, - T_PERSON.EMAIL, - T_PERSON.PHONE, - T_PERSON.CAMPROLE, - T_PERSON.FK_CAMP, - T_PERSON.COMMENT, - T_PERSON.FK_PROFILE) - .values(bean.getForename(), bean.getSurname(), bean.getSex(), - bean.getBirthDate(), bean.getStreet(), bean.getZip(), bean.getCity(), bean.getEmail(), - bean.getPhone(), bean.getCampRole(), bean.getFkCamp(), bean.getComment(), fkProfile); - // @formatter:on + // @formatter:off + .insertInto(T_PERSON, + T_PERSON.FORENAME, + T_PERSON.SURNAME, + T_PERSON.SEX, + T_PERSON.BIRTHDATE, + T_PERSON.STREET, + T_PERSON.ZIP, + T_PERSON.CITY, + T_PERSON.EMAIL, + T_PERSON.PHONE, + T_PERSON.CAMPROLE, + T_PERSON.FK_CAMP, + T_PERSON.COMMENT, + T_PERSON.FK_PROFILE) + .values(bean.getForename(), bean.getSurname(), bean.getSex(), + bean.getBirthDate(), bean.getStreet(), bean.getZip(), bean.getCity(), bean.getEmail(), + bean.getPhone(), bean.getCampRole(), bean.getFkCamp(), bean.getComment(), fkProfile); + // @formatter:on LOGGER.debug(sql2.toString()); lrw.add(sql2.execute()); // register the login for the portal diff --git a/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationService.java b/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationService.java index d41babd..fb4d7e8 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationService.java +++ b/src/main/java/de/jottyfan/camporganizer/module/registration/RegistrationService.java @@ -38,7 +38,11 @@ public class RegistrationService { * @param bean the bean * @return true if successful, false otherwise */ - public Boolean register(RegistrationBean bean) { + public Boolean register(RegistrationBean bean, String currentUser) { + if (currentUser != null) { + bean.setRegisterInKeycloak(false); // already registered + bean.setLogin(currentUser); + } Boolean result = gateway.register(bean); if (result && bean.getRegisterInKeycloak()) { keycloak.register(bean.getForename(), bean.getSurname(), bean.getLogin(), bean.getPassword(), bean.getEmail()); diff --git a/src/main/java/de/jottyfan/camporganizer/module/registration/validate/UnusedUsernameValidator.java b/src/main/java/de/jottyfan/camporganizer/module/registration/validate/UnusedUsernameValidator.java index ea6046c..41bf8ce 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/registration/validate/UnusedUsernameValidator.java +++ b/src/main/java/de/jottyfan/camporganizer/module/registration/validate/UnusedUsernameValidator.java @@ -29,7 +29,7 @@ public class UnusedUsernameValidator implements ConstraintValidator -
+
-
+
[[${error}]]