From 3cccf741d6da825ac259e64d928fa6d2dba6bc69 Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 28 Oct 2014 16:31:49 +0100 Subject: [PATCH 1/6] dropwizard upgrade to 0.8.0 --- CHANGELOG | 2 + pom.xml | 32 ++++- .../com/commafeed/CommaFeedApplication.java | 18 +-- .../frontend/auth/SecurityCheckFactory.java | 96 ++++++++++++++ .../auth/SecurityCheckFactoryProvider.java | 64 +++++++++ .../frontend/auth/SecurityCheckProvider.java | 124 ------------------ .../commafeed/frontend/resource/FeedREST.java | 2 +- .../session/SessionHelperFactory.java | 17 +++ .../session/SessionHelperFactoryProvider.java | 56 ++++++++ .../session/SessionHelperProvider.java | 44 ------- ...est.java => SecurityCheckFactoryTest.java} | 8 +- 11 files changed, 274 insertions(+), 189 deletions(-) create mode 100644 src/main/java/com/commafeed/frontend/auth/SecurityCheckFactory.java create mode 100644 src/main/java/com/commafeed/frontend/auth/SecurityCheckFactoryProvider.java delete mode 100644 src/main/java/com/commafeed/frontend/auth/SecurityCheckProvider.java create mode 100644 src/main/java/com/commafeed/frontend/session/SessionHelperFactory.java create mode 100644 src/main/java/com/commafeed/frontend/session/SessionHelperFactoryProvider.java delete mode 100644 src/main/java/com/commafeed/frontend/session/SessionHelperProvider.java rename src/test/java/com/commafeed/frontend/auth/{SecurityCheckInjectableTest.java => SecurityCheckFactoryTest.java} (78%) diff --git a/CHANGELOG b/CHANGELOG index d714369d..d760cde9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +v 2.1.0 + - dropwizard upgrade to 0.8.0 v 2.0.3 - internet explorer ajax cache workaround - categories are now deletable again diff --git a/pom.xml b/pom.xml index 0b00a49f..82e7fb08 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.commafeed commafeed - 2.0.3 + 2.1.0-SNAPSHOT jar CommaFeed @@ -14,12 +14,25 @@ UTF-8 - 0.7.1 + 0.8.0-SNAPSHOT 3.0 3.5.0 1.5.0 + + + oss_snapshots + https://oss.sonatype.org/content/repositories/snapshots/ + + false + + + true + + + + scm:git:https://github.com/Athou/commafeed.git scm:git:https://github.com/Athou/commafeed.git @@ -220,7 +233,7 @@ ${dropwizard.version} pom - + com.wordnik swagger-jaxrs_2.10 @@ -232,7 +245,7 @@ - + com.mysema.querydsl querydsl-apt @@ -245,7 +258,12 @@ querydsl-jpa ${querydsl.version} - + + + commons-lang + commons-lang + 2.6 + commons-io commons-io @@ -266,7 +284,7 @@ commons-math3 3.3 - + redis.clients jedis @@ -277,7 +295,7 @@ javax.mail 1.5.2 - + com.rometools rome diff --git a/src/main/java/com/commafeed/CommaFeedApplication.java b/src/main/java/com/commafeed/CommaFeedApplication.java index 41018307..60651267 100644 --- a/src/main/java/com/commafeed/CommaFeedApplication.java +++ b/src/main/java/com/commafeed/CommaFeedApplication.java @@ -5,6 +5,7 @@ import io.dropwizard.assets.AssetsBundle; import io.dropwizard.db.DataSourceFactory; import io.dropwizard.hibernate.HibernateBundle; import io.dropwizard.migrations.MigrationsBundle; +import io.dropwizard.server.DefaultServerFactory; import io.dropwizard.servlets.CacheBustingFilter; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; @@ -22,6 +23,7 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.eclipse.jetty.server.session.SessionHandler; +import org.glassfish.jersey.media.multipart.MultiPartFeature; import com.commafeed.backend.feed.FeedRefreshTaskGiver; import com.commafeed.backend.feed.FeedRefreshUpdater; @@ -41,8 +43,7 @@ import com.commafeed.backend.service.StartupService; import com.commafeed.backend.service.UserService; import com.commafeed.backend.task.OldStatusesCleanupTask; import com.commafeed.backend.task.OrphansCleanupTask; -import com.commafeed.frontend.auth.SecurityCheckProvider; -import com.commafeed.frontend.auth.SecurityCheckProvider.SecurityCheckUserServiceProvider; +import com.commafeed.frontend.auth.SecurityCheckFactoryProvider; import com.commafeed.frontend.resource.AdminREST; import com.commafeed.frontend.resource.CategoryREST; import com.commafeed.frontend.resource.EntryREST; @@ -54,10 +55,9 @@ import com.commafeed.frontend.servlet.AnalyticsServlet; import com.commafeed.frontend.servlet.CustomCssServlet; import com.commafeed.frontend.servlet.LogoutServlet; import com.commafeed.frontend.servlet.NextUnreadServlet; -import com.commafeed.frontend.session.SessionHelperProvider; +import com.commafeed.frontend.session.SessionHelperFactoryProvider; import com.google.inject.Guice; import com.google.inject.Injector; -import com.sun.jersey.api.core.ResourceConfig; import com.wordnik.swagger.config.ConfigFactory; import com.wordnik.swagger.config.ScannerFactory; import com.wordnik.swagger.config.SwaggerConfig; @@ -113,12 +113,12 @@ public class CommaFeedApplication extends Application { // Auth/session management environment.servlets().setSessionHandler(new SessionHandler(config.getSessionManagerFactory().build())); - environment.jersey().register(new SecurityCheckUserServiceProvider(injector.getInstance(UserService.class))); - environment.jersey().register(SecurityCheckProvider.class); - environment.jersey().register(SessionHelperProvider.class); + environment.jersey().register(new SecurityCheckFactoryProvider.Binder(injector.getInstance(UserService.class))); + environment.jersey().register(new SessionHelperFactoryProvider.Binder()); // REST resources environment.jersey().setUrlPattern("/rest/*"); + ((DefaultServerFactory) config.getServerFactory()).setJerseyRootPath("/rest/*"); environment.jersey().register(injector.getInstance(AdminREST.class)); environment.jersey().register(injector.getInstance(CategoryREST.class)); environment.jersey().register(injector.getInstance(EntryREST.class)); @@ -127,6 +127,8 @@ public class CommaFeedApplication extends Application { environment.jersey().register(injector.getInstance(ServerREST.class)); environment.jersey().register(injector.getInstance(UserREST.class)); + environment.jersey().register(MultiPartFeature.class); + // Servlets environment.servlets().addServlet("next", injector.getInstance(NextUnreadServlet.class)).addMapping("/next"); environment.servlets().addServlet("logout", injector.getInstance(LogoutServlet.class)).addMapping("/logout"); @@ -170,8 +172,6 @@ public class CommaFeedApplication extends Application { } }).addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/rest/*"); - // enable wadl - environment.jersey().disable(ResourceConfig.FEATURE_DISABLE_WADL); } public static void main(String[] args) throws Exception { diff --git a/src/main/java/com/commafeed/frontend/auth/SecurityCheckFactory.java b/src/main/java/com/commafeed/frontend/auth/SecurityCheckFactory.java new file mode 100644 index 00000000..6f4dd3c9 --- /dev/null +++ b/src/main/java/com/commafeed/frontend/auth/SecurityCheckFactory.java @@ -0,0 +1,96 @@ +package com.commafeed.frontend.auth; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import lombok.RequiredArgsConstructor; + +import org.eclipse.jetty.util.B64Code; +import org.eclipse.jetty.util.StringUtil; +import org.glassfish.jersey.server.internal.inject.AbstractContainerRequestValueFactory; + +import com.commafeed.backend.model.User; +import com.commafeed.backend.model.UserRole.Role; +import com.commafeed.backend.service.UserService; +import com.commafeed.frontend.session.SessionHelper; +import com.google.common.base.Optional; + +@RequiredArgsConstructor +public class SecurityCheckFactory extends AbstractContainerRequestValueFactory { + + private static final String PREFIX = "Basic"; + + @Context + HttpServletRequest request; + + @Inject + UserService userService; + + private final Role role; + private final boolean apiKeyAllowed; + + @Override + public User provide() { + Optional user = apiKeyLogin(); + if (!user.isPresent()) { + user = basicAuthenticationLogin(); + } + if (!user.isPresent()) { + user = cookieSessionLogin(new SessionHelper(request)); + } + + if (user.isPresent()) { + if (user.get().hasRole(role)) { + return user.get(); + } else { + throw new WebApplicationException(Response.status(Response.Status.FORBIDDEN) + .entity("You don't have the required role to access this resource.").type(MediaType.TEXT_PLAIN_TYPE).build()); + } + } else { + throw new WebApplicationException(Response.status(Response.Status.UNAUTHORIZED) + .entity("Credentials are required to access this resource.").type(MediaType.TEXT_PLAIN_TYPE).build()); + } + } + + Optional cookieSessionLogin(SessionHelper sessionHelper) { + Optional loggedInUser = sessionHelper.getLoggedInUser(); + if (loggedInUser.isPresent()) { + userService.performPostLoginActivities(loggedInUser.get()); + } + return loggedInUser; + } + + private Optional basicAuthenticationLogin() { + String header = request.getHeader(HttpHeaders.AUTHORIZATION); + if (header != null) { + int space = header.indexOf(' '); + if (space > 0) { + String method = header.substring(0, space); + if (PREFIX.equalsIgnoreCase(method)) { + String decoded = B64Code.decode(header.substring(space + 1), StringUtil.__ISO_8859_1); + int i = decoded.indexOf(':'); + if (i > 0) { + String username = decoded.substring(0, i); + String password = decoded.substring(i + 1); + return userService.login(username, password); + } + } + } + } + return Optional.absent(); + } + + private Optional apiKeyLogin() { + String apiKey = request.getParameter("apiKey"); + if (apiKey != null && apiKeyAllowed) { + return userService.login(apiKey); + } + return Optional.absent(); + } + +} diff --git a/src/main/java/com/commafeed/frontend/auth/SecurityCheckFactoryProvider.java b/src/main/java/com/commafeed/frontend/auth/SecurityCheckFactoryProvider.java new file mode 100644 index 00000000..8d389c00 --- /dev/null +++ b/src/main/java/com/commafeed/frontend/auth/SecurityCheckFactoryProvider.java @@ -0,0 +1,64 @@ +package com.commafeed.frontend.auth; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import lombok.RequiredArgsConstructor; + +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.jersey.server.internal.inject.AbstractValueFactoryProvider; +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.spi.internal.ValueFactoryProvider; + +import com.commafeed.backend.model.User; +import com.commafeed.backend.service.UserService; + +@Singleton +public class SecurityCheckFactoryProvider extends AbstractValueFactoryProvider { + + @Inject + public SecurityCheckFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider, final ServiceLocator injector) { + super(extractorProvider, injector, Parameter.Source.UNKNOWN); + } + + @Override + protected Factory createValueFactory(final Parameter parameter) { + final Class classType = parameter.getRawType(); + + SecurityCheck securityCheck = parameter.getAnnotation(SecurityCheck.class); + if (securityCheck == null) + return null; + + if (classType.isAssignableFrom(User.class)) { + return new SecurityCheckFactory(securityCheck.value(), securityCheck.apiKeyAllowed()); + } else { + return null; + } + } + + public static class SecurityCheckInjectionResolver extends ParamInjectionResolver { + public SecurityCheckInjectionResolver() { + super(SecurityCheckFactoryProvider.class); + } + } + + @RequiredArgsConstructor + public static class Binder extends AbstractBinder { + + private final UserService userService; + + @Override + protected void configure() { + bind(SecurityCheckFactoryProvider.class).to(ValueFactoryProvider.class).in(Singleton.class); + bind(SecurityCheckInjectionResolver.class).to(new TypeLiteral>() { + }).in(Singleton.class); + bind(userService).to(UserService.class); + } + } +} diff --git a/src/main/java/com/commafeed/frontend/auth/SecurityCheckProvider.java b/src/main/java/com/commafeed/frontend/auth/SecurityCheckProvider.java deleted file mode 100644 index 030187e7..00000000 --- a/src/main/java/com/commafeed/frontend/auth/SecurityCheckProvider.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.commafeed.frontend.auth; - -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import lombok.RequiredArgsConstructor; - -import org.eclipse.jetty.util.B64Code; -import org.eclipse.jetty.util.StringUtil; - -import com.commafeed.backend.model.User; -import com.commafeed.backend.model.UserRole.Role; -import com.commafeed.backend.service.UserService; -import com.commafeed.frontend.session.SessionHelper; -import com.google.common.base.Optional; -import com.sun.jersey.api.core.HttpContext; -import com.sun.jersey.api.model.Parameter; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.core.spi.component.ComponentScope; -import com.sun.jersey.server.impl.inject.AbstractHttpContextInjectable; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.InjectableProvider; -import com.sun.jersey.spi.inject.SingletonTypeInjectableProvider; - -public class SecurityCheckProvider implements InjectableProvider { - - public static class SecurityCheckUserServiceProvider extends SingletonTypeInjectableProvider { - - public SecurityCheckUserServiceProvider(UserService userService) { - super(UserService.class, userService); - } - } - - @RequiredArgsConstructor - static class SecurityCheckInjectable extends AbstractHttpContextInjectable { - private static final String PREFIX = "Basic"; - - private final SessionHelper sessionHelper; - private final UserService userService; - private final Role role; - private final boolean apiKeyAllowed; - - @Override - public User getValue(HttpContext c) { - Optional user = apiKeyLogin(c); - if (!user.isPresent()) { - user = basicAuthenticationLogin(c); - } - if (!user.isPresent()) { - user = cookieSessionLogin(); - } - - if (user.isPresent()) { - if (user.get().hasRole(role)) { - return user.get(); - } else { - throw new WebApplicationException(Response.status(Response.Status.FORBIDDEN) - .entity("You don't have the required role to access this resource.").type(MediaType.TEXT_PLAIN_TYPE).build()); - } - } else { - throw new WebApplicationException(Response.status(Response.Status.UNAUTHORIZED) - .entity("Credentials are required to access this resource.").type(MediaType.TEXT_PLAIN_TYPE).build()); - } - } - - Optional cookieSessionLogin() { - Optional loggedInUser = sessionHelper.getLoggedInUser(); - if (loggedInUser.isPresent()) { - userService.performPostLoginActivities(loggedInUser.get()); - } - return loggedInUser; - } - - private Optional basicAuthenticationLogin(HttpContext c) { - String header = c.getRequest().getHeaderValue(HttpHeaders.AUTHORIZATION); - if (header != null) { - int space = header.indexOf(' '); - if (space > 0) { - String method = header.substring(0, space); - if (PREFIX.equalsIgnoreCase(method)) { - String decoded = B64Code.decode(header.substring(space + 1), StringUtil.__ISO_8859_1); - int i = decoded.indexOf(':'); - if (i > 0) { - String username = decoded.substring(0, i); - String password = decoded.substring(i + 1); - return userService.login(username, password); - } - } - } - } - return Optional.absent(); - } - - private Optional apiKeyLogin(HttpContext c) { - String apiKey = c.getUriInfo().getQueryParameters().getFirst("apiKey"); - if (apiKey != null && apiKeyAllowed) { - return userService.login(apiKey); - } - return Optional.absent(); - } - } - - private SessionHelper sessionHelper; - private UserService userService; - - public SecurityCheckProvider(@Context HttpServletRequest req, @Context UserService userService) { - this.sessionHelper = new SessionHelper(req); - this.userService = userService; - } - - @Override - public ComponentScope getScope() { - return ComponentScope.PerRequest; - } - - @Override - public Injectable getInjectable(ComponentContext ic, SecurityCheck sc, Parameter c) { - return new SecurityCheckInjectable(sessionHelper, userService, sc.value(), sc.apiKeyAllowed()); - } -} diff --git a/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/src/main/java/com/commafeed/frontend/resource/FeedREST.java index 7dc5cbba..cd1ef48a 100644 --- a/src/main/java/com/commafeed/frontend/resource/FeedREST.java +++ b/src/main/java/com/commafeed/frontend/resource/FeedREST.java @@ -35,6 +35,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; +import org.glassfish.jersey.media.multipart.FormDataParam; import com.commafeed.CommaFeedApplication; import com.commafeed.CommaFeedConfiguration; @@ -78,7 +79,6 @@ import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.feed.synd.SyndFeedImpl; import com.rometools.rome.io.SyndFeedOutput; import com.rometools.rome.io.WireFeedOutput; -import com.sun.jersey.multipart.FormDataParam; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiOperation; import com.wordnik.swagger.annotations.ApiParam; diff --git a/src/main/java/com/commafeed/frontend/session/SessionHelperFactory.java b/src/main/java/com/commafeed/frontend/session/SessionHelperFactory.java new file mode 100644 index 00000000..a6ecad6b --- /dev/null +++ b/src/main/java/com/commafeed/frontend/session/SessionHelperFactory.java @@ -0,0 +1,17 @@ +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 { + + @Context + HttpServletRequest request; + + @Override + public SessionHelper provide() { + return new SessionHelper(request); + } +} \ No newline at end of file diff --git a/src/main/java/com/commafeed/frontend/session/SessionHelperFactoryProvider.java b/src/main/java/com/commafeed/frontend/session/SessionHelperFactoryProvider.java new file mode 100644 index 00000000..7eb0cbe9 --- /dev/null +++ b/src/main/java/com/commafeed/frontend/session/SessionHelperFactoryProvider.java @@ -0,0 +1,56 @@ +package com.commafeed.frontend.session; + +import javax.inject.Inject; +import javax.inject.Singleton; +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.jersey.server.internal.inject.AbstractValueFactoryProvider; +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.spi.internal.ValueFactoryProvider; + +@Singleton +public class SessionHelperFactoryProvider extends AbstractValueFactoryProvider { + + @Inject + public SessionHelperFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider, final ServiceLocator injector) { + super(extractorProvider, injector, Parameter.Source.CONTEXT); + } + + @Override + protected Factory createValueFactory(final Parameter parameter) { + final Class classType = parameter.getRawType(); + + Context context = parameter.getAnnotation(Context.class); + if (context == null) + return null; + + if (classType.isAssignableFrom(SessionHelper.class)) { + return new SessionHelperFactory(); + } else { + return null; + } + } + + public static class SessionHelperInjectionResolver extends ParamInjectionResolver { + public SessionHelperInjectionResolver() { + super(SessionHelperFactoryProvider.class); + } + } + + public static class Binder extends AbstractBinder { + + @Override + protected void configure() { + bind(SessionHelperFactoryProvider.class).to(ValueFactoryProvider.class).in(Singleton.class); + bind(SessionHelperInjectionResolver.class).to(new TypeLiteral>() { + }).in(Singleton.class); + } + } +} diff --git a/src/main/java/com/commafeed/frontend/session/SessionHelperProvider.java b/src/main/java/com/commafeed/frontend/session/SessionHelperProvider.java deleted file mode 100644 index aba77faf..00000000 --- a/src/main/java/com/commafeed/frontend/session/SessionHelperProvider.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.commafeed.frontend.session; - -import java.lang.reflect.Type; - -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Context; -import javax.ws.rs.ext.Provider; - -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.core.spi.component.ComponentScope; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.InjectableProvider; - -@Provider -public class SessionHelperProvider implements InjectableProvider { - - private final ThreadLocal request; - - public SessionHelperProvider(@Context ThreadLocal request) { - this.request = request; - } - - @Override - public ComponentScope getScope() { - return ComponentScope.PerRequest; - } - - @Override - public Injectable getInjectable(ComponentContext ic, final Context session, Type type) { - if (type.equals(SessionHelper.class)) { - return new Injectable() { - @Override - public SessionHelper getValue() { - final HttpServletRequest req = request.get(); - if (req != null) { - return new SessionHelper(req); - } - return null; - } - }; - } - return null; - } -} \ No newline at end of file diff --git a/src/test/java/com/commafeed/frontend/auth/SecurityCheckInjectableTest.java b/src/test/java/com/commafeed/frontend/auth/SecurityCheckFactoryTest.java similarity index 78% rename from src/test/java/com/commafeed/frontend/auth/SecurityCheckInjectableTest.java rename to src/test/java/com/commafeed/frontend/auth/SecurityCheckFactoryTest.java index 429b055d..5c5f5861 100644 --- a/src/test/java/com/commafeed/frontend/auth/SecurityCheckInjectableTest.java +++ b/src/test/java/com/commafeed/frontend/auth/SecurityCheckFactoryTest.java @@ -9,11 +9,10 @@ import org.junit.Test; import com.commafeed.backend.model.User; import com.commafeed.backend.service.UserService; import com.commafeed.backend.service.internal.PostLoginActivities; -import com.commafeed.frontend.auth.SecurityCheckProvider.SecurityCheckInjectable; import com.commafeed.frontend.session.SessionHelper; import com.google.common.base.Optional; -public class SecurityCheckInjectableTest { +public class SecurityCheckFactoryTest { @Test public void cookie_login_should_perform_post_login_activities_if_user_is_logged_in() { @@ -26,8 +25,9 @@ public class SecurityCheckInjectableTest { UserService service = new UserService(null, null, null, null, null, postLoginActivities); - SecurityCheckInjectable injectable = new SecurityCheckInjectable(sessionHelper, service, null, false); - injectable.cookieSessionLogin(); + SecurityCheckFactory factory = new SecurityCheckFactory(null, false); + factory.userService = service; + factory.cookieSessionLogin(sessionHelper); verify(postLoginActivities).executeFor(userInSession); } From 24bd1121af7efccbd8e84bf4e4ef8aa3ab228331 Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 28 Oct 2014 16:36:09 +0100 Subject: [PATCH 2/6] commons-lang upgrade to v3 --- pom.xml | 9 ++++----- .../com/commafeed/CommaFeedConfiguration.java | 2 +- .../java/com/commafeed/CommaFeedModule.java | 2 +- .../java/com/commafeed/backend/HttpGetter.java | 4 ++-- .../backend/cache/RedisPoolFactory.java | 2 +- .../commafeed/backend/dao/FeedCategoryDAO.java | 4 ++-- .../com/commafeed/backend/dao/FeedDAO.java | 2 +- .../backend/dao/FeedEntryStatusDAO.java | 4 ++-- .../favicon/AbstractFaviconFetcher.java | 2 +- .../backend/favicon/DefaultFaviconFetcher.java | 2 +- .../commafeed/backend/feed/FeedFetcher.java | 2 +- .../com/commafeed/backend/feed/FeedParser.java | 5 ++--- .../com/commafeed/backend/feed/FeedQueues.java | 2 +- .../backend/feed/FeedRefreshUpdater.java | 4 ++-- .../backend/feed/FeedRefreshWorker.java | 4 ++-- .../com/commafeed/backend/feed/FeedUtils.java | 7 ++++--- .../java/com/commafeed/backend/model/User.java | 4 ++-- .../commafeed/backend/opml/OPMLImporter.java | 2 +- .../service/FeedEntryContentService.java | 2 +- .../service/FeedSubscriptionService.java | 2 +- .../service/PasswordEncryptionService.java | 2 +- .../backend/service/PubSubService.java | 2 +- .../commafeed/backend/service/UserService.java | 6 +++--- .../service/internal/PostLoginActivities.java | 6 +++--- .../commafeed/frontend/resource/AdminREST.java | 2 +- .../frontend/resource/CategoryREST.java | 11 ++++++----- .../commafeed/frontend/resource/FeedREST.java | 7 ++++--- .../resource/PubSubHubbubCallbackREST.java | 4 ++-- .../frontend/resource/ServerREST.java | 2 +- .../commafeed/frontend/resource/UserREST.java | 6 +++--- .../frontend/servlet/AnalyticsServlet.java | 2 +- .../frontend/servlet/NextUnreadServlet.java | 2 +- .../ics/crawler4j/url/URLCanonicalizer.java | 18 ++++++++---------- .../backend/FixedSizeSortedSetTest.java | 2 +- 34 files changed, 69 insertions(+), 70 deletions(-) diff --git a/pom.xml b/pom.xml index 82e7fb08..43157dd6 100644 --- a/pom.xml +++ b/pom.xml @@ -243,6 +243,10 @@ javax.ws.rs jsr311-api + + commons-lang + commons-lang + @@ -259,11 +263,6 @@ ${querydsl.version} - - commons-lang - commons-lang - 2.6 - commons-io commons-io diff --git a/src/main/java/com/commafeed/CommaFeedConfiguration.java b/src/main/java/com/commafeed/CommaFeedConfiguration.java index 5e8fc163..7e527308 100644 --- a/src/main/java/com/commafeed/CommaFeedConfiguration.java +++ b/src/main/java/com/commafeed/CommaFeedConfiguration.java @@ -12,7 +12,7 @@ import javax.validation.constraints.NotNull; import lombok.Getter; -import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.time.DateUtils; import org.hibernate.validator.constraints.NotBlank; import com.commafeed.backend.cache.RedisPoolFactory; diff --git a/src/main/java/com/commafeed/CommaFeedModule.java b/src/main/java/com/commafeed/CommaFeedModule.java index a18b0be3..62d3911d 100644 --- a/src/main/java/com/commafeed/CommaFeedModule.java +++ b/src/main/java/com/commafeed/CommaFeedModule.java @@ -11,8 +11,8 @@ import com.commafeed.CommaFeedConfiguration.CacheType; import com.commafeed.backend.cache.CacheService; import com.commafeed.backend.cache.NoopCacheService; import com.commafeed.backend.cache.RedisCacheService; -import com.commafeed.backend.favicon.DefaultFaviconFetcher; import com.commafeed.backend.favicon.AbstractFaviconFetcher; +import com.commafeed.backend.favicon.DefaultFaviconFetcher; import com.commafeed.backend.favicon.YoutubeFaviconFetcher; import com.google.inject.AbstractModule; import com.google.inject.Provides; diff --git a/src/main/java/com/commafeed/backend/HttpGetter.java b/src/main/java/com/commafeed/backend/HttpGetter.java index bca16f9f..78921ae8 100644 --- a/src/main/java/com/commafeed/backend/HttpGetter.java +++ b/src/main/java/com/commafeed/backend/HttpGetter.java @@ -17,7 +17,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.http.Consts; import org.apache.http.Header; import org.apache.http.HttpEntity; @@ -53,7 +53,7 @@ public class HttpGetter { private static final String ACCEPT_LANGUAGE = "en"; private static final String PRAGMA_NO_CACHE = "No-cache"; private static final String CACHE_CONTROL_NO_CACHE = "no-cache"; - + private static final HttpResponseInterceptor REMOVE_INCORRECT_CONTENT_ENCODING = new ContentEncodingInterceptor(); private static SSLContext SSL_CONTEXT = null; diff --git a/src/main/java/com/commafeed/backend/cache/RedisPoolFactory.java b/src/main/java/com/commafeed/backend/cache/RedisPoolFactory.java index 302a2793..9cdb6671 100644 --- a/src/main/java/com/commafeed/backend/cache/RedisPoolFactory.java +++ b/src/main/java/com/commafeed/backend/cache/RedisPoolFactory.java @@ -2,7 +2,7 @@ package com.commafeed.backend.cache; import lombok.Getter; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; diff --git a/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java index d8e94817..7b5aac2d 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java @@ -1,11 +1,11 @@ package com.commafeed.backend.dao; import java.util.List; +import java.util.Objects; import javax.inject.Inject; import javax.inject.Singleton; -import org.apache.commons.lang.ObjectUtils; import org.hibernate.SessionFactory; import com.commafeed.backend.model.FeedCategory; @@ -70,7 +70,7 @@ public class FeedCategoryDAO extends GenericDAO { } boolean isChild = false; while (child != null) { - if (ObjectUtils.equals(child.getId(), parent.getId())) { + if (Objects.equals(child.getId(), parent.getId())) { isChild = true; break; } diff --git a/src/main/java/com/commafeed/backend/dao/FeedDAO.java b/src/main/java/com/commafeed/backend/dao/FeedDAO.java index f8dad975..bd1ebeb8 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedDAO.java @@ -7,7 +7,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.hibernate.SessionFactory; import com.commafeed.backend.model.Feed; diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java index a349c8ed..2472912b 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java @@ -7,8 +7,8 @@ import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.builder.CompareToBuilder; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.builder.CompareToBuilder; import org.hibernate.SessionFactory; import com.commafeed.CommaFeedConfiguration; diff --git a/src/main/java/com/commafeed/backend/favicon/AbstractFaviconFetcher.java b/src/main/java/com/commafeed/backend/favicon/AbstractFaviconFetcher.java index bd10f197..ff71535c 100644 --- a/src/main/java/com/commafeed/backend/favicon/AbstractFaviconFetcher.java +++ b/src/main/java/com/commafeed/backend/favicon/AbstractFaviconFetcher.java @@ -5,7 +5,7 @@ import java.util.List; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import com.commafeed.backend.model.Feed; diff --git a/src/main/java/com/commafeed/backend/favicon/DefaultFaviconFetcher.java b/src/main/java/com/commafeed/backend/favicon/DefaultFaviconFetcher.java index d6b90f8b..b4e3da67 100644 --- a/src/main/java/com/commafeed/backend/favicon/DefaultFaviconFetcher.java +++ b/src/main/java/com/commafeed/backend/favicon/DefaultFaviconFetcher.java @@ -6,7 +6,7 @@ import javax.inject.Singleton; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; diff --git a/src/main/java/com/commafeed/backend/feed/FeedFetcher.java b/src/main/java/com/commafeed/backend/feed/FeedFetcher.java index c492f7f3..0929b72f 100644 --- a/src/main/java/com/commafeed/backend/feed/FeedFetcher.java +++ b/src/main/java/com/commafeed/backend/feed/FeedFetcher.java @@ -45,7 +45,7 @@ public class FeedFetcher { } catch (FeedException e) { if (extractFeedUrlFromHtml) { String extractedUrl = extractFeedUrl(StringUtils.newStringUtf8(result.getContent()), feedUrl); - if (org.apache.commons.lang.StringUtils.isNotBlank(extractedUrl)) { + if (org.apache.commons.lang3.StringUtils.isNotBlank(extractedUrl)) { feedUrl = extractedUrl; result = getter.getBinary(extractedUrl, lastModified, eTag, timeout); diff --git a/src/main/java/com/commafeed/backend/feed/FeedParser.java b/src/main/java/com/commafeed/backend/feed/FeedParser.java index baf87413..2e0f807f 100644 --- a/src/main/java/com/commafeed/backend/feed/FeedParser.java +++ b/src/main/java/com/commafeed/backend/feed/FeedParser.java @@ -11,8 +11,7 @@ import javax.inject.Singleton; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.SystemUtils; +import org.apache.commons.lang3.StringUtils; import org.jdom2.Element; import org.jdom2.Namespace; import org.xml.sax.InputSource; @@ -173,7 +172,7 @@ public class FeedParser { if (item.getContents().isEmpty()) { content = item.getDescription() == null ? null : item.getDescription().getValue(); } else { - content = StringUtils.join(Collections2.transform(item.getContents(), CONTENT_TO_STRING), SystemUtils.LINE_SEPARATOR); + content = StringUtils.join(Collections2.transform(item.getContents(), CONTENT_TO_STRING), System.lineSeparator()); } return StringUtils.trimToNull(content); } diff --git a/src/main/java/com/commafeed/backend/feed/FeedQueues.java b/src/main/java/com/commafeed/backend/feed/FeedQueues.java index c3c90bc8..288e4f2f 100644 --- a/src/main/java/com/commafeed/backend/feed/FeedQueues.java +++ b/src/main/java/com/commafeed/backend/feed/FeedQueues.java @@ -9,7 +9,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.time.DateUtils; import com.codahale.metrics.Gauge; import com.codahale.metrics.Meter; diff --git a/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java b/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java index e526a0a1..b80de7c0 100644 --- a/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java +++ b/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java @@ -16,8 +16,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; import org.hibernate.SessionFactory; import com.codahale.metrics.Meter; diff --git a/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java b/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java index 4192d3f1..70c66cae 100644 --- a/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java +++ b/src/main/java/com/commafeed/backend/feed/FeedRefreshWorker.java @@ -11,8 +11,8 @@ import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; import com.codahale.metrics.MetricRegistry; import com.commafeed.CommaFeedConfiguration; diff --git a/src/main/java/com/commafeed/backend/feed/FeedUtils.java b/src/main/java/com/commafeed/backend/feed/FeedUtils.java index c722a2b9..a8a8d2f1 100644 --- a/src/main/java/com/commafeed/backend/feed/FeedUtils.java +++ b/src/main/java/com/commafeed/backend/feed/FeedUtils.java @@ -13,9 +13,9 @@ import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -517,4 +517,5 @@ public class FeedUtils { } } } + } diff --git a/src/main/java/com/commafeed/backend/model/User.java b/src/main/java/com/commafeed/backend/model/User.java index ddd3fab5..3b8a5126 100644 --- a/src/main/java/com/commafeed/backend/model/User.java +++ b/src/main/java/com/commafeed/backend/model/User.java @@ -15,7 +15,7 @@ import javax.persistence.TemporalType; import lombok.Getter; import lombok.Setter; -import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.time.DateUtils; import org.hibernate.annotations.Cascade; import com.commafeed.backend.model.UserRole.Role; @@ -78,7 +78,7 @@ public class User extends AbstractModel { } return false; } - + public boolean shouldRefreshFeedsAt(Date when) { return (lastFullRefresh == null || lastFullRefreshMoreThan30MinutesBefore(when)); } diff --git a/src/main/java/com/commafeed/backend/opml/OPMLImporter.java b/src/main/java/com/commafeed/backend/opml/OPMLImporter.java index 6ff2ddff..3084f5b1 100644 --- a/src/main/java/com/commafeed/backend/opml/OPMLImporter.java +++ b/src/main/java/com/commafeed/backend/opml/OPMLImporter.java @@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import com.commafeed.backend.cache.CacheService; import com.commafeed.backend.dao.FeedCategoryDAO; diff --git a/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java b/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java index 2a4e1011..d7bc7fdf 100644 --- a/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java +++ b/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java @@ -6,7 +6,7 @@ import javax.inject.Singleton; import lombok.RequiredArgsConstructor; import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import com.commafeed.backend.dao.FeedEntryContentDAO; import com.commafeed.backend.feed.FeedUtils; diff --git a/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java b/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java index dbe6b542..950a7632 100644 --- a/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java +++ b/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java @@ -9,7 +9,7 @@ import javax.inject.Singleton; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.cache.CacheService; diff --git a/src/main/java/com/commafeed/backend/service/PasswordEncryptionService.java b/src/main/java/com/commafeed/backend/service/PasswordEncryptionService.java index 2a61b3c8..c387a271 100644 --- a/src/main/java/com/commafeed/backend/service/PasswordEncryptionService.java +++ b/src/main/java/com/commafeed/backend/service/PasswordEncryptionService.java @@ -15,7 +15,7 @@ import javax.inject.Singleton; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; // taken from http://www.javacodegeeks.com/2012/05/secure-password-storage-donts-dos-and.html @SuppressWarnings("serial") diff --git a/src/main/java/com/commafeed/backend/service/PubSubService.java b/src/main/java/com/commafeed/backend/service/PubSubService.java index 0a93240d..d05bd2b5 100644 --- a/src/main/java/com/commafeed/backend/service/PubSubService.java +++ b/src/main/java/com/commafeed/backend/service/PubSubService.java @@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpHeaders; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; diff --git a/src/main/java/com/commafeed/backend/service/UserService.java b/src/main/java/com/commafeed/backend/service/UserService.java index 747de4fb..4a67461a 100644 --- a/src/main/java/com/commafeed/backend/service/UserService.java +++ b/src/main/java/com/commafeed/backend/service/UserService.java @@ -10,7 +10,7 @@ import javax.inject.Singleton; import lombok.RequiredArgsConstructor; import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.dao.FeedCategoryDAO; @@ -33,7 +33,7 @@ public class UserService { private final PasswordEncryptionService encryptionService; private final CommaFeedConfiguration config; - + private final PostLoginActivities postLoginActivities; /** @@ -56,7 +56,7 @@ public class UserService { } } return Optional.absent(); - } + } /** * try to log in with given api key diff --git a/src/main/java/com/commafeed/backend/service/internal/PostLoginActivities.java b/src/main/java/com/commafeed/backend/service/internal/PostLoginActivities.java index 0466cb99..69f8042e 100644 --- a/src/main/java/com/commafeed/backend/service/internal/PostLoginActivities.java +++ b/src/main/java/com/commafeed/backend/service/internal/PostLoginActivities.java @@ -7,7 +7,7 @@ import javax.inject.Singleton; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.time.DateUtils; import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.dao.UserDAO; @@ -17,11 +17,11 @@ import com.commafeed.backend.service.FeedSubscriptionService; @RequiredArgsConstructor(onConstructor = @__({ @Inject })) @Singleton public class PostLoginActivities { - + private final UserDAO userDAO; private final FeedSubscriptionService feedSubscriptionService; private final CommaFeedConfiguration config; - + public void executeFor(User user) { Date lastLogin = user.getLastLogin(); Date now = new Date(); diff --git a/src/main/java/com/commafeed/frontend/resource/AdminREST.java b/src/main/java/com/commafeed/frontend/resource/AdminREST.java index 08e43ba5..96d30184 100644 --- a/src/main/java/com/commafeed/frontend/resource/AdminREST.java +++ b/src/main/java/com/commafeed/frontend/resource/AdminREST.java @@ -19,7 +19,7 @@ import javax.ws.rs.core.Response.Status; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import com.codahale.metrics.MetricRegistry; import com.commafeed.CommaFeedApplication; diff --git a/src/main/java/com/commafeed/frontend/resource/CategoryREST.java b/src/main/java/com/commafeed/frontend/resource/CategoryREST.java index 73a5659a..fd69f7ad 100644 --- a/src/main/java/com/commafeed/frontend/resource/CategoryREST.java +++ b/src/main/java/com/commafeed/frontend/resource/CategoryREST.java @@ -9,6 +9,7 @@ import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import javax.inject.Inject; import javax.inject.Singleton; @@ -27,8 +28,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang.ObjectUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.cache.CacheService; @@ -359,7 +360,7 @@ public class CategoryREST { int existingIndex = -1; for (int i = 0; i < categories.size(); i++) { - if (ObjectUtils.equals(categories.get(i).getId(), category.getId())) { + if (Objects.equals(categories.get(i).getId(), category.getId())) { existingIndex = i; } } @@ -436,7 +437,7 @@ public class CategoryREST { category.setExpanded(true); for (FeedCategory c : categories) { - if ((id == null && c.getParent() == null) || (c.getParent() != null && ObjectUtils.equals(c.getParent().getId(), id))) { + if ((id == null && c.getParent() == null) || (c.getParent() != null && Objects.equals(c.getParent().getId(), id))) { Category child = buildCategory(c.getId(), categories, subscriptions, unreadCount); child.setId(String.valueOf(c.getId())); child.setName(c.getName()); @@ -457,7 +458,7 @@ public class CategoryREST { for (FeedSubscription subscription : subscriptions) { if ((id == null && subscription.getCategory() == null) - || (subscription.getCategory() != null && ObjectUtils.equals(subscription.getCategory().getId(), id))) { + || (subscription.getCategory() != null && Objects.equals(subscription.getCategory().getId(), id))) { UnreadCount uc = unreadCount.get(subscription.getId()); Subscription sub = Subscription.build(subscription, config.getApplicationSettings().getPublicUrl(), uc); category.getFeeds().add(sub); diff --git a/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/src/main/java/com/commafeed/frontend/resource/FeedREST.java index cd1ef48a..711c6938 100644 --- a/src/main/java/com/commafeed/frontend/resource/FeedREST.java +++ b/src/main/java/com/commafeed/frontend/resource/FeedREST.java @@ -11,6 +11,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; +import java.util.Objects; import javax.inject.Inject; import javax.inject.Singleton; @@ -33,8 +34,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.ObjectUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.glassfish.jersey.media.multipart.FormDataParam; import com.commafeed.CommaFeedApplication; @@ -439,7 +440,7 @@ public class FeedREST { int existingIndex = -1; for (int i = 0; i < subs.size(); i++) { - if (ObjectUtils.equals(subs.get(i).getId(), subscription.getId())) { + if (Objects.equals(subs.get(i).getId(), subscription.getId())) { existingIndex = i; } } diff --git a/src/main/java/com/commafeed/frontend/resource/PubSubHubbubCallbackREST.java b/src/main/java/com/commafeed/frontend/resource/PubSubHubbubCallbackREST.java index cf6750ca..716fde4b 100644 --- a/src/main/java/com/commafeed/frontend/resource/PubSubHubbubCallbackREST.java +++ b/src/main/java/com/commafeed/frontend/resource/PubSubHubbubCallbackREST.java @@ -23,8 +23,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; import com.codahale.metrics.MetricRegistry; import com.commafeed.CommaFeedConfiguration; diff --git a/src/main/java/com/commafeed/frontend/resource/ServerREST.java b/src/main/java/com/commafeed/frontend/resource/ServerREST.java index e3623f5e..2407973d 100644 --- a/src/main/java/com/commafeed/frontend/resource/ServerREST.java +++ b/src/main/java/com/commafeed/frontend/resource/ServerREST.java @@ -15,7 +15,7 @@ import javax.ws.rs.core.Response.Status; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.HttpGetter; diff --git a/src/main/java/com/commafeed/frontend/resource/UserREST.java b/src/main/java/com/commafeed/frontend/resource/UserREST.java index cbc450e0..54c9da3d 100644 --- a/src/main/java/com/commafeed/frontend/resource/UserREST.java +++ b/src/main/java/com/commafeed/frontend/resource/UserREST.java @@ -27,9 +27,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.lang.RandomStringUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.time.DateUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; import org.apache.http.client.utils.URIBuilder; import com.commafeed.CommaFeedApplication; diff --git a/src/main/java/com/commafeed/frontend/servlet/AnalyticsServlet.java b/src/main/java/com/commafeed/frontend/servlet/AnalyticsServlet.java index da51d07d..787576e6 100644 --- a/src/main/java/com/commafeed/frontend/servlet/AnalyticsServlet.java +++ b/src/main/java/com/commafeed/frontend/servlet/AnalyticsServlet.java @@ -9,7 +9,7 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import com.commafeed.CommaFeedConfiguration; diff --git a/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java b/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java index fe743b5f..a2c3f29f 100644 --- a/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java +++ b/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java @@ -12,7 +12,7 @@ import javax.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.hibernate.SessionFactory; import com.commafeed.CommaFeedConfiguration; diff --git a/src/main/java/edu/uci/ics/crawler4j/url/URLCanonicalizer.java b/src/main/java/edu/uci/ics/crawler4j/url/URLCanonicalizer.java index d78502d6..ba2ff26a 100644 --- a/src/main/java/edu/uci/ics/crawler4j/url/URLCanonicalizer.java +++ b/src/main/java/edu/uci/ics/crawler4j/url/URLCanonicalizer.java @@ -28,11 +28,11 @@ import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; /** - * See http://en.wikipedia.org/wiki/URL_normalization for a reference Note: some - * parts of the code are adapted from: http://stackoverflow.com/a/4057470/405418 + * See http://en.wikipedia.org/wiki/URL_normalization for a reference Note: some parts of the code are adapted from: + * http://stackoverflow.com/a/4057470/405418 * * @author Yasser Ganjisaffar */ @@ -46,7 +46,7 @@ public class URLCanonicalizer { try { URL canonicalURL = new URL(UrlResolver.resolveUrl(context == null ? "" : context, href)); - + String host = canonicalURL.getHost().toLowerCase(); if (StringUtils.isBlank(host)) { // This is an invalid Url. @@ -113,7 +113,7 @@ public class URLCanonicalizer { URL result = new URL(protocol, host, port, pathAndQueryString); return result.toExternalForm(); - + } catch (MalformedURLException ex) { return null; } catch (URISyntaxException ex) { @@ -122,8 +122,7 @@ public class URLCanonicalizer { } /** - * Takes a query string, separates the constituent name-value pairs, and - * stores them in a SortedMap ordered by lexicographical order. + * Takes a query string, separates the constituent name-value pairs, and stores them in a SortedMap ordered by lexicographical order. * * @return Null if there is no query string. */ @@ -149,7 +148,7 @@ public class URLCanonicalizer { params.put(tokens[0], ""); } break; - case 2: + case 2: params.put(tokens[0], tokens[1]); break; } @@ -188,8 +187,7 @@ public class URLCanonicalizer { } /** - * Percent-encode values according the RFC 3986. The built-in Java - * URLEncoder does not encode according to the RFC, so we make the extra + * Percent-encode values according the RFC 3986. The built-in Java URLEncoder does not encode according to the RFC, so we make the extra * replacements. * * @param string diff --git a/src/test/java/com/commafeed/backend/FixedSizeSortedSetTest.java b/src/test/java/com/commafeed/backend/FixedSizeSortedSetTest.java index 5a81d395..7af2aff8 100644 --- a/src/test/java/com/commafeed/backend/FixedSizeSortedSetTest.java +++ b/src/test/java/com/commafeed/backend/FixedSizeSortedSetTest.java @@ -2,7 +2,7 @@ package com.commafeed.backend; import java.util.Comparator; -import org.apache.commons.lang.ObjectUtils; +import org.apache.commons.lang3.ObjectUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; From 64981308507e40992a26bf376dc9fc596cb617ee Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 28 Oct 2014 16:39:48 +0100 Subject: [PATCH 3/6] remove app.contextPath setting --- .openshift/config.mysql.yml | 3 --- CHANGELOG | 1 + config.dev.yml | 3 --- config.yml.example | 3 --- src/main/java/com/commafeed/CommaFeedApplication.java | 3 --- src/main/java/com/commafeed/CommaFeedConfiguration.java | 4 ---- 6 files changed, 1 insertion(+), 16 deletions(-) diff --git a/.openshift/config.mysql.yml b/.openshift/config.mysql.yml index 3cefeb46..04be9c88 100644 --- a/.openshift/config.mysql.yml +++ b/.openshift/config.mysql.yml @@ -1,9 +1,6 @@ # CommaFeed settings # ------------------ app: - # context path of the application - contextPath: / - # url used to access commafeed publicUrl: https://@OPENSHIFT_APP_DNS@/ diff --git a/CHANGELOG b/CHANGELOG index d760cde9..39e5971b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,6 @@ v 2.1.0 - dropwizard upgrade to 0.8.0 + - remove our custom app.contextPath setting from config, use server.applicationContextPath from dropwizard instead v 2.0.3 - internet explorer ajax cache workaround - categories are now deletable again diff --git a/config.dev.yml b/config.dev.yml index e2ddf666..8a77db95 100644 --- a/config.dev.yml +++ b/config.dev.yml @@ -1,9 +1,6 @@ # CommaFeed settings # ------------------ app: - # context path of the application - contextPath: / - # url used to access commafeed publicUrl: http://localhost:8082/ diff --git a/config.yml.example b/config.yml.example index 9c7ae8c1..8c7bba8d 100644 --- a/config.yml.example +++ b/config.yml.example @@ -1,9 +1,6 @@ # CommaFeed settings # ------------------ app: - # context path of the application - contextPath: / - # url used to access commafeed publicUrl: http://localhost:8082/ diff --git a/src/main/java/com/commafeed/CommaFeedApplication.java b/src/main/java/com/commafeed/CommaFeedApplication.java index 60651267..0f0a2a3d 100644 --- a/src/main/java/com/commafeed/CommaFeedApplication.java +++ b/src/main/java/com/commafeed/CommaFeedApplication.java @@ -105,9 +105,6 @@ public class CommaFeedApplication extends Application { @Override public void run(CommaFeedConfiguration config, Environment environment) throws Exception { - // configure context path - environment.getApplicationContext().setContextPath(config.getApplicationSettings().getContextPath()); - // guice init Injector injector = Guice.createInjector(new CommaFeedModule(hibernateBundle.getSessionFactory(), config, environment.metrics())); diff --git a/src/main/java/com/commafeed/CommaFeedConfiguration.java b/src/main/java/com/commafeed/CommaFeedConfiguration.java index 7e527308..e67d76ab 100644 --- a/src/main/java/com/commafeed/CommaFeedConfiguration.java +++ b/src/main/java/com/commafeed/CommaFeedConfiguration.java @@ -62,10 +62,6 @@ public class CommaFeedConfiguration extends Configuration { @Getter public static class ApplicationSettings { - @NotNull - @NotBlank - private String contextPath; - @NotNull @NotBlank private String publicUrl; From 4b15ecbc1b9cc76a8b3c7063383457e5f17ce9da Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 29 Oct 2014 05:03:17 +0100 Subject: [PATCH 4/6] more comments --- src/main/java/com/commafeed/CommaFeedApplication.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/commafeed/CommaFeedApplication.java b/src/main/java/com/commafeed/CommaFeedApplication.java index 0f0a2a3d..13aff766 100644 --- a/src/main/java/com/commafeed/CommaFeedApplication.java +++ b/src/main/java/com/commafeed/CommaFeedApplication.java @@ -108,9 +108,12 @@ public class CommaFeedApplication extends Application { // guice init Injector injector = Guice.createInjector(new CommaFeedModule(hibernateBundle.getSessionFactory(), config, environment.metrics())); - // Auth/session management + // session management environment.servlets().setSessionHandler(new SessionHandler(config.getSessionManagerFactory().build())); + + // support for "@SecurityCheck User user" intection environment.jersey().register(new SecurityCheckFactoryProvider.Binder(injector.getInstance(UserService.class))); + // support for "@COntext SessionHelper sessionHelper" intection environment.jersey().register(new SessionHelperFactoryProvider.Binder()); // REST resources @@ -124,6 +127,7 @@ public class CommaFeedApplication extends Application { environment.jersey().register(injector.getInstance(ServerREST.class)); environment.jersey().register(injector.getInstance(UserREST.class)); + // @FormDataParam support environment.jersey().register(MultiPartFeature.class); // Servlets From 41f133afb16c177bd42e150e6b11cd92cc527445 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 29 Oct 2014 05:21:40 +0100 Subject: [PATCH 5/6] liquibade upgrade fix --- src/main/resources/changelogs/db.changelog-1.2.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/changelogs/db.changelog-1.2.xml b/src/main/resources/changelogs/db.changelog-1.2.xml index 2139d0ce..8beb4a23 100644 --- a/src/main/resources/changelogs/db.changelog-1.2.xml +++ b/src/main/resources/changelogs/db.changelog-1.2.xml @@ -44,6 +44,7 @@ + 7:9bf9357b47d8666dc7916f9a318138ad From 7497a0151a91c03197260ab12feb8a1d086698c2 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 29 Oct 2014 05:22:10 +0100 Subject: [PATCH 6/6] upgrade instructions --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 39e5971b..62228987 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,6 @@ v 2.1.0 - dropwizard upgrade to 0.8.0 - - remove our custom app.contextPath setting from config, use server.applicationContextPath from dropwizard instead + - you have to remove the "app.contextPath" setting from your yml file, you can optionnaly use server.applicationContextPath instead v 2.0.3 - internet explorer ajax cache workaround - categories are now deletable again