cronofy 0.22.0 → 0.23.0

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
  SHA1:
3
- metadata.gz: a48c75251078b9b71b6921cb317f6691a9add421
4
- data.tar.gz: b616264212a442276812c5a4a8d944d34e4ba500
3
+ metadata.gz: f49556775f54db6e9d33b86eb11a597abd666d74
4
+ data.tar.gz: b1fcdc132ab95869f21173f4e5b2f0d07f75ae89
5
5
  SHA512:
6
- metadata.gz: 18fb8765fa73771e8b19fdd58e6d349dd792cc82d9e2f8cc817341722e461b74e2d28d7133ddae470ff58cf41441d9dc6b77db118de23e7383586dfa3a44cd61
7
- data.tar.gz: 39a63b0cdf4d63ce838fdbac5bb94d5f8bf6e3cf37b7102760b4f925f4adcfd12b08224dd64a8ce6c570a299074a8f1f4e4529badfb61102c94f96e8c1fcaa45
6
+ metadata.gz: 079b7acfd635b54c5455e729825e501ed0a98468b0879159ea5bb7949ca0088e41cddbc55d139a8de077e864403a643e4fc5d8f2e656c001921a1a8ba500b5c1
7
+ data.tar.gz: 9c21a0271003820802875da88e19b8fa157e37720ac2f5c434ec3cd8d1b945c7220b3fce18071b2c02f402ee6b8fd88d1fe871651a6e019bc8edd74e8d900d01
@@ -1,3 +1,8 @@
1
+ ## [0.23.0]
2
+
3
+ * Support for color with calendar creation and event upsert [#46]
4
+ * Helper to verify push notification HMACs [#45]
5
+
1
6
  ## [0.22.0]
2
7
 
3
8
  * Splitting of Add to Calendar and Real time scheduling [#44]
@@ -64,6 +69,7 @@
64
69
  [0.20.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.20.0
65
70
  [0.21.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.21.0
66
71
  [0.22.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.22.0
72
+ [0.23.0]: https://github.com/cronofy/cronofy-ruby/releases/tag/v0.23.0
67
73
 
68
74
  [#13]: https://github.com/cronofy/cronofy-ruby/pull/13
69
75
  [#16]: https://github.com/cronofy/cronofy-ruby/pull/16
@@ -82,3 +88,5 @@
82
88
  [#40]: https://github.com/cronofy/cronofy-ruby/pull/40
83
89
  [#43]: https://github.com/cronofy/cronofy-ruby/pull/43
84
90
  [#44]: https://github.com/cronofy/cronofy-ruby/pull/44
91
+ [#45]: https://github.com/cronofy/cronofy-ruby/pull/45
92
+ [#46]: https://github.com/cronofy/cronofy-ruby/pull/46
@@ -4,7 +4,10 @@ require "cronofy/types"
4
4
  require "cronofy/auth"
5
5
  require "cronofy/client"
6
6
  require "cronofy/response_parser"
7
+
8
+ require 'base64'
7
9
  require 'json'
10
+ require 'openssl'
8
11
 
9
12
  module Cronofy
10
13
  def self.default_data_centre
@@ -42,13 +42,15 @@ module Cronofy
42
42
  )
43
43
  end
44
44
 
45
- # Public: Creates a new calendar for the account.
45
+ # Public: Creates a new calendar for the profile.
46
46
  #
47
47
  # profile_id - The String ID of the profile to create the calendar within.
48
- # name - A String to use as the name of the calendar.
48
+ # name - The String to use as the name of the calendar.
49
+ # options - The Hash options used to customize the calendar
50
+ # (default: {}):
51
+ # :color - The color to make the calendar (optional).
49
52
  #
50
- # See http://www.cronofy.com/developers/api/alpah#create-calendar for
51
- # reference.
53
+ # See https://www.cronofy.com/developers/api/#create-calendar for reference.
52
54
  #
53
55
  # Returns the created Calendar
54
56
  #
@@ -63,8 +65,9 @@ module Cronofy
63
65
  # state and so a calendar cannot be created.
64
66
  # Raises Cronofy::TooManyRequestsError if the request exceeds the rate
65
67
  # limits for the application.
66
- def create_calendar(profile_id, name)
67
- response = post("/v1/calendars", profile_id: profile_id, name: name)
68
+ def create_calendar(profile_id, name, options = {})
69
+ request = options.merge(profile_id: profile_id, name: name)
70
+ response = post("/v1/calendars", request)
68
71
  parse_json(Calendar, "calendar", response)
69
72
  end
70
73
 
@@ -120,6 +123,7 @@ module Cronofy
120
123
  # occur.
121
124
  # :transparency - The transparency state for the event (optional).
122
125
  # Accepted values are "transparent" and "opaque".
126
+ # :color - The color of the event (optional).
123
127
  # :attendees - A Hash of :invite and :reject, each of which is
124
128
  # an array of invitees to invite to or reject from
125
129
  # the event. Invitees are represented by a hash of
@@ -254,7 +258,7 @@ module Cronofy
254
258
  # The first page will be retrieved eagerly so that common errors will happen
255
259
  # inline. However, subsequent pages (if any) will be requested lazily.
256
260
  #
257
- # See http://www.cronofy.com/developers/api/alpha#free-busy for reference.
261
+ # See http://www.cronofy.com/developers/api/#free-busy for reference.
258
262
  #
259
263
  # Returns a lazily-evaluated Enumerable of FreeBusy
260
264
  #
@@ -394,6 +398,26 @@ module Cronofy
394
398
  parse_json(Channel, "channel", response)
395
399
  end
396
400
 
401
+ # Public: Verifies a HMAC from a push notification using the client secret.
402
+ #
403
+ # args - A Hash containing the details of the push notification:
404
+ # :body - A String of the body of the notification.
405
+ # :hmac - A String of the HMAC of the notification taken from the
406
+ # Cronofy-HMAC-SHA256 header.
407
+ #
408
+ # Returns true if the HMAC provided matches the one calculated using the
409
+ # client secret, otherwise false.
410
+ def hmac_match?(args)
411
+ body = args[:body]
412
+ hmac = args[:hmac]
413
+
414
+ sha256 = OpenSSL::Digest.new('sha256')
415
+ digest = OpenSSL::HMAC.digest(sha256, @client_secret, body)
416
+ calculated = Base64.encode64(digest).strip
417
+
418
+ calculated == hmac
419
+ end
420
+
397
421
  # Public: Lists all the notification channels for the account.
398
422
  #
399
423
  # See http://www.cronofy.com/developers/api#list-channels for reference.
@@ -453,7 +477,7 @@ module Cronofy
453
477
 
454
478
  # Public: Lists all the profiles for the account.
455
479
  #
456
- # See https://www.cronofy.com/developers/api/alpha/#profiles for reference.
480
+ # See https://www.cronofy.com/developers/api/#profiles for reference.
457
481
  #
458
482
  # Returns an Array of Profiles
459
483
  #
@@ -1,3 +1,3 @@
1
1
  module Cronofy
2
- VERSION = "0.22.0".freeze
2
+ VERSION = "0.23.0".freeze
3
3
  end
@@ -136,12 +136,10 @@ describe Cronofy::Client do
136
136
  describe '#create_calendar' do
137
137
  let(:request_url) { 'https://api.cronofy.com/v1/calendars' }
138
138
  let(:method) { :post }
139
- let(:request_body) do
140
- {
141
- :profile_id => "pro_1234",
142
- :name => "Home",
143
- }
144
- end
139
+
140
+ let(:profile_id) { "pro_1234" }
141
+ let(:calendar_name) { "Home" }
142
+ let(:color) { "#49BED8" }
145
143
 
146
144
  let(:correct_response_code) { 200 }
147
145
  let(:correct_response_body) do
@@ -161,10 +159,34 @@ describe Cronofy::Client do
161
159
  Cronofy::Calendar.new(correct_response_body["calendar"])
162
160
  end
163
161
 
164
- subject { client.create_calendar("pro_1234", "Home") }
162
+ context "with mandatory arguments" do
163
+ let(:request_body) do
164
+ {
165
+ profile_id: profile_id,
166
+ name: calendar_name,
167
+ }
168
+ end
165
169
 
166
- it_behaves_like 'a Cronofy request'
167
- it_behaves_like 'a Cronofy request with mapped return value'
170
+ subject { client.create_calendar(profile_id, calendar_name) }
171
+
172
+ it_behaves_like 'a Cronofy request'
173
+ it_behaves_like 'a Cronofy request with mapped return value'
174
+ end
175
+
176
+ context "with color" do
177
+ let(:request_body) do
178
+ {
179
+ profile_id: profile_id,
180
+ name: calendar_name,
181
+ color: color,
182
+ }
183
+ end
184
+
185
+ subject { client.create_calendar(profile_id, calendar_name, color: color) }
186
+
187
+ it_behaves_like 'a Cronofy request'
188
+ it_behaves_like 'a Cronofy request with mapped return value'
189
+ end
168
190
  end
169
191
 
170
192
  describe '#list_calendars' do
@@ -1688,4 +1710,24 @@ describe Cronofy::Client do
1688
1710
  end
1689
1711
  end
1690
1712
  end
1713
+
1714
+ describe "HMAC verification" do
1715
+ let(:client) do
1716
+ Cronofy::Client.new(
1717
+ client_secret: 'pDY0Oi7TJSP2hfNmZNkm5',
1718
+ access_token: token,
1719
+ refresh_token: 'refresh_token_456',
1720
+ )
1721
+ end
1722
+
1723
+ let(:body) { "{\"example\":\"well-known\"}" }
1724
+
1725
+ it "verifies the correct HMAC" do
1726
+ expect(client.hmac_match?(body: body, hmac: "6r2/HjBkqymGegX0wOfifieeUXbbHwtV/LohHS+jv6c=")).to be true
1727
+ end
1728
+
1729
+ it "rejects an incorrect HMAC" do
1730
+ expect(client.hmac_match?(body: body, hmac: "something-else")).to be false
1731
+ end
1732
+ end
1691
1733
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cronofy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.0
4
+ version: 0.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergii Paryzhskyi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-09 00:00:00.000000000 Z
12
+ date: 2017-07-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oauth2
@@ -149,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
149
  version: '0'
150
150
  requirements: []
151
151
  rubyforge_project:
152
- rubygems_version: 2.6.12
152
+ rubygems_version: 2.6.6
153
153
  signing_key:
154
154
  specification_version: 4
155
155
  summary: Cronofy - one API for all the calendars