banacle 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: 62eb7e77755ab01a7f402528bd3d4740bf57849519fecdcf9fcb2d2360c369aa
4
- data.tar.gz: afa51477a9e6f8d19669b766fecc2a2b0e09e709247ef03da9ca96ecd19fc4e3
3
+ metadata.gz: 5ed9aa2704808715b44bd16ddd6c0a8c1a6d36cf4f2de385e75d2ca0b52e4a70
4
+ data.tar.gz: 0456565ccd292ebdee407e23fe69ea6ff152a4ac485d08c12c91951a6ee5bc16
5
5
  SHA512:
6
- metadata.gz: 99a11e4010d7663b2d991cca2a461bcbd2722f5897e5f9e4a199ab04ec353c1b38688400f4d4fdd260b68f6e4c315f0fc5cb0925cecf1bde79c9dcc73d7b2cab
7
- data.tar.gz: 1ee71620bf8b1c67bbda63b9680585f62b526bc79d62f52474a059b2985e1f83dddb6f92ed5071e73728993c7264fb9b4b69bf011efd7fd631c8eb49f0ef7d8e
6
+ metadata.gz: 17728a74b44f940c19544a43262a7dd79a9ce0941045723aeffa9497d8b4fc6ddea34af861e2b0499c3135d233882cc3a9ed36d67300e28af266ee07d82d678c
7
+ data.tar.gz: 2019918492687104f2767c3c0d0b74d764a7e53c02e043d2c4fa8b79d86d61c5ccc606e9393ffbdcb626c48b8fbd8a8523b638d93e923e31c051462ac8b1d433
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- banacle (0.1.1)
4
+ banacle (0.1.2)
5
5
  aws-sdk-ec2
6
6
  sinatra
7
7
  unicorn
data/lib/banacle/app.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'sinatra/base'
2
2
  require 'sinatra/reloader'
3
- require 'banacle/handler'
3
+ require 'banacle/slash_command/handler'
4
+ require 'banacle/interactive_message/handler'
4
5
 
5
6
  module Banacle
6
7
  class App < Sinatra::Base
@@ -8,14 +9,24 @@ module Banacle
8
9
  register Sinatra::Reloader
9
10
  end
10
11
 
12
+ helpers do
13
+ def command_handler
14
+ @command_handler ||= SlashCommand::Handler.new
15
+ end
16
+
17
+ def message_handler
18
+ @message_handler ||= InteractiveMessage::Handler.new
19
+ end
20
+ end
21
+
11
22
  post '/slack/command' do
12
23
  content_type :json
13
- Handler.handle_slash_command(request)
24
+ command_handler.handle(request)
14
25
  end
15
26
 
16
27
  post '/slack/message' do
17
28
  content_type :json
18
- Handler.handle_interactive_message(request)
29
+ message_handler.handle(request)
19
30
  end
20
31
  end
21
32
  end
@@ -0,0 +1,17 @@
1
+ module Banacle
2
+ class Authenticator
3
+ def self.authenticate(request)
4
+ new(request).authenticate
5
+ end
6
+
7
+ def initialize(request)
8
+ @request = request
9
+ end
10
+
11
+ attr_reader :request
12
+
13
+ # override
14
+ def authenticate
15
+ end
16
+ end
17
+ end
@@ -1,61 +1,41 @@
1
- require 'banacle/slash_command/error'
2
- require 'banacle/slash_command/parser'
3
- require 'banacle/slash_command/renderer'
4
-
5
- require 'banacle/interactive_message/parser'
6
- require 'banacle/interactive_message/renderer'
7
-
8
1
  require 'banacle/slack_validator'
9
2
 
10
3
  module Banacle
11
4
  class Handler
12
- def self.handle_slash_command(request)
13
- new(request).handle_slash_command
14
- end
5
+ class InvalidAuthenticatorError < StandardError; end
15
6
 
16
- def self.handle_interactive_message(request)
17
- new(request).handle_interactive_message
18
- end
7
+ attr_reader :request, :auth
19
8
 
20
- def initialize(request)
9
+ def handle(request)
21
10
  @request = request
22
- end
23
11
 
