All Downloads are FREE. Search and download functionalities are using the official Maven repository.

base.jee.servlet.BaseServlet Maven / Gradle / Ivy

/**
 * Creative commons Attribution-NonCommercial license.
 *
 * http://creativecommons.org/licenses/by-nc/2.5/au/deed.en_GB
 *
 * NO WARRANTY IS GIVEN OR IMPLIED, USE AT YOUR OWN RISK.
 */
package base.jee.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import base.jee.JeeBase;
import base.jee.api.API;
import base.jee.api.Settings;
import base.security.User;

import static base.jee.Constants.MAX_IP_ADDRESS_LENGTH;

public abstract class BaseServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected Settings settings;
	protected JeeBase jee;
	protected API api;

	public BaseServlet(JeeBase jee) throws IOException {
		this.settings = jee.getSettings();
		this.jee = jee;
		this.api = jee.getAPI();
	}

	public final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		response.setCharacterEncoding("UTF-8");

		String token = (String)request.getAttribute(jee.cookieName);
		if(token == null) {
			for (Cookie cookie : request.getCookies()) {
				if (cookie.getName().equalsIgnoreCase(jee.cookieName)) {
					token = cookie.getValue();
					break;
				}
			}
		}

		User u = jee.getAPI().getSession(token, getIp(request)).get(0);

		String queryString = request.getQueryString();

		if (queryString == null) {
			jee.log("DEBUG", "Accessing url: " + request.getRequestURI(), u);
		} else {
			jee.log("DEBUG", "Accessing url: " + request.getRequestURI() + "?" + queryString, u);
		}

		doGet(token, u, request, response);
	}

	public abstract void doGet(String token, User u, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

	/**
	 * Trust the forwarded header only if the connection comes over internal network.
	 */
	public static String getIp(HttpServletRequest request) throws IOException {
		String ip = request.getRemoteAddr();
		if(ip.startsWith("10.") || ip.startsWith("172.") || ip.startsWith("192.168.") || ip.startsWith("127.") || ip.startsWith("0:0:0:0")) {
			if(request.getHeader("HTTP_X_FORWARDED_FOR") != null) {
				ip = request.getHeader("HTTP_X_FORWARDED_FOR");
			}
			if(request.getHeader("X-Forwarded-For") != null) {
				ip = request.getHeader("X-Forwarded-For");
			}
		}
		if(ip != null) {
			if(ip.length() > MAX_IP_ADDRESS_LENGTH * 5) {
				throw new IOException("Malformed client HTTP request header");
			}
			if(ip.trim().length() > MAX_IP_ADDRESS_LENGTH) {
				ip = ip.substring(0, MAX_IP_ADDRESS_LENGTH);
			}
		}
		return ip;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy