package de.otto.hmac.authentication;
import com.google.common.io.ByteSource;
import com.google.common.io.ByteStreams;
import org.springframework.mock.web.MockHttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class RequestSigningFixture {
public static String createSignature(WrappedRequest request, String user, String key) throws IOException {
return createSignature(request.getRequestURI(), request.getMethod(), user, key, request.getHeader("x-hmac-auth-date"), request.getBody());
}
public static String createSignature(String uri, String method, String user, String key, String date, ByteSource body) throws IOException {
MockHttpServletRequest request = new MockHttpServletRequest(method, uri);
request.addHeader("x-hmac-auth-date", date);
request.setContent(extractContent(body));
return user + ":" + RequestSigningUtil.createRequestSignature(WrappedRequest.wrap(request), key);
}
private static byte[] extractContent(ByteSource body) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try(InputStream inputStream = body.openBufferedStream()) {
ByteStreams.copy(inputStream, out);
}
return out.toByteArray();
}
}