beeline-rb 0.0.1 → 0.0.2

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
  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