issue 0.3.0 → 1.0.0

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: 9a0d24902085e9ef25c6765748362b06f5015bbd88848db03513c0cd7f33ce9c
4
+ data.tar.gz: '099f1cce4e61d95ab0ca87a6c057f59c5b4bae50e2b59cca25df9e334d3b1c39'
5
5
  SHA512:
6
- metadata.gz: b527de4e23138ee77c2d8740c85df2370e6141d20642276f5a6d2a7d64901ce70a21b1058605d67a084eb110c5e395e75ea56c9ae9eb2e99337e2bcf87576142
7
- data.tar.gz: e72e0322a81d36c612006d23fa1fa91aea3ae11f458b29c1ab83d166f6c17deb901fbc59e86ce534d765101b80b9fc10829524de7e93d623a4529218cec66ae2
6
+ metadata.gz: d5a4bcfa1cb46b5b6a78184e235743cc846f213448c208e0f0da5345c8635e2c635437d57ad66d186f07feb63b5bd0bbcddfae35b42e9e2873d65b4525e8be7f
7
+ data.tar.gz: 81f10062dc2f189ea2ca8e891139718048a24072ec7d9168391a9ce5eaee5baaf5f6d0359c36cc0cb323fd717821989bb5941a194a6b8c4c3f08159522aeb661
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+
4
+ ## 1.0.0 (2021-12-17)
5
+
6
+ - Webhook can discard requests by multiple sender/events pairs
7
+
3
8
  ## 0.3.0 (2021-10-04)
4
9
 
5
10
  - 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.0"
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,14 +1,14 @@
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.0
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: 2021-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: openssl