slack_msgr 0.0.5 → 0.0.6

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: ba93be303c5728b994007644a45678eec7bec9aeefd338d97e09e7d68382a7f2
4
- data.tar.gz: 0a40e7e180a44821106e2450e403afbc606361c46861a2a74663005b37984cc6
3
+ metadata.gz: f44e74f96bec3baf31f333e3cc965aedcfccd2bf9373eb4ee8d43e89ec2c5f9f
4
+ data.tar.gz: 7f43e04b3900ec50c3c0e223bf2b9df11760145ca39398b1ed8bd24dd012a2a0
5
5
  SHA512:
6
- metadata.gz: 4ac47b139f27763a56f9266f37af7e9e7ec67fdb5e958faddf5b4aeedc746e77abf49ca251bf4667aba765afd49e6c6ed12c26cd4840e7563ee4987aa2e84428
7
- data.tar.gz: 914e94e373131ec0c5152eb602e73be370aa53c5019bc71c20bf0f313f31ec9ff636749f32aae0941440ee70b900fba7da7590ac3ef7032bd4b0c0f862f6b3b6
6
+ metadata.gz: 67b61a9469da611a81dec53fc613e679df13fcffbd51f51ae6436059e48172ab947379fd2a0282cd58ffa220e08914a3eac1f4fe2de586d7deddb13f9d5738f0
7
+ data.tar.gz: e6aa49addf640888d861f5b90cb1c8030dbbe6d99d130bde8ebb4ffec15c4c839212ffee1e91e1a88d6326be3b6b924bb22698d63e505a03abe1e7f6df0c192a
@@ -58,10 +58,10 @@ AllCops:
58
58
  - bin/**
59
59
 
60
60
  Metrics/LineLength:
61
- Description: 'Limit lines to 100 characters.'
62
- StyleGuide: '#100-character-limits'
61
+ Description: 'Limit lines to 120 characters.'
62
+ StyleGuide: '#120-character-limits'
63
63
  Enabled: true
64
- Max: 100
64
+ Max: 120
65
65
  # To make it possible to copy or click on URIs in the code, we allow lines
66
66
  # containing a URI to be longer than Max.
67
67
  AllowHeredoc: true
@@ -0,0 +1 @@
1
+ ruby 2.6.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- slack_msgr (0.0.5)
4
+ slack_msgr (0.0.6)
5
5
  faraday (~> 0.15.4)
6
6
 
7
7
  GEM
@@ -26,7 +26,7 @@ GEM
26
26
  multipart-post (>= 1.2, < 3)
27
27
  ice_nine (0.11.2)
28
28
  jaro_winkler (1.5.2)
29
- json (2.2.0)
29
+ json (2.3.1)
30
30
  kwalify (0.7.2)
31
31
  method_source (0.9.2)
32
32
  multipart-post (2.1.1)
@@ -38,7 +38,7 @@ GEM
38
38
  method_source (~> 0.9.0)
39
39
  psych (3.1.0)
40
40
  rainbow (3.0.0)
41
- rake (10.5.0)
41
+ rake (13.0.1)
42
42
  reek (5.4.0)
43
43
  codeclimate-engine-rb (~> 0.4.0)
44
44
  kwalify (~> 0.7.0)
@@ -85,7 +85,7 @@ PLATFORMS
85
85
  DEPENDENCIES
86
86
  bundler (~> 2.0)
87
87
  pry
88
- rake (~> 10.0)
88
+ rake (~> 13.0)
89
89
  reek (~> 5.4.0)
90
90
  rspec (~> 3.0)
91
91
  rubocop (~> 0.71.0)
@@ -5,5 +5,5 @@ module SlackMsgr
5
5
 
6
6
  SLACK_URL = 'https://slack.com'
7
7
 
8
- VERSION = '0.0.5'
8
+ VERSION = '0.0.6'
9
9
  end
@@ -8,6 +8,7 @@ require_relative './constants'
8
8
  path = __dir__
9
9
 
10
10
  require "#{path}/../slack_msgr/slack_method"
11
+ require "#{path}/../slack_msgr/authenticate"
11
12
  require "#{path}/../slack_msgr/chat"
12
13
  require "#{path}/../slack_msgr/configuration"
13
14
  require "#{path}/../slack_msgr/users"
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SlackMsgr
4
+ # Handles various authentication patterns offered by Slack
5
+ class Authenticate
6
+ class << self
7
+ def verification_token?(token)
8
+ token == SlackMsgr.configuration.verification_token
9
+ end
10
+
11
+ def signing_secret?(request)
12
+ signature = request.headers['X-Slack-Signature']
13
+ timestamp = request.headers['X-Slack-Request-Timestamp']
14
+ version = signature.split('=').first
15
+ body = request.body.read
16
+
17
+ # The request timestamp is more than five minutes from local time.
18
+ # It could be a replay attack, so let's ignore it.
19
+ return false if timestamp_over_five_minutes_old?(timestamp)
20
+
21
+ signature == "#{version}=#{compute_hash_sha256(version, timestamp, body)}"
22
+ end
23
+
24
+ private
25
+
26
+ def compute_hash_sha256(version, timestamp, body)
27
+ digest = OpenSSL::Digest::SHA256.new
28
+ OpenSSL::HMAC.hexdigest(digest, SlackMsgr.configuration.signing_secret, "#{version}:#{timestamp}:#{body}")
29
+ end
30
+
31
+ def timestamp_over_five_minutes_old?(timestamp)
32
+ (Time.now - Time.at(timestamp.to_i)) > (60 * 5)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -49,7 +49,8 @@ module SlackMsgr
49
49
  private
50
50
 
51
51
  def sanitize_body
52
- ErrorHandling.raise(:req_args_missing, req_args: REQUIRED_ARGUMENTS, method: method) if req_args_missing? # rubocop:disable LineLength
52
+ ErrorHandling.raise(:req_args_missing, req_args: REQUIRED_ARGUMENTS, method: method) if req_args_missing?
53
+
53
54
  opts.keys.each_with_object({}) do |key, body|
54
55
  body[key] ||= opts[key] if PERMITTED_ARGUMENTS.include?(key)
55
56
  body
@@ -10,7 +10,7 @@ module SlackMsgr
10
10
  :access_tokens,
11
11
  :set_default_token
12
12
 
13
- def initialize(
13
+ def initialize( # rubocop:disable Metrics/ParameterLists
14
14
  verification_token: nil,
15
15
  client_secret: nil,
16
16
  signing_secret: nil,
@@ -6,9 +6,7 @@ module SlackMsgr
6
6
  class << self
7
7
  private
8
8
 
9
- attr_reader :conn
10
-
11
- def establish_connection
9
+ def conn
12
10
  @conn ||= Faraday.new(url: SLACK_URL) do |config|
13
11
  config.request :url_encoded # form-encode POST params
14
12
  config.adapter Faraday.default_adapter # make requests with Net::HTTP
@@ -21,11 +19,10 @@ module SlackMsgr
21
19
 
22
20
  def add_metadata_to_response(response)
23
21
  JSON.parse(response.body, symbolize_names: true)
24
- .merge!(auth_token: conceal(conn.headers['Authorization']))
22
+ .merge!(auth_token: conceal(conn.headers['Authorization']))
25
23
  end
26
24
 
27
- def send_post_request_to_slack(obj, **request_opts)
28
- establish_connection
25
+ def send_post_request_to_slack(obj)
29
26
  conn.authorization :Bearer, SlackMsgr.configuration.oauth_access_token(obj.opts[:use_token])
30
27
  response = conn.post do |req|
31
28
  req.url "/api/#{obj.method}"
@@ -36,7 +33,6 @@ module SlackMsgr
36
33
  end
37
34
 
38
35
  def send_legacy_request_to_slack(obj)
39
- establish_connection
40
36
  conn.authorization :Bearer, SlackMsgr.configuration.legacy_token
41
37
  response = conn.post do |req|
42
38
  req.url "/api/#{obj.method}"
@@ -37,19 +37,18 @@ module SlackMsgr
37
37
  ErrorHandling.raise(:unknown_method, method: method) unless USERS_METHODS[method]
38
38
 
39
39
  USERS_METHODS[method]
40
- end.join(".")
40
+ end.join('.')
41
41
 
42
42
  @method = "users.#{users_method}"
43
43
  @opts = opts
44
44
  @body = sanitize_body
45
- puts body
46
45
  end
47
46
 
48
47
  private
49
48
 
50
49
  def sanitize_body
51
- ErrorHandling.raise(:req_args_missing, req_args: REQUIRED_ARGUMENTS, method: method) if req_args_missing? # rubocop:disable LineLength
52
- puts opts.merge(token)
50
+ ErrorHandling.raise(:req_args_missing, req_args: REQUIRED_ARGUMENTS, method: method) if req_args_missing?
51
+
53
52
  opts.merge!(token).keys.each_with_object({}) do |key, body|
54
53
  body[key] ||= opts[key] if PERMITTED_ARGUMENTS.include?(key)
55
54
  body
@@ -61,7 +60,7 @@ module SlackMsgr
61
60
  end
62
61
 
63
62
  def token
64
- {token: SlackMsgr.configuration.legacy_token}
63
+ { token: SlackMsgr.configuration.legacy_token }
65
64
  end
66
65
  end
67
66
  end
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.add_dependency 'faraday', '~>0.15.4'
34
34
 
35
35
  spec.add_development_dependency 'bundler', '~> 2.0'
36
- spec.add_development_dependency 'rake', '~> 10.0'
36
+ spec.add_development_dependency 'rake', '~> 13.0'
37
37
  spec.add_development_dependency 'rspec', '~> 3.0'
38
38
  spec.add_development_dependency 'rubocop', '~> 0.71.0'
39
39
  spec.add_development_dependency 'reek', '~> 5.4.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack_msgr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Workman
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-25 00:00:00.000000000 Z
11
+ date: 2020-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +134,7 @@ files:
134
134
  - ".reek.yml"
135
135
  - ".rspec"
136
136
  - ".rubocop.yml"
137
+ - ".tool-versions"
137
138
  - CODE_OF_CONDUCT.md
138
139
  - Gemfile
139
140
  - Gemfile.lock
@@ -145,6 +146,7 @@ files:
145
146
  - lib/config/constants.rb
146
147
  - lib/config/initializer.rb
147
148
  - lib/slack_msgr.rb
149
+ - lib/slack_msgr/authenticate.rb
148
150
  - lib/slack_msgr/chat.rb
149
151
  - lib/slack_msgr/configuration.rb
150
152
  - lib/slack_msgr/slack_method.rb
@@ -157,7 +159,7 @@ licenses:
157
159
  metadata:
158
160
  homepage_uri: https://github.com/rdavid1099/slack-msgr
159
161
  source_code_uri: https://github.com/rdavid1099/slack_msgr
160
- post_install_message:
162
+ post_install_message:
161
163
  rdoc_options: []
162
164
  require_paths:
163
165
  - lib
@@ -172,8 +174,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
174
  - !ruby/object:Gem::Version
173
175
  version: '0'
174
176
  requirements: []
175
- rubygems_version: 3.0.3
176
- signing_key:
177
+ rubygems_version: 3.1.4
178
+ signing_key:
177
179
  specification_version: 4
178
180
  summary: A Ruby gem to send and receive messages through Slack
179
181
  test_files: []