beeline-rb 0.0.1 → 0.0.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: eb82e60fd4d94693d41b751a344ce3ec7cbe88e2b8a9322f52ca7a987d0ca762
4
- data.tar.gz: 5c3996593694fd9440f0f83ab248225c0b187cc5d86231ed975d218850107389
3
+ metadata.gz: e249c6436484ce2d8c39b13459e8b9de1efb88328e2855f52e0f9abc34462e8f
4
+ data.tar.gz: ef04c49732843fa6dc5edb4abb4e6300ded0472a5e935e92e5106de39694a88f
5
5
  SHA512:
6
- metadata.gz: 4467d4566ea3e550c4b6406fe6f3e8a44d0b5f1379a0a59b25c2c2008a656cf49863086f875bd75ee185f8f48ec5362946c39e3f64e4700433ee30d24c96aace
7
- data.tar.gz: 94bc32b5c17add1a54073a622818b705210beca53b9ce94aaf93957f852e5e60af0b164426dfa90bc064c7028afc545846f4e45f14f0109fe3e989b02d5c79c5
6
+ metadata.gz: a63a7990d697520bb59ced2c8d71caf813bc0f1a805cebbbaa3cb22cebaf1d6fbf0f623c3b2d4aa770c3347c211860f35652aebd4388aaaa34a3bb08fc763985
7
+ data.tar.gz: ee3966e55f683cf1667447de4a343cfe42abae522d9ed0344d7e8c997c29a21cbb7a98cd06d807ed8e917060c0fa1a30e6340c31e7f692882bee7cf43d53bb6a
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
- beeline
1
+ [beeline](https://github.com/inertia186/beeline-rb)
2
2
  =======
3
3
 
4
- BeeLine is a BeeChat Client Framework for Ruby.
4
+ BeeLine is a [BeeChat](https://beechat.hive-engine.com/) Client Framework for Ruby.
5
5
 
6
6
  #### Installation
7
7
 
@@ -90,4 +90,4 @@ If you're using Tender, I'd love to hear from you. Drop me a line and tell me w
90
90
 
91
91
  ## License
92
92
 
93
- I don't believe in intellectual "property". If you do, consider BeeLine as licensed under a Creative Commons [![CC0](http://i.creativecommons.org/p/zero/1.0/80x15.png)](http://creativecommons.org/publicdomain/zero/1.0/) License.
93
+ I don't believe in intellectual "property". If you do, consider BeeLine as licensed under a Creative Commons <a href="http://creativecommons.org/publicdomain/zero/1.0/"><img src="http://i.creativecommons.org/p/zero/1.0/80x15.png" alt="CC0" /></a> License.
@@ -1,5 +1,8 @@
1
1
  # Example config.yml
2
2
 
3
+ :beechat:
4
+ :frienships:
5
+ :accept: 'auto'
3
6
  :chain:
4
7
  :hive_account: social
5
8
  :hive_public_key: STM5ctejUsoZ9FwfCaVbNvWYYgNMBo9TVsHSE8wHrqAmNJi6sDctt
@@ -39,5 +39,11 @@ module Beeline
39
39
  chat_message(conversation_id, from, reply)
40
40
  end
41
41
  end
42
+
43
+ def process_friendship_requested(payload)
44
+ return unless friendships[:accept] == 'auto'
45
+
46
+ accept_pending_friend_requests
47
+ end
42
48
  end
43
49
  end
@@ -6,7 +6,7 @@ module Beeline
6
6
  class Client
7
7
  include Beeline::Config
8
8
 
9
- attr_reader :commands, :messages
9
+ attr_reader :commands, :messages, :session
10
10
 
11
11
  INITIAL_LATCH = 0.01
12
12
  MAX_LATCH = 3.0
@@ -60,24 +60,40 @@ module Beeline
60
60
  extensions: [PermessageDeflate],
61
61
  headers: {
62
62
  'User-Agent' => AGENT_ID,
63
- 'Cookie' => session.tokens
63
+ 'Authorization' => "Bearer #{session.token}"
64
64
  },
65
65
  ping: WS_KEEPALIVE_TIME
66
66
  )
67
67
  end
68
68
 
69
69
  def authenticate
70
- if result = socket.send({type: 'authenticate', payload: {username: hive_account, token: session.ws_token}}.to_json)
70
+ if result = socket.send({type: 'authenticate', payload: {username: hive_account, token: session.token}}.to_json)
71
71
  puts "Authentication sent: #{session.inspect}"
72
72
 
73
73
  ping
74
+
75
+ accept_pending_friend_requests
74
76
  else
75
77
  puts "Could not authenticate."
76
78
  end
77
79
  end
78
80
 
79
81
  def chat_message(conversation_id, to, message)
80
- socket.send({type: 'chat-message', payload: {conversation_id: conversation_id, to: to, message: message}}.to_json)
82
+ if socket.send({type: 'chat-message', payload: {conversation_id: conversation_id, to: to, message: message}}.to_json)
83
+ puts "Reply sent to #{to}"
84
+ end
85
+ end
86
+
87
+ def accept_pending_friend_requests
88
+ return unless friendships[:accept] == 'auto'
89
+
90
+ session.friend_requests.each do |friend_request|
91
+ if socket.send({type: 'accept-friendship', payload: {id: friend_request['id']}}.to_json)
92
+ puts "Accept friendship sent for #{friend_request['username']}"
93
+ else
94
+ puts "Could not accept friendship request: #{friend_request}"
95
+ end
96
+ end
81
97
  end
82
98
 
83
99
  # @private
@@ -2,6 +2,10 @@ require 'yaml'
2
2
 
3
3
  module Beeline
4
4
  module Config
5
+ def friendships
6
+ beechat[:friendships] || {}
7
+ end
8
+
5
9
  def hive_account
6
10
  chain[:hive_account]
7
11
  end
@@ -14,8 +18,12 @@ module Beeline
14
18
  chain[:hive_public_key]
15
19
  end
16
20
  private
21
+ def beechat
22
+ @beechat_hash ||= yml[:beechat] || {}
23
+ end
24
+
17
25
  def chain
18
- @chain_hash ||= yml[:chain]
26
+ @chain_hash ||= yml[:chain] || {}
19
27
  end
20
28
 
21
29
  def yml
@@ -9,13 +9,12 @@ module Beeline
9
9
  include Config
10
10
  include Hive::Utils
11
11
 
12
- attr_reader :ws_session, :cookies
12
+ attr_reader :ws_session
13
13
 
14
14
  def initialize
15
15
  @base_uri = nil
16
16
  @ws_uri = nil
17
- @cookies = nil
18
- @ws_session = nil
17
+ @beeline_session = nil
19
18
  @http = nil
20
19
  end
21
20
 
@@ -27,23 +26,12 @@ module Beeline
27
26
  @ws_uri ||= URI.parse(BEE_WS_URL)
28
27
  end
29
28
 
30
- def tokens
31
- login if @cookies.nil?
29
+ def token
30
+ login if @beeline_session.nil?
32
31
 
33
- return if @cookies.nil?
32
+ return if @beeline_session.nil?
34
33
 
35
- [
36
- @cookies.split('; ').select{|t| t.start_with? 'token='}.first,
37
- @cookies.split('; ').select{|t| t.start_with? 'refresh_token='}.first
38
- ].join('; ')
39
- end
40
-
41
- def ws_token
42
- login if @ws_session.nil?
43
-
44
- return if @ws_session.nil?
45
-
46
- @ws_session['ws_token']
34
+ @beeline_session['token']
47
35
  end
48
36
 
49
37
  def http(&block)
@@ -53,7 +41,7 @@ module Beeline
53
41
  end
54
42
 
55
43
  def login
56
- return @ws_session if !!@ws_session
44
+ return @beeline_session if !!@beeline_session
57
45
 
58
46
  timestamp = (Time.now.to_f * 1000).to_i
59
47
  message = "#{hive_account}#{timestamp}"
@@ -66,8 +54,7 @@ module Beeline
66
54
  response = http.request request
67
55
 
68
56
  if response.code == '200'
69
- @cookies = response['Set-Cookie']
70
- @ws_session = JSON[response.body]
57
+ @beeline_session = JSON[response.body]
71
58
  else
72
59
  JSON[response.body]
73
60
  end
@@ -75,14 +62,14 @@ module Beeline
75
62
  end
76
63
 
77
64
  def verify
78
- raise "Unable to verify before logging in" unless !!@ws_session
65
+ raise "Unable to verify before logging in" unless !!@beeline_session
79
66
 
80
67
  resource = "#{base_uri.path}/users/verify"
81
68
 
82
69
  http do |http|
83
70
  request = Net::HTTP::Get.new resource
84
71
  request['User-Agent'] = AGENT_ID
85
- request['Cookie'] = tokens
72
+ request['Authorization'] = "Bearer #{token}"
86
73
  response = http.request request
87
74
 
88
75
  JSON[response.body]
@@ -90,19 +77,18 @@ module Beeline
90
77
  end
91
78
 
92
79
  def refresh_token
93
- raise "Unable to refresh token before logging in" unless !!@ws_session
80
+ raise "Unable to refresh token before logging in" unless !!@beeline_session
94
81
 
95
82
  resource = "#{base_uri.path}/refresh-token"
96
83
 
97
84
  http do |http|
98
85
  request = Net::HTTP::Get.new resource
99
86
  request['User-Agent'] = AGENT_ID
100
- request['Cookie'] = tokens
87
+ request['Authorization'] = "Bearer #{@beeline_session['refresh_token']}"
101
88
  response = http.request request
102
89
 
103
90
  if response.code == '200'
104
- @cookies = response['Set-Cookie']
105
- @ws_session = JSON[response.body]
91
+ @beeline_session['token'] = JSON[response.body]['token']
106
92
  else
107
93
  JSON[response.body]
108
94
  end
@@ -110,14 +96,14 @@ module Beeline
110
96
  end
111
97
 
112
98
  def get(resource)
113
- raise "Unable to request #{resource} before logging in" unless !!@ws_session
99
+ raise "Unable to request #{resource} before logging in" unless !!@beeline_session
114
100
 
115
101
  resource = "#{base_uri.path}#{resource}"
116
102
 
117
103
  http do |http|
118
104
  request = Net::HTTP::Get.new resource
119
105
  request['User-Agent'] = AGENT_ID
120
- request['Cookie'] = tokens
106
+ request['Authorization'] = "Bearer #{token}"
121
107
  response = http.request request
122
108
 
123
109
  JSON[response.body]
@@ -125,10 +111,11 @@ module Beeline
125
111
  end
126
112
 
127
113
  def friends; get('/users/friends'); end
114
+ def friend_requests; get('/users/friend-requests'); end
128
115
  def settings; get('/users/settings'); end
129
116
 
130
117
  def settings=(new_settings)
131
- raise "Unable to post settings before logging in" unless !!@ws_session
118
+ raise "Unable to post settings before logging in" unless !!@beeline_session
132
119
 
133
120
  resource = "#{base_uri.path}/users/settings"
134
121
 
@@ -137,7 +124,7 @@ module Beeline
137
124
  request.body = new_settings.to_json
138
125
  request['Content-Type'] = 'application/json; charset=UTF-8'
139
126
  request['User-Agent'] = AGENT_ID
140
- request['Cookie'] = tokens
127
+ request['Authorization'] = "Bearer #{token}"
141
128
  response = http.request request
142
129
 
143
130
  JSON[response.body]
@@ -147,7 +134,7 @@ module Beeline
147
134
  def channels; get('/users/channels'); end
148
135
 
149
136
  def channels=(new_channels)
150
- raise "Unable to post channels before logging in" unless !!@ws_session
137
+ raise "Unable to post channels before logging in" unless !!@beeline_session
151
138
 
152
139
  resource = "#{base_uri.path}/users/channels"
153
140
 
@@ -156,7 +143,7 @@ module Beeline
156
143
  request.body = new_channels.to_json
157
144
  request['Content-Type'] = 'application/json; charset=UTF-8'
158
145
  request['User-Agent'] = AGENT_ID
159
- request['Cookie'] = tokens
146
+ request['Authorization'] = "Bearer #{token}"
160
147
  response = http.request request
161
148
 
162
149
  JSON[response.body]
@@ -167,7 +154,7 @@ module Beeline
167
154
  def conversations; get('/messages/conversations'); end
168
155
 
169
156
  def conversation(*id)
170
- raise "Unable to get conversation before logging in" unless !!@ws_session
157
+ raise "Unable to get conversation before logging in" unless !!@beeline_session
171
158
 
172
159
  id = [id].flatten
173
160
  resource = "#{base_uri.path}/messages/conversation?ids=#{id.join(',')}"
@@ -175,7 +162,7 @@ module Beeline
175
162
  http do |http|
176
163
  request = Net::HTTP::Get.new resource
177
164
  request['User-Agent'] = AGENT_ID
178
- request['Cookie'] = tokens
165
+ request['Authorization'] = "Bearer #{token}"
179
166
  response = http.request request
180
167
 
181
168
  JSON[response.body]
@@ -185,7 +172,7 @@ module Beeline
185
172
  def new_conversations; get('/messages/new'); end
186
173
 
187
174
  def chats(id, before = nil, limit = nil)
188
- raise "Unable to get conversation before logging in" unless !!@ws_session
175
+ raise "Unable to get conversation before logging in" unless !!@beeline_session
189
176
 
190
177
  resource = "#{base_uri.path}/messages/chats?conversation_id=#{id}"
191
178
  resource += "&before=#{before.utc.iso8601}" if !!before
@@ -194,7 +181,7 @@ module Beeline
194
181
  http do |http|
195
182
  request = Net::HTTP::Get.new resource
196
183
  request['User-Agent'] = AGENT_ID
197
- request['Cookie'] = tokens
184
+ request['Authorization'] = "Bearer #{token}"
198
185
  response = http.request request
199
186
 
200
187
  JSON[response.body]
@@ -1,4 +1,4 @@
1
1
  module Beeline
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  AGENT_ID = "beeline/#{VERSION}"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beeline-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-08 00:00:00.000000000 Z
11
+ date: 2020-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler