@akamai-consulting/edgegrid-js-fetch
Version:
Signing and fetch library the Akamai OPEN EdgeGrid Authentication scheme in a JS environment that supports the fetch spec
161 lines (148 loc) • 13.3 kB
text/typescript
import * as auth from '../src/auth';
const access_token = "akab-access-token-xxx-xxxxxxxxxxxxxxxx",
client_token = "akab-client-token-xxx-xxxxxxxxxxxxxxxx",
client_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=",
nonce = "nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
timestamp = "20140321T19:34:21+0000";
let test_auth = null;
describe('Signature Generation', function () {
describe('simple GET', function () {
it('should return the expected string when the signing request is run.', async function () {
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=tL+y4hxyHxgWVD30X3pWnGKHcPzmrIF+LThiAOhMxYU=";
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/");
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('get with querystring', function () {
it('should return the expected string when the signing request is run.', async function () {
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=hKDH1UlnQySSHjvIcZpDMbQHihTQ0XyVAKZaApabdeA=";
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/testapi/v1/t1?p1=1&p2=2");
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('Post uses passed-max-body', function() {
it('should return the expected string when the signing request is run.', async function() {
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=hXm4iCxtpN22m4cbZb4lVLW5rhX8Ca82vCFqXzSTPe4=";
const data = "datadatadatadatadatadatadatadata";
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/testapi/v1/t3", {
"method": "POST",
"body": data
});
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('POST length of 2KB', function () {
it('should return the expected string when the signing request is run.', async function () {
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=6Q6PiTipLae6n4GsSIDTCJ54bEbHUBp+4MUXrbQCBoY=";
const data = "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd";
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/testapi/v1/t3", {
"method": "POST",
"body": data
});
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('POST empty body', function () {
it('should return the expected string when the signing request is run.', async function () {
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=1gEDxeQGD5GovIkJJGcBaKnZ+VaPtrc4qBUHixjsPCQ=";
const data = "";
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/testapi/v1/t6", {
"method": "POST",
"body": data
});
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('simple header signing with GET', function () {
it('should return the expected string when the signing request is run.', async function () {
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=YgMcMzBrimnBmp7wxzjirUsAcC0UK6MVPydEpjKVcHc=";
const headers = {
"X-Test1": "test-simple-header"
};
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/testapi/v1/t4", {
"method": "GET",
"headers": headers
});
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('simple header signing with GET', function () {
it('should return the expected string when the signing request is run.', async function () {
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=YgMcMzBrimnBmp7wxzjirUsAcC0UK6MVPydEpjKVcHc=";
const headers = {
"X-Test1": "test-simple-header"
};
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/testapi/v1/t4", {
"method": "GET",
"headers": headers
});
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('headers containing spaces', function () {
it('should return the expected string when the signing request is run.', async function () {
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=YgMcMzBrimnBmp7wxzjirUsAcC0UK6MVPydEpjKVcHc=";
const headers = {
"X-Test1": "\" test-header-with-spaces \""
};
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/testapi/v1/t4", {
"method": "GET",
"headers": headers
});
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('headers with leading and interior spaces', function () {
it('should return the expected string when the signing request is run.', async function () {
const headers = {
"X-Test1": " first-thing second-thing"
};
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=YgMcMzBrimnBmp7wxzjirUsAcC0UK6MVPydEpjKVcHc=";
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/testapi/v1/t4", {
"method": "GET",
"headers": headers
});
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('PUT test', function () {
it('should return the expected string when the signing request is run.', async function () {
const data = "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP";
const expected_header = "EG1-HMAC-SHA256 client_token=akab-client-token-xxx-xxxxxxxxxxxxxxxx;access_token=akab-access-token-xxx-xxxxxxxxxxxxxxxx;timestamp=20140321T19:34:21+0000;nonce=nonce-xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;signature=GNBWEYSEWOLtu+7dD52da2C39aX/Jchpon3K/AmBqBU=";
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/testapi/v1/t6",{
"method": "PUT",
"body": data
});
test_auth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, nonce, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(test_auth.headers.get('Authorization')).toBe(expected_header)
});
});
describe('when not passing a nonce', function () {
it('a unique nonce should be used for each signed request', async function () {
const request = new Request("https://akaa-baseurl-xxxxxxxxxxx-xxxxxxxxxxxxx.luna.akamaiapis.net/");
let firstAuth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, undefined, timestamp);
let secondAuth = await auth.generateAuthedRequest(request, client_token, client_secret, access_token, undefined, timestamp);
//assert.strictEqual(test_auth.headers.get('Authorization'), expected_header);
expect(firstAuth.headers.get('Authorization')).not.toBe(secondAuth.headers.get('Authorization'));
});
});
});