Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,21 @@
import org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties;
import org.springframework.boot.actuate.info.GitInfoContributor;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
import org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.info.GitProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;

/**
* Auto-configuration for info contributors.
*/
@Configuration(
proxyBeanMethods = false)
@AutoConfiguration
@AutoConfigureAfter(ProjectInfoAutoConfiguration.class)
@EnableConfigurationProperties(InfoContributorProperties.class)
public class InfoContributorAutoConfiguration {
Expand Down
2 changes: 1 addition & 1 deletion neverpile-commons-authorization/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
<artifactId>spring-boot-starter-security-oauth2-resource-server</artifactId>
<optional>true</optional>
</dependency>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.util.List;
import java.util.Set;

import org.springframework.boot.web.servlet.server.Session;
import org.springframework.http.HttpRequest;

import com.neverpile.common.authorization.policy.AccessPolicy;
Expand All @@ -17,7 +16,7 @@
* <p>
* Further sources of input for decisions will usually be rights, roles scopes etc. of the principal
* attempting the access as well as possibly other information like the current {@link HttpRequest},
* the {@link Session}, configuration information (e.g. an {@link AccessPolicy}) or other factors.
* the Session, configuration information (e.g. an {@link AccessPolicy}) or other factors.
* However, these sources are not mandated by this interface and must thus be propagated by other
* means.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.neverpile.common.authorization.policy;

import java.io.Serial;
import java.io.Serializable;
import java.time.Instant;
import java.util.ArrayList;
Expand Down Expand Up @@ -39,6 +40,7 @@
* editors, log output etc. to describe the policy in human-readable form.
*/
public class AccessPolicy implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

private static final String VERISON_1 = "2018-09-26";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.expression.MapAccessor;
import org.springframework.expression.AccessException;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.EvaluationException;
Expand All @@ -18,14 +17,15 @@
import org.springframework.expression.TypedValue;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.DataBindingMethodResolver;
import org.springframework.expression.spel.support.MapAccessor;
import org.springframework.expression.spel.support.SimpleEvaluationContext;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
import org.springframework.stereotype.Component;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.node.ArrayNode;
import tools.jackson.databind.node.ObjectNode;

@Component
@ConditionalOnClass(JwtAuthenticationToken.class)
Expand Down Expand Up @@ -68,8 +68,8 @@ public TypedValue read(final EvaluationContext context, final Object target, fin
private Object nodeToValue(final JsonNode v) {
if (v.isMissingNode())
return null;
if (v.isTextual())
return v.asText();
if (v.isString())
return v.asString();
if (v.isFloatingPointNumber())
return v.asDouble();
if (v.isNumber())
Expand Down Expand Up @@ -107,8 +107,7 @@ public void write(final EvaluationContext context, final Object target, final St

@Override
public boolean matchAuthentication(final Authentication authentication, final List<String> subjects) {
if (authentication instanceof JwtAuthenticationToken) {
JwtAuthenticationToken jwtToken = (JwtAuthenticationToken) authentication;
if (authentication instanceof JwtAuthenticationToken jwtToken) {

// expose all claims as variables
Map<String, Object> claims = jwtToken.getToken().getClaims();
Expand All @@ -130,8 +129,8 @@ public boolean matchAuthentication(final Authentication authentication, final Li
Object result = expression.getValue(ctx, Object.class);
if (null == result) {
outcome = false;
} else if (result instanceof Boolean) {
outcome = (Boolean) result;
} else if (result instanceof Boolean booleanValue) {
outcome = booleanValue;
} else {
outcome = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.neverpile.common.authorization.api.Action;
import com.neverpile.common.authorization.api.AuthorizationContext;
import com.neverpile.common.authorization.api.AuthorizationService;
Expand Down Expand Up @@ -265,18 +264,10 @@ private boolean matchesWildcardAction(final String key, final Collection<String>

private boolean satisfiesConditions(final AccessRule rule, final AuthorizationContext conditionContext) {
boolean m = rule.getConditions().matches(conditionContext);

if (LOGGER.isDebugEnabled())
try {
LOGGER.debug(" Rule '{}' the context {} the conditions {}", rule.getName(),
m ? "SATISFIES" : "does not satisfy",
new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(rule.getConditions()));
} catch (JsonProcessingException e) {
LOGGER.debug(
" Rule '{}' the context {} the conditions (but could not write the conditions as JSON, because of {})",
rule.getName(), m ? "SATISFIES" : "does not satisfy", e.getMessage());
}

LOGGER.debug(" Rule '{}' the context {} the conditions {}", rule.getName(),
m ? "SATISFIES" : "does not satisfy",
new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(rule.getConditions()));
return m;
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
package com.neverpile.authorization;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.jackson.autoconfigure.JsonMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;

import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import com.neverpile.common.condition.config.ConditionModule;

import tools.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;

@SpringBootConfiguration
@Import({ConditionModule.class
@Import({
ConditionModule.class
})
public class Config {
@Bean
Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
return b -> {
b.annotationIntrospector(new JacksonAnnotationIntrospector());
b.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
b.dateFormat(new StdDateFormat());
};
JsonMapperBuilderCustomizer jacksonCustomizer() {
return builder -> builder.addModule(new JakartaXmlBindAnnotationModule());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;

import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.neverpile.common.authorization.policy.impl.JwtClaimAuthenticationMatcher;

public class JwtClaimAuthenticationMatcherTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.json.JsonTest;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.exc.UnrecognizedPropertyException;
import com.neverpile.common.authorization.policy.AccessPolicy;
import com.neverpile.common.authorization.policy.AccessRule;
import com.neverpile.common.authorization.policy.Effect;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
import org.springframework.security.authentication.TestingAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.context.bean.override.mockito.MockitoBean;

import com.neverpile.common.authorization.api.Action;
import com.neverpile.common.authorization.api.Permission;
Expand All @@ -34,7 +34,7 @@ public class PolicyBasedAuthorizationServiceTest {
@Autowired
PolicyBasedAuthorizationService authService;

@MockBean
@MockitoBean
PolicyRepository mockPolicyRepository;

private final EmptyAuthorizationContext eac = new EmptyAuthorizationContext();
Expand Down
5 changes: 5 additions & 0 deletions neverpile-commons-condition/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@
<artifactId>spring-boot-starter-json</artifactId>
</dependency>

<dependency>
<groupId>tools.jackson.module</groupId>
<artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@
public class FalseCondition extends AbstractTargetListCondition<FalseCondition> {
@Override
protected boolean eval(final Specifier s, final Object value) {
return null == value || (value instanceof Boolean ? !((Boolean) value) : !Boolean.parseBoolean(value.toString().trim()));
return null == value || (value instanceof Boolean b ? !b : !Boolean.parseBoolean(value.toString().trim()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ public class TrueCondition extends AbstractTargetListCondition<TrueCondition> {
protected boolean eval(final Specifier s, final Object value) {
return null == value ?
false :
value instanceof Boolean ? ((Boolean) value) : Boolean.valueOf(value.toString().trim());
value instanceof Boolean b ? b : Boolean.valueOf(value.toString().trim());
}
}
Loading