Stop redirecting old javadoc links; redirect web pages to HTTPS by default

This commit is contained in:
Sean Owen 2017-03-07 22:28:15 +00:00
parent 07479e38ec
commit 0a542b9e9e
4 changed files with 140 additions and 82 deletions

View file

@ -0,0 +1,55 @@
/*
* Copyright 2017 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.web;
import com.google.common.net.HttpHeaders;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Provides no-op default implementations for convenience of subclasses.
*/
abstract class AbstractFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// do nothing
}
@Override
public abstract void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException;
@Override
public void destroy() {
// do nothing
}
static void redirect(ServletResponse servletResponse, String location) {
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader(HttpHeaders.LOCATION, location);
}
}

View file

@ -0,0 +1,46 @@
/*
* Copyright 2017 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.web;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* Redirects things to HTTPS, like the main decode page, which should prefer HTTPS.
*/
@WebFilter("/w/decode.jspx")
public final class HTTPSFilter extends AbstractFilter {
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain chain) throws IOException, ServletException {
if (servletRequest.isSecure()) {
chain.doFilter(servletRequest, servletResponse);
} else {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String target = request.getRequestURL().toString().replaceFirst("http://", "https://");
redirect(servletResponse, target);
}
}
}

View file

@ -1,82 +0,0 @@
/*
* Copyright 2014 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.web;
import com.google.common.net.HttpHeaders;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
/**
* A {@link Filter} which handles a few web app redirects, like redirecting {@code /} to the
* main page.
*/
@WebFilter("/*")
public final class RedirectFilter implements Filter {
private static final String OLD_JAVADOC_PREFIX = "/w/docs/javadoc";
private static final Collection<String> REDIRECT_WELCOME_PATHS = new HashSet<>();
static {
REDIRECT_WELCOME_PATHS.add("/");
REDIRECT_WELCOME_PATHS.add("/index.jspx");
REDIRECT_WELCOME_PATHS.add("/w/");
REDIRECT_WELCOME_PATHS.add("/w/index.jspx");
}
@Override
public void init(FilterConfig filterConfig) {
// do nothing
}
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String requestURI = request.getRequestURI();
if (REDIRECT_WELCOME_PATHS.contains(requestURI)) {
redirect(servletResponse, "/w/decode.jspx");
} else if (requestURI.startsWith(OLD_JAVADOC_PREFIX)) {
String withoutPrefix = requestURI.substring(OLD_JAVADOC_PREFIX.length());
redirect(servletResponse, "https://zxing.github.io/zxing/apidocs" + withoutPrefix);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
private static void redirect(ServletResponse servletResponse, String location) {
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader(HttpHeaders.LOCATION, location);
}
@Override
public void destroy() {
// do nothing
}
}

View file

@ -0,0 +1,39 @@
/*
* Copyright 2014 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.web;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* Handles redirects to the app landing page.
*/
@WebFilter({"/", "/index.jspx", "/w/", "/w/index.jspx"})
public final class WelcomeFilter extends AbstractFilter {
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
redirect(servletResponse, "/w/decode.jspx");
}
}