issue 0.3.0 → 1.0.1

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