foobara-remote-imports 1.1.0 → 1.2.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
  SHA256:
3
- metadata.gz: fc711d9de1d42988b5b7dc5728c209d9799824cb29af45e9de02249bf4ad043a
4
- data.tar.gz: 1acb351deca1c088a1b42cf71a53529163ae99b67ff2f3711af5fa6f7327c055
3
+ metadata.gz: 558b6612de0e763e884d28004f37f3f81af11800f331e7fda886884bb56c0464
4
+ data.tar.gz: 90a1e08d44ac3748b64f72b2d4a989373133f3c05413e6d7552dd46d468cfc53
5
5
  SHA512:
6
- metadata.gz: 8f0f8fe372ce418207057f4e011c9b3aba7c76d3c9b770a0c49685920e0c51f086d870f2491f4cdb9c083185d21e88e3f395d3c0089953f3e60017ceb7ec232f
7
- data.tar.gz: 7d15054b7ef96c7ba295cb02a32ee7b5362e58409e60550f376f6849e245cd4d1e6386453853ed050f411f3673d79622569679b976e8284384e514e1dcb82921
6
+ metadata.gz: 3ffd376884876fc2fc4d61f20f2a5c6267364b47e58d182e828b5aef87e0e9fb6b88c5a1d2082af30b573351cc6d9d0438820fd187d8bc0070be5028f6c6e004
7
+ data.tar.gz: 64b8821567a88171427344b43e208b251f30ff369c83cd495b220e916ad760c29aea5eac38035645327f0cdcd914fdefc8240985b52a0ec4a42929509ab1fdcf
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [1.2.0] - 2025-10-29
2
+
3
+ - Support auth to get the manifest itself when needed
4
+ - Strip entire path/query string from the manifest URL to get the API url base
5
+
1
6
  ## [1.1.0] - 2025-08-22
2
7
 
3
8
  - Handle new Foobara 0.1.0 type declarations
@@ -96,21 +96,31 @@ module Foobara
96
96
  end
97
97
 
98
98
  def load_manifest_from_url
99
- url = URI.parse(manifest_url)
100
- response = Net::HTTP.get_response(url)
101
-
102
- manifest_json = if response.is_a?(Net::HTTPSuccess)
103
- response.body
104
- else
105
- # :nocov:
106
- raise "Could not get manifest from #{url}: " \
107
- "#{response.code} #{response.message}"
108
- # :nocov:
109
- end
99
+ uri = URI.parse(manifest_url)
100
+
101
+ net_http = Net::HTTP.new(uri.host, uri.port).tap do |http|
102
+ http.use_ssl = uri.scheme == "https"
103
+ http.read_timeout = ENV["FOOBARA_HTTP_MANIFEST_TIMEOUT"]&.to_i || 30
104
+ end
105
+
106
+ request = Net::HTTP::Get.new(uri.request_uri, load_manifest_headers)
107
+ response = net_http.request(request)
108
+
109
+ unless response.is_a?(Net::HTTPSuccess)
110
+ # :nocov:
111
+ raise "Could not get manifest from #{manifest_url}: " \
112
+ "#{response.code} #{response.message}"
113
+ # :nocov:
114
+ end
115
+ manifest_json = response.body
110
116
 
111
117
  JSON.parse(manifest_json)
112
118
  end
113
119
 
120
+ def load_manifest_headers
121
+ { "Content-Type" => "application/json" }
122
+ end
123
+
114
124
  # TODO: feels like a command smell to pass manifests here... reconsider algorithm
115
125
  def filter_manifests_to_import
116
126
  return if to_import.nil? || to_import.empty?
@@ -13,10 +13,30 @@ module Foobara
13
13
  auth_header :tuple,
14
14
  element_type_declarations: [:string, :duck],
15
15
  description: "A header name, header value/proc pair."
16
+ manifest_requires_auth :boolean, default: false
16
17
  end
17
18
 
18
19
  depends_on ImportDomain, ImportType, ImportError
19
20
 
21
+ def load_manifest_headers
22
+ if manifest_requires_auth
23
+ key = auth_header.first
24
+ value = auth_header.last
25
+
26
+ if value.is_a?(Proc)
27
+ value = if value.lambda? && value.arity == 0
28
+ value.call
29
+ else
30
+ value.call(self)
31
+ end
32
+ end
33
+
34
+ super.merge(key => value)
35
+ else
36
+ super
37
+ end
38
+ end
39
+
20
40
  def find_manifests_to_import
21
41
  root_manifest.commands
22
42
  end
@@ -74,7 +94,11 @@ module Foobara
74
94
  end
75
95
 
76
96
  def build_command
77
- url_base = root_manifest.metadata["url"].gsub(/\/manifest$/, "")
97
+ url_base = root_manifest.metadata["url"]
98
+ url_base = URI.parse(url_base)
99
+ url_base = URI::Generic.new(url_base.scheme, url_base.userinfo, url_base.host, url_base.port,
100
+ nil, nil, nil, nil, nil)
101
+ url_base = url_base.to_s
78
102
 
79
103
  domain = Namespace.global.foobara_lookup_domain!(
80
104
  manifest_to_import.domain.scoped_full_path,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foobara-remote-imports
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Georgi
@@ -15,7 +15,7 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 0.1.1
18
+ version: 0.2.0
19
19
  - - "<"
20
20
  - !ruby/object:Gem::Version
21
21
  version: 2.0.0
@@ -25,7 +25,7 @@ dependencies:
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: 0.1.1
28
+ version: 0.2.0
29
29
  - - "<"
30
30
  - !ruby/object:Gem::Version
31
31
  version: 2.0.0