upgrade dropwizard to 2.1

This commit is contained in:
Athou
2022-07-14 13:17:47 +02:00
parent 899a8d746a
commit d21e5dfee4
7 changed files with 69 additions and 135 deletions

83
pom.xml
View File

@@ -5,23 +5,28 @@
<groupId>com.commafeed</groupId> <groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId> <artifactId>commafeed</artifactId>
<version>2.6.0-SNAPSHOT</version> <version>2.6.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>CommaFeed</name> <name>CommaFeed</name>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source>
<dropwizard.version>1.3.29</dropwizard.version> <maven.compiler.target>1.8</maven.compiler.target>
<guice.version>4.2.2</guice.version> <guice.version>4.2.2</guice.version>
<querydsl.version>4.2.1</querydsl.version> <querydsl.version>4.2.1</querydsl.version>
<rome.version>1.18.0</rome.version> <rome.version>1.18.0</rome.version>
</properties> </properties>
<scm> <dependencyManagement>
<connection>scm:git:https://github.com/Athou/commafeed.git</connection> <dependencies>
<developerConnection>scm:git:https://github.com/Athou/commafeed.git</developerConnection> <dependency>
<url>https://github.com/Athou/commafeed</url> <groupId>io.dropwizard</groupId>
</scm> <artifactId>dropwizard-dependencies</artifactId>
<version>2.1.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build> <build>
<finalName>commafeed</finalName> <finalName>commafeed</finalName>
@@ -33,15 +38,6 @@
</resources> </resources>
<plugins> <plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin> <plugin>
<groupId>pl.project13.maven</groupId> <groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId> <artifactId>git-commit-id-plugin</artifactId>
@@ -189,7 +185,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId> <artifactId>maven-jar-plugin</artifactId>
<version>3.1.1</version> <version>3.2.2</version>
<configuration> <configuration>
<archive> <archive>
<manifest> <manifest>
@@ -275,7 +271,10 @@
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.7.30</version> </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency> </dependency>
<dependency> <dependency>
@@ -292,53 +291,30 @@
<dependency> <dependency>
<groupId>io.dropwizard</groupId> <groupId>io.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId> <artifactId>dropwizard-core</artifactId>
<version>${dropwizard.version}</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>aopalliance-repackaged</artifactId>
</exclusion>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.dropwizard</groupId> <groupId>io.dropwizard</groupId>
<artifactId>dropwizard-hibernate</artifactId> <artifactId>dropwizard-hibernate</artifactId>
<version>${dropwizard.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.liquibase</groupId> <groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId> <artifactId>liquibase-core</artifactId>
<version>4.9.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.dropwizard</groupId> <groupId>io.dropwizard</groupId>
<artifactId>dropwizard-assets</artifactId> <artifactId>dropwizard-assets</artifactId>
<version>${dropwizard.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.dropwizard</groupId> <groupId>io.dropwizard</groupId>
<artifactId>dropwizard-forms</artifactId> <artifactId>dropwizard-forms</artifactId>
<version>${dropwizard.version}</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.dropwizard.metrics</groupId> <groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-graphite</artifactId> <artifactId>metrics-graphite</artifactId>
<version>4.0.5</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.dropwizard.metrics</groupId> <groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-json</artifactId> <artifactId>metrics-json</artifactId>
<version>4.0.5</version>
</dependency> </dependency>
<dependency> <dependency>
@@ -347,10 +323,14 @@
<version>2.3.0</version> <version>2.3.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-afterburner</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.apache.httpcomponents</groupId> <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId> <artifactId>httpclient</artifactId>
<version>4.5.13</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>commons-logging</artifactId> <artifactId>commons-logging</artifactId>
@@ -391,7 +371,6 @@
<dependency> <dependency>
<groupId>commons-codec</groupId> <groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId> <artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
@@ -426,17 +405,10 @@
<version>1.5.3</version> <version>1.5.3</version>
</dependency> </dependency>
<!-- upgrade jdom to 2.0.5 for performance reasons (https://github.com/hunterhacker/jdom/issues/112) -->
<dependency> <dependency>
<groupId>com.rometools</groupId> <groupId>com.rometools</groupId>
<artifactId>rome</artifactId> <artifactId>rome</artifactId>
<version>${rome.version}</version> <version>${rome.version}</version>
<exclusions>
<exclusion>
<artifactId>jdom</artifactId>
<groupId>org.jdom</groupId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.rometools</groupId> <groupId>com.rometools</groupId>
@@ -448,11 +420,7 @@
<artifactId>rome-opml</artifactId> <artifactId>rome-opml</artifactId>
<version>${rome.version}</version> <version>${rome.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.6.1</version>
</dependency>
<dependency> <dependency>
<groupId>org.ahocorasick</groupId> <groupId>org.ahocorasick</groupId>
<artifactId>ahocorasick</artifactId> <artifactId>ahocorasick</artifactId>
@@ -510,7 +478,6 @@
<dependency> <dependency>
<groupId>com.h2database</groupId> <groupId>com.h2database</groupId>
<artifactId>h2</artifactId> <artifactId>h2</artifactId>
<version>2.1.210</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
@@ -531,13 +498,11 @@
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.mockito</groupId> <groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId> <artifactId>mockito-core</artifactId>
<version>2.28.2</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>

View File

@@ -4,16 +4,15 @@ import java.nio.charset.StandardCharsets;
import java.util.Base64; import java.util.Base64;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Function;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.WebApplicationException; import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import org.glassfish.jersey.server.internal.inject.AbstractContainerRequestValueFactory; import org.glassfish.jersey.server.ContainerRequest;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserRole.Role; import com.commafeed.backend.model.UserRole.Role;
@@ -23,21 +22,17 @@ import com.commafeed.frontend.session.SessionHelper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public class SecurityCheckFactory extends AbstractContainerRequestValueFactory<User> { public class SecurityCheckFactory implements Function<ContainerRequest, User> {
private static final String PREFIX = "Basic"; private static final String PREFIX = "Basic";
@Context private final UserService userService;
HttpServletRequest request; private final HttpServletRequest request;
@Inject
UserService userService;
private final Role role; private final Role role;
private final boolean apiKeyAllowed; private final boolean apiKeyAllowed;
@Override @Override
public User provide() { public User apply(ContainerRequest req) {
Optional<User> user = apiKeyLogin(); Optional<User> user = apiKeyLogin();
if (!user.isPresent()) { if (!user.isPresent()) {
user = basicAuthenticationLogin(); user = basicAuthenticationLogin();

View File

@@ -1,18 +1,17 @@
package com.commafeed.frontend.auth; package com.commafeed.frontend.auth;
import java.util.function.Function;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import javax.servlet.http.HttpServletRequest;
import org.glassfish.hk2.api.Factory;
import org.glassfish.hk2.api.InjectionResolver;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.hk2.api.TypeLiteral;
import org.glassfish.hk2.utilities.binding.AbstractBinder; import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.server.internal.inject.AbstractValueFactoryProvider; import org.glassfish.jersey.server.ContainerRequest;
import org.glassfish.jersey.server.internal.inject.AbstractValueParamProvider;
import org.glassfish.jersey.server.internal.inject.MultivaluedParameterExtractorProvider; import org.glassfish.jersey.server.internal.inject.MultivaluedParameterExtractorProvider;
import org.glassfish.jersey.server.internal.inject.ParamInjectionResolver;
import org.glassfish.jersey.server.model.Parameter; import org.glassfish.jersey.server.model.Parameter;
import org.glassfish.jersey.server.spi.internal.ValueFactoryProvider; import org.glassfish.jersey.server.spi.internal.ValueParamProvider;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.backend.service.UserService; import com.commafeed.backend.service.UserService;
@@ -20,15 +19,21 @@ import com.commafeed.backend.service.UserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@Singleton @Singleton
public class SecurityCheckFactoryProvider extends AbstractValueFactoryProvider { public class SecurityCheckFactoryProvider extends AbstractValueParamProvider {
private UserService userService;
private HttpServletRequest request;
@Inject @Inject
public SecurityCheckFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider, final ServiceLocator injector) { public SecurityCheckFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider, UserService userService,
super(extractorProvider, injector, Parameter.Source.UNKNOWN); HttpServletRequest request) {
super(() -> extractorProvider, Parameter.Source.UNKNOWN);
this.userService = userService;
this.request = request;
} }
@Override @Override
protected Factory<?> createValueFactory(final Parameter parameter) { protected Function<ContainerRequest, ?> createValueProvider(Parameter parameter) {
final Class<?> classType = parameter.getRawType(); final Class<?> classType = parameter.getRawType();
SecurityCheck securityCheck = parameter.getAnnotation(SecurityCheck.class); SecurityCheck securityCheck = parameter.getAnnotation(SecurityCheck.class);
@@ -36,17 +41,11 @@ public class SecurityCheckFactoryProvider extends AbstractValueFactoryProvider {
return null; return null;
} }
if (classType.isAssignableFrom(User.class)) { if (!classType.isAssignableFrom(User.class)) {
return new SecurityCheckFactory(securityCheck.value(), securityCheck.apiKeyAllowed());
} else {
return null; return null;
} }
}
public static class SecurityCheckInjectionResolver extends ParamInjectionResolver<SecurityCheck> { return new SecurityCheckFactory(userService, request, securityCheck.value(), securityCheck.apiKeyAllowed());
public SecurityCheckInjectionResolver() {
super(SecurityCheckFactoryProvider.class);
}
} }
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -56,10 +55,9 @@ public class SecurityCheckFactoryProvider extends AbstractValueFactoryProvider {
@Override @Override
protected void configure() { protected void configure() {
bind(SecurityCheckFactoryProvider.class).to(ValueFactoryProvider.class).in(Singleton.class); bind(SecurityCheckFactoryProvider.class).to(ValueParamProvider.class).in(Singleton.class);
bind(SecurityCheckInjectionResolver.class).to(new TypeLiteral<InjectionResolver<SecurityCheck>>() {
}).in(Singleton.class);
bind(userService).to(UserService.class); bind(userService).to(UserService.class);
} }
} }
} }

View File

@@ -1,17 +0,0 @@
package com.commafeed.frontend.session;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import org.glassfish.jersey.server.internal.inject.AbstractContainerRequestValueFactory;
public class SessionHelperFactory extends AbstractContainerRequestValueFactory<SessionHelper> {
@Context
HttpServletRequest request;
@Override
public SessionHelper provide() {
return new SessionHelper(request);
}
}

View File

@@ -1,30 +1,32 @@
package com.commafeed.frontend.session; package com.commafeed.frontend.session;
import java.util.function.Function;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context; import javax.ws.rs.core.Context;
import org.glassfish.hk2.api.Factory;
import org.glassfish.hk2.api.InjectionResolver;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.hk2.api.TypeLiteral;
import org.glassfish.hk2.utilities.binding.AbstractBinder; import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.server.internal.inject.AbstractValueFactoryProvider; import org.glassfish.jersey.server.ContainerRequest;
import org.glassfish.jersey.server.internal.inject.AbstractValueParamProvider;
import org.glassfish.jersey.server.internal.inject.MultivaluedParameterExtractorProvider; import org.glassfish.jersey.server.internal.inject.MultivaluedParameterExtractorProvider;
import org.glassfish.jersey.server.internal.inject.ParamInjectionResolver;
import org.glassfish.jersey.server.model.Parameter; import org.glassfish.jersey.server.model.Parameter;
import org.glassfish.jersey.server.spi.internal.ValueFactoryProvider; import org.glassfish.jersey.server.spi.internal.ValueParamProvider;
@Singleton @Singleton
public class SessionHelperFactoryProvider extends AbstractValueFactoryProvider { public class SessionHelperFactoryProvider extends AbstractValueParamProvider {
private HttpServletRequest request;
@Inject @Inject
public SessionHelperFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider, final ServiceLocator injector) { public SessionHelperFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider, HttpServletRequest request) {
super(extractorProvider, injector, Parameter.Source.CONTEXT); super(() -> extractorProvider, Parameter.Source.CONTEXT);
this.request = request;
} }
@Override @Override
protected Factory<?> createValueFactory(final Parameter parameter) { protected Function<ContainerRequest, ?> createValueProvider(Parameter parameter) {
final Class<?> classType = parameter.getRawType(); final Class<?> classType = parameter.getRawType();
Context context = parameter.getAnnotation(Context.class); Context context = parameter.getAnnotation(Context.class);
@@ -32,26 +34,18 @@ public class SessionHelperFactoryProvider extends AbstractValueFactoryProvider {
return null; return null;
} }
if (classType.isAssignableFrom(SessionHelper.class)) { if (!classType.isAssignableFrom(SessionHelper.class)) {
return new SessionHelperFactory();
} else {
return null; return null;
} }
}
public static class SessionHelperInjectionResolver extends ParamInjectionResolver<Context> { return r -> new SessionHelper(request);
public SessionHelperInjectionResolver() {
super(SessionHelperFactoryProvider.class);
}
} }
public static class Binder extends AbstractBinder { public static class Binder extends AbstractBinder {
@Override @Override
protected void configure() { protected void configure() {
bind(SessionHelperFactoryProvider.class).to(ValueFactoryProvider.class).in(Singleton.class); bind(SessionHelperFactoryProvider.class).to(ValueParamProvider.class).in(Singleton.class);
bind(SessionHelperInjectionResolver.class).to(new TypeLiteral<InjectionResolver<Context>>() {
}).in(Singleton.class);
} }
} }
} }

View File

@@ -65,7 +65,7 @@ public class PubSubServiceTest {
.withMethod("POST") .withMethod("POST")
.withPath("/hub")); .withPath("/hub"));
Mockito.verify(feed, Mockito.never()).setPushTopic(Mockito.anyString()); Mockito.verify(feed, Mockito.never()).setPushTopic(Mockito.anyString());
Mockito.verifyZeroInteractions(queues); Mockito.verifyNoInteractions(queues);
} }
@Test @Test
@@ -92,7 +92,7 @@ public class PubSubServiceTest {
// Assert // Assert
Mockito.verify(feed, Mockito.never()).setPushTopic(Mockito.anyString()); Mockito.verify(feed, Mockito.never()).setPushTopic(Mockito.anyString());
Mockito.verifyZeroInteractions(queues); Mockito.verifyNoInteractions(queues);
} }
} }

View File

@@ -23,8 +23,7 @@ public class SecurityCheckFactoryTest {
UserService service = new UserService(null, null, null, null, null, null, null, postLoginActivities); UserService service = new UserService(null, null, null, null, null, null, null, postLoginActivities);
SecurityCheckFactory factory = new SecurityCheckFactory(null, false); SecurityCheckFactory factory = new SecurityCheckFactory(service, null, null, false);
factory.userService = service;
factory.cookieSessionLogin(sessionHelper); factory.cookieSessionLogin(sessionHelper);
Mockito.verify(postLoginActivities).executeFor(userInSession); Mockito.verify(postLoginActivities).executeFor(userInSession);