From 80c8774f92c51cd0af8a5b9f6c7763b4ca184fb6 Mon Sep 17 00:00:00 2001 From: Yomes Date: Thu, 31 Mar 2022 16:26:37 +0300 Subject: [PATCH] Filter get-users API by last login --- lib-es5/provisioning/account.js | 16 +++++++++++----- lib/provisioning/account.js | 12 +++++++++--- .../integration/api/provisioning/account_spec.js | 12 ++++++++++++ types/cloudinary_ts_spec.ts | 3 +++ types/index.d.ts | 2 +- 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/lib-es5/provisioning/account.js b/lib-es5/provisioning/account.js index 2feed595..71394ce8 100644 --- a/lib-es5/provisioning/account.js +++ b/lib-es5/provisioning/account.js @@ -143,21 +143,27 @@ function user(user_id) { * @param [prefix] {string} - Returns users where the name or email address begins with the specified case-insensitive * string. * @param [sub_account_id[ {string} - Only returns users who have access to the specified account. + * @param [last_login] {boolean} - Return only users that last logged in in the specified range of dates (true), users that didn’t last logged in in that range (false), or all users (null). + * @param [from] {string} - Last login start date. + * @param [to] {string} - Last login end date. * @param [options] {object} - See {@link https://cloudinary.com/documentation/cloudinary_sdks#configuration_parameters|Configuration parameters} in the SDK documentation. * @param [callback] {function} */ -function users(pending, user_ids, prefix, sub_account_id) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - var callback = arguments[5]; +function users(pending, user_ids, prefix, sub_account_id, last_login, from, to) { + var options = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : {}; + var callback = arguments[8]; var uri = ['users']; var params = { ids: user_ids, pending, prefix, - sub_account_id + sub_account_id, + last_login, + from, + to }; - return call_account_api('GET', uri, pickOnlyExistingValues(params, "ids", "pending", "prefix", "sub_account_id"), callback, options); + return call_account_api('GET', uri, pickOnlyExistingValues(params, "ids", "pending", "prefix", "sub_account_id", "last_login", "from", "to"), callback, options); } /** diff --git a/lib/provisioning/account.js b/lib/provisioning/account.js index c887d2d9..e2f5367c 100644 --- a/lib/provisioning/account.js +++ b/lib/provisioning/account.js @@ -122,18 +122,24 @@ function user(user_id, options = {}, callback) { * @param [prefix] {string} - Returns users where the name or email address begins with the specified case-insensitive * string. * @param [sub_account_id[ {string} - Only returns users who have access to the specified account. + * @param [last_login] {boolean} - Return only users that last logged in in the specified range of dates (true), users that didn’t last logged in in that range (false), or all users (null). + * @param [from] {string} - Last login start date. + * @param [to] {string} - Last login end date. * @param [options] {object} - See {@link https://cloudinary.com/documentation/cloudinary_sdks#configuration_parameters|Configuration parameters} in the SDK documentation. * @param [callback] {function} */ -function users(pending, user_ids, prefix, sub_account_id, options = {}, callback) { +function users(pending, user_ids, prefix, sub_account_id, last_login, from, to, options = {}, callback) { let uri = ['users']; let params = { ids: user_ids, pending, prefix, - sub_account_id + sub_account_id, + last_login, + from, + to }; - return call_account_api('GET', uri, pickOnlyExistingValues(params, "ids", "pending", "prefix", "sub_account_id"), callback, options); + return call_account_api('GET', uri, pickOnlyExistingValues(params, "ids", "pending", "prefix", "sub_account_id", "last_login", "from", "to"), callback, options); } /** diff --git a/test/integration/api/provisioning/account_spec.js b/test/integration/api/provisioning/account_spec.js index cd0f9bd4..3756b03a 100644 --- a/test/integration/api/provisioning/account_spec.js +++ b/test/integration/api/provisioning/account_spec.js @@ -1,5 +1,6 @@ const cloudinary = require("../../../../cloudinary"); const TIMEOUT = require('../../../testUtils/testConstants').TIMEOUT; +const helper = require("../../../spechelper"); let runOnlyForInternalPRs = process.env.TRAVIS_SECURE_ENV_VARS ? describe : describe.skip; @@ -199,6 +200,17 @@ runOnlyForInternalPRs('account API - Provisioning', function () { expect(result.users.length).to.eql(1); }); + it('Gets users by last_login', async () => { + const from = helper.toISO8601DateOnly(new Date()); + const to = helper.toISO8601DateOnly(new Date()); + + let result = await cloudinary.provisioning.account.users(true, null, USER_NAME_2, CLOUD_ID, true, from, to); + expect(result.users.length).to.eql(0); + + result = await cloudinary.provisioning.account.users(true, null, USER_NAME_2, CLOUD_ID, false, from, to); + expect(result.users.length).to.eql(1); + }); + it('Should throw an error when attempting to get users by a nonexistent sub_account_id', async () => { const random_id = Math.floor(Math.random() * 100000); try { diff --git a/types/cloudinary_ts_spec.ts b/types/cloudinary_ts_spec.ts index a56ac908..19626157 100644 --- a/types/cloudinary_ts_spec.ts +++ b/types/cloudinary_ts_spec.ts @@ -940,6 +940,9 @@ cloudinary.v2.provisioning.account.users( ['str'], 'str', 'str', + true, + 'str', + 'str', {}, (res) => { diff --git a/types/index.d.ts b/types/index.d.ts index 18ff8d9e..9db5536b 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1109,7 +1109,7 @@ declare module 'cloudinary' { function user(userId: string, options?: ProvisioningApiOptions, callback?: ResponseCallback): Promise; - function users(pending: boolean, userIds?: string[], prefix?: string, subAccountId?: string, options?: ProvisioningApiOptions, callback?: ResponseCallback): Promise; + function users(pending: boolean, userIds?: string[], prefix?: string, subAccountId?: string, last_login?: boolean, from?: string, to?: string, options?: ProvisioningApiOptions, callback?: ResponseCallback): Promise; function create_user(name: string, email: string, role: string, subAccountIds?: string[], options?: ProvisioningApiOptions, callback?: ResponseCallback): Promise;