Skip to content

Commit 82ab7f7

Browse files
feat: add support for dedicated_for parameter in update_access_key (#723)
* feat: add support for dedicated_for parameter in update_access_key * chore: provisioning api local testing fixed * fix: apply PR feedback to update dedicated_for type and remove eslint-disable rules * fix: fix linting errors * chore: clean up --------- Co-authored-by: cloudinary-pkoniu <[email protected]>
1 parent 2c2533b commit 82ab7f7

File tree

4 files changed

+61
-25
lines changed

4 files changed

+61
-25
lines changed

lib/provisioning/account.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -331,10 +331,16 @@ function generate_access_key(sub_account_id, options = {}, callback) {
331331
* @param [callback] {function}
332332
*/
333333
function update_access_key(sub_account_id, api_key, options = {}, callback) {
334-
const params = pickOnlyExistingValues({
335-
name: options.name,
336-
enabled: options.enabled
337-
}, 'name', 'enabled');
334+
const params = pickOnlyExistingValues(
335+
{
336+
name: options.name,
337+
enabled: options.enabled,
338+
dedicated_for: options.dedicated_for
339+
},
340+
'name',
341+
'enabled',
342+
'dedicated_for'
343+
);
338344
options.content_type = "json";
339345
const uri = ['sub_accounts', sub_account_id, 'access_keys', api_key];
340346
return call_account_api('PUT', uri, params, callback, options);

test/integration/api/provisioning/access_keys_spec.js

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
const cloudinary = require("../../../../cloudinary");
2+
const expect = require('expect.js');
23
const TIMEOUT = require('../../../testUtils/testConstants').TIMEOUT;
3-
let runOnlyForInternalPRs = process.env.TRAVIS_SECURE_ENV_VARS ? describe : describe.skip;
4-
54

65
describe.skip('Provisioning API - Access Keys Management', function () {
76
let CLOUD_SECRET;
@@ -11,7 +10,7 @@ describe.skip('Provisioning API - Access Keys Management', function () {
1110
let CLOUD_NAME_PREFIX = `justaname${process.hrtime()[1] % 10000}`;
1211
this.timeout(TIMEOUT.LONG);
1312

14-
before("Setup the required test", async () => {
13+
before("Setup the required test", async function (){
1514
let config = cloudinary.config(true);
1615
if (!(config.provisioning_api_key && config.provisioning_api_secret && config.account_id)) {
1716
// For external PRs the env variables are not availble, so we skip the provisioning API
@@ -48,30 +47,30 @@ describe.skip('Provisioning API - Access Keys Management', function () {
4847
const accessKeys = await cloudinary.provisioning.account.access_keys(CLOUD_ID);
4948
expect(Object.keys(accessKeys)).to.eql(['access_keys', 'total']);
5049
expect(accessKeys.access_keys.length).to.eql(1);
51-
expect(Object.keys(accessKeys.access_keys[0])).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
50+
expect(Object.keys(accessKeys.access_keys[0])).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled', 'root']);
5251
});
5352

5453
it('Generate new access key', async () => {
5554
const keyName = `test-access-key-${Date.now()}`
5655
const newAccessKey = await cloudinary.provisioning.account.generate_access_key(CLOUD_ID, { name: keyName });
57-
expect(Object.keys(newAccessKey)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
56+
expect(Object.keys(newAccessKey)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled', 'root']);
5857
expect(newAccessKey.name).to.eql(keyName);
5958
});
6059

6160
it('List access keys with optional query params', async () => {
6261
const keyName1 = `A-test-access-key-${Date.now()}`
6362
const newAccessKey1 = await cloudinary.provisioning.account.generate_access_key(CLOUD_ID, { name: keyName1 });
64-
expect(Object.keys(newAccessKey1)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
63+
expect(Object.keys(newAccessKey1)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled', 'root']);
6564
expect(newAccessKey1.name).to.eql(keyName1);
6665

6766
const keyName2 = `B-test-access-key-${Date.now()}`
6867
const newAccessKey2 = await cloudinary.provisioning.account.generate_access_key(CLOUD_ID, { name: keyName2 });
69-
expect(Object.keys(newAccessKey2)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
68+
expect(Object.keys(newAccessKey2)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled', 'root']);
7069
expect(newAccessKey2.name).to.eql(keyName2);
7170

7271
const keyName3 = `C-test-access-key-${Date.now()}`
7372
const newAccessKey3 = await cloudinary.provisioning.account.generate_access_key(CLOUD_ID, { name: keyName3 });
74-
expect(Object.keys(newAccessKey3)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
73+
expect(Object.keys(newAccessKey3)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled', 'root']);
7574
expect(newAccessKey3.name).to.eql(keyName3);
7675

7776
const pageSize = 2;
@@ -83,25 +82,56 @@ describe.skip('Provisioning API - Access Keys Management', function () {
8382
});
8483
expect(Object.keys(accessKeys)).to.eql(['access_keys', 'total']);
8584
expect(accessKeys.access_keys.length).to.eql(pageSize);
86-
expect(Object.keys(accessKeys.access_keys[0])).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
85+
expect(Object.keys(accessKeys.access_keys[0])).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled', 'root']);
8786
});
8887

89-
it('Update access key', async () => {
90-
const keyName = `test-access-key-${Date.now()}`
91-
const newAccessKey = await cloudinary.provisioning.account.generate_access_key(CLOUD_ID, { name: keyName });
92-
expect(Object.keys(newAccessKey)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
88+
it("Update access key", async () => {
89+
const keyName = `test-access-key-${Date.now()}`;
90+
const newAccessKey =
91+
await cloudinary.provisioning.account.generate_access_key(
92+
CLOUD_ID,
93+
{ name: keyName, enabled: false }
94+
);
95+
expect(Object.keys(newAccessKey)).to.eql([
96+
'name',
97+
'api_key',
98+
'api_secret',
99+
'created_at',
100+
'updated_at',
101+
'enabled',
102+
'root'
103+
]);
93104
expect(newAccessKey.name).to.eql(keyName);
105+
expect(newAccessKey.enabled).to.eql(false);
94106

95107
const newName = `${keyName}-updated`;
96-
const updatedAccessKey = await cloudinary.provisioning.account.update_access_key(CLOUD_ID, newAccessKey.api_key, { name: newName });
97-
expect(Object.keys(newAccessKey)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
108+
const updatedAccessKey =
109+
await cloudinary.provisioning.account.update_access_key(
110+
CLOUD_ID,
111+
newAccessKey.api_key,
112+
{ name: newName, enabled: true, dedicated_for: "webhooks" }
113+
);
114+
expect(Object.keys(updatedAccessKey)).to.eql([
115+
'name',
116+
'api_key',
117+
'api_secret',
118+
'created_at',
119+
'updated_at',
120+
'enabled',
121+
'dedicated_for',
122+
'root'
123+
]);
98124
expect(updatedAccessKey.name).to.eql(newName);
125+
expect(updatedAccessKey.enabled).to.eql(true);
126+
expect(updatedAccessKey.dedicated_for).to.be.an("array");
127+
expect(updatedAccessKey.dedicated_for.length).to.eql(1);
128+
expect(updatedAccessKey.dedicated_for[0]).to.eql("webhooks");
99129
});
100130

101131
it('Delete access keys', async () => {
102132
const keyName = `test-access-key-${Date.now()}`
103133
const newAccessKey = await cloudinary.provisioning.account.generate_access_key(CLOUD_ID, { name: keyName });
104-
expect(Object.keys(newAccessKey)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
134+
expect(Object.keys(newAccessKey)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled', 'root']);
105135
expect(newAccessKey.name).to.eql(keyName);
106136

107137
const deleteAccessKey = await cloudinary.provisioning.account.delete_access_key(CLOUD_ID, newAccessKey.api_key);
@@ -112,7 +142,7 @@ describe.skip('Provisioning API - Access Keys Management', function () {
112142
it('Delete access keys by name', async () => {
113143
const keyName = `test-access-key-${Date.now()}`
114144
const newAccessKey = await cloudinary.provisioning.account.generate_access_key(CLOUD_ID, { name: keyName });
115-
expect(Object.keys(newAccessKey)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled']);
145+
expect(Object.keys(newAccessKey)).to.eql(['name', 'api_key', 'api_secret', 'created_at', 'updated_at', 'enabled', 'root']);
116146
expect(newAccessKey.name).to.eql(keyName);
117147

118148
const deleteAccessKey = await cloudinary.provisioning.account.delete_access_key_by_name(CLOUD_ID, { name: keyName });

test/integration/api/provisioning/account_spec.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
const cloudinary = require("../../../../cloudinary");
2+
const expect = require('expect.js');
23
const TIMEOUT = require('../../../testUtils/testConstants').TIMEOUT;
3-
let runOnlyForInternalPRs = process.env.TRAVIS_SECURE_ENV_VARS ? describe : describe.skip;
44

5-
6-
runOnlyForInternalPRs('account API - Provisioning', function () {
5+
describe.skip('account API - Provisioning', function () {
76
let CLOUD_SECRET;
87
let CLOUD_API;
98
let CLOUD_NAME;

types/index.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1534,7 +1534,8 @@ declare module 'cloudinary' {
15341534

15351535
function update_access_key(subAccountId: string, apiKey: string, options?: ProvisioningApiOptions | {
15361536
name?: string,
1537-
enabled?: boolean
1537+
enabled?: boolean,
1538+
dedicated_for?: 'webhooks',
15381539
}, callback?: ResponseCallback): Promise<AccessKeyDetails>;
15391540

15401541
function delete_access_key(subAccountId: string, apiKey: string, options?: ProvisioningApiOptions, callback?: ResponseCallback): Promise<DeleteAccessKeyResponse>;

0 commit comments

Comments
 (0)