Skip to content

Commit

Permalink
#77 added a validation test on the in-memory user props and renamed t…
Browse files Browse the repository at this point in the history
…he username field
  • Loading branch information
fabioformosa committed Oct 15, 2022
1 parent 3f0d036 commit b2906d0
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.springframework.context.annotation.Configuration;

@Slf4j
@ConditionalOnClass(name = {"it.fabioformosa.quartzmanager.security.WebSecurityConfigJWT"})
@ConditionalOnClass(name = {"it.fabioformosa.quartzmanager.api.security.QuartzManagerSecurityConfig"})
@Configuration
public class SecurityDiscoverConfig {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,34 @@
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;

@Validated
@Configuration
@ConfigurationProperties(prefix = "quartz-manager.security.accounts.in-memory")
@Getter @Setter
public class InMemoryAccountProperties {
private boolean enabled;
private boolean enabled = true;

@Valid
@NotNull
@NotEmpty
private List<User> users;

@Getter @Setter
public static class User {
private String name;
@NotBlank
private String username;
@NotBlank
private String password;
@NotEmpty
private List<String> roles = new ArrayList<>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"quartz-manager.security.jwt.cookie-strategy.enabled=true",
"quartz-manager.security.jwt.cookie-strategy.cookie=AUTH-TOKEN",
"quartz-manager.security.accounts.in-memory.enabled=true",
"quartz-manager.security.accounts.in-memory.users[0].name=foo",
"quartz-manager.security.accounts.in-memory.users[0].username=foo",
"quartz-manager.security.accounts.in-memory.users[0].password=bar",
"quartz-manager.security.accounts.in-memory.users[0].roles[0]=admin",
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"quartz-manager.security.jwt.cookie-strategy.enabled=true",
"quartz-manager.security.jwt.cookie-strategy.cookie=AUTH-TOKEN",
"quartz-manager.security.accounts.in-memory.enabled=true",
"quartz-manager.security.accounts.in-memory.users[0].name=foo",
"quartz-manager.security.accounts.in-memory.users[0].username=foo",
"quartz-manager.security.accounts.in-memory.users[0].password=bar",
"quartz-manager.security.accounts.in-memory.users[0].roles[0]=admin",
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource(properties = {
"quartz-manager.security.accounts.in-memory.enabled=true",
"quartz-manager.security.accounts.in-memory.users[0].name=foo",
"quartz-manager.security.accounts.in-memory.users[0].username=foo",
"quartz-manager.security.accounts.in-memory.users[0].password=bar",
"quartz-manager.security.accounts.in-memory.users[0].roles[0]=admin",
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"quartz-manager.security.jwt.header-strategy.header=Authorization",
"quartz-manager.security.jwt.cookie-strategy.enabled=false",
"quartz-manager.security.accounts.in-memory.enabled=true",
"quartz-manager.security.accounts.in-memory.users[0].name=foo",
"quartz-manager.security.accounts.in-memory.users[0].username=foo",
"quartz-manager.security.accounts.in-memory.users[0].password=bar",
"quartz-manager.security.accounts.in-memory.users[0].roles[0]=admin",
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"quartz-manager.security.jwt.header-strategy.header=Authorization",
"quartz-manager.security.jwt.cookie-strategy.enabled=false",
"quartz-manager.security.accounts.in-memory.enabled=true",
"quartz-manager.security.accounts.in-memory.users[0].name=foo",
"quartz-manager.security.accounts.in-memory.users[0].username=foo",
"quartz-manager.security.accounts.in-memory.users[0].password=bar",
"quartz-manager.security.accounts.in-memory.users[0].roles[0]=admin",
})
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
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;

static Stream<Arguments> notValidInMemoryProps = Stream.of(
Arguments.of(
Map.of("quartz-manager.security.accounts.in-memory.users[0].password", "bar"),
Map.of("quartz-manager.security.accounts.in-memory.users[0].roles[0]", "admin")),
Arguments.of(
Map.of("quartz-manager.security.accounts.in-memory.users[0].username", "foo"),
Map.of("quartz-manager.security.accounts.in-memory.users[0].roles[0]", "admin")),
Arguments.of(
Map.of("quartz-manager.security.accounts.in-memory.users[0].username", "foo"),
Map.of("quartz-manager.security.accounts.in-memory.users[0].password", "bar"))
);


@BeforeAll
public static void setup() {
propertyValidator = Validation.buildDefaultValidatorFactory().getValidator();
}

static Stream<Arguments> getNotValidInMemoryProps(){
return notValidInMemoryProps;
}

@ParameterizedTest
@MethodSource("it.fabioformosa.quartzmanager.api.security.properties.InMemoryUsersValidationControllerTest#getNotValidInMemoryProps")
void givenAMissingUsername_whenThePropertyValidationIsApplied_thenShouldRaiseValidationError(Map<String, String> properties) throws Exception {
ConfigurationPropertySource source = new MapConfigurationPropertySource(properties);

Binder binder = new Binder(source);
BindResult<InMemoryAccountProperties> 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).size()).isGreaterThan(0);

}

@Test
void givenAllInMemoryPropsAreSet_whenThePropertyValidationIsApplied_thenShouldRaiseValidationError() throws Exception {
Map<String, String> properties = new HashMap<>();
properties.put("quartz-manager.security.accounts.in-memory.users[0].username", "foo");
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);

Binder binder = new Binder(source);
BindResult<InMemoryAccountProperties> 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).size()).isEqualTo(0);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ quartz-manager:
in-memory:
enabled: true
users:
- name: admin
- username: admin
password: admin
roles:
- ADMIN
Expand Down

0 comments on commit b2906d0

Please sign in to comment.