companion_api 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c4343a3a67cf68ea8d4bcaeb3aa4348933fd645a7f622600320510230861780f
4
- data.tar.gz: 0da00a10c193798c6914b711272503ea2cd2d1673fac2284fcb276ae644defe9
3
+ metadata.gz: cadd9a439d14d28b69c7b61c9e78c92a1ac3dfffbff7458a098d16441fad2618
4
+ data.tar.gz: 87bc717c1e5c9971abd427fe3f6ece4c29872b2327a089e979b9ce2e122ef5fb
5
5
  SHA512:
6
- metadata.gz: 778381e42a5bdc38c8559dbae155aff105182e4fd202df9b11d5c0b1ea040e6d9d9df8a65b3b95569d568d6a30aef0e33cc888249c648083b30e087d1965691c
7
- data.tar.gz: e599dcba3cfd10e8daeea576667f680d1efb0278c7d8ac7c8a0a722d2090b6df8cb8b39c7bf0470f9cdb8f2f7ef43a86533003a03f219f96196f0fcf218a1018
6
+ metadata.gz: 3951ef0c5404df9fa927281cd288ac50ddf00da655e773b0bfbdc5c11d76a7259a62265c38a8ef596808242b7b990f5593ab7dcdc8e78e3ec8213898a050af80
7
+ data.tar.gz: ebaa49f51a4ebd7afe857091b15b80491b119e4eb3084b3f40f8e0c1dd3144a0e4010f2182dceb583838648f537f7648a8e33af6cbbe7da0f2d148be050ce923
@@ -30,8 +30,8 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_dependency 'activesupport', '~> 5'
32
32
  spec.add_dependency 'faraday', '~> 0.9'
33
+ spec.add_dependency 'faraday-cookie_jar', '~> 0.0.6'
33
34
  spec.add_dependency 'faraday_middleware', '~> 0.12.2'
34
- spec.add_dependency 'httpclient', '~> 2.8.3'
35
35
  spec.add_dependency 'nokogiri', '~> 1.8.5'
36
36
  spec.add_dependency 'pbkdf2-ruby', '~> 0.2.1'
37
37
 
data/lib/companion_api.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'faraday'
2
- require 'httpclient'
3
2
  require 'faraday_middleware'
3
+ require 'faraday-cookie_jar'
4
4
  require 'nokogiri'
5
5
 
6
6
  require 'json'
@@ -26,11 +26,15 @@ require 'companion_api/resources/market'
26
26
  module CompanionApi
27
27
  class << self
28
28
  def uuid
29
- @uuid ||= SecureRandom.uuid.upcase
29
+ @uuid ||= generate_uuid
30
30
  end
31
31
 
32
32
  def refresh_uuid
33
- @uuid = SecureRandom.uuid.upcase
33
+ @uuid = generate_uuid
34
+ end
35
+
36
+ def generate_uuid
37
+ SecureRandom.uuid.upcase
34
38
  end
35
39
 
36
40
  def pbkdf2(value, salt)
@@ -31,5 +31,14 @@ module CompanionApi
31
31
  def loggedin?
32
32
  @login.character.present?
33
33
  end
34
+
35
+ def valid_token?
36
+ last_login = @profile.get("lastLogin")
37
+ return false if last_login.blank?
38
+
39
+ diff = Time.now.to_i - last_login
40
+ # we use 12 hours for now to refresh tokens a bit more often and prevent expiring
41
+ diff < 12 * 60 * 60
42
+ end
34
43
  end
35
44
  end
@@ -2,4 +2,5 @@ module CompanionApi
2
2
  class Error < StandardError; end
3
3
  class LoginError < StandardError; end
4
4
  class TokenExpiredError < StandardError; end
5
+ class ApiError < StandardError; end
5
6
  end
@@ -35,7 +35,7 @@ module CompanionApi
35
35
  'Accept-Language' => 'en-gb',
36
36
  'Accept-Encoding' => 'br, gzip, deflate',
37
37
  'User-Agent' => 'ffxivcomapp-e/1.0.3.0 CFNetwork/974.2.1 Darwin/18.0.0',
