cassieq-client 0.0.1 → 0.1.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
  SHA1:
3
- metadata.gz: 44fa66a4e5b3e55e2fa4b3f67bc576d95261b00a
4
- data.tar.gz: 7df246d7d9387f30687197ea370fa928b6730642
3
+ metadata.gz: 368becc1f022878ebdaac4104ab18c52f0681b5f
4
+ data.tar.gz: 4a4f2827658f85159a6ffbbb143404028510b4ad
5
5
  SHA512:
6
- metadata.gz: 89940a3442a03d42d06fc737a51ddf083305767d39d26771ac982dea1ccf0d3f2cd88ed6fa9f7b9e1e0ec574481b777621f2f0eabb0973ad92110c723de86e54
7
- data.tar.gz: 1df1f4a1d76024814d3398bc72f681c5d86c56fb7513327b326c7113c2c5acdc4325e333a802ce1414da473eb0a2830b1dab10579acd07dbbe4a34055287adaf
6
+ metadata.gz: 2be00340ef8a8dab45b5beff7f42f7ce1ca7bec3bf67453836383a9ffbf0142c915453ebc9f2ff963d030acf2edbb6be4a808d4c5395b513029db84141aa483a
7
+ data.tar.gz: 08b7d747bd26480050f93e7862bc4a4f19e184cd3e708e15dd5669a132aaa92d49d2b94624c4e577c46f8bd98a6c375d140c52a664e83bd5067e4362989575e9
@@ -0,0 +1,13 @@
1
+ require "base64"
2
+ require "openssl"
3
+
4
+ module Cassieq
5
+ module Authentication
6
+ def generate_signature_from_key(key, request_method, account, request_path, request_time)
7
+ key_bytes = Base64.urlsafe_decode64("#{key}==")
8
+ string_to_sign = [account, request_method, request_path, request_time].join("\n")
9
+ hmac = OpenSSL::HMAC.digest("sha256", key_bytes, string_to_sign)
10
+ Base64.urlsafe_encode64(hmac).gsub(/=+$/, "")
11
+ end
12
+ end
13
+ end
@@ -1,21 +1,25 @@
1
+ require "json"
2
+
1
3
  module Cassieq
2
4
  class Client
3
5
  module Messages
4
6
  def create_message(queue_name, message)
5
- post("queues/#{queue_name}/messages", message)
7
+ request(:post, "queues/#{queue_name}/messages", message)
6
8
  end
7
9
 
8
10
  def next_message(queue_name)
9
- get("queues/#{queue_name}/messages/next")
11
+ request(:get, "queues/#{queue_name}/messages/next")
10
12
  end
11
13
 
12
14
  def edit_message(queue_name, pop_receipt, options)
13
15
  body = camelize_and_stringify_keys(options).to_json
14
- put("queues/#{queue_name}/messages", body, { popReceipt: pop_receipt })
16
+ params = { popReceipt: pop_receipt }
17
+ request(:put, "queues/#{queue_name}/messages", body, params)
15
18
  end
16
19
 
17
20
  def delete_message(queue_name, pop_receipt)
18
- delete("queues/#{queue_name}/messages", popReceipt: pop_receipt)
21
+ params = { popReceipt: pop_receipt }
22
+ request(:delete, "queues/#{queue_name}/messages", nil, params)
19
23
  end
20
24
  end
21
25
  end
@@ -1,21 +1,23 @@
1
+ require "json"
2
+
1
3
  module Cassieq
2
4
  class Client
3
5
  module Queues
4
6
  def queues
5
- get("queues")
7
+ request(:get, "queues")
6
8
  end
7
9
 
8
10
  def create_queue(options)
9
11
  body = camelize_and_stringify_keys(options).to_json
10
- post("queues", body)
12
+ request(:post, "queues", body)
11
13
  end
12
14
 
13
15
  def queue(queue_name)
14
- get("queues/#{queue_name}")
16
+ request(:get, "queues/#{queue_name}")
15
17
  end
16
18
 
17
19
  def delete_queue(queue_name)
18
- delete("queues/#{queue_name}")
20
+ request(:delete, "queues/#{queue_name}")
19
21
  end
20
22
  end
21
23
  end
@@ -2,7 +2,7 @@ module Cassieq
2
2
  class Client
3
3
  module Statistics
4
4
  def statistics(queue_name)
5
- get("queues/#{queue_name}/statistics")
5
+ request(:get, "queues/#{queue_name}/statistics")
6
6
  end
7
7
  end
8
8
  end
@@ -1,5 +1,6 @@
1
1
  require "faraday"
2
2
  require "faraday_middleware"
3
+ require "cassieq/authentication"
3
4
  require "cassieq/client/messages"
4
5
  require "cassieq/client/statistics"
