From f7222d65aeb70e222a9c026b334503a6e152ff38 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sat, 19 Nov 2022 13:29:14 +0100 Subject: [PATCH 01/11] moved the nexus plugin under the maven profile --- quartz-manager-parent/pom.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/quartz-manager-parent/pom.xml b/quartz-manager-parent/pom.xml index e1d298c..0da548b 100644 --- a/quartz-manager-parent/pom.xml +++ b/quartz-manager-parent/pom.xml @@ -179,17 +179,6 @@ - - org.sonatype.plugins - nexus-staging-maven-plugin - ${nexus-staging-maven-plugin.version} - true - - ossrh - https://oss.sonatype.org/ - true - - org.apache.maven.plugins maven-javadoc-plugin @@ -233,6 +222,17 @@ + + org.sonatype.plugins + nexus-staging-maven-plugin + ${nexus-staging-maven-plugin.version} + true + + ossrh + https://oss.sonatype.org/ + true + + org.apache.maven.plugins maven-gpg-plugin From a95cf20c6b4833d1b9c63e1693af8da8a4fea298 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sat, 19 Nov 2022 13:54:25 +0100 Subject: [PATCH 02/11] bump version to 4.0.5-SNAPSHOT --- quartz-manager-parent/pom.xml | 12 ++++++------ quartz-manager-parent/quartz-manager-common/pom.xml | 2 +- .../quartz-manager-starter-api/pom.xml | 2 +- .../quartz-manager-starter-persistence/pom.xml | 2 +- .../quartz-manager-starter-security/pom.xml | 2 +- .../quartz-manager-starter-ui/pom.xml | 2 +- .../quartz-manager-web-showcase/pom.xml | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/quartz-manager-parent/pom.xml b/quartz-manager-parent/pom.xml index 0da548b..2e7b98e 100644 --- a/quartz-manager-parent/pom.xml +++ b/quartz-manager-parent/pom.xml @@ -10,7 +10,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.4 + 4.0.5-SNAPSHOT pom @@ -69,27 +69,27 @@ it.fabioformosa.quartz-manager quartz-manager-common - 4.0.4 + 4.0.5-SNAPSHOT it.fabioformosa.quartz-manager quartz-manager-starter-api - 4.0.4 + 4.0.5-SNAPSHOT it.fabioformosa.quartz-manager quartz-manager-starter-security - 4.0.4 + 4.0.5-SNAPSHOT it.fabioformosa.quartz-manager quartz-manager-starter-persistence - 4.0.4 + 4.0.5-SNAPSHOT it.fabioformosa.quartz-manager quartz-manager-starter-ui - 4.0.4 + 4.0.5-SNAPSHOT diff --git a/quartz-manager-parent/quartz-manager-common/pom.xml b/quartz-manager-parent/quartz-manager-common/pom.xml index 75e2d0b..6d4d3f1 100644 --- a/quartz-manager-parent/quartz-manager-common/pom.xml +++ b/quartz-manager-parent/quartz-manager-common/pom.xml @@ -3,7 +3,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.4 + 4.0.5-SNAPSHOT quartz-manager-common diff --git a/quartz-manager-parent/quartz-manager-starter-api/pom.xml b/quartz-manager-parent/quartz-manager-starter-api/pom.xml index 516b598..d01ed40 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/pom.xml +++ b/quartz-manager-parent/quartz-manager-starter-api/pom.xml @@ -5,7 +5,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.4 + 4.0.5-SNAPSHOT quartz-manager-starter-api diff --git a/quartz-manager-parent/quartz-manager-starter-persistence/pom.xml b/quartz-manager-parent/quartz-manager-starter-persistence/pom.xml index 102afcb..7c3300f 100644 --- a/quartz-manager-parent/quartz-manager-starter-persistence/pom.xml +++ b/quartz-manager-parent/quartz-manager-starter-persistence/pom.xml @@ -3,7 +3,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.4 + 4.0.5-SNAPSHOT quartz-manager-starter-persistence diff --git a/quartz-manager-parent/quartz-manager-starter-security/pom.xml b/quartz-manager-parent/quartz-manager-starter-security/pom.xml index 9843430..7d01d92 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/pom.xml +++ b/quartz-manager-parent/quartz-manager-starter-security/pom.xml @@ -4,7 +4,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.4 + 4.0.5-SNAPSHOT quartz-manager-starter-security diff --git a/quartz-manager-parent/quartz-manager-starter-ui/pom.xml b/quartz-manager-parent/quartz-manager-starter-ui/pom.xml index a56be98..40f57ae 100644 --- a/quartz-manager-parent/quartz-manager-starter-ui/pom.xml +++ b/quartz-manager-parent/quartz-manager-starter-ui/pom.xml @@ -4,7 +4,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.4 + 4.0.5-SNAPSHOT quartz-manager-starter-ui diff --git a/quartz-manager-parent/quartz-manager-web-showcase/pom.xml b/quartz-manager-parent/quartz-manager-web-showcase/pom.xml index bf66627..c947364 100644 --- a/quartz-manager-parent/quartz-manager-web-showcase/pom.xml +++ b/quartz-manager-parent/quartz-manager-web-showcase/pom.xml @@ -5,7 +5,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.4 + 4.0.5-SNAPSHOT quartz-manager-web-showcase From 5d2b71652c742dc22935f09a0bb085f6607a3a09 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sat, 19 Nov 2022 16:25:53 +0100 Subject: [PATCH 03/11] #78 fixed 2 sonar warnings --- .../quartzmanager/jobs/tests/MisfireTestJob.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java index fb4634c..c87df25 100644 --- a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java +++ b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java @@ -2,6 +2,7 @@ package it.fabioformosa.quartzmanager.jobs.tests; import it.fabioformosa.quartzmanager.api.jobs.AbstractQuartzManagerJob; import it.fabioformosa.quartzmanager.api.jobs.entities.LogRecord; +import lombok.extern.slf4j.Slf4j; import org.quartz.JobExecutionContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,6 +14,7 @@ import org.slf4j.LoggerFactory; * @author Fabio.Formosa * */ +@Slf4j public class MisfireTestJob extends AbstractQuartzManagerJob { private Logger log = LoggerFactory.getLogger(MisfireTestJob.class); @@ -22,11 +24,12 @@ public class MisfireTestJob extends AbstractQuartzManagerJob { try { log.info("{} is going to sleep...", Thread.currentThread().getName()); - Thread.sleep(10 * 1000); + Thread.sleep(10 * 1000L); log.info("{} woke up!", Thread.currentThread().getName()); } catch (InterruptedException e) { - e.printStackTrace(); + log.error(e.getMessage(), e); + throw new RuntimeException(e); } return new LogRecord(LogRecord.LogType.INFO, "Hello!"); From 3bb30accfd727b12ac04bfc7c68271adc88c44e7 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sat, 19 Nov 2022 16:34:36 +0100 Subject: [PATCH 04/11] #78 fixed some sonar warnings --- .../quartz-manager-starter-api/pom.xml | 32 +++---------------- .../api/converters/JobKeyToJobDetailDTO.java | 1 - .../security/controllers/UserController.java | 2 +- .../api/security/SecurityControllerTest.java | 2 +- .../QuartManagerApplicationTests.java | 4 +-- 5 files changed, 8 insertions(+), 33 deletions(-) diff --git a/quartz-manager-parent/quartz-manager-starter-api/pom.xml b/quartz-manager-parent/quartz-manager-starter-api/pom.xml index d01ed40..cfbb4b1 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/pom.xml +++ b/quartz-manager-parent/quartz-manager-starter-api/pom.xml @@ -106,6 +106,10 @@ reflections 0.10.2 + + org.yaml + snakeyaml + @@ -118,34 +122,6 @@ 1.3.2 - - - - - - - - - - - - - - - - - - - - - - - - - org.yaml - snakeyaml - - org.springdoc diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/converters/JobKeyToJobDetailDTO.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/converters/JobKeyToJobDetailDTO.java index bcabadc..a09f8da 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/converters/JobKeyToJobDetailDTO.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/converters/JobKeyToJobDetailDTO.java @@ -23,6 +23,5 @@ public class JobKeyToJobDetailDTO extends AbstractBaseConverterToDTO(context.getAuthentication().getPrincipal(), HttpStatus.OK); - return new ResponseEntity<>(null, HttpStatus.NOT_FOUND); + return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityControllerTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityControllerTest.java index c6caf93..c2d88d4 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityControllerTest.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityControllerTest.java @@ -31,7 +31,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. "quartz-manager.security.accounts.in-memory.users[0].password=bar", "quartz-manager.security.accounts.in-memory.users[0].roles[0]=admin", }) -public class SecurityControllerTest { +class SecurityControllerTest { @Autowired private MockMvc mockMvc; diff --git a/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java b/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java index 60afb24..02a6f98 100644 --- a/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java +++ b/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java @@ -6,10 +6,10 @@ import org.springframework.test.context.web.WebAppConfiguration; @SpringBootTest(classes = QuartManagerDemoApplication.class) @WebAppConfiguration -public class QuartManagerApplicationTests { +class QuartManagerApplicationTests { @Test - public void contextLoads() { + void contextLoads() { } } From bccd50ac4ada9524b84f5daddb4650209edce275 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sat, 19 Nov 2022 18:28:39 +0100 Subject: [PATCH 05/11] #78 put a secureRandom value as default value for the JWT token --- .../properties/JwtSecurityProperties.java | 15 ++++++- .../api/security/SecurityControllerTest.java | 14 ++++++- ...urityLoginViaHeaderAndLoginFilterTest.java | 1 - .../security/SecurityLoginViaHeaderTest.java | 1 - .../AbstractPropertyValidatorTest.java | 39 +++++++++++++++++++ ...InMemoryUsersValidationControllerTest.java | 37 +++--------------- .../properties/JwtSecurityPropertiesTest.java | 39 +++++++++++++++++++ 7 files changed, 109 insertions(+), 37 deletions(-) create mode 100644 quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/AbstractPropertyValidatorTest.java create mode 100644 quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityPropertiesTest.java diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityProperties.java b/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityProperties.java index d54721d..7f6df4d 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityProperties.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityProperties.java @@ -3,17 +3,28 @@ package it.fabioformosa.quartzmanager.api.security.properties; import lombok.Data; import lombok.Getter; import lombok.Setter; -import org.apache.commons.lang3.RandomStringUtils; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; +import java.security.SecureRandom; +import java.util.Base64; + @Configuration @ConfigurationProperties(prefix = "quartz-manager.security.jwt") @Getter @Setter public class JwtSecurityProperties { - private String secret = RandomStringUtils.randomAlphabetic(10); + private String secret; + + { + SecureRandom random = new SecureRandom(); + byte[] bytes = new byte[20]; + random.nextBytes(bytes); + Base64.Encoder encoder = Base64.getUrlEncoder().withoutPadding(); + secret = encoder.encodeToString(bytes); + } + private long expirationInSec = 28800; private CookieStrategy cookieStrategy = new CookieStrategy(); diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityControllerTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityControllerTest.java index c2d88d4..93eb5e2 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityControllerTest.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityControllerTest.java @@ -2,6 +2,8 @@ package it.fabioformosa.quartzmanager.api.security; import it.fabioformosa.quartzmanager.api.common.config.QuartzManagerPaths; import it.fabioformosa.quartzmanager.api.security.controllers.TestController; +import it.fabioformosa.quartzmanager.api.security.properties.JwtSecurityProperties; +import org.assertj.core.api.Assertions; import org.hamcrest.core.IsNot; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -19,9 +21,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @SpringBootTest @AutoConfigureMockMvc @TestPropertySource(properties = { - "quartz-manager.security.jwt.enabled=true", "quartz-manager.security.jwt.secret=bibidibobidiboo", - "quartz-manager.security.jwt.expiration-in-sec=28800", + "quartz-manager.security.jwt.expiration-in-sec=36000", "quartz-manager.security.jwt.header-strategy.enabled=false", "quartz-manager.security.jwt.header-strategy.header=Authorization", "quartz-manager.security.jwt.cookie-strategy.enabled=true", @@ -36,6 +37,9 @@ class SecurityControllerTest { @Autowired private MockMvc mockMvc; + @Autowired + private JwtSecurityProperties jwtSecurityProperties; + @Test void givenAnAnonymousUser_whenCalledADMZController_thenShouldRaiseForbidden() throws Exception { mockMvc.perform(MockMvcRequestBuilders.get("/dmz")) @@ -72,4 +76,10 @@ class SecurityControllerTest { .andExpect(status().isOk()); } + @Test + void givenSecurityProps_whenTheBootstrapHasCompleted_thenJWTPropertiesShouldBeSetAccordingly() throws Exception { + Assertions.assertThat(jwtSecurityProperties.getExpirationInSec()).isEqualTo(36000); + Assertions.assertThat(jwtSecurityProperties.getSecret()).isEqualTo("bibidibobidiboo"); + } + } diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityLoginViaHeaderAndLoginFilterTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityLoginViaHeaderAndLoginFilterTest.java index 64b41d4..7633478 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityLoginViaHeaderAndLoginFilterTest.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityLoginViaHeaderAndLoginFilterTest.java @@ -13,7 +13,6 @@ import org.springframework.test.context.TestPropertySource; @TestPropertySource(properties = { "quartz-manager.security.login-model.form-login-enabled = false", "quartz-manager.security.login-model.userpwd-filter-enabled = true", - "quartz-manager.security.jwt.enabled=true", "quartz-manager.security.jwt.secret=bibidibobidiboo", "quartz-manager.security.jwt.expiration-in-sec=28800", "quartz-manager.security.jwt.header-strategy.enabled=true", diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityLoginViaHeaderTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityLoginViaHeaderTest.java index dd78ef2..591f305 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityLoginViaHeaderTest.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/SecurityLoginViaHeaderTest.java @@ -12,7 +12,6 @@ import org.springframework.test.context.TestPropertySource; @TestPropertySource(properties = { "quartz-manager.security.login-model.form-login-enabled = true", "quartz-manager.security.login-model.userpwd-filter-enabled = false", - "quartz-manager.security.jwt.enabled=true", "quartz-manager.security.jwt.secret=bibidibobidiboo", "quartz-manager.security.jwt.expiration-in-sec=28800", "quartz-manager.security.jwt.header-strategy.enabled=true", diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/AbstractPropertyValidatorTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/AbstractPropertyValidatorTest.java new file mode 100644 index 0000000..1a96f18 --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/AbstractPropertyValidatorTest.java @@ -0,0 +1,39 @@ +package it.fabioformosa.quartzmanager.api.security.properties; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.springframework.boot.context.properties.bind.BindResult; +import org.springframework.boot.context.properties.bind.Binder; +import org.springframework.boot.context.properties.source.ConfigurationPropertySource; +import org.springframework.boot.context.properties.source.MapConfigurationPropertySource; + +import javax.validation.Validation; +import javax.validation.Validator; +import java.lang.reflect.InvocationTargetException; +import java.util.Map; + +public class AbstractPropertyValidatorTest { + protected static Validator propertyValidator; + + @BeforeAll + public static void setup() { + propertyValidator = Validation.buildDefaultValidatorFactory().getValidator(); + } + + protected static T inflateConfigurationPropertyFromAMap(Map properties, String configurationPropName, Class propClass) { + ConfigurationPropertySource source = new MapConfigurationPropertySource(properties); + Binder binder = new Binder(source); + BindResult result = binder.bind(configurationPropName, propClass); + if (properties != null && !properties.isEmpty()) { + Assertions.assertThat(result.isBound()).isTrue(); + T configPropObject = result.get(); + return configPropObject; + } else { + try { + return propClass.getConstructor().newInstance(); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/InMemoryUsersValidationControllerTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/InMemoryUsersValidationControllerTest.java index 4b29016..5c026d9 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/InMemoryUsersValidationControllerTest.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/InMemoryUsersValidationControllerTest.java @@ -1,25 +1,16 @@ package it.fabioformosa.quartzmanager.api.security.properties; import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.springframework.boot.context.properties.bind.BindResult; -import org.springframework.boot.context.properties.bind.Binder; -import org.springframework.boot.context.properties.source.ConfigurationPropertySource; -import org.springframework.boot.context.properties.source.MapConfigurationPropertySource; -import javax.validation.Validation; -import javax.validation.Validator; import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; -public class InMemoryUsersValidationControllerTest { - - private static Validator propertyValidator; +public class InMemoryUsersValidationControllerTest extends AbstractPropertyValidatorTest { static Stream notValidInMemoryProps = Stream.of( Arguments.of( @@ -34,26 +25,15 @@ public class InMemoryUsersValidationControllerTest { ); - @BeforeAll - public static void setup() { - propertyValidator = Validation.buildDefaultValidatorFactory().getValidator(); - } - - static Stream getNotValidInMemoryProps(){ + static Stream getNotValidInMemoryProps() { return notValidInMemoryProps; } @ParameterizedTest @MethodSource("it.fabioformosa.quartzmanager.api.security.properties.InMemoryUsersValidationControllerTest#getNotValidInMemoryProps") void givenAMissingUsername_whenThePropertyValidationIsApplied_thenShouldRaiseValidationError(Map properties) { - ConfigurationPropertySource source = new MapConfigurationPropertySource(properties); - - Binder binder = new Binder(source); - BindResult result = binder.bind("quartz-manager.security.accounts.in-memory", InMemoryAccountProperties.class); - - Assertions.assertThat(result.isBound()).isTrue(); - - InMemoryAccountProperties inMemoryAccountProperties = result.get(); + InMemoryAccountProperties inMemoryAccountProperties = inflateConfigurationPropertyFromAMap(properties, + "quartz-manager.security.accounts.in-memory", InMemoryAccountProperties.class); Assertions.assertThat(propertyValidator.validate(inMemoryAccountProperties)).isNotEmpty(); } @@ -65,14 +45,9 @@ public class InMemoryUsersValidationControllerTest { properties.put("quartz-manager.security.accounts.in-memory.users[0].password", "bar"); properties.put("quartz-manager.security.accounts.in-memory.users[0].roles[0]", "admin"); - ConfigurationPropertySource source = new MapConfigurationPropertySource(properties); + InMemoryAccountProperties inMemoryAccountProperties = inflateConfigurationPropertyFromAMap(properties, + "quartz-manager.security.accounts.in-memory", InMemoryAccountProperties.class); - Binder binder = new Binder(source); - BindResult result = binder.bind("quartz-manager.security.accounts.in-memory", InMemoryAccountProperties.class); - - Assertions.assertThat(result.isBound()).isTrue(); - - InMemoryAccountProperties inMemoryAccountProperties = result.get(); Assertions.assertThat(propertyValidator.validate(inMemoryAccountProperties)).isEmpty(); } diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityPropertiesTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityPropertiesTest.java new file mode 100644 index 0000000..aea2902 --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityPropertiesTest.java @@ -0,0 +1,39 @@ +package it.fabioformosa.quartzmanager.api.security.properties; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.Map; + +class JwtSecurityPropertiesTest extends AbstractPropertyValidatorTest { + + @Test + void givenAllJWTSecurityPropSet_whenThePropertyValidationIsApplied_thenShouldBeValid() { + Map properties = new HashMap<>(); + String secret = "helloworld"; + properties.put("quartz-manager.security.jwt.secret", secret); + String expirationInSec = "36000"; + properties.put("quartz-manager.security.jwt.expirationInSec", expirationInSec); + + JwtSecurityProperties jwtSecurityProperties = inflateConfigurationPropertyFromAMap(properties, + "quartz-manager.security.jwt", JwtSecurityProperties.class); + + Assertions.assertThat(propertyValidator.validate(jwtSecurityProperties)).isEmpty(); + + Assertions.assertThat(jwtSecurityProperties.getExpirationInSec()).isEqualTo(Long.valueOf(expirationInSec)); + Assertions.assertThat(jwtSecurityProperties.getSecret()).isEqualTo(secret); + } + + @Test + void givenTheMandatoryJWTSecurityPropUnset_whenThePropertyValidationIsApplied_thenShouldBeSetWithDefault() { + Map properties = new HashMap<>(); + + JwtSecurityProperties jwtSecurityProperties = inflateConfigurationPropertyFromAMap(properties, + "quartz-manager.security.jwt", JwtSecurityProperties.class); + + Assertions.assertThat(jwtSecurityProperties.getExpirationInSec()).isEqualTo(28800L); + Assertions.assertThat(jwtSecurityProperties.getSecret()).isNotBlank(); + } + +} From 99d87636d2f88dec3ba4d03797f874f25b8405fd Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sat, 19 Nov 2022 18:45:47 +0100 Subject: [PATCH 06/11] #78 removed an unused CORS config --- .../api/security/QuartzManagerSecurityConfig.java | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/QuartzManagerSecurityConfig.java b/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/QuartzManagerSecurityConfig.java index a8eac06..cdaedae 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/QuartzManagerSecurityConfig.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/QuartzManagerSecurityConfig.java @@ -34,9 +34,6 @@ import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.HttpStatusEntryPoint; import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.CorsConfigurationSource; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import java.util.ArrayList; import java.util.List; @@ -101,7 +98,9 @@ public class QuartzManagerSecurityConfig { @Order(Ordered.HIGHEST_PRECEDENCE) @Bean(name = "quartzManagerFilterChain") - public SecurityFilterChain filterChain(HttpSecurity http, @Qualifier("quartzManagerInMemoryAuthentication") InMemoryUserDetailsManager userDetailsService, AuthenticationManager authenticationManager) throws Exception { + public SecurityFilterChain filterChain(HttpSecurity http, + @Qualifier("quartzManagerInMemoryAuthentication") InMemoryUserDetailsManager userDetailsService, + AuthenticationManager authenticationManager) throws Exception { http.antMatcher(QUARTZ_MANAGER_API_ANT_MATCHER).csrf().disable() // .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() // .exceptionHandling().authenticationEntryPoint(restAuthEntryPoint()).and() // @@ -128,14 +127,6 @@ public class QuartzManagerSecurityConfig { }; } - @Bean(name = "quartzManagerCorsConfigurationSource") - public CorsConfigurationSource corsConfigurationSource() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration(QUARTZ_MANAGER_API_ANT_MATCHER, new CorsConfiguration().applyPermitDefaultValues()); - source.registerCorsConfiguration(QUARTZ_MANAGER_UI_ANT_MATCHER, new CorsConfiguration().applyPermitDefaultValues()); - return source; - } - public LoginConfigurer formLoginConfigurer() { JwtAuthenticationSuccessHandler jwtAuthenticationSuccessHandler = jwtAuthenticationSuccessHandler(); AuthenticationSuccessHandler authenticationSuccessHandler = new AuthenticationSuccessHandler(jwtAuthenticationSuccessHandler); From 5cf39b386119c09e45bcab743e0fdcfb030bbcd2 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sat, 19 Nov 2022 18:53:13 +0100 Subject: [PATCH 07/11] #78 fixed sonar errors --- .../properties/JwtSecurityProperties.java | 15 +++++++++------ .../properties/AbstractPropertyValidatorTest.java | 2 +- .../InMemoryUsersValidationControllerTest.java | 2 +- .../quartzmanager/jobs/tests/MisfireTestJob.java | 3 +-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityProperties.java b/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityProperties.java index 7f6df4d..9012095 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityProperties.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/properties/JwtSecurityProperties.java @@ -1,5 +1,6 @@ package it.fabioformosa.quartzmanager.api.security.properties; +import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; import lombok.Setter; @@ -12,12 +13,19 @@ import java.util.Base64; @Configuration @ConfigurationProperties(prefix = "quartz-manager.security.jwt") +@Data +@AllArgsConstructor @Getter @Setter public class JwtSecurityProperties { private String secret; - { + private long expirationInSec = 28800; + + private CookieStrategy cookieStrategy = new CookieStrategy(); + private HeaderStrategy headerStrategy = new HeaderStrategy(); + + public JwtSecurityProperties() { SecureRandom random = new SecureRandom(); byte[] bytes = new byte[20]; random.nextBytes(bytes); @@ -25,11 +33,6 @@ public class JwtSecurityProperties { secret = encoder.encodeToString(bytes); } - private long expirationInSec = 28800; - - private CookieStrategy cookieStrategy = new CookieStrategy(); - private HeaderStrategy headerStrategy = new HeaderStrategy(); - @Data public static class CookieStrategy { private boolean enabled = false; diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/AbstractPropertyValidatorTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/AbstractPropertyValidatorTest.java index 1a96f18..8ec533b 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/AbstractPropertyValidatorTest.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/AbstractPropertyValidatorTest.java @@ -12,7 +12,7 @@ import javax.validation.Validator; import java.lang.reflect.InvocationTargetException; import java.util.Map; -public class AbstractPropertyValidatorTest { +public abstract class AbstractPropertyValidatorTest { protected static Validator propertyValidator; @BeforeAll diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/InMemoryUsersValidationControllerTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/InMemoryUsersValidationControllerTest.java index 5c026d9..7275e5c 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/InMemoryUsersValidationControllerTest.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/properties/InMemoryUsersValidationControllerTest.java @@ -10,7 +10,7 @@ import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; -public class InMemoryUsersValidationControllerTest extends AbstractPropertyValidatorTest { +class InMemoryUsersValidationControllerTest extends AbstractPropertyValidatorTest { static Stream notValidInMemoryProps = Stream.of( Arguments.of( diff --git a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java index c87df25..dc21ef3 100644 --- a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java +++ b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java @@ -28,8 +28,7 @@ public class MisfireTestJob extends AbstractQuartzManagerJob { log.info("{} woke up!", Thread.currentThread().getName()); } catch (InterruptedException e) { - log.error(e.getMessage(), e); - throw new RuntimeException(e); + throw new IllegalStateException(e); } return new LogRecord(LogRecord.LogType.INFO, "Hello!"); From 9a26be41a8e0e2631f3b39129c8404587ece1f87 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sat, 19 Nov 2022 18:59:24 +0100 Subject: [PATCH 08/11] #78 excluded lombok annotations from the coverage --- quartz-manager-parent/lombok.config | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 quartz-manager-parent/lombok.config diff --git a/quartz-manager-parent/lombok.config b/quartz-manager-parent/lombok.config new file mode 100644 index 0000000..df71bb6 --- /dev/null +++ b/quartz-manager-parent/lombok.config @@ -0,0 +1,2 @@ +config.stopBubbling = true +lombok.addLombokGeneratedAnnotation = true From 53a54ddbdab855c6d1a87bebae77063cee556987 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sun, 20 Nov 2022 13:16:42 +0100 Subject: [PATCH 09/11] #62 added a missing test to the UserController --- .../security/controllers/UserController.java | 3 +- .../controllers/UserControllerTest.java | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/controllers/UserControllerTest.java diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/controllers/UserController.java b/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/controllers/UserController.java index 995e00a..a269109 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/controllers/UserController.java +++ b/quartz-manager-parent/quartz-manager-starter-security/src/main/java/it/fabioformosa/quartzmanager/api/security/controllers/UserController.java @@ -20,8 +20,9 @@ import static it.fabioformosa.quartzmanager.api.common.config.QuartzManagerPaths @RequestMapping(value = QUARTZ_MANAGER_AUTH_PATH, produces = MediaType.APPLICATION_JSON_VALUE) public class UserController { + public static final String WHOAMI_URL = "/whoami"; - @GetMapping("/whoami") + @GetMapping(WHOAMI_URL) public ResponseEntity getLoggedUser() { SecurityContext context = SecurityContextHolder.getContext(); if (context != null && context.getAuthentication() != null) diff --git a/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/controllers/UserControllerTest.java b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/controllers/UserControllerTest.java new file mode 100644 index 0000000..79c8a7e --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-security/src/test/java/it/fabioformosa/quartzmanager/api/security/controllers/UserControllerTest.java @@ -0,0 +1,41 @@ +package it.fabioformosa.quartzmanager.api.security.controllers; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static it.fabioformosa.quartzmanager.api.common.config.QuartzManagerPaths.QUARTZ_MANAGER_AUTH_PATH; +import static it.fabioformosa.quartzmanager.api.security.controllers.UserController.WHOAMI_URL; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest +@AutoConfigureMockMvc +@TestPropertySource(properties = { + "quartz-manager.security.accounts.in-memory.enabled=true", + "quartz-manager.security.accounts.in-memory.users[0].username=admin", + "quartz-manager.security.accounts.in-memory.users[0].password=admin", + "quartz-manager.security.accounts.in-memory.users[0].roles[0]=admin", +}) +class UserControllerTest { + + @Autowired + private MockMvc mockMvc; + + @Test + @WithMockUser("admin") + void givenAnUser_whenCalledTheWhoamiEndpoint_thenShouldReturn2xx() throws Exception { + mockMvc.perform(MockMvcRequestBuilders.get(QUARTZ_MANAGER_AUTH_PATH + WHOAMI_URL)) + .andExpect(status().isOk()); + } + + @Test + void givenAnAnonymousUser_whenCalledTheWhoamiEndpoint_thenShouldReturnNotFound() throws Exception { + mockMvc.perform(MockMvcRequestBuilders.get(QUARTZ_MANAGER_AUTH_PATH + WHOAMI_URL)) + .andExpect(status().isUnauthorized()); + } +} From 866062bdcbc5694b5375cf39d084ef82db959c4b Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sun, 20 Nov 2022 13:36:25 +0100 Subject: [PATCH 10/11] #62 added a missing test for the MisfireTestJob --- .../jobs/tests/MisfireTestJob.java | 12 ++++++++---- .../QuartManagerApplicationTests.java | 2 +- .../jobs/tests/MisfireTestJobTest.java | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJobTest.java diff --git a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java index dc21ef3..169b381 100644 --- a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java +++ b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java @@ -2,10 +2,9 @@ package it.fabioformosa.quartzmanager.jobs.tests; import it.fabioformosa.quartzmanager.api.jobs.AbstractQuartzManagerJob; import it.fabioformosa.quartzmanager.api.jobs.entities.LogRecord; +import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.quartz.JobExecutionContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * This job can be used to test the misfire policy. It pretends to be a long @@ -15,16 +14,21 @@ import org.slf4j.LoggerFactory; * */ @Slf4j +@NoArgsConstructor public class MisfireTestJob extends AbstractQuartzManagerJob { - private Logger log = LoggerFactory.getLogger(MisfireTestJob.class); + private long sleepPeriodInMs = 10 * 1000L; + + public MisfireTestJob(long sleepPeriodInMs) { + this.sleepPeriodInMs = sleepPeriodInMs; + } @Override public LogRecord doIt(JobExecutionContext jobExecutionContext) { try { log.info("{} is going to sleep...", Thread.currentThread().getName()); - Thread.sleep(10 * 1000L); + Thread.sleep(sleepPeriodInMs); log.info("{} woke up!", Thread.currentThread().getName()); } catch (InterruptedException e) { diff --git a/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java b/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java index 02a6f98..d1b7d9a 100644 --- a/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java +++ b/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java @@ -6,7 +6,7 @@ import org.springframework.test.context.web.WebAppConfiguration; @SpringBootTest(classes = QuartManagerDemoApplication.class) @WebAppConfiguration -class QuartManagerApplicationTests { +public class QuartManagerApplicationTests { @Test void contextLoads() { diff --git a/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJobTest.java b/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJobTest.java new file mode 100644 index 0000000..db60521 --- /dev/null +++ b/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJobTest.java @@ -0,0 +1,18 @@ +package it.fabioformosa.quartzmanager.jobs.tests; + +import it.fabioformosa.quartzmanager.api.jobs.entities.LogRecord; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class MisfireTestJobTest { + + @Test + void givenAMisfireTestJob_whenIsExecuted_shoulReturnALogRecord() { + MisfireTestJob misfireTestJob = new MisfireTestJob(10L); + LogRecord logRecord = misfireTestJob.doIt(null); + Assertions.assertThat(logRecord.getMessage()).isEqualTo("Hello!"); + } + +} + + From e6cf2e93906389f06433d70ae579de531fcade2a Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Sun, 20 Nov 2022 13:43:07 +0100 Subject: [PATCH 11/11] bump version to 4.0.5 --- quartz-manager-parent/pom.xml | 12 ++++++------ quartz-manager-parent/quartz-manager-common/pom.xml | 2 +- .../quartz-manager-starter-api/pom.xml | 2 +- .../quartz-manager-starter-persistence/pom.xml | 2 +- .../quartz-manager-starter-security/pom.xml | 2 +- .../quartz-manager-starter-ui/pom.xml | 2 +- .../quartz-manager-web-showcase/pom.xml | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/quartz-manager-parent/pom.xml b/quartz-manager-parent/pom.xml index 2e7b98e..6e8cf80 100644 --- a/quartz-manager-parent/pom.xml +++ b/quartz-manager-parent/pom.xml @@ -10,7 +10,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.5-SNAPSHOT + 4.0.5 pom @@ -69,27 +69,27 @@ it.fabioformosa.quartz-manager quartz-manager-common - 4.0.5-SNAPSHOT + 4.0.5 it.fabioformosa.quartz-manager quartz-manager-starter-api - 4.0.5-SNAPSHOT + 4.0.5 it.fabioformosa.quartz-manager quartz-manager-starter-security - 4.0.5-SNAPSHOT + 4.0.5 it.fabioformosa.quartz-manager quartz-manager-starter-persistence - 4.0.5-SNAPSHOT + 4.0.5 it.fabioformosa.quartz-manager quartz-manager-starter-ui - 4.0.5-SNAPSHOT + 4.0.5 diff --git a/quartz-manager-parent/quartz-manager-common/pom.xml b/quartz-manager-parent/quartz-manager-common/pom.xml index 6d4d3f1..964df3c 100644 --- a/quartz-manager-parent/quartz-manager-common/pom.xml +++ b/quartz-manager-parent/quartz-manager-common/pom.xml @@ -3,7 +3,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.5-SNAPSHOT + 4.0.5 quartz-manager-common diff --git a/quartz-manager-parent/quartz-manager-starter-api/pom.xml b/quartz-manager-parent/quartz-manager-starter-api/pom.xml index cfbb4b1..a1d32d9 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/pom.xml +++ b/quartz-manager-parent/quartz-manager-starter-api/pom.xml @@ -5,7 +5,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.5-SNAPSHOT + 4.0.5 quartz-manager-starter-api diff --git a/quartz-manager-parent/quartz-manager-starter-persistence/pom.xml b/quartz-manager-parent/quartz-manager-starter-persistence/pom.xml index 7c3300f..f38265c 100644 --- a/quartz-manager-parent/quartz-manager-starter-persistence/pom.xml +++ b/quartz-manager-parent/quartz-manager-starter-persistence/pom.xml @@ -3,7 +3,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.5-SNAPSHOT + 4.0.5 quartz-manager-starter-persistence diff --git a/quartz-manager-parent/quartz-manager-starter-security/pom.xml b/quartz-manager-parent/quartz-manager-starter-security/pom.xml index 7d01d92..107a90c 100644 --- a/quartz-manager-parent/quartz-manager-starter-security/pom.xml +++ b/quartz-manager-parent/quartz-manager-starter-security/pom.xml @@ -4,7 +4,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.5-SNAPSHOT + 4.0.5 quartz-manager-starter-security diff --git a/quartz-manager-parent/quartz-manager-starter-ui/pom.xml b/quartz-manager-parent/quartz-manager-starter-ui/pom.xml index 40f57ae..057d1c8 100644 --- a/quartz-manager-parent/quartz-manager-starter-ui/pom.xml +++ b/quartz-manager-parent/quartz-manager-starter-ui/pom.xml @@ -4,7 +4,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.5-SNAPSHOT + 4.0.5 quartz-manager-starter-ui diff --git a/quartz-manager-parent/quartz-manager-web-showcase/pom.xml b/quartz-manager-parent/quartz-manager-web-showcase/pom.xml index c947364..56ee643 100644 --- a/quartz-manager-parent/quartz-manager-web-showcase/pom.xml +++ b/quartz-manager-parent/quartz-manager-web-showcase/pom.xml @@ -5,7 +5,7 @@ it.fabioformosa.quartz-manager quartz-manager-parent - 4.0.5-SNAPSHOT + 4.0.5 quartz-manager-web-showcase