slack_msgr 0.0.5 → 0.0.6

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: 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: []