import java.security.SignatureException | |
import javax.crypto.Mac | |
import javax.crypto.spec.SecretKeySpec | |
def flowFile = session.get() | |
if (!flowFile) return | |
def static hmac(String data, String key) throws java.security.SignatureException | |
{ | |
String result | |
try { | |
// get an hmac_sha1 key from the raw key bytes | |
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1"); | |
// get an hmac_sha1 Mac instance and initialize with the signing key | |
Mac mac = Mac.getInstance("HmacSHA1"); | |
mac.init(signingKey); | |
// compute the hmac on input data bytes | |
byte[] rawHmac = mac.doFinal(data.getBytes()); | |
result= rawHmac.encodeBase64() | |
} catch (Exception e) { | |
throw new SignatureException("Failed to generate HMAC : " + e.getMessage()); | |
} | |
return result | |
} | |
def attributes = flowFile.getAttributes() | |
// retrieve arguments of the target and split arguments | |
def arguments = attributes.arguments.tokenize('&') | |
def method = attributes.method | |
def base_url = attributes.base_url | |
def consumerSecret = attributes.oauth_consumer_secret | |
def tokenSecret = attributes.oauth_token_secret | |
TreeMap map = [:] | |
for (String item : arguments) { | |
def (key, value) = item.tokenize('=') | |
map.put(key, value) | |
} | |
map.put("oauth_consumer_key", attributes.oauth_consumer_key) | |
map.put("oauth_nonce", attributes.oauth_nonce) | |
map.put("oauth_signature_method", attributes.oauth_signature_method) | |
map.put("oauth_timestamp", attributes.oauth_timestamp) | |
map.put("oauth_token", attributes.oauth_token) | |
map.put("oauth_version", attributes.oauth_version) | |
String.metaClass.encode = { | |
java.net.URLEncoder.encode(delegate, "UTF-8").replace("+", "%20").replace("*", "%2A").replace("%7E", "~"); | |
} | |
String parameterString = map.collect { String key, String value -> | |
"${key.encode()}=${value.encode()}" | |
}.join("&") | |
String signatureBaseString = "" | |
signatureBaseString += method.toUpperCase() | |
signatureBaseString += '&' | |
signatureBaseString += base_url.encode() | |
signatureBaseString += '&' | |
signatureBaseString += parameterString.encode() | |
String signingKey = consumerSecret.encode() + '&' + tokenSecret.encode() | |
String oauthSignature = hmac(signatureBaseString, signingKey) | |
flowFile = session.putAttribute(flowFile, 'oauth_signature', oauthSignature) | |
String oauth = 'OAuth ' | |
oauth += 'oauth_consumer_key="' | |
oauth += attributes.oauth_consumer_key.encode() | |
oauth += '", ' | |
oauth += 'oauth_nonce="' | |
oauth += attributes.oauth_nonce.encode() | |
oauth += '", ' | |
oauth += 'oauth_signature="' | |
oauth += oauthSignature.encode() | |
oauth += '", ' | |
oauth += 'oauth_signature_method="' | |
oauth += attributes.oauth_signature_method.encode() | |
oauth += '", ' | |
oauth += 'oauth_timestamp="' | |
oauth += attributes.oauth_timestamp.encode() | |
oauth += '", ' | |
oauth += 'oauth_token="' | |
oauth += attributes.oauth_token.encode() | |
oauth += '", ' | |
oauth += 'oauth_version="' | |
oauth += attributes.oauth_version.encode() | |
oauth += '"' | |
flowFile = session.putAttribute(flowFile, 'oauth_header', oauth) | |
session.transfer(flowFile, REL_SUCCESS) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment