durable_streams-rails 0.2.2 → 0.2.4

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: eb1d7090c279daba2ebd2d5556eeaf2df8f56d7f01a2e5c09d236ea03f4142cd
4
- data.tar.gz: 06ff468c7882ce7d06d0d62f77960350476d5a33c2c3e552c914aa1974724541
3
+ metadata.gz: 32b7136264c3c58bf1d1abafec7d87de85527739a1eebfd099042df478fbeb9a
4
+ data.tar.gz: 4cad011b7effea1efeb9f9be19845ed8b5652e0ccce7e2c8971723d9fc661043
5
5
  SHA512:
6
- metadata.gz: 11f0a0dd900fd4526b4566d2794c5bed38f345ed9b7001a8444a72be4b6c3bab53cdd18b10c480b4018f6466829586ceebd3973e309fd60a1adc0be14ac9bc7d
7
- data.tar.gz: a3a6b953074677a5ddccb88769071b92f03f20c5ebf8010fc541c2d4b1e3ff9a9389a16eee170cc50a855d0e7ae95f9bb3f975770bab91fa983bf0c9878d4da8
6
+ metadata.gz: fb55c88972044fd2888e7798df09283878acaccfbd077330b2025908482f6fc9f82c90cdeb8cbd40aecf5cbc421728867da8495034c0e24ae2e6cf37e9a91441
7
+ data.tar.gz: b4a27e45cf852435c8a374654c8ddfb0fcb664a6a92712aa308ab9649bff4e091a7a0c11419d41c08b0632f0138608d7755c34a1d74300f7e68274fbf51b5a64
@@ -1,7 +1,9 @@
1
1
  module DurableStreams
2
2
  class AuthController < ActionController::API
3
3
  def verify
4
- if stream_name
4
+ if request.headers["X-Forwarded-Uri"]
5
+ stream_name ? head(:ok) : head(:unauthorized)
6
+ elsif valid_server_api_key?
5
7
  head :ok
6
8
  else
7
9
  head :unauthorized
@@ -10,14 +12,13 @@ module DurableStreams
10
12
 
11
13
  private
12
14
  def stream_name
13
- if token = extract_token
14
- DurableStreams.verified_stream_name(token)
15
- end
15
+ DurableStreams.verify_signed_url(request.headers["X-Forwarded-Uri"])
16
16
  end
17
17
 
18
- def extract_token
19
- if uri = request.headers["X-Forwarded-Uri"]
20
- DurableStreams.extract_token_from_url(uri)
18
+ def valid_server_api_key?
19
+ if auth_header = request.headers["Authorization"]
20
+ auth_header.start_with?("Bearer ") &&
21
+ ActiveSupport::SecurityUtils.secure_compare(auth_header.delete_prefix("Bearer "), DurableStreams.server_api_key)
21
22
  end
22
23
  end
23
24
  end
@@ -42,6 +42,21 @@ module DurableStreams
42
42
  end
43
43
  end
44
44
 
45
+ initializer "durable_streams.server_api_key" do
46
+ config.after_initialize do
47
+ DurableStreams.server_api_key =
48
+ config.durable_streams.server_api_key ||
49
+ Rails.application.key_generator.generate_key("durable_streams/server_api_key").unpack1("H*")
50
+
51
+ if DurableStreams.base_url.present?
52
+ DurableStreams.configure do |c|
53
+ c.base_url = DurableStreams.base_url
54
+ c.default_headers = { "Authorization" => "Bearer #{DurableStreams.server_api_key}" }
55
+ end
56
+ end
57
+ end
58
+ end
59
+
45
60
  # No Action Cable dependency -- load test helpers directly.
46
61
  initializer "durable_streams.test_assertions" do
47
62
  ActiveSupport.on_load(:active_support_test_case) do
@@ -1,3 +1,3 @@
1
1
  module DurableStreams
2
- RAILS_VERSION = "0.2.2"
2
+ RAILS_VERSION = "0.2.4"
3
3
  end
@@ -14,7 +14,7 @@ module DurableStreams
14
14
  mattr_accessor :draw_routes, default: true
15
15
 
16
16
  class << self
17
- attr_writer :signed_stream_verifier_key
17
+ attr_writer :signed_stream_verifier_key, :server_api_key
18
18
 
19
19
  def signed_stream_verifier
20
20
  @signed_stream_verifier ||= ActiveSupport::MessageVerifier.new(signed_stream_verifier_key, digest: "SHA256", serializer: JSON)
@@ -24,6 +24,10 @@ module DurableStreams
24
24
  @signed_stream_verifier_key or raise ArgumentError, "DurableStreams requires a signed_stream_verifier_key"
25
25
  end
26
26
 
27
+ def server_api_key
28
+ @server_api_key or raise ArgumentError, "DurableStreams requires a server_api_key"
29
+ end
30
+
27
31
  def signed_stream_url(*streamables, expires_in: 24.hours)
28
32
  path = stream_name_from(streamables)
29
33
  token = signed_stream_verifier.generate(path, expires_in: expires_in)
@@ -1,6 +1,9 @@
1
1
  namespace :durable_streams do
2
2
  desc "Download the Durable Streams server binary for the current platform"
3
3
  task :download do
4
+ require "net/http"
5
+ require "json"
6
+
4
7
  version = ENV.fetch("DURABLE_STREAMS_VERSION", "latest")
5
8
  install_dir = Rails.root.join("bin", "dist")
6
9
  bin_path = install_dir.join("durable-streams-server")
@@ -25,18 +28,27 @@ namespace :durable_streams do
25
28
  end
26
29
  }
27
30
 
28
- FileUtils.mkdir_p(install_dir)
29
-
30
31
  if version == "latest"
31
- url = "https://github.com/durable-streams/durable-streams/releases/latest/download/durable-streams-server_#{os}_#{arch}.tar.gz"
32
- else
33
- url = "https://github.com/durable-streams/durable-streams/releases/download/caddy-v#{version}/durable-streams-server_#{version}_#{os}_#{arch}.tar.gz"
32
+ version = resolve_latest_version
34
33
  end
35
34
 
35
+ FileUtils.mkdir_p(install_dir)
36
+
37
+ url = "https://github.com/durable-streams/durable-streams/releases/download/v#{version}/durable-streams-server_#{version}_#{os}_#{arch}.tar.gz"
38
+
36
39
  puts "Downloading durable-streams-server #{version} (#{os}/#{arch})..."
37
- system("curl", "-sL", url, "-o", "-", out: IO.popen(["tar", "xz", "-C", install_dir.to_s], "w").fileno) ||
38
- abort("Download failed")
40
+ system("curl", "-sfL", url, "-o", "-", out: IO.popen(["tar", "xz", "-C", install_dir.to_s], "w").fileno) ||
41
+ abort("Download failed — check https://github.com/durable-streams/durable-streams/releases")
39
42
  FileUtils.chmod(0755, bin_path)
40
43
  puts "Installed to #{bin_path}"
41
44
  end
42
45
  end
46
+
47
+ def resolve_latest_version
48
+ uri = URI("https://api.github.com/repos/durable-streams/durable-streams/releases/latest")
49
+ response = Net::HTTP.get(uri)
50
+ tag = JSON.parse(response).fetch("tag_name")
51
+ tag.delete_prefix("v")
52
+ rescue => e
53
+ abort "Failed to resolve latest version: #{e.message}"
54
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: durable_streams-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - tokimonki