private static String createErrorMessage(DiscFilterRequest request, String message) { return String.format("%s %s denied for %s: %s", request.getMethod(), request.getUri().getPath(), request.getRemoteAddr(), message); }
/** * Get character encoding */ public String getCharacterEncoding() { return getCharsetFromContentType(this.getContentType()); }
/** * Returns the content-type for the request */ public String getContentType() { return getHeader(HttpHeaders.Names.CONTENT_TYPE); }
/** * Set character encoding */ public void setCharacterEncoding(String encoding) { String charEncoding = setCharsetFromContentType(this.getContentType(), encoding); if (charEncoding != null && !charEncoding.isEmpty()) { removeHeaders(HttpHeaders.Names.CONTENT_TYPE); setHeaders(HttpHeaders.Names.CONTENT_TYPE, charEncoding); } }
@Override public void filter(DiscFilterRequest request, ResponseHandler handler) { InetAddress remoteAddr = InetAddresses.forString(request.getRemoteAddr()); if (!remoteAddr.isLoopbackAddress() && !request.getRemoteAddr().equals(request.getLocalAddr())) { FilterUtils.write(ErrorResponse.unauthorized( String.format("%s %s denied for %s: Unauthorized host", request.getMethod(), request.getUri().getPath(), request.getRemoteAddr())), handler); } }
private Optional<ErrorResponse> validateAccess(DiscFilterRequest request) { try { NodePrincipal hostIdentity = (NodePrincipal) request.getUserPrincipal(); if (hostIdentity == null) return Optional.of(ErrorResponse.internalServerError(createErrorMessage(request, "Principal is missing. NodeIdentifierFilter has not been applied."))); if (!authorizer.test(hostIdentity, request.getUri())) return Optional.of(ErrorResponse.forbidden(createErrorMessage(request, "Invalid credentials: " + hostIdentity.toString()))); request.setUserPrincipal(hostIdentity); return Optional.empty(); } catch (NodeIdentifier.NodeIdentifierException e) { return Optional.of(ErrorResponse.forbidden(createErrorMessage(request, "Invalid credentials: " + e.getMessage()))); } }
/** * Returns the query string that is contained in the request URL. * Returns the undecoded value uri.getRawQuery() */ public String getQueryString() { return getUri().getRawQuery(); }
/** * Can be called multiple times to add Cookies */ public void addCookie(JDiscCookieWrapper cookie) { if (cookie != null) { List<Cookie> cookies = new ArrayList<>(); // Get current set of cookies first List<Cookie> c = getCookies(); if (c != null && !c.isEmpty()) { cookies.addAll(c); } cookies.add(cookie.getCookie()); setCookies(cookies); } }
@Override protected Optional<ErrorResponse> filter(DiscFilterRequest request) { List<X509Certificate> clientCertificateChain = request.getClientCertificateChain(); if (clientCertificateChain.isEmpty()) return Optional.of(new ErrorResponse(Response.Status.UNAUTHORIZED, 0, "Missing client certificate")); try { NodePrincipal identity = nodeIdentifier.resolveNode(clientCertificateChain); request.setUserPrincipal(identity); return Optional.empty(); } catch (NodeIdentifier.NodeIdentifierException e) { log.log(LogLevel.WARNING, "Node identification failed: " + e.getMessage(), e); return Optional.of(new ErrorResponse(Response.Status.UNAUTHORIZED, 1, e.getMessage())); } } }
public static boolean isMultipart(DiscFilterRequest request) { if (request == null) { return false; } String contentType = request.getContentType(); if (contentType == null) { return false; } String[] parts = Pattern.compile(";").split(contentType); if (parts.length == 0) { return false; } for (String part : parts) { if ("multipart/form-data".equals(part)) { return true; } } return false; }
@Override public boolean containsAttribute(String name) { return super.containsAttribute(name) || parent.getRequest().getAttribute(name) != null; }
@Override public Object getAttribute(String name) { Object jdiscAttribute = super.getAttribute(name); return jdiscAttribute != null ? jdiscAttribute : parent.getRequest().getAttribute(name); }
public JDiscCookieWrapper[] getWrappedCookies() { List<Cookie> cookies = getCookies(); if (cookies == null) { return null; } List<JDiscCookieWrapper> cookieWrapper = new ArrayList<>(cookies.size()); for(Cookie cookie : cookies) { cookieWrapper.add(JDiscCookieWrapper.wrap(cookie)); } return cookieWrapper.toArray(new JDiscCookieWrapper[cookieWrapper.size()]); }
@Override public Enumeration<String> getAttributeNames() { Set<String> names = new HashSet<>(Collections.list(super.getAttributeNames())); names.addAll(Collections.list(parent.getRequest().getAttributeNames())); return Collections.enumeration(names); }
public String getServerName() { return getUri().getHost(); }
public String getRequestURI() { return getUri().getRawPath(); }
public int getIntHeader(String name) { String value = getHeader(name); if (value == null) { return -1; } else { return Integer.parseInt(value); } }
public String getScheme() { return getUri().getScheme(); }