wattsense-api-client 0.2.0 → 0.3.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
  SHA256:
3
- metadata.gz: 4916afb23e887ae08589fdaaad78580ae15af7e5ac95979cb0aafbef169bd859
4
- data.tar.gz: ab72b48cf7d8704d5ceae305106c66c16e64d3672e8b76c174675bcb76e8489e
3
+ metadata.gz: 0d0e958d259d4dfd6a296368e9c49867d396cb789e9a529952d05edb0cfcbe78
4
+ data.tar.gz: 2059813ffd4b5e059f0707256bfc33e86d9cb42d927cccab5338854d06934d48
5
5
  SHA512:
6
- metadata.gz: 79bf2c3af476a9305a6eeb93a20bb24c17fe85925152990e41be38d82a6225c4f4d2103257b342855c55dfaf9090daa96b36bf70648456832ad26e466d01291f
7
- data.tar.gz: eabff64a18caf34439921ff2017748cd5592337f37793b66ed2f08df38c9435051847fcf0c48247df421c5defcb35f4d7611c644299869c37da4f98c73624bf4
6
+ metadata.gz: 12a85c70878ebf6de8a047e2500fbe36825e886f1c1b513111a75c1fc56d8ac320fe016c690419638a13925a8cc55bd0b7b79df887ac3937dcb93422072a814f
7
+ data.tar.gz: 424cf11c91269389ca4e73c7f0e26507f55bfd30ff23ae0ffd043aa2f3262eeb0bd6ecd4c0bd543516fdfa8dc5c8d36cfd2f78bc6d5602577487604c3474845c
@@ -5,6 +5,9 @@
5
5
  #++
6
6
  # frozen_string_literal: true
7
7
 
8
+ require 'openssl'
9
+ require 'base64'
10
+
8
11
  module WattSenseApi
9
12
  module V1
10
13
  # This module gather all the necessary elements for ClientV1 ability to authenticate to the
@@ -19,8 +22,15 @@ module WattSenseApi
19
22
  #
20
23
  # @param api_key [String] The api's credential key
21
24
  # @param api_secret [String] The api's credential secret
22
- def api_key_authentication(_api_key, _api_secret)
23
- raise(::WattSenseApi::NotImplementedError, 'Please use (username, password) couple for now.')
25
+ def api_key_authentication(api_key, api_secret)
26
+ @auth_block =
27
+ lambda do |request|
28
+ time = now_in_ms
29
+ to_sign = to_sign_from_request(request, time)
30
+ signed = ::OpenSSL::HMAC.digest('SHA512', api_secret, to_sign.join("\n"))
31
+ request['X-API-Auth'] = "#{api_key}:#{::Base64.strict_encode64(signed)}"
32
+ request['X-API-Timestamp'] = time.to_s
33
+ end
24
34
  end
25
35
 
26
36
  # This method allows to use username/password credentials with HTTP Basic user authentication
@@ -31,6 +41,21 @@ module WattSenseApi
31
41
  def basic_user_authentication(username, password)
32
42
  @auth_block = ->(request) { request.basic_auth(username, password) }
33
43
  end
44
+
45
+ # @return [Integer] Time now in ms since Epoch
46
+ def now_in_ms
47
+ now = ::Time.now
48
+ now.tv_sec * 1000 + now.tv_usec / 1_000
49
+ end
50
+
51
+ # @return [String] Message to sign
52
+ def to_sign_from_request(request, time)
53
+ to_sign = [request.method, request.uri.path]
54
+ to_sign.push(request.uri.query) if request.uri.query
55
+ to_sign.push(request.body) if request.body
56
+ to_sign << time.to_s
57
+ to_sign
58
+ end
34
59
  end
35
60
  end
36
61
  end
@@ -6,6 +6,6 @@
6
6
  # frozen_string_literal: true
7
7
 
8
8
  module WattSenseApi
9
- VERSION = '0.2.0'
9
+ VERSION = '0.3.0'
10
10
  public_constant :VERSION
11
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wattsense-api-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roland Laurès
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-22 00:00:00.000000000 Z
11
+ date: 2021-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -119,7 +119,7 @@ licenses:
119
119
  metadata:
120
120
  bug_tracker_uri: https://gitlab.com/octopuslab-public/wattsense-api-client/-/issues
121
121
  changelog_uri: https://gitlab.com/octopuslab-public/wattsense-api-client/-/blob/main/CHANGELOG.md
122
- documentation_uri: https://octopuslab-public.gitlab.io/wattsense-api-client/0.2.0
122
+ documentation_uri: https://octopuslab-public.gitlab.io/wattsense-api-client/0.3.0
123
123
  homepage_uri: https://gitlab.com/octopuslab-public/wattsense-api-client
124
124
  post_install_message:
125
125
  rdoc_options: []