From b875346b99cbdfcfaebb5af0d59ea8f97d37286d Mon Sep 17 00:00:00 2001
From: Ludovic Claude <ludovic.claude54@gmail.com>
Date: Tue, 22 Jan 2019 17:15:23 +0100
Subject: [PATCH] Update woken-messages to 2.9.1, revert upgrade of Spring

---
 Dockerfile                                    |  3 +-
 pom.xml                                       | 20 ++-------
 src/main/java/eu/hbp/mip/MIPApplication.java  |  4 +-
 .../configuration/BugsnagConfiguration.java   |  4 +-
 .../PersistenceConfiguration.java             |  3 +-
 .../configuration/SecurityConfiguration.java  | 42 ++-----------------
 ...ustomLoginUrlAuthenticationEntryPoint.java | 21 ++++++++++
 7 files changed, 34 insertions(+), 63 deletions(-)
 create mode 100644 src/main/java/eu/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java

diff --git a/Dockerfile b/Dockerfile
index bf47525ce..64d96a7e4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -19,7 +19,8 @@ ARG BUILD_DATE
 ARG VCS_REF
 ARG VERSION
 
-ENV CONTEXT_PATH "/services"
+ENV CONTEXT_PATH "/services" \
+    BUGSNAG_KEY "dff301aa15eb795a6d8b22b600586f77"
 
 RUN apt-get update && apt-get install -y --no-install-recommends curl \
     && rm -rf /var/lib/apt/lists/* /tmp/*
diff --git a/pom.xml b/pom.xml
index ab304cbca..90d24a639 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>1.5.18.RELEASE</version>
+        <version>1.3.7.RELEASE</version>
         <relativePath />
     </parent>
 
@@ -27,7 +27,7 @@
         <asciidoctor.maven.plugin.version>1.5.5</asciidoctor.maven.plugin.version>
         <asciidoctorj.pdf.version>1.5.0-alpha.15</asciidoctorj.pdf.version>
         <asciidoctorj.version>1.5.5</asciidoctorj.version>
-        <spring-data-commons.version>1.12.11.RELEASE</spring-data-commons.version>
+        <spring-data-commons.version>1.13.17.RELEASE</spring-data-commons.version>
         <angularjs.version>1.5.7</angularjs.version>
         <jquery.version>3.0.0</jquery.version>
         <bootstrap.version>3.3.7</bootstrap.version>
@@ -45,9 +45,9 @@
         <hibernate-jpa-2.1-api.version>1.0.0.Final</hibernate-jpa-2.1-api.version>
         <hibernate.version>4.3.11.Final</hibernate.version>
         <spring-data-jpa.version>1.10.11.RELEASE</spring-data-jpa.version>
-        <spring-boot-starter-actuator.version>1.5.18.RELEASE</spring-boot-starter-actuator.version>
+        <spring-boot-starter-actuator.version>1.4.7.RELEASE</spring-boot-starter-actuator.version>
         <aspectjweaver.version>1.8.9</aspectjweaver.version>
-        <woken-messages.version>2.8.4</woken-messages.version>
+        <woken-messages.version>2.9.1</woken-messages.version>
         <javax-inject.version>1</javax-inject.version>
         <akka.version>2.5.19</akka.version>
         <spring-context.version>4.3.4.RELEASE</spring-context.version>
@@ -99,18 +99,6 @@
             <groupId>org.springframework.security.oauth</groupId>
             <artifactId>spring-security-oauth2</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.security</groupId>
-            <artifactId>spring-security-oauth2-client</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.security</groupId>
-            <artifactId>spring-security-oauth2-jose</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-orm</artifactId>
diff --git a/src/main/java/eu/hbp/mip/MIPApplication.java b/src/main/java/eu/hbp/mip/MIPApplication.java
index b3f8648cd..d85f8c13e 100644
--- a/src/main/java/eu/hbp/mip/MIPApplication.java
+++ b/src/main/java/eu/hbp/mip/MIPApplication.java
@@ -6,14 +6,12 @@ package eu.hbp.mip;
 
 import eu.hbp.mip.configuration.*;
 import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
 
 @Configuration
-@EnableAutoConfiguration(exclude = { ValidationAutoConfiguration.class })
+//@EnableAutoConfiguration(exclude = { ValidationAutoConfiguration.class })
 @Import({ AkkaConfiguration.class, BugsnagConfiguration.class,
         CacheConfiguration.class, PersistenceConfiguration.class,
         SecurityConfiguration.class, WebConfiguration.class})
diff --git a/src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java b/src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java
index b02b1e6a1..36770fcbc 100644
--- a/src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java
+++ b/src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java
@@ -11,6 +11,6 @@ import org.springframework.context.annotation.Import;
 public class BugsnagConfiguration {
     @Bean
     public Bugsnag bugsnag() {
-        return new Bugsnag("dff301aa15eb795a6d8b22b600586f77");
+        return new Bugsnag(System.getenv("BUGSNAG_KEY"));
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java b/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java
index d1a57c654..9b4d490e4 100644
--- a/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java
+++ b/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java
@@ -7,7 +7,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
 import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.*;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -27,7 +26,7 @@ import javax.sql.DataSource;
 @Configuration
 @EnableJpaRepositories("eu.hbp.mip.repositories")
 @EnableTransactionManagement
-@EntityScan(basePackages = "eu.hbp.mip.model")
+//@EntityScan(basePackages = "eu.hbp.mip.model")
 public class PersistenceConfiguration {
 
     @Value("#{'${spring.featuresDatasource.main-table:features}'}")
diff --git a/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java b/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java
index 28d482ddf..d8ec1acfb 100644
--- a/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java
+++ b/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java
@@ -2,6 +2,7 @@ package eu.hbp.mip.configuration;
 
 import eu.hbp.mip.model.UserInfo;
 import eu.hbp.mip.utils.CORSFilter;
+import eu.hbp.mip.utils.CustomLoginUrlAuthenticationEntryPoint;
 import eu.hbp.mip.utils.HTTPUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -9,12 +10,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.security.oauth2.resource.ResourceServerProperties;
 import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoTokenServices;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.context.embedded.FilterRegistrationBean;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.builders.WebSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.oauth2.client.OAuth2ClientContext;
@@ -25,7 +25,6 @@ import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResour
 import org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeResourceDetails;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableOAuth2Client;
 import org.springframework.security.web.access.channel.ChannelProcessingFilter;
-import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
 import org.springframework.security.web.authentication.logout.LogoutHandler;
 import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
@@ -33,11 +32,6 @@ import org.springframework.security.web.csrf.CsrfFilter;
 import org.springframework.security.web.csrf.CsrfToken;
 import org.springframework.security.web.csrf.CsrfTokenRepository;
 import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
-import org.springframework.security.web.firewall.FirewalledRequest;
-import org.springframework.security.web.firewall.HttpFirewall;
-import org.springframework.security.web.firewall.RequestRejectedException;
-import org.springframework.security.web.firewall.StrictHttpFirewall;
-import org.springframework.web.filter.CommonsRequestLoggingFilter;
 import org.springframework.web.filter.OncePerRequestFilter;
 import org.springframework.web.util.WebUtils;
 
@@ -94,12 +88,6 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
     @Value("#{'${hbp.resource.revokeTokenUri:https://services.humanbrainproject.eu/oidc/revoke}'}")
     private String revokeTokenURI;
 
-    @Override
-    public void configure(WebSecurity web) throws Exception {
-        super.configure(web);
-        web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
-    }
-
     @Override
     protected void configure(HttpSecurity http) throws Exception {
         // @formatter:off
@@ -112,12 +100,11 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
                             "/", "/login/**", "/health/**", "/info/**", "/metrics/**", "/trace/**", "/frontend/**", "/webjars/**", "/v2/api-docs", "/swagger-ui.html", "/swagger-resources/**"
                     ).permitAll()
                     .anyRequest().authenticated()
-                    .and().exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint(loginUrl))
+                    .and().exceptionHandling().authenticationEntryPoint(new CustomLoginUrlAuthenticationEntryPoint(loginUrl))
                     .and().logout().addLogoutHandler(new CustomLogoutHandler()).logoutSuccessUrl(redirectAfterLogoutUrl)
                     .and().logout().permitAll()
                     .and().csrf().ignoringAntMatchers("/logout").csrfTokenRepository(csrfTokenRepository())
                     .and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
-                    .addFilterBefore(requestLoggingFilter(), BasicAuthenticationFilter.class)
                     .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
         }
         else {
@@ -145,29 +132,6 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
         return registration;
     }
 
-    @Bean
-    public CommonsRequestLoggingFilter requestLoggingFilter() {
-        CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter();
-        loggingFilter.setIncludeClientInfo(true);
-        loggingFilter.setIncludeHeaders(true);
-        loggingFilter.setIncludeQueryString(true);
-        loggingFilter.setIncludePayload(true);
-        return loggingFilter;
-    }
-
-    @Bean
-    public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
-        StrictHttpFirewall firewall = new StrictHttpFirewall() {
-            @Override
-            public FirewalledRequest getFirewalledRequest(HttpServletRequest request) throws RequestRejectedException {
-                System.out.println(request.getRequestURI() + " " + request.getContextPath());
-                return super.getFirewalledRequest(request);
-            }
-        };
-        firewall.setAllowUrlEncodedSlash(true);
-        return firewall;
-    }
-
     @Bean(name="hbp")
     @ConfigurationProperties("hbp.client")
     public OAuth2ProtectedResourceDetails hbp() {
diff --git a/src/main/java/eu/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java b/src/main/java/eu/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java
new file mode 100644
index 000000000..45870c777
--- /dev/null
+++ b/src/main/java/eu/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java
@@ -0,0 +1,21 @@
+package eu.hbp.mip.utils;
+
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class CustomLoginUrlAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
+
+    public CustomLoginUrlAuthenticationEntryPoint(String url) {
+        super(url);
+    }
+
+    @Override
+    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
+        response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
+    }
+}
-- 
GitLab