Skip to content

Commit d3b9b36

Browse files
dvacca-onfidokota65535
authored andcommitted
fix(ruby): Detect content-type in form-data file upload using faraday (OpenAPITools#17851) (OpenAPITools#17853)
* fix(ruby): Detect content-type in form-data file upload using faraday (OpenAPITools#17851) * Update samples * Add needed dependency libmagic-dev into node 1 setup of Circle Parallel CI * After merge/pull last master + regeneration of samples
1 parent d661223 commit d3b9b36

File tree

8 files changed

+13
-7
lines changed

8 files changed

+13
-7
lines changed

CI/circle_parallel.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ if [ "$NODE_INDEX" = "1" ]; then
1313
echo "Running node $NODE_INDEX ..."
1414
java -version
1515

16-
sudo apt-get -y install cpanminus
16+
sudo apt-get -y install cpanminus libmagic-dev
1717

1818
(cd samples/client/petstore/perl && /bin/bash ./test.bash)
1919
(cd samples/client/petstore/ruby && mvn integration-test)

modules/openapi-generator/src/main/resources/ruby-client/api_client.mustache

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ require 'typhoeus'
1313
{{#isFaraday}}
1414
require 'faraday'
1515
require 'faraday/multipart' if Gem::Version.new(Faraday::VERSION) >= Gem::Version.new('2.0')
16+
require 'filemagic'
1617
{{/isFaraday}}
1718
{{#isHttpx}}
1819
require 'httpx'

modules/openapi-generator/src/main/resources/ruby-client/api_client_faraday_partial.mustache

+2-2
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@
9494
form_params.each do |key, value|
9595
case value
9696
when ::File, ::Tempfile
97-
# TODO hardcode to application/octet-stream, need better way to detect content type
98-
data[key] = Faraday::FilePart.new(value.path, 'application/octet-stream', value.path)
97+
filemagic = FileMagic.new(FileMagic::MAGIC_MIME)
98+
data[key] = Faraday::FilePart.new(value.path, filemagic.file(value.path, true))
9999
when ::Array, nil
100100
# let Faraday handle Array and nil parameters
101101
data[key] = value

modules/openapi-generator/src/main/resources/ruby-client/gemspec.mustache

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
2323
{{#isFaraday}}
2424
s.add_runtime_dependency 'faraday', '>= 1.0.1', '< 3.0'
2525
s.add_runtime_dependency 'faraday-multipart'
26+
s.add_runtime_dependency 'ruby-filemagic'
2627
{{/isFaraday}}
2728
{{#isTyphoeus}}
2829
s.add_runtime_dependency 'typhoeus', '~> 1.0', '>= 1.0.1'

samples/client/echo_api/ruby-faraday/lib/openapi_client/api_client.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
require 'time'
1818
require 'faraday'
1919
require 'faraday/multipart' if Gem::Version.new(Faraday::VERSION) >= Gem::Version.new('2.0')
20+
require 'filemagic'
2021

2122

2223
module OpenapiClient
@@ -140,8 +141,8 @@ def build_request_body(header_params, form_params, body)
140141
form_params.each do |key, value|
141142
case value
142143
when ::File, ::Tempfile
143-
# TODO hardcode to application/octet-stream, need better way to detect content type
144-
data[key] = Faraday::FilePart.new(value.path, 'application/octet-stream', value.path)
144+
filemagic = FileMagic.new(FileMagic::MAGIC_MIME)
145+
data[key] = Faraday::FilePart.new(value.path, filemagic.file(value.path, true))
145146
when ::Array, nil
146147
# let Faraday handle Array and nil parameters
147148
data[key] = value

samples/client/echo_api/ruby-faraday/openapi_client.gemspec

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
3030

3131
s.add_runtime_dependency 'faraday', '>= 1.0.1', '< 3.0'
3232
s.add_runtime_dependency 'faraday-multipart'
33+
s.add_runtime_dependency 'ruby-filemagic'
3334

3435
s.add_development_dependency 'rspec', '~> 3.6', '>= 3.6.0'
3536

samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
require 'time'
1818
require 'faraday'
1919
require 'faraday/multipart' if Gem::Version.new(Faraday::VERSION) >= Gem::Version.new('2.0')
20+
require 'filemagic'
2021

2122

2223
module Petstore
@@ -140,8 +141,8 @@ def build_request_body(header_params, form_params, body)
140141
form_params.each do |key, value|
141142
case value
142143
when ::File, ::Tempfile
143-
# TODO hardcode to application/octet-stream, need better way to detect content type
144-
data[key] = Faraday::FilePart.new(value.path, 'application/octet-stream', value.path)
144+
filemagic = FileMagic.new(FileMagic::MAGIC_MIME)
145+
data[key] = Faraday::FilePart.new(value.path, filemagic.file(value.path, true))
145146
when ::Array, nil
146147
# let Faraday handle Array and nil parameters
147148
data[key] = value

samples/client/petstore/ruby-faraday/petstore.gemspec

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
3030

3131
s.add_runtime_dependency 'faraday', '>= 1.0.1', '< 3.0'
3232
s.add_runtime_dependency 'faraday-multipart'
33+
s.add_runtime_dependency 'ruby-filemagic'
3334

3435
s.add_development_dependency 'rspec', '~> 3.6', '>= 3.6.0'
3536

0 commit comments

Comments
 (0)