· 6 years ago · Apr 15, 2019, 07:14 AM
1import javax.crypto.Mac;
2import javax.crypto.spec.SecretKeySpec;
3import java.security.InvalidKeyException;
4
5def hmac_sha256(String secretKey, String data) {
6 def mac = Mac.getInstance("HmacSHA256");
7 def secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256");
8
9 mac.init(secretKeySpec);
10 return mac.doFinal(data.getBytes());
11}
12
13def createSharedAccessToken(String uri, String saName, String base64EncodedSharedAccessKey) {
14 def encodedUri = URLEncoder.encode(uri);
15 def now = new Date();
16 def onedayInSeconds = 60 * 60 * 24;
17 def ttl = Math.round(now.getTime() / 1000) + onedayInSeconds;
18 def urlWithTTL = encodedUri + '\n' + ttl;
19
20 def encoded = hmac_sha256(base64EncodedSharedAccessKey, urlWithTTL).encodeBase64().toString();
21
22 def signature = URLEncoder.encode(encoded);
23
24 return 'SharedAccessSignature sig=' + signature + '&se=' + ttl + '&skn=' + saName + '&sr=' + encodedUri;
25}
26
27def testSuite = testRunner.getTestCase().getTestSuite();
28def uri = testSuite.getPropertyValue("endpoint");
29def keyName = testSuite.getPropertyValue("sharedAccessKeyName");
30def key = testSuite.getPropertyValue("sharedAccessKey");
31log.info("uri=" + uri);
32log.info("keyName=" + keyName);
33log.info("key=" + key);
34
35def sas = createSharedAccessToken(uri, keyName, key);
36log.info("SAS=" + sas);
37context.setProperty("SAS", sas);