All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.joyent.http.signature.apache.httpclient.HttpSignatureRequestInterceptor Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2016-2017, Joyent, Inc. All rights reserved.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */
package com.joyent.http.signature.apache.httpclient;

import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.auth.Credentials;
import org.apache.http.protocol.HttpContext;

import java.io.IOException;

/**
 * Alternative to HTTP Client {@link org.apache.http.auth.AuthScheme} approach
 * that uses a {@link org.apache.http.HttpRequestInterceptor} to perform
 * HTTP signature authentication.
 *
 * @author Elijah Zupancic
 * @since 3.0.0
 */
public class HttpSignatureRequestInterceptor implements HttpRequestInterceptor {
    /**
     * Flag indicating that HTTP signature authentication is enabled.
     */
    private final boolean authEnabled;

    /**
     * Authentication scheme instance to use to create authentication header.
     */
    private final HttpSignatureAuthScheme authScheme;

    /**
     * Credentials of the user authenticating using HTTP signatures.
     */
    private final Credentials credentials;

    /**
     * Creates a new instance.
     *
     * @param authScheme authentication scheme used to generate signature
     * @param credentials credentials of user authenticating
     * @param authEnabled flag indicating if authentication is enabled
     */
    public HttpSignatureRequestInterceptor(final HttpSignatureAuthScheme authScheme,
                                           final Credentials credentials,
                                           final boolean authEnabled) {
        this.authScheme = authScheme;
        this.credentials = credentials;
        this.authEnabled = authEnabled;
    }

    @Override
    public void process(final HttpRequest request, final HttpContext context)
            throws HttpException, IOException {
        if (!authEnabled) {
            return;
        }

        final long start = System.nanoTime();
        final Header authorization = authScheme.authenticate(
                this.credentials, request, context);
        final long end = System.nanoTime();

        request.setHeader(authorization);
        request.setHeader("x-http-signing-time-ns", String.valueOf(end - start));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy