/* * Copyright (C) 2011-2012 Intel Corporation * All rights reserved. */ package com.intel.mountwilson.http.security.adapter; import com.intel.mtwilson.security.http.HmacAuthorization; import com.intel.dcsg.cpg.crypto.HmacCredential; import com.jayway.restassured.filter.Filter; import com.jayway.restassured.filter.FilterContext; import com.jayway.restassured.response.Response; import com.jayway.restassured.specification.FilterableRequestSpecification; import com.jayway.restassured.specification.FilterableResponseSpecification; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Requires the restassured java library and the groovyx.net.http library (can * be obtained from the codehaus http-builder project) * * However, this isn't working right now because it seems that obtaining the * Http request method is a little sketchy... javadoc shows a * "getRequestMethod()" on FilterContext but it's not available here * * The restassured dependency is marked optional; you must add it specifically * to your project when using this class. * * @author jbuhacoff */ public class MtWilsonRestAssuredFilter implements Filter { private String username; private String password; public MtWilsonRestAssuredFilter(String username, String password) { this.username = username; this.password = password; } @Override public Response filter(FilterableRequestSpecification requestSpec, FilterableResponseSpecification responseSpec, FilterContext ctx) { try { HmacAuthorization requestHelper = new HmacAuthorization(new HmacCredential(username, password)); String authorizationHeader = requestHelper.getAuthorization(ctx.getRequestMethod().toString(), ctx.getRequestPath(), convert(requestSpec.getRequestParams()), requestSpec.<String>getBody()); // the null should be HTTP REQUEST METHOD ctx.getRequestMethod().toString() System.err.println("MtWilsonRestAssuredFilter created Authorization: " + authorizationHeader); if (authorizationHeader != null) { requestSpec.header("Authorization", authorizationHeader); } } catch (Exception e) { System.err.println("Cannot create request signature: " + e.toString()); e.printStackTrace(); } return ctx.next(requestSpec, responseSpec); } /** * Converts a Map<String,?> to a Map<String,Object> where Object is either * String or String[] * * If the input map is null, then null will be returned. * * @param params * @return Map<String,List<String>> or null if the input was null */ private Map<String, Object> convert(Map<String, ?> params) { if( params == null ) { return null; } Map<String, Object> map = new HashMap<String, Object>(); Set<String> keys = params.keySet(); for (String key : keys) { Object value = params.get(key); if( value == null ) { map.put(key, ""); } else if (value instanceof String) { map.put(key, (String)value); } else if (value instanceof String[]) { map.put(key, Arrays.asList((String[])value)); } else { System.err.println("MtWilsonRestAssuredFilter param: Unknown data type for " + key + ": " + value.getClass().getName()); map.put(key, value.toString()); } } return map; } /* * private void showParameters(FilterableRequestSpecification requestSpec) { * System.err.println("MtWilsonRestAssuredFilter query params:"); * dumpMap(requestSpec.getQueryParams()); * System.err.println("MtWilsonRestAssuredFilter request params:"); * dumpMap(requestSpec.getRequestParams()); * System.err.println("MtWilsonRestAssuredFilter form params:"); * dumpMap(requestSpec.getFormParams()); * System.err.println("MtWilsonRestAssuredFilter path params:"); * dumpMap(requestSpec.getPathParams()); } * * private void dumpMap(Map<String,?> map) { Set<String> pkeys = * map.keySet(); for(String key : pkeys) { Object value = map.get(key); if( * value instanceof String ) { System.err.println(" * MtWilsonRestAssuredFilter param: "+key+" = "+(String)value); } else if( * value instanceof String[] ) { System.err.println(" * MtWilsonRestAssuredFilter param: "+key+" = "+StringUtils.join((String * [])value)); } else { System.err.println(" MtWilsonRestAssuredFilter * param: Unknown data type for "+key+": "+value.getClass().getName()); } } * * } * */ }