meshchat 0.6.3 → 0.6.4

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: d92a2e7b4e026335fc14b3c574cd4252a5f0dbb7
4
- data.tar.gz: 37348ba21effad3647ef2ccd154235b371243810
3
+ metadata.gz: 710116e03c53eb697697204b0fcc82f03dd65f0b
4
+ data.tar.gz: d296660e62b2dca5dcdfb7338045217c7b14da8e
5
5
  SHA512:
6
- metadata.gz: 6477e3bff10e2bd795ad277a6376351c87fd520796a0bc717baf27776a0698caecfc6573190cb4074c9a3feea2f4fe1fd930d518ce18212978297e39af9a17fc
7
- data.tar.gz: a3031e4f8b1a5196c3407798006c8ef750eabd83ae791973505480bae32399380d6f76d87c1ff1f400b010452b95f3854fb30520ced07f28e4a355818dcc333d
6
+ metadata.gz: 41acfb1c0c96b46fd6f39c5e76d9892c3eb24ee0ecc28b32119f45a2bf950f9f5daea6b1e6b5de2f619b2a5b5130dd7233e81f9c9531f440583f938582d89775
7
+ data.tar.gz: 5edd7cee532eb5ecc845178a50d5a5a042357c0d9b2e7912d3137f652d12a3f1a21f189bb951616dc79c793da3c35ee7addd8e1eb9759198cdf40a529a46bbc6
data/README.md CHANGED
@@ -4,7 +4,7 @@ This is the core functionality for implementing a [mesh-chat](https://github.com
4
4
 
5
5
  #Usage
6
6
 
7
- See [Spiced Gracken](https://github.com/NullVoxPopuli/spiced_gracken)
7
+ See [Spiced Rumby](https://github.com/NullVoxPopuli/spiced_rumby)
8
8
 
9
9
  In order to use meshchat with your own interface, you only need to pass in your own implementations of `Display::Base` and `CLI::Base`
10
10
 
@@ -25,10 +25,11 @@ module MeshChat
25
25
  end
26
26
  end
27
27
 
28
- if we_only_have.present?
29
- location = payload['sender']['location']
30
28
 
31
- node = Node.find_by_location(location)
29
+ location = payload['sender']['location']
30
+
31
+ node = Node.find_by_location(location)
32
+ if we_only_have.present?
32
33
 
33
34
  # give the sender our list
34
35
  MeshChat::Net::Client.send(
@@ -36,14 +37,23 @@ module MeshChat
36
37
  message: NodeListDiff.new(message: we_only_have)
37
38
  )
38
39
 
39
- # give the network their list
40
+ # give people we know about
41
+ # (but the sender of the Node List may not know about)
42
+ # our node list diff
40
43
  Node.online.each do |entry|
41
44
  MeshChat::Net::Client.send(
42
45
  node: entry,
43
46
  message: NodeListDiff.new(message: they_only_have)
44
47
  )
45
48
  end
49
+ else
50
+ # lists are in sync, confirm with hash
51
+ MeshChat::Net::Client.send(
52
+ node: node,
53
+ message: NodeListHash.new
54
+ )
46
55
  end
56
+
47
57
  end
48
58
  end
49
59
  end
@@ -14,8 +14,10 @@ module MeshChat
14
14
 
15
15
  def respond
16
16
  if message != Node.as_sha512
17
+ Display.debug 'node list hashes do not match'
17
18
  location = payload['sender']['location']
18
19
 
20
+ Display.debug 'sending a node list to ' + location
19
21
  node = Node.find_by_location(location)
20
22
 
21
23
  MeshChat::Net::Client.send(
@@ -14,8 +14,8 @@ module MeshChat
14
14
  node = self.node_for(location: location, uid: uid, node: node)
15
15
 
16
16
  Thread.new(node, message) do |node, message|
17
- request = MeshChat::Net::Request.new(node, message)
18
- payload = { message: request.payload }
17
+ payload = Client.payload_for(node, message)
18
+
19
19
  begin
20
20
  Curl::Easy.http_post(node.location, payload.to_json) do |c|
21
21
  c.headers['Accept'] = 'application/json'
@@ -37,6 +37,12 @@ module MeshChat
37
37
  end
38
38
  end
39
39
 
40
+ # creates a json payload
41
+ def self.payload_for(node, message)
42
+ request = MeshChat::Net::Request.new(node, message)
43
+ { message: request.payload }
44
+ end
45
+
40
46
  # private
41
47
 
42
48
  # @return [Node]
@@ -0,0 +1,11 @@
1
+ module MeshChat
2
+ module Net
3
+ module Listener
4
+ module Errors
5
+ class NotAuthorized < StandardError; end
6
+ class Forbidden < StandardError; end
7
+ class BadRequest < StandardError; end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -7,7 +7,14 @@ module MeshChat
7
7
 
8
8
  def initialize(input)
9
9
  self._input = try_decrypt(input)
10
- self.json = JSON.parse(_input)
10
+
11
+ begin
12
+ self.json = JSON.parse(_input)
13
+ rescue => e
14
+ Display.debug e.message
15
+ Display.debug e.backtrace.join("\n")
16
+ raise Errors::BadRequest.new
17
+ end
11
18
  self.message = process_json
12
19
  end
13
20
 
@@ -15,19 +22,15 @@ module MeshChat
15
22
 
16
23
  def try_decrypt(input)
17
24
  begin
18
- # TODO: do we want to try to decrypting anyway if decoding fails?
19
25
  decoded = Base64.decode64(input)
20
26
  input = Cipher.decrypt(decoded, Settings[:privateKey])
21
27
  rescue => e
22
28
  Display.debug e.message
23
29
  Display.debug e.backtrace.join("\n")
24
- Display.warning e.message
25
- Display.info 'It\'s possible that this message was sent in cleartext, or was encrypted with the wrong public key'
30
+ Display.debug input
31
+ raise Errors::NotAuthorized.new(e.message)
26
32
  end
27
33
 
28
- Display.debug 'server received message:'
29
- Display.debug input
30
-
31
34
  input
32
35
  end
33
36
 
@@ -35,10 +38,7 @@ module MeshChat
35
38
  type = json['type']
36
39
  klass = Message::TYPES[type]
37
40
 
38
- unless klass
39
- Display.alert 'message recieved and not recognized...'
40
- return
41
- end
41
+ raise Errors::BadRequest.new(type) unless klass
42
42
 
43
43
  klass.new(payload: json)
44
44
  end
@@ -22,9 +22,7 @@ module MeshChat
22
22
  # if the sender isn't currently marked as active,
23
23
  # perform the server list exchange
24
24
  node = Node.find_by_uid(sender['uid'])
25
- if node.nil?
26
- return Display.alert "#{sender['alias']} is not authorized!"
27
- end
25
+ raise Errors::Forbidden.new if node.nil?
28
26
 
29
27
  unless node.online?
30
28
  node.update(online: true)
@@ -1,9 +1,15 @@
1
1
  require 'sinatra/base'
2
+ require 'meshchat/net/listener/errors'
2
3
 
3
4
  module MeshChat
4
5
  module Net
5
6
  module Listener
6
7
  class Server < Sinatra::Base
8
+ OK = 200
9
+ BAD_REQUEST = 400
10
+ NOT_AUTHORIZED = 401
11
+ FORBIDDEN = 403
12
+
7
13
  configure :development do
8
14
  # only shows resulting status
9
15
  disable :logging
@@ -32,25 +38,11 @@ module MeshChat
32
38
  end
33
39
 
34
40
  def process_request
35
- Display.debug request.env
36
-
37
41
  begin
38
42
  # form params should override
39
43
  # raw body
40
- raw =
41
- if msg = params[:message]
42
- msg
43
- else
44
- request_body = request.body.read
45
- json_body = JSON.parse(request_body)
46
- json_body['message']
47
- end
48
-
49
- # decode, etc
50
- RequestProcessor.process(raw)
51
-
52
- # hopefully everything went ok
53
- ok
44
+ raw = get_message
45
+ process(raw)
54
46
  rescue => e
55
47
  Display.error e.message
56
48
  Display.error e.backtrace.join("\n")
@@ -59,9 +51,32 @@ module MeshChat
59
51
  end
60
52
  end
61
53
 
62
- def ok
63
- status 200
64
- body 'OK'
54
+ def get_message
55
+ # if received as form data
56
+ return params[:message] if params[:message]
57
+
58
+ # if received as json
59
+ request_body = request.body.read
60
+ json_body = JSON.parse(request_body)
61
+ json_body['message']
62
+ end
63
+
64
+ def process(raw)
65
+ # decode, etc
66
+ begin
67
+ RequestProcessor.process(raw)
68
+ rescue Errors::NotAuthorized
69
+ status_of NOT_AUTHORIZED
70
+ rescue Errors::Forbidden
71
+ status_of FORBIDDEN
72
+ rescue Errors::BadRequest
73
+ status_of BAD_REQUEST
74
+ end
75
+ end
76
+
77
+ def status_of(s)
78
+ status s
79
+ body ''
65
80
  end
66
81
  end
67
82
  end
@@ -1,3 +1,3 @@
1
1
  module MeshChat
2
- VERSION = '0.6.3'
2
+ VERSION = '0.6.4'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meshchat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - L. Preston Sego III
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-22 00:00:00.000000000 Z
11
+ date: 2015-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqlite3
@@ -228,6 +228,7 @@ files:
228
228
  - lib/meshchat/message/whisper.rb
229
229
  - lib/meshchat/models/entry.rb
230
230
  - lib/meshchat/net/client.rb
231
+ - lib/meshchat/net/listener/errors.rb
231
232
  - lib/meshchat/net/listener/request.rb
232
233
  - lib/meshchat/net/listener/request_processor.rb
233
234
  - lib/meshchat/net/listener/server.rb
@@ -257,6 +258,6 @@ rubyforge_project:
257
258
  rubygems_version: 2.4.7
258
259
  signing_key:
259
260
  specification_version: 4
260
- summary: MeshChat-0.6.3
261
+ summary: MeshChat-0.6.4
261
262
  test_files: []
262
263
  has_rdoc: