public CacheControl(Header header) { if (header == null) { header = new Header(HeaderConstants.CACHE_CONTROL, ""); } if (!HeaderConstants.CACHE_CONTROL.equalsIgnoreCase(header.getName())) { throw new IllegalArgumentException("Not a Cache-Control header"); } this.directives = header.getDirectives(); }
public static List<LinkDirective> toLinkDirectives(Header header) { Preconditions.checkArgument(!LINK_HEADER.equals(header.getName()), "This must be a \"Link\" header"); return header.getDirectives().stream(). filter(d -> d instanceof LinkDirective). map(d -> (LinkDirective) d). collect(Collectors.toList()); } }
public Header createMISSXCacheHeader() { String value = String.format(X_CACHE_FORMAT, "MISS", hostAddress); return new Header(HeaderConstants.X_CACHE, value); }
public boolean contains(Header header) { List<Header> values = getHeaders(header.getName()); return values.contains(header); }
public Set<HTTPMethod> getAllow() { Optional<Header> header = getFirstHeader(HeaderConstants.ALLOW); if (header.isPresent()) { return header.get().getDirectives().stream().map(d -> HTTPMethod.valueOf(d.getName().toUpperCase(Locale.ENGLISH))).collect(Collectors.toSet()); } return Collections.emptySet(); }
public static Headers parse(String input) { if (input == null || input.trim().isEmpty()) { return new Headers(); } MutableHeaders headers = new MutableHeaders(); String[] fields = input.split("\r\n"); for (String field : fields) { headers.add(Header.valueOf(field.trim())); } return headers.toHeaders(); }
public Header createHITXCacheHeader() { String value = String.format(X_CACHE_FORMAT, "HIT", hostAddress); return new Header(HeaderConstants.X_CACHE, value); } }
public Properties toProperties() { Properties object = new Properties(); object.setProperty("cache-time", HeaderUtils.toHttpDate("cache-time", item.getCachedTime()).getValue()); HTTPResponse response = item.getResponse(); object.setProperty("status", String.valueOf(response.getStatus().getCode())); if (response.hasPayload()) { FilePayload payload = (FilePayload) response.getPayload().get(); object.setProperty("file", payload.getFile().getAbsolutePath()); } object.setProperty("headers", response.getHeaders().toString()); return object; }
public Directives getDirectives() { if (directives == null) { if (HeaderConstants.AUTHENTICATION_HEADERS.contains(getName().toLowerCase(Locale.ENGLISH))) { directives = AuthDirectivesParser.parse(value); } else { directives = DirectivesParser.parse(value); } } return directives; }
protected List<AuthScheme> toAuthSchemes(HTTPResponse response, String name) { List<Header> authenticateHeader = response.getHeaders().getHeaders(name); return authenticateHeader.stream(). flatMap( h -> h.getDirectives().stream()). map(AuthScheme::new). collect(Collectors.toList()); } }
static Header valueOf(String value) { String[] parts = value.split(":", 2); if (parts != null) { if (parts.length == 1) { return new Header(parts[0].trim(), ""); } else if (parts.length == 2) { return new Header(parts[0].trim(), parts[1].trim()); } } throw new IllegalArgumentException("Not a valid header string"); } }
/** * Analyses the headers in the given request to figure out if this {@link Vary variation} matches. * * @param request the request to analyse * @return {@code true} if the request matches the variance. {@code false} if not. */ //todo: cleanup this public boolean matches(final HTTPRequest request) { if (varyHeaders.containsKey("ALL")) return false; Headers headers = request.getAllHeaders(); for (Map.Entry<String, String> varyEntry : varyHeaders.entrySet()) { if (request.getChallenge().isPresent() && varyEntry.getKey().equals(HeaderConstants.AUTHORIZATION)) { if (!request.getChallenge().get().getIdentifier().equals(varyEntry.getValue())) { return false; } } else { List<Header> requestHeaderValue = headers.getHeaders(varyEntry.getKey()); boolean valid = requestHeaderValue.isEmpty() ? varyEntry.getValue() == null : headers.getFirstHeader(varyEntry.getKey()).get().getValue().equals(varyEntry.getValue()); if (!valid) { return false; } } } List<Preference> preferences = new ArrayList<>(); preferences.addAll(headers.getAccept()); preferences.addAll(headers.getAcceptCharset()); preferences.addAll(headers.getAcceptLanguage()); return !(varyHeaders.isEmpty() && !preferences.isEmpty()); }
public AuthScheme afterSuccessfulAuthentication(AuthScheme scheme, Headers headers, boolean proxy) { Optional<Header> header; if (proxy) { header = headers.getFirstHeader(HeaderConstants.PROXY_AUTHENTICATION_INFO); } else { header = headers.getFirstHeader(HeaderConstants.AUTHENTICATION_INFO); } if (header.isPresent()) { String nextNonce = header.get().getDirectives().get("nextnonce"); if (nextNonce != null) { List<Parameter> params = scheme.getDirective().getParameters().stream(). filter(p -> !"nonce".equals(p.getName())). collect(Collectors.toList()); params.add(new QuotedParameter("nonce", nextNonce)); return new AuthScheme(new AuthDirective("Digest", null, params)); } } return scheme; } }
public static Header toLinkHeader(List<LinkDirective> linkDirectives) { StringBuilder builder = new StringBuilder(); for (LinkDirective linkDirective : linkDirectives) { if (builder.length() > 0) { builder.append(", "); } builder.append(linkDirective); } return new Header(LINK_HEADER, builder.toString()); }