24
- attr_reader :request
25
-
26
- def handle_slash_command
27
12
  unless skip_validation? || SlackValidator.valid_signature?(request)
28
13
  return [401, {}, "invalid request"]
29
14
  end
30
15
 
31
- begin
32
- command = SlashCommand::Parser.parse(request_text)
33
- rescue SlashCommand::Error => e
34
- return SlashCommand::Renderer.render_error(e)
16
+ if auth && !auth.authenticate(request)
17
+ return [402, {}, "unauthenticated"]
35
18
  end
36
19
 
37
- SlashCommand::Renderer.render(request.params, command)
20
+ handle_request
38
21
  end
39
22
 
40
- def handle_interactive_message
41
- unless skip_validation? || SlackValidator.valid_signature?(request)
42
- return [401, {}, "invalid request"]
43
- end
44
-
45
- command = InteractiveMessage::Parser.parse(JSON.parse(request_payload))
46
- InteractiveMessage::Renderer.render(request.params, command)
47
- end
48
-
49
- def request_text
50
- request.params["text"]
23
+ # override
24
+ def handle_request
51
25
  end
52
26
 
53
- def request_payload
54
- request.params["payload"]
55
- end
27
+ private
56
28
 
57
29
  def skip_validation?
58
30
  request.params["skip_validation"] || ENV["BANACLE_SKIP_VALIDATION"]
59
31
  end
32
+
33
+ def set_authenticator!
34
+ unless auth.is_a?(Banacle::Authentication)
35
+ raise InvalidAuthenticatorError.new(auth.inspect)
36
+ end
37
+
38
+ @auth = auth
39
+ end
60
40
  end
61
41
  end
@@ -0,0 +1,20 @@
1
+ require 'banacle/handler'
2
+ require 'banacle/interactive_message/parser'
3
+ require 'banacle/interactive_message/renderer'
4
+
5
+ module Banacle
6
+ module InteractiveMessage
7
+ class Handler < Banacle::Handler
8
+ def handle_request
9
+ command = InteractiveMessage::Parser.parse(JSON.parse(request_payload))
10
+ InteractiveMessage::Renderer.render(request.params, command)
11
+ end
12
+
13
+ private
14
+
15
+ def request_payload
16
+ request.params["payload"]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ require 'banacle/handler'
2
+ require 'banacle/slash_command/error'
3
+ require 'banacle/slash_command/parser'
4
+ require 'banacle/slash_command/renderer'
5
+
6
+ module Banacle
7
+ module SlashCommand
8
+ class Handler < Banacle::Handler
9
+ def handle_request
10
+ begin
11
+ command = SlashCommand::Parser.parse(request_text)
12
+ rescue SlashCommand::Error => e
13
+ return SlashCommand::Renderer.render_error(e)
14
+ end
15
+
16
+ SlashCommand::Renderer.render(request.params, command)
17
+ end
18
+
19
+ private
20
+
21
+ def request_text
22
+ request.params["text"]
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module Banacle
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: banacle
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
  - Takuya Kosugiyama
@@ -147,11 +147,13 @@ files:
147
147
  - docs/nacl.png
148
148
  - lib/banacle.rb
149
149
  - lib/banacle/app.rb
150
+ - lib/banacle/authenticator.rb
150
151
  - lib/banacle/aws_wrapper/error.rb
151
152
  - lib/banacle/aws_wrapper/nacl.rb
152
153
  - lib/banacle/aws_wrapper/result.rb
153
154
  - lib/banacle/aws_wrapper/vpc.rb
154
155
  - lib/banacle/handler.rb
156
+ - lib/banacle/interactive_message/handler.rb
155
157
  - lib/banacle/interactive_message/parser.rb
156
158
  - lib/banacle/interactive_message/renderer.rb
157
159
  - lib/banacle/slack.rb
@@ -159,6 +161,7 @@ files:
159
161
  - lib/banacle/slash_command/builder.rb
160
162
  - lib/banacle/slash_command/command.rb
161
163
  - lib/banacle/slash_command/error.rb
164
+ - lib/banacle/slash_command/handler.rb
162
165
  - lib/banacle/slash_command/parser.rb
163
166
  - lib/banacle/slash_command/renderer.rb
164
167
  - lib/banacle/version.rb