5
6
  require "cassieq/client/queues"
@@ -11,15 +12,15 @@ module Cassieq
11
12
  include Cassieq::Client::Queues
12
13
  include Cassieq::Client::Messages
13
14
  include Cassieq::Client::Statistics
15
+ include Cassieq::Authentication
14
16
  include Cassieq::Utils
15
17
 
16
- attr_accessor :host, :account, :port, :key, :auth, :sig
18
+ attr_accessor :host, :account, :port, :key, :provided_params
17
19
 
18
20
  def initialize(params = {})
19
21
  @host = params.fetch(:host, nil)
20
22
  @key = params.fetch(:key, nil)
21
- @auth = params.fetch(:auth, nil)
22
- @sig = params.fetch(:sig, nil)
23
+ @provided_params = params.fetch(:provided_params, nil)
23
24
  @account = params.fetch(:account, nil)
24
25
  @port = params.fetch(:port, 8080)
25
26
  yield(self) if block_given?
@@ -38,43 +39,30 @@ module Cassieq
38
39
  conn.host = host
39
40
  conn.port = port
40
41
  conn.path_prefix = path_prefix
41
- conn.headers["Authorization"] = "Key #{key}" unless key.nil?
42
- unless auth.nil? || sig.nil?
43
- conn.params["auth"] = auth
44
- conn.params["sig"] = sig
45
- end
42
+ conn.params.merge_query(provided_params) unless provided_params.nil?
46
43
  conn.response :json, :content_type => /\bjson$/
47
44
  end
48
45
  end
49
46
 
50
- def get(path)
51
- handle_response do
52
- connection.run_request(:get, path, nil, nil)
53
- end
54
- end
55
-
56
- def post(path, body)
47
+ def request(method, path, body = nil, params = nil)
57
48
  handle_response do
58
- connection.run_request(:post, path, body, nil) do |req|
59
- req.headers.merge!("Content-Type" => "application/json")
49
+ auth_headers = generate_auth_headers(method, path)
50
+ connection.run_request(method, path, body, auth_headers) do |req|
51
+ req.params.merge!(params) unless params.nil?
52
+ req.headers["Content-Type"] = "application/json" unless body.nil?
60
53
  end
61
54
  end
62
55
  end
63
56
 
64
- def put(path, body, params = {})
65
- handle_response do
66
- connection.run_request(:put, path, body, nil) do |req|
67
- req.params.merge!(params)
68
- req.headers.merge!("Content-Type" => "application/json")
69
- end
70
- end
71
- end
57
+ def generate_auth_headers(method, path)
58
+ unless key.nil?
59
+ request_time = formated_time_now
60
+ request_path = "#{path_prefix}/#{path}"
61
+ auth_signature = generate_signature_from_key(key, method.to_s.upcase, account, request_path, request_time)
72
62
 
73
- def delete(path, params = {})
74
- handle_response do
75
- connection.run_request(:delete, path, nil, nil) do |req|
76
- req.params.merge!(params)
77
- end
63
+ { "X-Cassieq-Request-Time" => request_time, "Authorization" => "Signed #{auth_signature}" }
64
+ else
65
+ nil
78
66
  end
79
67
  end
80
68
 
data/lib/cassieq/utils.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "active_support/core_ext/hash/keys"
2
2
  require "active_support/inflector"
3
+ require "time"
3
4
 
4
5
  module Cassieq
5
6
  module Utils
@@ -11,6 +12,10 @@ module Cassieq
11
12
  transform_keys_in_structure(data) { |key| key.to_s.camelize(:lower) }
12
13
  end
13
14
 
15
+ def formated_time_now
16
+ Time.now.utc.iso8601
17
+ end
18
+
14
19
  private
15
20
 
16
21
  def transform_keys_in_structure(data)
@@ -24,4 +29,4 @@ module Cassieq
24
29
  end
25
30
  end
26
31
  end
27
- end
32
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cassieq-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Conroy
@@ -52,12 +52,13 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.10'
55
- description: A simple wrapper for the CassieQ API
55
+ description: A Ruby API wrapper for CassieQ
56
56
  email: tbconroy@gmail.com
57
57
  executables: []
58
58
  extensions: []
59
59
  extra_rdoc_files: []
60
60
  files:
61
+ - lib/cassieq/authentication.rb
61
62
  - lib/cassieq/client.rb
62
63
  - lib/cassieq/client/messages.rb
63
64
  - lib/cassieq/client/queues.rb
@@ -76,7 +77,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
77
  requirements:
77
78
  - - ">="
78
79
  - !ruby/object:Gem::Version
79
- version: '0'
80
+ version: 1.9.3
80
81
  required_rubygems_version: !ruby/object:Gem::Requirement
81
82
  requirements:
82
83
  - - ">="