38
- 'request-id' => @args[:requestId] || CompanionApi.uuid,
38
+ 'request-id' => @args[:requestId] || CompanionApi.generate_uuid,
39
39
  'token' => @args[:token],
40
40
  }
41
41
 
@@ -55,15 +55,18 @@ module CompanionApi
55
55
  def execute!(method)
56
56
  CompanionApi.debug("executing %{method} to endpoint %{endpoint} with url %{uri}", method: method, endpoint: endpoint, uri: @args[:uri])
57
57
 
58
+ # FileUtils.touch("/tmp/cookies.dat")
59
+
60
+ # jar = HTTP::CookieJar.new
61
+ # jar.load("/tmp/cookies.dat")
62
+
58
63
  conn = Faraday.new(url: @args[:uri]) do |builder|
59
64
  # builder.response :logger
60
65
  builder.request :url_encoded
61
66
  builder.use FaradayMiddleware::FollowRedirects
62
- builder.adapter :httpclient
63
-
64
- # builder.adapter :httpclient do |http|
65
- # http.set_cookie_store("/tmp/test.dat")
66
- # end
67
+ # builder.use :cookie_jar, jar: jar
68
+ builder.use :cookie_jar
69
+ builder.adapter :net_http
67
70
  end
68
71
 
69
72
  30.times do
@@ -77,6 +80,7 @@ module CompanionApi
77
80
 
78
81
  CompanionApi.debug("received status %{status}", status: res.status)
79
82
 
83
+ raise CompanionApi::ApiError, res.body if res.status == 500
80
84
  raise CompanionApi::TokenExpiredError, 'token has expired' if res.status == 403
81
85
 
82
86
  return res if @args[:return202] || res.status != 202
@@ -73,6 +73,8 @@ module CompanionApi
73
73
 
74
74
  raise CompanionApi::LoginError, 'Login status could not be validated.' if res.status != 202
75
75
 
76
+ @profile.set("lastLogin", Time.now.to_i)
77
+
76
78
  CompanionApi.refresh_uuid
77
79
  true
78
80
  end
@@ -30,14 +30,20 @@ module CompanionApi
30
30
  def characters
31
31
  return @characters if @characters.present?
32
32
 
33
- req = CompanionApi::Request.new(
34
- uri: CompanionApi::Request::URI,
35
- endpoint: '/login/characters',
36
- token: @profile.get("token"),
37
- )
38
-
39
- res = req.get!
40
- json = JSON.parse(res.body)
33
+ json = {}
34
+ 3.times do
35
+ req = CompanionApi::Request.new(
36
+ uri: CompanionApi::Request::URI,
37
+ endpoint: '/login/characters',
38
+ token: @profile.get("token"),
39
+ )
40
+
41
+ res = req.get!
42
+ json = JSON.parse(res.body)
43
+ break if json["accounts"].present?
44
+
45
+ sleep(0.5)
46
+ end
41
47
 
42
48
  raise CompanionApi::LoginError, 'no valid accounts found' if json["accounts"].blank?
43
49
 
@@ -32,7 +32,10 @@ module CompanionApi
32
32
  )
33
33
 
34
34
  res = req.get!
35
- JSON.parse(res.body)
35
+ json = JSON.parse(res.body)
36
+ raise CompanionApi::ApiError, 'got an error message from companion api' if json["error"].present? && json["error"]["code"].present?
37
+
38
+ json
36
39
  end
37
40
  end
38
41
  end
@@ -1,3 +1,3 @@
1
1
  module CompanionApi
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.1.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: companion_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nils Berenbold
@@ -81,33 +81,33 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.9'
83
83
  - !ruby/object:Gem::Dependency
84
- name: faraday_middleware
84
+ name: faraday-cookie_jar
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.12.2
89
+ version: 0.0.6
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.12.2
96
+ version: 0.0.6
97
97
  - !ruby/object:Gem::Dependency
98
- name: httpclient
98
+ name: faraday_middleware
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 2.8.3
103
+ version: 0.12.2
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 2.8.3
110
+ version: 0.12.2
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: nokogiri
113
113
  requirement: !ruby/object:Gem::Requirement