mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-02-05 14:19:18 +01:00
merge with branch issue-195
This commit is contained in:
@@ -47,6 +47,7 @@ import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.TimeZone;
|
||||
|
||||
@@ -398,6 +399,23 @@ public class Util
|
||||
return parseDate(dateString, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param value
|
||||
* @param start
|
||||
*
|
||||
* @return
|
||||
*
|
||||
* @since 1.17
|
||||
*/
|
||||
public static boolean startWithIgnoreCase(String value, String start)
|
||||
{
|
||||
return (value != null) && (start != null)
|
||||
&& value.toUpperCase(Locale.ENGLISH).startsWith(start);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
|
||||
@@ -120,18 +120,44 @@ public class BasicAuthenticationFilter extends HttpFilter
|
||||
User user = null;
|
||||
String authentication = request.getHeader(HEADER_AUTHORIZATION);
|
||||
|
||||
if (Util.isNotEmpty(authentication)
|
||||
&& authentication.toUpperCase().startsWith(AUTHORIZATION_BASIC_PREFIX))
|
||||
if (Util.startWithIgnoreCase(authentication, AUTHORIZATION_BASIC_PREFIX))
|
||||
{
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
logger.trace("found basic authorization header, start authentication");
|
||||
}
|
||||
|
||||
user = authenticate(request, response, securityContext, authentication);
|
||||
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
if (user != null)
|
||||
{
|
||||
logger.trace("user {} successfully authenticated", user.getName());
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.trace("authentcation failed, user object is null");
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (securityContext.isAuthenticated())
|
||||
{
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
logger.trace("user is allready authenticated");
|
||||
}
|
||||
|
||||
user = securityContext.getUser();
|
||||
}
|
||||
|
||||
if (user == null)
|
||||
{
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
logger.trace("could not find user send unauthorized");
|
||||
}
|
||||
|
||||
HttpUtil.sendUnauthorized(response);
|
||||
}
|
||||
else
|
||||
@@ -192,6 +218,11 @@ public class BasicAuthenticationFilter extends HttpFilter
|
||||
|
||||
if (Util.isNotEmpty(username) && Util.isNotEmpty(password))
|
||||
{
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
logger.trace("try to authenticate user {}", username);
|
||||
}
|
||||
|
||||
user = securityContext.authenticate(request, response, username,
|
||||
password);
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ package sonia.scm.web.filter;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.io.Closeables;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
@@ -90,7 +91,7 @@ public class LoggingFilter extends HttpFilter
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
boolean logBody = logger.isTraceEnabled();
|
||||
boolean logBody = logger.isTraceEnabled() && isTextRequest(request);
|
||||
BufferedHttpServletRequest bufferedRequest =
|
||||
new BufferedHttpServletRequest(request, logBody);
|
||||
BufferedHttpServletResponse bufferedResponse =
|
||||
@@ -190,7 +191,12 @@ public class LoggingFilter extends HttpFilter
|
||||
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
logger.trace("Content: ".concat(new String(request.getContentBuffer())));
|
||||
byte[] contentBuffer = request.getContentBuffer();
|
||||
|
||||
if ((contentBuffer != null) && (contentBuffer.length > 0))
|
||||
{
|
||||
logger.trace("Content: ".concat(new String(contentBuffer)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,22 +234,68 @@ public class LoggingFilter extends HttpFilter
|
||||
logger.debug("Header: {} = {}", header.getKey(), header.getValue());
|
||||
}
|
||||
|
||||
if (logger.isTraceEnabled())
|
||||
if (logger.isTraceEnabled() && isTextRequest(orgResponse))
|
||||
{
|
||||
byte[] content = response.getContentBuffer();
|
||||
ServletOutputStream out = null;
|
||||
|
||||
try
|
||||
if ((content != null) && (content.length > 0))
|
||||
{
|
||||
out = orgResponse.getOutputStream();
|
||||
out.write(content);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Closeables.closeQuietly(out);
|
||||
}
|
||||
ServletOutputStream out = null;
|
||||
|
||||
logger.trace("Content: ".concat(new String(content)));
|
||||
try
|
||||
{
|
||||
out = orgResponse.getOutputStream();
|
||||
out.write(content);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Closeables.closeQuietly(out);
|
||||
}
|
||||
|
||||
logger.trace("Content: ".concat(new String(content)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param request
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private boolean isTextRequest(HttpServletRequest request)
|
||||
{
|
||||
return isTextRequest(request.getContentType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param response
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private boolean isTextRequest(HttpServletResponse response)
|
||||
{
|
||||
return isTextRequest(response.getContentType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param contentType
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private boolean isTextRequest(String contentType)
|
||||
{
|
||||
return !Strings.isNullOrEmpty(contentType)
|
||||
&& contentType.toLowerCase().startsWith("text");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,6 +150,15 @@ public abstract class PermissionFilter extends HttpFilter
|
||||
|
||||
if (hasPermission(repository, securityContext, writeRequest))
|
||||
{
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
logger.trace("{} access to repository {} for user {} granted",
|
||||
new Object[] { writeRequest
|
||||
? "write"
|
||||
: "read", repository.getName(),
|
||||
user.getName() });
|
||||
}
|
||||
|
||||
chain.doFilter(request, response);
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user