From 676caf7f0e86362095b813b6431ea9272a79eea2 Mon Sep 17 00:00:00 2001 From: Leonard Chin <3714+l15n@users.noreply.github.com> Date: Fri, 20 Sep 2024 16:10:05 +0900 Subject: [PATCH] Add Management API calls to user refresh token endpoints --- lib/auth0/api/v2/users.rb | 34 +++++++++++++++++- spec/lib/auth0/api/v2/users_spec.rb | 55 +++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) diff --git a/lib/auth0/api/v2/users.rb b/lib/auth0/api/v2/users.rb index 1f60842d..71b6604d 100644 --- a/lib/auth0/api/v2/users.rb +++ b/lib/auth0/api/v2/users.rb @@ -465,13 +465,45 @@ def user_sessions(user_id) get "#{users_path}/#{user_id}/sessions" end + # Retrieve details for a user's refresh tokens. + # @see https://auth0.com/docs/api/management/v2/users/get-refresh-tokens-for-user + # + # @param use_id [String] The user ID + # @param options [hash] A hash of options for getting permissions + # * :take [Integer] Number of results per page. Defaults to 50. + # * :from [String] Optional token ID from which to start selection (exclusive). + # * :include_totals [boolean] Return results inside an object that contains the total result count (true) + # or as a direct array of results (false, default) + # + # @return [json] Returns refresh tokens for the given user_id. + def user_refresh_tokens(user_id, options = {}) + raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty? + + request_params = { + take: options.fetch(:take, nil), + from: options.fetch(:from, nil), + include_totals: options.fetch(:include_totals, nil) + } + + get "#{users_path}/#{user_id}/refresh-tokens", request_params + end + + # Delete all refresh tokens for a user. + # + # @param user_id [String] ID of the user to get remove refresh tokens for + # @see https://auth0.com/docs/api/management/v2/users/delete-refresh-tokens-for-user + def delete_user_refresh_tokens(user_id) + raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty? + + delete "#{users_path}/#{user_id}/refresh-tokens" + end + private # Users API path def users_path @users_path ||= '/api/v2/users' end - end end end diff --git a/spec/lib/auth0/api/v2/users_spec.rb b/spec/lib/auth0/api/v2/users_spec.rb index 8cdf18bd..4ed0f0e3 100644 --- a/spec/lib/auth0/api/v2/users_spec.rb +++ b/spec/lib/auth0/api/v2/users_spec.rb @@ -843,7 +843,62 @@ expect do @instance.user_sessions('USER_ID') end.not_to raise_error + end + end + context '.user_refresh_tokens' do + it 'is expected to respond to a user_refresh_tokens method' do + expect(@instance).to respond_to(:user_refresh_tokens) + end + + it 'is expected to raise an exception when the user ID is empty' do + expect { @instance.user_refresh_tokens(nil) }.to raise_exception(Auth0::MissingUserId) + end + + it 'is expected to get user refresh tokens' do + expect(@instance).to receive(:get).with( + '/api/v2/users/USER_ID/refresh-tokens', { + from: nil, + take: nil, + include_totals: nil + } + ) + expect do + @instance.user_refresh_tokens('USER_ID') + end.not_to raise_error + end + + it 'is expected to get user refresh tokens with custom parameters' do + expect(@instance).to receive(:get).with( + '/api/v2/users/USER_ID/refresh-tokens', { + from: 'TOKEN_ID', + take: 10, + include_totals: true + } + ) + expect do + @instance.user_refresh_tokens('USER_ID', from: 'TOKEN_ID', take: 10, include_totals: true) + end.not_to raise_error + end + end + + context '.delete_user_refresh_tokens' do + it 'is expected to respond to delete_user_refresh_tokens' do + expect(@instance).to respond_to(:delete_user_refresh_tokens) + end + + it 'is expected to raise an exception for a missing user ID' do + expect { @instance.delete_user_refresh_tokens(nil) }.to raise_exception(Auth0::MissingUserId) + end + + it 'is expected to call the endpoint' do + expect(@instance).to receive(:delete).with( + '/api/v2/users/USER_ID/refresh-tokens' + ) + + expect do + @instance.delete_user_refresh_tokens 'USER_ID' + end.to_not raise_error end end end