From 534fc2f6db4ad008daddf3ba673ddc895582f147 Mon Sep 17 00:00:00 2001 From: dmitrytrager Date: Thu, 23 Jan 2025 17:32:13 +0100 Subject: [PATCH 1/2] feat: use user_info API to check tokens DD-4674 --- CHANGELOG.md | 6 ++++- lib/panda.rb | 2 +- lib/panda/client.rb | 16 +++++------- lib/panda/http_request.rb | 4 --- lib/panda/{token_info.rb => user_info.rb} | 2 +- lib/panda/version.rb | 2 +- spec/cases/client_spec.rb | 10 +++----- spec/cases/token_info_spec.rb | 29 ---------------------- spec/cases/user_info_spec.rb | 30 +++++++++++++++++++++++ 9 files changed, 48 insertions(+), 53 deletions(-) rename lib/panda/{token_info.rb => user_info.rb} (92%) delete mode 100644 spec/cases/token_info_spec.rb create mode 100644 spec/cases/user_info_spec.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c00410..294608b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,4 +4,8 @@ ## 0.5.1 -* Use POST method for `token_info` request \ No newline at end of file +* Use POST method for `token_info` request + +## 0.5.2 + +* Use GET `user_info` to check tokens \ No newline at end of file diff --git a/lib/panda.rb b/lib/panda.rb index 3a03b73..8de4405 100644 --- a/lib/panda.rb +++ b/lib/panda.rb @@ -25,7 +25,7 @@ def make_request(request) conn.response :json end - response = connection.run_request(request.method, request.url, request.params, request.headers) + response = connection.get(request.url, request.params, request.headers) Panda::HTTPResponse.new(response.status, response.headers, response.body) end end diff --git a/lib/panda/client.rb b/lib/panda/client.rb index 524cc6a..e6f29fb 100644 --- a/lib/panda/client.rb +++ b/lib/panda/client.rb @@ -5,7 +5,7 @@ require 'panda/errors' require 'panda/http_request' require 'panda/http_response' -require 'panda/token_info' +require 'panda/user_info' module Panda class Client @@ -53,19 +53,15 @@ def report(advertiser_id, report_type, dimensions, params = {}) ) end - def token_info - get_token( - 'tt_user/token_info/get/', - app_id: Panda.config.app_id, - access_token: access_token - ) + def user_info + get_user('user/info/') end private - def get_token(path, params = {}) - request = Panda::HTTPRequest.new('POST', path, params) - Panda::TokenInfo.new(Panda.make_request(request)) + def get_user(path, params = {}) + request = Panda::HTTPRequest.new('GET', path, params, 'Access-Token' => access_token) + Panda::UserInfo.new(Panda.make_request(request)) end def get_collection(path, params = {}) diff --git a/lib/panda/http_request.rb b/lib/panda/http_request.rb index 3eaabe9..7ad39d7 100644 --- a/lib/panda/http_request.rb +++ b/lib/panda/http_request.rb @@ -36,10 +36,6 @@ def headers ) end - def method - raw_method.downcase.to_sym - end - private def get? diff --git a/lib/panda/token_info.rb b/lib/panda/user_info.rb similarity index 92% rename from lib/panda/token_info.rb rename to lib/panda/user_info.rb index 24433ee..f3cedf0 100644 --- a/lib/panda/token_info.rb +++ b/lib/panda/user_info.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Panda - class TokenInfo + class UserInfo attr_reader :data def initialize(response) diff --git a/lib/panda/version.rb b/lib/panda/version.rb index 38bf466..3110630 100644 --- a/lib/panda/version.rb +++ b/lib/panda/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Panda - VERSION = '0.5.1' + VERSION = '0.5.2' end diff --git a/spec/cases/client_spec.rb b/spec/cases/client_spec.rb index 76ae289..bc6b9ad 100644 --- a/spec/cases/client_spec.rb +++ b/spec/cases/client_spec.rb @@ -40,13 +40,11 @@ end end - describe '#token_info' do - it 'calls #get_token' do - expect(subject) - .to receive(:get_token) - .with('tt_user/token_info/get/', { app_id: Panda.config.app_id, access_token: token }) + describe '#user_info' do + it 'calls #get_user' do + expect(subject).to receive(:get_user).with('user/info/') - subject.token_info + subject.user_info end end end diff --git a/spec/cases/token_info_spec.rb b/spec/cases/token_info_spec.rb deleted file mode 100644 index 1505504..0000000 --- a/spec/cases/token_info_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Panda::TokenInfo do - let(:response) { Panda::HTTPResponse.new(200, {}, token_response_body) } - - context 'response with result list field in data field' do - let(:token_response_body) do - { - 'message' => 'OK', - 'code' => 0, - 'data' => { - 'app_id' => Panda.config.app_id, - 'creator_id' => 'test_creator_id', - 'scope' => 'user.info.basic' - }, - 'request_id': '2020031009181201018904922342087A16' - } - end - - it 'gets token info' do - token_info = described_class.new(response) - - expect(token_info['creator_id']).to eq('test_creator_id') - expect(token_info['scope']).to eq('user.info.basic') - end - end -end diff --git a/spec/cases/user_info_spec.rb b/spec/cases/user_info_spec.rb new file mode 100644 index 0000000..84dbb89 --- /dev/null +++ b/spec/cases/user_info_spec.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Panda::UserInfo do + let(:response) { Panda::HTTPResponse.new(200, {}, user_response_body) } + + context 'response with result list field in data field' do + let(:user_response_body) do + { + 'message' => 'OK', + 'code' => 0, + 'data' => { + 'display_name' => 'user_name', + 'email' => 'user.email@example.com', + 'core_user_id' => 'core_user_id', + 'avatar_url' => 'https://example.com/avatar.jpg' + }, + 'request_id': '2020031009181201018904922342087A16' + } + end + + it 'gets user info' do + user_info = described_class.new(response) + + expect(user_info['display_name']).to eq('user_name') + expect(user_info['email']).to eq('user.email@example.com') + end + end +end From 091aeb159609702936f3d2a8bf1c515faa2dc6c7 Mon Sep 17 00:00:00 2001 From: dmitrytrager Date: Fri, 24 Jan 2025 17:09:25 +0100 Subject: [PATCH 2/2] feat: restore token_info method DD-4674 --- lib/panda.rb | 8 ++++- lib/panda/client.rb | 18 ++++++++-- lib/panda/http_request.rb | 4 +++ lib/panda/{user_info.rb => item.rb} | 2 +- spec/cases/client_spec.rb | 10 ++++++ spec/cases/item_spec.rb | 52 +++++++++++++++++++++++++++++ spec/cases/user_info_spec.rb | 30 ----------------- 7 files changed, 90 insertions(+), 34 deletions(-) rename lib/panda/{user_info.rb => item.rb} (92%) create mode 100644 spec/cases/item_spec.rb delete mode 100644 spec/cases/user_info_spec.rb diff --git a/lib/panda.rb b/lib/panda.rb index 8de4405..563fd51 100644 --- a/lib/panda.rb +++ b/lib/panda.rb @@ -25,8 +25,14 @@ def make_request(request) conn.response :json end - response = connection.get(request.url, request.params, request.headers) + response = do_request(connection, request) Panda::HTTPResponse.new(response.status, response.headers, response.body) end + + def do_request(connection, request) + return connection.post(request.url, request.params, request.headers) if request.method == :post + + connection.get(request.url, request.params, request.headers) + end end end diff --git a/lib/panda/client.rb b/lib/panda/client.rb index e6f29fb..a472258 100644 --- a/lib/panda/client.rb +++ b/lib/panda/client.rb @@ -5,7 +5,7 @@ require 'panda/errors' require 'panda/http_request' require 'panda/http_response' -require 'panda/user_info' +require 'panda/item' module Panda class Client @@ -57,11 +57,25 @@ def user_info get_user('user/info/') end + # requires token from Accounts API + def token_info + get_token( + 'tt_user/token_info/get/', + app_id: Panda.config.app_id, + access_token: access_token + ) + end + private def get_user(path, params = {}) request = Panda::HTTPRequest.new('GET', path, params, 'Access-Token' => access_token) - Panda::UserInfo.new(Panda.make_request(request)) + Panda::Item.new(Panda.make_request(request)) + end + + def get_token(path, params = {}) + request = Panda::HTTPRequest.new('POST', path, params) + Panda::Item.new(Panda.make_request(request)) end def get_collection(path, params = {}) diff --git a/lib/panda/http_request.rb b/lib/panda/http_request.rb index 7ad39d7..3eaabe9 100644 --- a/lib/panda/http_request.rb +++ b/lib/panda/http_request.rb @@ -36,6 +36,10 @@ def headers ) end + def method + raw_method.downcase.to_sym + end + private def get? diff --git a/lib/panda/user_info.rb b/lib/panda/item.rb similarity index 92% rename from lib/panda/user_info.rb rename to lib/panda/item.rb index f3cedf0..6b44117 100644 --- a/lib/panda/user_info.rb +++ b/lib/panda/item.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Panda - class UserInfo + class Item attr_reader :data def initialize(response) diff --git a/spec/cases/client_spec.rb b/spec/cases/client_spec.rb index bc6b9ad..e7d80da 100644 --- a/spec/cases/client_spec.rb +++ b/spec/cases/client_spec.rb @@ -47,4 +47,14 @@ subject.user_info end end + + describe '#token_info' do + it 'calls #get_token' do + expect(subject) + .to receive(:get_token) + .with('tt_user/token_info/get/', { app_id: Panda.config.app_id, access_token: token }) + + subject.token_info + end + end end diff --git a/spec/cases/item_spec.rb b/spec/cases/item_spec.rb new file mode 100644 index 0000000..5de3248 --- /dev/null +++ b/spec/cases/item_spec.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Panda::Item do + let(:response) { Panda::HTTPResponse.new(200, {}, response_body) } + + context 'when item is token info' do + let(:response_body) do + { + 'message' => 'OK', + 'code' => 0, + 'data' => { + 'app_id' => Panda.config.app_id, + 'creator_id' => 'test_creator_id', + 'scope' => 'user.info.basic' + }, + 'request_id': '2020031009181201018904922342087A16' + } + end + + it 'gets token info' do + token_info = described_class.new(response) + + expect(token_info['creator_id']).to eq('test_creator_id') + expect(token_info['scope']).to eq('user.info.basic') + end + end + + context 'item is user info' do + let(:response_body) do + { + 'message' => 'OK', + 'code' => 0, + 'data' => { + 'display_name' => 'user_name', + 'email' => 'user.email@example.com', + 'core_user_id' => 'core_user_id', + 'avatar_url' => 'https://example.com/avatar.jpg' + }, + 'request_id': '2020031009181201018904922342087A16' + } + end + + it 'gets user info' do + user_info = described_class.new(response) + + expect(user_info['display_name']).to eq('user_name') + expect(user_info['email']).to eq('user.email@example.com') + end + end +end diff --git a/spec/cases/user_info_spec.rb b/spec/cases/user_info_spec.rb deleted file mode 100644 index 84dbb89..0000000 --- a/spec/cases/user_info_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Panda::UserInfo do - let(:response) { Panda::HTTPResponse.new(200, {}, user_response_body) } - - context 'response with result list field in data field' do - let(:user_response_body) do - { - 'message' => 'OK', - 'code' => 0, - 'data' => { - 'display_name' => 'user_name', - 'email' => 'user.email@example.com', - 'core_user_id' => 'core_user_id', - 'avatar_url' => 'https://example.com/avatar.jpg' - }, - 'request_id': '2020031009181201018904922342087A16' - } - end - - it 'gets user info' do - user_info = described_class.new(response) - - expect(user_info['display_name']).to eq('user_name') - expect(user_info['email']).to eq('user.email@example.com') - end - end -end