org.gitlab4j.api.utils.HttpRequestUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gitlab4j-api Show documentation
Show all versions of gitlab4j-api Show documentation
GitLab4J-API (gitlab4j-api) provides a full featured Java client library for working with GitLab repositories and servers via the GitLab REST API.
package org.gitlab4j.api.utils;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Enumeration;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
public class HttpRequestUtils {
/**
* Build a String containing a very short multi-line dump of an HTTP request.
*
* @param fromMethod the method that this method was called from
* @param request the HTTP request build the request dump from
* @return a String containing a very short multi-line dump of the HTTP request
*/
public static String getShortRequestDump(String fromMethod, HttpServletRequest request) {
return (getShortRequestDump(fromMethod, false, request));
}
/**
* Build a String containing a short multi-line dump of an HTTP request.
*
* @param fromMethod the method that this method was called from
* @param request the HTTP request build the request dump from
* @param includeHeaders if true will include the HTTP headers in the dump
* @return a String containing a short multi-line dump of the HTTP request
*/
public static String getShortRequestDump(String fromMethod, boolean includeHeaders, HttpServletRequest request) {
StringBuilder dump = new StringBuilder();
dump.append("Timestamp : ").append(ISO8601.getTimestamp()).append("\n");
dump.append("fromMethod : ").append(fromMethod).append("\n");
dump.append("Method : ").append(request.getMethod()).append('\n');
dump.append("Scheme : ").append(request.getScheme()).append('\n');
dump.append("URI : ").append(request.getRequestURI()).append('\n');
dump.append("Query-String : ").append(request.getQueryString()).append('\n');
dump.append("Auth-Type : ").append(request.getAuthType()).append('\n');
dump.append("Remote-Addr : ").append(request.getRemoteAddr()).append('\n');
dump.append("Scheme : ").append(request.getScheme()).append('\n');
dump.append("Content-Type : ").append(request.getContentType()).append('\n');
dump.append("Content-Length: ").append(request.getContentLength()).append('\n');
if (includeHeaders) {
dump.append("Headers :\n");
Enumeration headers = request.getHeaderNames();
while (headers.hasMoreElements()) {
String header = headers.nextElement();
dump.append("\t").append(header).append(": ").append(request.getHeader(header)).append('\n');
}
}
return (dump.toString());
}
/**
* Build a String containing a multi-line dump of an HTTP request.
*
* @param fromMethod the method that this method was called from
* @param request the HTTP request build the request dump from
* @param includePostData if true will include the POST data in the dump
* @return a String containing a multi-line dump of the HTTP request, If an error occurs,
* the message from the exception will be returned
*/
public static String getRequestDump(String fromMethod, HttpServletRequest request, boolean includePostData) {
String shortDump = getShortRequestDump(fromMethod, request);
StringBuilder buf = new StringBuilder(shortDump);
try {
buf.append("\nAttributes:\n");
Enumeration attrs = request.getAttributeNames();
while (attrs.hasMoreElements()) {
String attr = attrs.nextElement();
buf.append("\t").append(attr).append(": ").append(request.getAttribute(attr)).append('\n');
}
buf.append("\nHeaders:\n");
Enumeration headers = request.getHeaderNames();
while (headers.hasMoreElements()) {
String header = headers.nextElement();
buf.append("\t").append(header).append(": ").append(request.getHeader(header)).append('\n');
}
buf.append("\nParameters:\n");
Enumeration params = request.getParameterNames();
while (params.hasMoreElements()) {
String param = params.nextElement();
buf.append("\t").append(param).append(": ").append(request.getParameter(param)).append('\n');
}
buf.append("\nCookies:\n");
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String cstr = "\t" + cookie.getDomain() + "." + cookie.getPath() + "." + cookie.getName() + ": " + cookie.getValue() + "\n";
buf.append(cstr);
}
}
if (includePostData) {
buf.append(getPostDataAsString(request)).append("\n");
}
return (buf.toString());
} catch (IOException e) {
return e.getMessage();
}
}
/**
* Reads the POST data from a request into a String and returns it.
*
* @param request the HTTP request containing the POST data
* @return the POST data as a String instance
* @throws IOException if any error occurs while reading the POST data
*/
public static String getPostDataAsString(HttpServletRequest request) throws IOException {
try (InputStreamReader reader = new InputStreamReader(request.getInputStream(), "UTF-8")) {
return (getReaderContentAsString(reader));
}
}
/**
* Reads the content of a Reader instance and returns it as a String.
*
* @param reader the Reader instance to read the data from
* @return the content of a Reader instance as a String
* @throws IOException if any error occurs while reading the POST data
*/
public static String getReaderContentAsString(Reader reader) throws IOException {
int count;
final char[] buffer = new char[2048];
final StringBuilder out = new StringBuilder();
while ((count = reader.read(buffer, 0, buffer.length)) >= 0) {
out.append(buffer, 0, count);
}
return (out.toString());
}
/**
* Masks the PRIVATE-TOKEN header value with "********".
*
* @param s a String containing HTTP request info, usually logging info
* @return a String with the PRIVATE-TOKEN header value masked with asterisks
*/
public static String maskPrivateToken(String s) {
if (s == null || s.isEmpty()) {
return (s);
}
return (s.replaceAll("PRIVATE\\-TOKEN\\: [\\S]*", "PRIVATE-TOKEN: ********"));
}
}