public HTTPRequest prepare(HTTPRequest request, AuthScheme scheme) { return prepare(request, request.getChallenge().orElse(null), false); }
public HTTPRequest prepare(HTTPRequest request, AuthScheme scheme) { return prepare(request, request.getChallenge().orElse(null), scheme, false); }
private static Vary determineVariation(Headers responseHeaders, HTTPRequest request) { Headers requestHeaders = request.getAllHeaders(); Optional<String> varyHeader = responseHeaders.getFirstHeaderValue(VARY); Map<String, String> resolvedVaryHeaders = new HashMap<String, String>(); if (varyHeader.isPresent()) { String varyValue = varyHeader.get(); if (varyValue.equals("*")) { return Vary.ALL; } String[] varies = varyValue.split(","); for (String vary : varies) { Optional<String> value = requestHeaders.getFirstHeaderValue(vary); value.ifPresent(s -> resolvedVaryHeaders.put(vary, s)); } } if (request.getChallenge().isPresent() && Boolean.getBoolean("Vary.authorization")) { resolvedVaryHeaders.put(HeaderConstants.AUTHORIZATION, request.getChallenge().get().getIdentifier()); } return new Vary(resolvedVaryHeaders); }
public HTTPRequest prepare(HTTPRequest request, AuthScheme scheme) { HTTPRequest req = request; Challenge challenge = request.getChallenge().orElse(null); if (challenge instanceof BearerTokenChallenge) { BearerTokenChallenge token = (BearerTokenChallenge) challenge; req = req.addHeader(HeaderConstants.AUTHORIZATION, token.getToken().toHeaderValue()); } return req; }
/** * 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 HTTPRequest copy() { return new HTTPRequest( getRequestURI(), getMethod(), getHeaders(), getChallenge(), getPayload() ); }
public static MutableRequest fromHTTPRequest(HTTPRequest request) { MutableRequest mutableRequest = new MutableRequest( request.getRequestURI(), request.getMethod(), new MutableHeaders(request.getHeaders()), new MutableConditionals(request.getHeaders().getConditionals()) ); mutableRequest.setChallenge(request.getChallenge().orElse(null)); if (request.getMethod().canHavePayload()) { mutableRequest.setPayload(request.getPayload().orElse(null)); } return mutableRequest; }
public final HTTPRequest prepareAuthentication(final HTTPRequest request, final HTTPResponse response) { HTTPRequest req = request; HTTPHost host = new HTTPHost(request.getRequestURI()); if (response == null && registry.matches(host)) { //preemptive auth. AuthScheme authScheme = registry.get(host); Pair<AuthenticatorStrategy, AuthScheme> selected = select(Arrays.asList(authScheme)); return selected.getKey().prepare(request, authScheme); } if (response != null && response.getStatus() == Status.UNAUTHORIZED) { List<AuthScheme> schemes = toAuthSchemes(response, HeaderConstants.WWW_AUTHENTICATE); if (!schemes.isEmpty() && request.getChallenge() != null) { Pair<AuthenticatorStrategy, AuthScheme> selected = select(schemes); if (selected.getValue() != null) { req = selected.getKey().prepare(request, selected.getValue()); if (req != request) { //If authentication header was added registry.register(host, selected.getValue()); } } } } return req; }