bungie_client 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e21e427718a8da476155b6b4a3e7efb25a6812b1
4
- data.tar.gz: 9b48bb19ee31ee8ae1062dc8aa20eefd6c55476d
3
+ metadata.gz: 2e72c44c0ee045ada431e0375c8224a5950399de
4
+ data.tar.gz: 881799831b0c3b516246ac2b4e79eaa3b7817874
5
5
  SHA512:
6
- metadata.gz: 6e489bf1e54c0239f6e2d57d5d5d88f6d047a7fc83ea3f82e22d14c3f44458e7135112e0a74508251ae7d763c549ae8b6bfd93a1cfacc6f08ea3da962a5d8c8f
7
- data.tar.gz: b2b3722f9d2f0bbcbc2f68a09082e6fd3e2757750aa85c1547b0883dbe57100b4089645aa62a91b299a079d57956bc8fa63225cbb5ee70251b638b7ea58dabea
6
+ metadata.gz: ca54892aeeb1ca4e31e06e5f21662ef0af903ad0c1b7e0306f9aa74a60fcedea2e9392ddbc551ff225c5c1646f15d97484926aef197cf9c0b601d4f8b9bb9162
7
+ data.tar.gz: c78371d1124a965edc68a385f5e7f5af79414814a182f0ee7cf91d57588171264cc4e86648b1362b4a13ca63e3bae7b5f0fef1a43d258d682fb25544acffd1b2
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/bungie_client.svg)](https://badge.fury.io/rb/bungie_client)
2
+ [![Build Status](https://travis-ci.org/RuBAN-GT/bungie_client.svg?branch=master)](https://travis-ci.org/RuBAN-GT/bungie_client)
2
3
 
3
4
  # Bungie Client
4
5
 
@@ -122,4 +123,4 @@ If you want to fight with Oryx with me or create any interesting applications fo
122
123
 
123
124
  ## Note
124
125
 
125
- * In the source code you can fine `services_parser.rb`. It's script created for getting full list of Bungie API services, for result it generates `services.yml` in lib.
126
+ * In the source code you can fine `services_parser.rb`. It's script created for getting full list of Bungie API services, for result it generates `services.yml` in lib.
@@ -18,12 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = "~> 2.3.0"
22
-
23
21
  spec.add_development_dependency "bundler", "~> 1.12"
24
22
  spec.add_development_dependency "rake", "~> 10.0"
25
23
  spec.add_development_dependency "rspec", "~> 3.0"
26
24
 
25
+ spec.add_runtime_dependency "multi_json", "~> 1.12"
27
26
  spec.add_runtime_dependency "hashie", "~> 3.4"
28
27
  spec.add_runtime_dependency 'mechanize', "~> 2.7", ">= 2.7.0"
29
28
  end
data/lib/bungie_client.rb CHANGED
@@ -1,9 +1,8 @@
1
- require "json"
1
+ require "multi_json"
2
2
  require "hashie"
3
3
  require "mechanize"
4
4
 
5
5
  require "bungie_client/version"
6
- require "bungie_client/auth"
7
6
  require "bungie_client/client"
8
7
  require "bungie_client/service"
9
8
  require "bungie_client/wrappers/default"
@@ -18,7 +18,7 @@ class BungieClient::Client
18
18
  # @return [Hashie::Mash]
19
19
  def self.parse_response(response)
20
20
  if !response.nil? && response != ''
21
- response = JSON.parse response
21
+ response = MultiJson.load response rescue return Hashie::Mash.new
22
22
 
23
23
  if response.is_a?(Hash) && !response['Response'].nil? && response['ErrorCode'] == 1
24
24
  response = Hashie::Mash.new response
@@ -45,9 +45,7 @@ class BungieClient::Client
45
45
  # @param [Hash] options
46
46
  # @option options [String] :api_key
47
47
  # @option options [Array|CookieJar] :cookies with [HTTP::Cookie] or [CookieJar]
48
- # @option options [String] :username username for authentication, necessary if set :authenticate
49
- # @option options [String] :password password of user, necessary if set :authenticate
50
- # @option options [String] :type of account, it can be 'psn' or 'live'
48
+ # @option options [String] :token is authorization token from new oauth2
51
49
  def initialize(options)
52
50
  # checking options and @api_key
53
51
  raise 'Wrong options: It must be Hash.' unless options.is_a? Hash
@@ -58,31 +56,21 @@ class BungieClient::Client
58
56
  @api_key = options[:api_key].to_s
59
57
  end
60
58
 
59
+ # set token
60
+ @token = options[:token].to_s unless options[:token].nil?
61
+
61
62
  # init @agent
62
63
  @agent = Mechanize.new do |config|
63
64
  config.read_timeout = 5
64
65
  end
65
66
 
66
67
  # merge cookies with options
67
- if BungieClient::Auth.valid_cookies? options[:cookies], true
68
+ unless options[:cookies].nil?
68
69
  cookies = (options[:cookies].is_a? CookieJar) ? options[:cookies].cookies : options[:cookies]
69
70
 
70
71
  cookies.each do |cookie|
71
72
  @agent.cookie_jar.add cookie
72
73
  end
73
- end unless options[:cookies].nil?
74
-
75
- # make authentication and save new cookies in client
76
- unless options[:username].nil? || options[:password].nil?
77
- jar = BungieClient::Auth.auth options[:username].to_s, options[:password].to_s, (options[:type].to_s || 'psn')
78
-
79
- if jar.nil?
80
- raise "Wrong authentication. Check your account data."
81
- else
82
- jar.cookies.each do |cookie|
83
- @agent.cookie_jar.add cookie
84
- end
85
- end
86
74
  end
87
75
  end
88
76
 
@@ -132,10 +120,13 @@ class BungieClient::Client
132
120
 
133
121
  # Headers for requests
134
122
  def headers
135
- {
123
+ headers = {
136
124
  'Accept' => 'json',
137
- 'Content-Type' => 'json',
125
+ 'Content-Type' => 'application/json',
138
126
  'X-API-Key' => @api_key
139
127
  }
128
+ headers['Authorization'] = "Bearer #{@token}" unless @token.nil?
129
+
130
+ headers
140
131
  end
141
132
  end
@@ -118,7 +118,7 @@ get_notification_settings:
118
118
  get_partnerships:
119
119
  :name: GetPartnerships
120
120
  :method: get
121
- :endpoint: "/User/{param1}/Partnerships/"
121
+ :endpoint: "/User/{membershipId}/Partnerships/"
122
122
  get_platform_api_keys_for_user:
123
123
  :name: GetPlatformApiKeysForUser
124
124
  :method: get
@@ -1107,10 +1107,6 @@ verify_age:
1107
1107
  :name: VerifyAge
1108
1108
  :method: post
1109
1109
  :endpoint: "/Tokens/VerifyAge/"
1110
- buy_item:
1111
- :name: BuyItem
1112
- :method: post
1113
- :endpoint: "/Destiny/BuyItem/"
1114
1110
  equip_item:
1115
1111
  :name: EquipItem
1116
1112
  :method: post
@@ -1335,10 +1331,6 @@ get_vendor_summaries_for_current_character:
1335
1331
  :name: GetVendorSummariesForCurrentCharacter
1336
1332
  :method: get
1337
1333
  :endpoint: "/Destiny/{membershipType}/MyAccount/Character/{characterId}/Vendors/Summaries/"
1338
- refund_item:
1339
- :name: RefundItem
1340
- :method: post
1341
- :endpoint: "/Destiny/{param1}/RefundItem/"
1342
1334
  search_destiny_player:
1343
1335
  :name: SearchDestinyPlayer
1344
1336
  :method: get
@@ -1374,7 +1366,7 @@ edit_content:
1374
1366
  get_admin_community_live_statuses:
1375
1367
  :name: GetAdminCommunityLiveStatuses
1376
1368
  :method: get
1377
- :endpoint: "/CommunityContent/Live/Admin/{param1}/{param2}/"
1369
+ :endpoint: "/CommunityContent/Live/Admin/{param1}/{param2}/{param3}/"
1378
1370
  get_approval_queue:
1379
1371
  :name: GetApprovalQueue
1380
1372
  :method: get
@@ -1390,19 +1382,23 @@ get_community_featured_activity_modes:
1390
1382
  get_community_live_statuses:
1391
1383
  :name: GetCommunityLiveStatuses
1392
1384
  :method: get
1393
- :endpoint: "/CommunityContent/Live/All/{param1}/{param2}/{param3}/"
1385
+ :endpoint: "/CommunityContent/Live/All/{partnershipType}/{communityStatusSort}/{page}/"
1394
1386
  get_community_live_statuses_for_clanmates:
1395
1387
  :name: GetCommunityLiveStatusesForClanmates
1396
1388
  :method: get
1397
- :endpoint: "/CommunityContent/Live/Clan/{param1}/{param2}/{param3}/"
1389
+ :endpoint: "/CommunityContent/Live/Clan/{partnershipType}/{communityStatusSort}/{page}/"
1398
1390
  get_community_live_statuses_for_friends:
1399
1391
  :name: GetCommunityLiveStatusesForFriends
1400
1392
  :method: get
1401
- :endpoint: "/CommunityContent/Live/Friends/{param1}/{param2}/{param3}/"
1393
+ :endpoint: "/CommunityContent/Live/Friends/{partnershipType}/{communityStatusSort}/{page}/"
1402
1394
  get_featured_community_live_statuses:
1403
1395
  :name: GetFeaturedCommunityLiveStatuses
1404
1396
  :method: get
1405
- :endpoint: "/CommunityContent/Live/Featured/{param1}/{param2}/{param3}/"
1397
+ :endpoint: "/CommunityContent/Live/Featured/{partnershipType}/{communityStatusSort}/{page}/"
1398
+ get_streaming_status_for_member:
1399
+ :name: GetStreamingStatusForMember
1400
+ :method: get
1401
+ :endpoint: "/CommunityContent/Live/Users/{partnershipType}/{membershipType}/{membershipId}/"
1406
1402
  submit_content:
1407
1403
  :name: SubmitContent
1408
1404
  :method: post
@@ -1,3 +1,3 @@
1
1
  module BungieClient
2
- VERSION = '1.0.3'
2
+ VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bungie_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Ruban
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-25 00:00:00.000000000 Z
11
+ date: 2017-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: multi_json
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.12'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.12'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: hashie
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -106,11 +120,9 @@ files:
106
120
  - bin/console
107
121
  - bin/setup
108
122
  - bungie_client.gemspec
109
- - examples/auth_usage.rb
110
123
  - examples/client_usage.rb
111
124
  - examples/wrapper_usage.rb
112
125
  - lib/bungie_client.rb
113
- - lib/bungie_client/auth.rb
114
126
  - lib/bungie_client/client.rb
115
127
  - lib/bungie_client/service.rb
116
128
  - lib/bungie_client/services.yml
@@ -129,9 +141,9 @@ require_paths:
129
141
  - lib
130
142
  required_ruby_version: !ruby/object:Gem::Requirement
131
143
  requirements:
132
- - - "~>"
144
+ - - ">="
133
145
  - !ruby/object:Gem::Version
134
- version: 2.3.0
146
+ version: '0'
135
147
  required_rubygems_version: !ruby/object:Gem::Requirement
136
148
  requirements:
137
149
  - - ">="
@@ -1,10 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
-
3
- require 'bungie_client'
4
-
5
- # Get bungie cookies
6
- jar = BungieClient::Auth.auth 'example@mail.com', 'example', 'psn'
7
- p (jar.nil?) ? 0 : jar.cookies.length
8
-
9
- # Check cookies and authentication
10
- p BungieClient::Auth.auth_possible? (jar || [])
@@ -1,140 +0,0 @@
1
- # Module Auth with two methods: authentication in bungie.net by PSN or Xbox Live and checking this authentication with cookies that was returned early.
2
- module BungieClient::Auth
3
- class << self
4
- # Check cookies for private requests
5
- #
6
- # @param [Array] cookies with [HTTP::Cookie]
7
- # @param [Boolean] raise cookie errors
8
- #
9
- # @return [Boolean]
10
- def valid_cookies?(cookies, raise = false)
11
- if cookies.is_a? Mechanize::CookieJar
12
- cookies = cookies.cookies
13
- elsif !(cookies.is_a?(Array) && cookies.all? { |c| c.is_a? HTTP::Cookie })
14
- raise "Wrong cookie option: It must be Array with HTTP::Cookie elements or CookieJar." if raise
15
-
16
- return false
17
- end
18
-
19
- needed = %w(bungled bungleatk bungles)
20
- cookies.each do |cookie|
21
- if needed.include?(cookie.name) && cookie.expired? == false
22
- needed.delete cookie.name
23
-
24
- return true if needed.length == 0
25
- end
26
- end
27
-
28
- (raise) ? raise("Your argument doesn't have all needed cookies for private requests #{needed.join ','}.") : false
29
- end
30
-
31
- # Full authentication of user
32
- #
33
- # @param [String] username user email for auth
34
- # @param [String] password user password for auth
35
- # @param [String] type can be psn or live
36
- #
37
- # @return [Mechanize::CookieJar|nil]
38
- def auth(username, password, type = 'psn')
39
- # client init
40
- agent = Mechanize.new do |config|
41
- config.open_timeout = 60
42
- config.read_timeout = 60
43
- config.idle_timeout = 120
44
- end
45
-
46
- # getting index page
47
- agent.get 'https://www.bungie.net/' do |page|
48
- result = nil
49
- link = page.link_with :text => search_query(type)
50
-
51
- unless link.nil?
52
- # call auth page
53
- login = agent.click link
54
-
55
- # sending form for sony or ms
56
- if type == 'psn'
57
- form = login.forms.first
58
- unless form.nil?
59
- name = form.field_with(:type => 'email')
60
- pass = form.field_with(:type => 'password')
61
-
62
- if !name.nil? && !pass.nil?
63
- name.value = username
64
- pass.value = password
65
-
66
- result = form.click_button
67
- end
68
- end
69
- else
70
- # ms wanted enabled js, but we can send form without it
71
- ppft = login.body.match(/name\="PPFT"(.*)value\="(.*?)"/)
72
- url = login.body.match(/urlPost\:'(.*?)'/)
73
-
74
- if !ppft.nil? && !url.nil?
75
- result = agent.post url.to_a.last,
76
- 'login' => username,
77
- 'passwd' => password,
78
- 'KMSI' => 1,
79
- 'PPFT' => ppft.to_a.last
80
- end
81
- end
82
- end
83
-
84
- # if result not nil and after authentication we returned to bungie, all ok
85
- if !result.nil? && result.uri.to_s.include?('?code')
86
- needed = %w(bungled bungleatk bungledid bungles)
87
- output = Mechanize::CookieJar.new
88
-
89
- agent.cookies.each do |cookie|
90
- output.add cookie if needed.include? cookie.name
91
- end
92
-
93
- return output
94
- end
95
- end
96
-
97
- nil
98
- end
99
-
100
- # Try authenticate with cookies
101
- #
102
- # @param [Array|CookieJar] cookies array with [HTTP::Cookie] or [CookieJar]
103
- #
104
- # @return [Boolean]
105
- def auth_possible?(cookies)
106
- agent = Mechanize.new
107
-
108
- valid_cookies? cookies, true
109
-
110
- if cookies.is_a? Array
111
- cookies.each do |cookie|
112
- agent.cookie_jar.add cookie
113
- end
114
- else
115
- agent.cookie_jar = cookies
116
- end
117
-
118
- result = nil
119
- agent.get 'https://www.bungie.net/' do |page|
120
- link = page.link_with :text => search_query('psn')
121
-
122
- result = agent.click link unless link.nil?
123
- end
124
-
125
- !result.nil? && result.uri.host == "www.bungie.net"
126
- end
127
-
128
- protected
129
-
130
- def search_query(type)
131
- if type == 'psn'
132
- 'PlayStation Network'
133
- elsif type == 'live'
134
- 'Xbox Live'
135
- else
136
- raise 'Wrong account type!'
137
- end
138
- end
139
- end
140
- end