issue 0.3.0 → 1.0.1

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: edf054d58775c3a56083086359673f70b4a67270233ac33959d0f1184b89e625
4
- data.tar.gz: b5df077ef1860d4d030c9b23a3a847afd27307a2760200d67037c69c578fc069
3
+ metadata.gz: 75d2758f4f06a744f34d437ab9f226fa57e114ef4c1679dbbcd76be7e048f609
4
+ data.tar.gz: b14bbd4a352b18aebc3663c6e2f7390f07e5465ee87e9dab79fd0ec7fc56d623
5
5
  SHA512:
6
- metadata.gz: b527de4e23138ee77c2d8740c85df2370e6141d20642276f5a6d2a7d64901ce70a21b1058605d67a084eb110c5e395e75ea56c9ae9eb2e99337e2bcf87576142
7
- data.tar.gz: e72e0322a81d36c612006d23fa1fa91aea3ae11f458b29c1ab83d166f6c17deb901fbc59e86ce534d765101b80b9fc10829524de7e93d623a4529218cec66ae2
6
+ metadata.gz: 61795740364436abbb30a9edfee4db52e94920c050d2062a9f52ce91d303ba8ecf1e1450358921345168d1d12480c84b9212ad5506d6bb16e8f5fdf3d7c048dd
7
+ data.tar.gz: a3735309f586519995f21b10d6a62eec3f61818101880abad40edcec376533ec492b0b6f834ec9d01135917d16e13b74f678731dc4e2593e01f1b023e5db6eb1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+
4
+ ## 1.0.1 (2023-28-02)
5
+
6
+ - Updated dependencies versions (Rack & Openssl)
7
+
8
+ ## 1.0.0 (2021-12-17)
9
+
10
+ - Webhook can discard requests by multiple sender/events pairs
11
+
3
12
  ## 0.3.0 (2021-10-04)
4
13
 
5
14
  - Add comment_id to Payload's context
data/README.md CHANGED
@@ -28,7 +28,7 @@ The `Issue::Webhook` is used to declare and parse a GitHub webhook. At initializ
28
28
 
29
29
  - **secret_token**: The GitHub secret access token for authorization
30
30
  - **origin**: The repository to accept payloads from. If nil any origin will be accepted. If not nil any request from a different repository will be ignored
31
- - **discard_sender**: The GitHub handle of a user whose events will be ignored. Usually the organization bot. If nil no user will be ignored.
31
+ - **discard_sender**: The GitHub handle of a user whose events will be ignored. Usually the organization bot. If nil no user will be ignored. To ignore only specific events use a Hash where keys are usernames and values are arrays of events to ignore for that username.
32
32
  - **accept_events**: An Array of GitHub event types to accept. If nil all events will be accepted.
33
33
 
34
34
  Once it is initialized a request can be parsed passing it to the **`parse_request`** method. After verifying the request signature and checking for the configurated conditions the `parse_request` method returns a [Payload, Error] pair, where the error is nil if nothing failed, and the payload is nil if an error ocurred.
@@ -66,6 +66,7 @@ The `Issue::Payload` object includes all the parsed information coming from the
66
66
  repo: # the full name of the origin repository
67
67
  sender: # the login of the user triggering the webhook action
68
68
  event_action: # a string: "event.action"
69
+ comment_id: # id of the comment
69
70
  comment_body: # body of the comment
70
71
  comment_created_at: # created_at value of the comment
71
72
  comment_url: # the html url for the comment
data/lib/issue/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Issue
2
- VERSION = "0.3.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/lib/issue/webhook.rb CHANGED
@@ -22,8 +22,8 @@ module Issue
22
22
  def initialize(settings={})
23
23
  @secret_token = settings[:secret_token]
24
24
  @accept_origin = settings[:origin]
25
- @discard_sender = settings[:discard_sender]
26
25
  @accept_events = [settings[:accept_events]].flatten.compact.uniq.map(&:to_s)
26
+ @discard_sender = parse_discard_senders(settings[:discard_sender])
27
27
  end
28
28
 
29
29
  # This method will parse the passed request.
@@ -53,6 +53,16 @@ module Issue
53
53
 
54
54
  private
55
55
 
56
+ def parse_discard_senders(discard_sender_settings)
57
+ if discard_sender_settings.is_a?(String)
58
+ return { discard_sender_settings => [] }
59
+ elsif discard_sender_settings.is_a?(Hash)
60
+ return discard_sender_settings.transform_keys {|k| k.to_s }.transform_values {|v| [v].flatten}
61
+ else
62
+ return {}
63
+ end
64
+ end
65
+
56
66
  def verify_signature
57
67
  gh_signature = request.get_header "HTTP_X_HUB_SIGNATURE"
58
68
  return error!(500, "Can't compute signature") if secret_token.nil? || secret_token.empty?
@@ -78,7 +88,7 @@ module Issue
78
88
  return error!(422, "No payload") if json_payload.nil? || json_payload.empty?
79
89
  return error!(422, "No event") if event.nil?
80
90
  return error!(200, "Event discarded") unless (accept_events.empty? || accept_events.include?(event))
81
- return error!(200, "Event origin discarded") if (discard_sender && sender == discard_sender)
91
+ return error!(200, "Event origin discarded") if (discard_sender[sender] == [] || discard_sender[sender].to_a.include?(event))
82
92
  return error!(403, "Event origin not allowed") if (accept_origin && origin != accept_origin)
83
93
 
84
94
  @payload = Issue::Payload.new(json_payload, event)
metadata CHANGED
@@ -1,71 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: issue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juanjo Bazán
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-04 00:00:00.000000000 Z
11
+ date: 2023-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: openssl
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 3.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 3.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 3.0.4
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 3.0.4
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 13.0.3
47
+ version: 13.0.6
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: 13.0.3
54
+ version: 13.0.6
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.10'
61
+ version: '3.12'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.10'
68
+ version: '3.12'
69
69
  description: Receive, parse and manage GitHub webhook events for issues, PRs and issue's
70
70
  comments
71
71
  email:
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
110
  requirements: []
111
- rubygems_version: 3.2.22
111
+ rubygems_version: 3.4.6
112
112
  signing_key:
113
113
  specification_version: 4
114
114
  summary: Manage webhook payload for issue events