package com.spec.extender.updater; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.List; import java.util.StringTokenizer; import com.spec.extender.util.CryptUtil; public class DemoRequestHeaderUpdater extends BaseUpdater { private String serviceBaseURL; private String clientID; private String hmacKey; private String signaturePlaceholder; public DemoRequestHeaderUpdater(String _serviceBaseURL, String _clientID, String _hmacKey, String _signaturePlaceholder){ this.serviceBaseURL = _serviceBaseURL; this.clientID = _clientID; this.hmacKey = _hmacKey; this.signaturePlaceholder = _signaturePlaceholder; } public String getHmacKey() { return this.hmacKey; } public String getSignaturePlaceholder() { return signaturePlaceholder; } @Override public String getServiceBaseURL() { return this.serviceBaseURL; } @Override public String getClientID() { return this.clientID; } /** * request body is not changed */ protected String updateBody(List<String> headers, String requestBody){ return requestBody; } protected List<String> updateHeaders(List<String> headers, String requestBody) { //---update timestamp header--- String timeStamp = generateDemoRequestHeaderTimestamp(); String dateHeader = generateDemoDateHeader(timeStamp); List<String> udpatedHeaders = updateAnHeader(headers, "Date:", dateHeader); // update hmac header String clearText = generateSALHMACPayload(headers.get(0)); String hmacDigest = null; try { hmacDigest = CryptUtil.generateSHA1HmacWithTimestamp(clearText, timeStamp, getHmacKey()); } catch (Exception e) { e.printStackTrace(); } System.out.println("SOSHeaderUpdater updating headers..."); udpatedHeaders = updateHMACHeader(udpatedHeaders, hmacDigest, this.signaturePlaceholder); // _debug.println("updated headers: "); // _debug.print(Util.listToString(udpatedHeaders)); return udpatedHeaders; } public String generateSALHMACPayload(String methodUrlProtocolHeader){ String[] methodUrlProtocol = new String[3]; StringTokenizer tokenizer = new StringTokenizer(methodUrlProtocolHeader); int i = 0; while (tokenizer.hasMoreTokens()){ methodUrlProtocol[i++] = tokenizer.nextToken(); } return methodUrlProtocol[0] + "\n" + methodUrlProtocol[1] + "\n"; } /** * Sample Date header: Date: Sat, 9 Mar 2013 21:01:27 CST * @param timeStamp * @param headers * @return */ public String generateDemoDateHeader(String timeStamp){ StringBuffer sb = new StringBuffer("Date: " + timeStamp); return sb.toString(); } public static String generateDemoRequestHeaderTimestamp(){ Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); String timeStamp = dateFormat.format(calendar.getTime()); // timeStamp = "Tue, 26 Jun 2012 16:01:13 GMT"; return timeStamp; } }