diff --git a/gateway-service/src/main/java/org/zowe/apiml/gateway/filters/post/ConvertAuthTokenInUriToCookieFilter.java b/gateway-service/src/main/java/org/zowe/apiml/gateway/filters/post/ConvertAuthTokenInUriToCookieFilter.java deleted file mode 100644 index 4a0ce67e91..0000000000 --- a/gateway-service/src/main/java/org/zowe/apiml/gateway/filters/post/ConvertAuthTokenInUriToCookieFilter.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -package org.zowe.apiml.gateway.filters.post; - -import com.netflix.zuul.context.RequestContext; -import org.zowe.apiml.security.common.config.AuthConfigurationProperties; -import org.zowe.apiml.util.CookieUtil; - -import javax.servlet.http.HttpServletResponse; - -import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SEND_RESPONSE_FILTER_ORDER; - -/** - * Uses the authentication token provided as a query parameter and puts it to - * the expected place (cookie). - */ -public class ConvertAuthTokenInUriToCookieFilter extends PostZuulFilter { - private final AuthConfigurationProperties authConfigurationProperties; - - public ConvertAuthTokenInUriToCookieFilter(AuthConfigurationProperties authConfigurationProperties) { - this.authConfigurationProperties = authConfigurationProperties; - } - - public int filterOrder() { - return SEND_RESPONSE_FILTER_ORDER - 1; - } - - public boolean shouldFilter() { - RequestContext context = RequestContext.getCurrentContext(); - AuthConfigurationProperties.CookieProperties cp = authConfigurationProperties.getCookieProperties(); - return context.getRequestQueryParams() != null && context.getRequestQueryParams().containsKey(cp.getCookieName()); - } - - public Object run() { - RequestContext context = RequestContext.getCurrentContext(); - HttpServletResponse servletResponse = context.getResponse(); - AuthConfigurationProperties.CookieProperties cp = authConfigurationProperties.getCookieProperties(); - - // SameSite attribute is not supported in Cookie used in HttpServletResponse.addCookie, - // so specify Set-Cookie header directly - String cookieHeader = new CookieUtil.CookieHeaderBuilder(cp.getCookieName(), context.getRequestQueryParams().get(cp.getCookieName()).get(0)) - .comment(cp.getCookieComment()) - .path(cp.getCookiePath()) - .sameSite(cp.getCookieSameSite().getValue()) - .maxAge(cp.getCookieMaxAge()) - .httpOnly(true) - .secure(true) - .build(); - servletResponse.addHeader("Set-Cookie", cookieHeader); - - String url = context.getRequest().getRequestURL().toString(); - String newUrl; - if (url.endsWith("/apicatalog/ui/v1/")) { - newUrl = url + "#/dashboard"; - } else { - newUrl = url; - } - context.addZuulResponseHeader("Location", newUrl); - context.setResponseStatusCode(HttpServletResponse.SC_MOVED_TEMPORARILY); - return null; - } -} diff --git a/gateway-service/src/main/java/org/zowe/apiml/gateway/routing/FilterConfig.java b/gateway-service/src/main/java/org/zowe/apiml/gateway/routing/FilterConfig.java index bc1488db3d..2cd6a3743e 100644 --- a/gateway-service/src/main/java/org/zowe/apiml/gateway/routing/FilterConfig.java +++ b/gateway-service/src/main/java/org/zowe/apiml/gateway/routing/FilterConfig.java @@ -10,19 +10,19 @@ package org.zowe.apiml.gateway.routing; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.zowe.apiml.gateway.cache.LoadBalancerCache; -import org.zowe.apiml.gateway.filters.post.*; +import org.zowe.apiml.gateway.filters.post.PageRedirectionFilter; +import org.zowe.apiml.gateway.filters.post.PostStoreLoadBalancerCacheFilter; +import org.zowe.apiml.gateway.filters.post.RoutedInstanceIdFilter; import org.zowe.apiml.gateway.filters.pre.*; import org.zowe.apiml.gateway.security.service.AuthenticationService; import org.zowe.apiml.gateway.security.service.RequestAuthenticationService; import org.zowe.apiml.message.core.MessageService; import org.zowe.apiml.product.routing.transform.TransformService; -import org.zowe.apiml.security.common.config.AuthConfigurationProperties; @Configuration public class FilterConfig { @@ -58,12 +58,6 @@ public PageRedirectionFilter pageRedirectionFilter(DiscoveryClient discovery, return new PageRedirectionFilter(discovery, transformService); } - @Bean - @Autowired - public ConvertAuthTokenInUriToCookieFilter convertAuthTokenInUriToCookieFilter(AuthConfigurationProperties authConfigurationProperties) { - return new ConvertAuthTokenInUriToCookieFilter(authConfigurationProperties); - } - @Bean @ConditionalOnProperty(name = "apiml.routing.instanceIdHeader", havingValue = "true") public RoutedInstanceIdFilter routedServerFilter() { diff --git a/gateway-service/src/test/java/org/zowe/apiml/gateway/filters/post/ConvertAuthTokenInUriToCookieFilterTest.java b/gateway-service/src/test/java/org/zowe/apiml/gateway/filters/post/ConvertAuthTokenInUriToCookieFilterTest.java deleted file mode 100644 index d301a54dca..0000000000 --- a/gateway-service/src/test/java/org/zowe/apiml/gateway/filters/post/ConvertAuthTokenInUriToCookieFilterTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -package org.zowe.apiml.gateway.filters.post; - -import org.junit.jupiter.api.Test; -import org.zowe.apiml.gateway.utils.CleanCurrentRequestContextTest; -import org.zowe.apiml.security.common.config.AuthConfigurationProperties; -import org.springframework.mock.web.MockHttpServletRequest; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.junit.jupiter.api.Assertions.*; - - -class ConvertAuthTokenInUriToCookieFilterTest extends CleanCurrentRequestContextTest { - - private final AuthConfigurationProperties authConfigurationProperties = new AuthConfigurationProperties(); - private final ConvertAuthTokenInUriToCookieFilter filter = new ConvertAuthTokenInUriToCookieFilter( - authConfigurationProperties); - - @Test - void doesNotDoAnythingWhenThereIsNoParam() { - boolean ignoreThisFilter = this.filter.shouldFilter(); - assertThat(ignoreThisFilter, is(false)); - assertFalse(ctx.getResponse().getHeaderNames().contains("Set-Cookie")); - } - - @Test - void doesNotDoAnythingWhenThereIsAnotherParam() { - Map> params = new HashMap<>(); - params.put("someParameter", Collections.singletonList("value")); - ctx.setRequestQueryParams(params); - boolean ignoreThisFilter = this.filter.shouldFilter(); - assertThat(ignoreThisFilter, is(false)); - assertFalse(ctx.getResponse().getHeaderNames().contains("Set-Cookie")); - } - - @Test - void setsCookieForCorrectParameter() { - ctx.setRequest(new MockHttpServletRequest("GET", "/service/api/v1")); - Map> params = new HashMap<>(); - params.put(authConfigurationProperties.getCookieProperties().getCookieName(), - Collections.singletonList("token")); - ctx.setRequestQueryParams(params); - boolean ignoreThisFilter = this.filter.shouldFilter(); - assertThat(ignoreThisFilter, is(true)); - this.filter.run(); - assertTrue(ctx.getResponse().getHeaders("Set-Cookie").toString().contains("apimlAuthenticationToken=token")); - assertEquals("Location", ctx.getZuulResponseHeaders().get(0).first()); - assertEquals("http://localhost/service/api/v1", ctx.getZuulResponseHeaders().get(0).second()); - } - - @Test - void setsLocationToDashboardForApiCatalog() { - ctx.setRequest(new MockHttpServletRequest("GET", "/apicatalog/ui/v1/")); - Map> params = new HashMap<>(); - params.put(authConfigurationProperties.getCookieProperties().getCookieName(), - Collections.singletonList("token")); - ctx.setRequestQueryParams(params); - boolean ignoreThisFilter = this.filter.shouldFilter(); - assertThat(ignoreThisFilter, is(true)); - this.filter.run(); - assertTrue(ctx.getResponse().getHeaders("Set-Cookie").toString().contains("apimlAuthenticationToken=token")); - assertEquals("Location", ctx.getZuulResponseHeaders().get(0).first()); - assertEquals("http://localhost/apicatalog/ui/v1/#/dashboard", ctx.getZuulResponseHeaders().get(0).second()); - } -}