rest-client 2.0.2
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 +7 -0
- data/.gitignore +8 -0
- data/.rspec +2 -0
- data/.rubocop-disables.yml +384 -0
- data/.rubocop.yml +3 -0
- data/.travis.yml +48 -0
- data/AUTHORS +98 -0
- data/Gemfile +11 -0
- data/LICENSE +21 -0
- data/README.md +784 -0
- data/Rakefile +132 -0
- data/bin/restclient +92 -0
- data/history.md +324 -0
- data/lib/rest-client.rb +2 -0
- data/lib/rest_client.rb +2 -0
- data/lib/restclient.rb +184 -0
- data/lib/restclient/abstract_response.rb +226 -0
- data/lib/restclient/exceptions.rb +244 -0
- data/lib/restclient/params_array.rb +72 -0
- data/lib/restclient/payload.rb +209 -0
- data/lib/restclient/platform.rb +49 -0
- data/lib/restclient/raw_response.rb +38 -0
- data/lib/restclient/request.rb +853 -0
- data/lib/restclient/resource.rb +168 -0
- data/lib/restclient/response.rb +80 -0
- data/lib/restclient/utils.rb +235 -0
- data/lib/restclient/version.rb +8 -0
- data/lib/restclient/windows.rb +8 -0
- data/lib/restclient/windows/root_certs.rb +105 -0
- data/rest-client.gemspec +31 -0
- data/rest-client.windows.gemspec +19 -0
- data/spec/helpers.rb +22 -0
- data/spec/integration/_lib.rb +1 -0
- data/spec/integration/capath_digicert/244b5494.0 +19 -0
- data/spec/integration/capath_digicert/81b9768f.0 +19 -0
- data/spec/integration/capath_digicert/README +8 -0
- data/spec/integration/capath_digicert/digicert.crt +19 -0
- data/spec/integration/capath_verisign/415660c1.0 +14 -0
- data/spec/integration/capath_verisign/7651b327.0 +14 -0
- data/spec/integration/capath_verisign/README +8 -0
- data/spec/integration/capath_verisign/verisign.crt +14 -0
- data/spec/integration/certs/digicert.crt +19 -0
- data/spec/integration/certs/verisign.crt +14 -0
- data/spec/integration/httpbin_spec.rb +87 -0
- data/spec/integration/integration_spec.rb +125 -0
- data/spec/integration/request_spec.rb +127 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/unit/_lib.rb +1 -0
- data/spec/unit/abstract_response_spec.rb +145 -0
- data/spec/unit/exceptions_spec.rb +108 -0
- data/spec/unit/master_shake.jpg +0 -0
- data/spec/unit/params_array_spec.rb +36 -0
- data/spec/unit/payload_spec.rb +263 -0
- data/spec/unit/raw_response_spec.rb +18 -0
- data/spec/unit/request2_spec.rb +54 -0
- data/spec/unit/request_spec.rb +1250 -0
- data/spec/unit/resource_spec.rb +134 -0
- data/spec/unit/response_spec.rb +241 -0
- data/spec/unit/restclient_spec.rb +79 -0
- data/spec/unit/utils_spec.rb +147 -0
- data/spec/unit/windows/root_certs_spec.rb +22 -0
- metadata +282 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
require 'openssl'
|
|
2
|
+
require 'ffi'
|
|
3
|
+
|
|
4
|
+
# Adapted from Puppet, Copyright (c) Puppet Labs Inc,
|
|
5
|
+
# licensed under the Apache License, Version 2.0.
|
|
6
|
+
#
|
|
7
|
+
# https://github.com/puppetlabs/puppet/blob/bbe30e0a/lib/puppet/util/windows/root_certs.rb
|
|
8
|
+
|
|
9
|
+
# Represents a collection of trusted root certificates.
|
|
10
|
+
#
|
|
11
|
+
# @api public
|
|
12
|
+
class RestClient::Windows::RootCerts
|
|
13
|
+
include Enumerable
|
|
14
|
+
extend FFI::Library
|
|
15
|
+
|
|
16
|
+
typedef :ulong, :dword
|
|
17
|
+
typedef :uintptr_t, :handle
|
|
18
|
+
|
|
19
|
+
def initialize(roots)
|
|
20
|
+
@roots = roots
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Enumerates each root certificate.
|
|
24
|
+
# @yieldparam cert [OpenSSL::X509::Certificate] each root certificate
|
|
25
|
+
# @api public
|
|
26
|
+
def each
|
|
27
|
+
@roots.each {|cert| yield cert}
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Returns a new instance.
|
|
31
|
+
# @return [RestClient::Windows::RootCerts] object constructed from current root certificates
|
|
32
|
+
def self.instance
|
|
33
|
+
new(self.load_certs)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Returns an array of root certificates.
|
|
37
|
+
#
|
|
38
|
+
# @return [Array<[OpenSSL::X509::Certificate]>] an array of root certificates
|
|
39
|
+
# @api private
|
|
40
|
+
def self.load_certs
|
|
41
|
+
certs = []
|
|
42
|
+
|
|
43
|
+
# This is based on a patch submitted to openssl:
|
|
44
|
+
# http://www.mail-archive.com/openssl-dev@openssl.org/msg26958.html
|
|
45
|
+
ptr = FFI::Pointer::NULL
|
|
46
|
+
store = CertOpenSystemStoreA(nil, "ROOT")
|
|
47
|
+
begin
|
|
48
|
+
while (ptr = CertEnumCertificatesInStore(store, ptr)) and not ptr.null?
|
|
49
|
+
context = CERT_CONTEXT.new(ptr)
|
|
50
|
+
cert_buf = context[:pbCertEncoded].read_bytes(context[:cbCertEncoded])
|
|
51
|
+
begin
|
|
52
|
+
certs << OpenSSL::X509::Certificate.new(cert_buf)
|
|
53
|
+
rescue => detail
|
|
54
|
+
warn("Failed to import root certificate: #{detail.inspect}")
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
ensure
|
|
58
|
+
CertCloseStore(store, 0)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
certs
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
# typedef ULONG_PTR HCRYPTPROV_LEGACY;
|
|
67
|
+
# typedef void *HCERTSTORE;
|
|
68
|
+
|
|
69
|
+
class CERT_CONTEXT < FFI::Struct
|
|
70
|
+
layout(
|
|
71
|
+
:dwCertEncodingType, :dword,
|
|
72
|
+
:pbCertEncoded, :pointer,
|
|
73
|
+
:cbCertEncoded, :dword,
|
|
74
|
+
:pCertInfo, :pointer,
|
|
75
|
+
:hCertStore, :handle
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# HCERTSTORE
|
|
80
|
+
# WINAPI
|
|
81
|
+
# CertOpenSystemStoreA(
|
|
82
|
+
# __in_opt HCRYPTPROV_LEGACY hProv,
|
|
83
|
+
# __in LPCSTR szSubsystemProtocol
|
|
84
|
+
# );
|
|
85
|
+
ffi_lib :crypt32
|
|
86
|
+
attach_function :CertOpenSystemStoreA, [:pointer, :string], :handle
|
|
87
|
+
|
|
88
|
+
# PCCERT_CONTEXT
|
|
89
|
+
# WINAPI
|
|
90
|
+
# CertEnumCertificatesInStore(
|
|
91
|
+
# __in HCERTSTORE hCertStore,
|
|
92
|
+
# __in_opt PCCERT_CONTEXT pPrevCertContext
|
|
93
|
+
# );
|
|
94
|
+
ffi_lib :crypt32
|
|
95
|
+
attach_function :CertEnumCertificatesInStore, [:handle, :pointer], :pointer
|
|
96
|
+
|
|
97
|
+
# BOOL
|
|
98
|
+
# WINAPI
|
|
99
|
+
# CertCloseStore(
|
|
100
|
+
# __in_opt HCERTSTORE hCertStore,
|
|
101
|
+
# __in DWORD dwFlags
|
|
102
|
+
# );
|
|
103
|
+
ffi_lib :crypt32
|
|
104
|
+
attach_function :CertCloseStore, [:handle, :dword], :bool
|
|
105
|
+
end
|
data/rest-client.gemspec
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require File.expand_path('../lib/restclient/version', __FILE__)
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = 'rest-client'
|
|
7
|
+
s.version = RestClient::VERSION
|
|
8
|
+
s.authors = ['REST Client Team']
|
|
9
|
+
s.description = 'A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework style of specifying actions: get, put, post, delete.'
|
|
10
|
+
s.license = 'MIT'
|
|
11
|
+
s.email = 'rest.client@librelist.com'
|
|
12
|
+
s.executables = ['restclient']
|
|
13
|
+
s.extra_rdoc_files = ['README.md', 'history.md']
|
|
14
|
+
s.files = `git ls-files -z`.split("\0")
|
|
15
|
+
s.test_files = `git ls-files -z spec/`.split("\0")
|
|
16
|
+
s.homepage = 'https://github.com/rest-client/rest-client'
|
|
17
|
+
s.summary = 'Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actions.'
|
|
18
|
+
|
|
19
|
+
s.add_development_dependency('webmock', '~> 2.0')
|
|
20
|
+
s.add_development_dependency('rspec', '~> 3.0')
|
|
21
|
+
s.add_development_dependency('pry', '~> 0')
|
|
22
|
+
s.add_development_dependency('pry-doc', '~> 0')
|
|
23
|
+
s.add_development_dependency('rdoc', '>= 2.4.2', '< 6.0')
|
|
24
|
+
s.add_development_dependency('rubocop', '~> 0')
|
|
25
|
+
|
|
26
|
+
s.add_dependency('http-cookie', '>= 1.0.2', '< 2.0')
|
|
27
|
+
s.add_dependency('mime-types', '>= 1.16', '< 4.0')
|
|
28
|
+
s.add_dependency('netrc', '~> 0.8')
|
|
29
|
+
|
|
30
|
+
s.required_ruby_version = '>= 2.0.0'
|
|
31
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Gemspec for Windows platforms. We can't put these in the main gemspec because
|
|
3
|
+
# it results in bundler platform hell when trying to build the gem.
|
|
4
|
+
#
|
|
5
|
+
# Set $BUILD_PLATFORM when calling gem build with this gemspec to build for
|
|
6
|
+
# Windows platforms like x86-mingw32.
|
|
7
|
+
#
|
|
8
|
+
s = eval(File.read(File.join(File.dirname(__FILE__), 'rest-client.gemspec')))
|
|
9
|
+
|
|
10
|
+
platform = ENV['BUILD_PLATFORM'] || RUBY_PLATFORM
|
|
11
|
+
|
|
12
|
+
case platform
|
|
13
|
+
when /(mingw32|mswin32)/
|
|
14
|
+
# ffi is needed for RestClient::Windows::RootCerts
|
|
15
|
+
s.add_dependency('ffi', '~> 1.9')
|
|
16
|
+
s.platform = platform
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
s
|
data/spec/helpers.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'uri'
|
|
2
|
+
|
|
3
|
+
module Helpers
|
|
4
|
+
def response_double(opts={})
|
|
5
|
+
double('response', {:to_hash => {}}.merge(opts))
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def fake_stderr
|
|
9
|
+
original_stderr = $stderr
|
|
10
|
+
$stderr = StringIO.new
|
|
11
|
+
yield
|
|
12
|
+
$stderr.string
|
|
13
|
+
ensure
|
|
14
|
+
$stderr = original_stderr
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def request_double(url: 'http://example.com', method: 'get')
|
|
18
|
+
double('request', url: url, uri: URI.parse(url), method: method,
|
|
19
|
+
user: nil, password: nil, cookie_jar: HTTP::CookieJar.new,
|
|
20
|
+
redirection_history: nil, args: {url: url, method: method})
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require_relative '../spec_helper'
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
|
3
|
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
|
4
|
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
|
5
|
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
|
6
|
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
|
7
|
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
|
8
|
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
|
9
|
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
|
10
|
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
|
11
|
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
|
12
|
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
|
13
|
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
|
14
|
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
|
15
|
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
|
16
|
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
|
17
|
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
|
18
|
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
|
19
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
|
3
|
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
|
4
|
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
|
5
|
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
|
6
|
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
|
7
|
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
|
8
|
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
|
9
|
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
|
10
|
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
|
11
|
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
|
12
|
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
|
13
|
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
|
14
|
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
|
15
|
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
|
16
|
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
|
17
|
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
|
18
|
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
|
19
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
The CA path symlinks can be created by c_rehash(1ssl).
|
|
2
|
+
|
|
3
|
+
But in order for the tests to work on Windows, they have to be regular files.
|
|
4
|
+
You can turn them all into regular files by running this on a GNU system:
|
|
5
|
+
|
|
6
|
+
for file in $(find . -type l); do
|
|
7
|
+
cp -iv --remove-destination $(readlink -e $file) $file
|
|
8
|
+
done
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
|
3
|
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
|
4
|
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
|
5
|
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
|
6
|
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
|
7
|
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
|
8
|
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
|
9
|
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
|
10
|
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
|
11
|
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
|
12
|
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
|
13
|
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
|
14
|
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
|
15
|
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
|
16
|
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
|
17
|
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
|
18
|
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
|
19
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
|
|
3
|
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
|
4
|
+
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
|
5
|
+
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
|
6
|
+
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
|
7
|
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
|
8
|
+
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
|
9
|
+
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
|
10
|
+
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
|
11
|
+
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
|
|
12
|
+
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
|
|
13
|
+
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
|
|
14
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
|
|
3
|
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
|
4
|
+
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
|
5
|
+
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
|
6
|
+
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
|
7
|
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
|
8
|
+
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
|
9
|
+
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
|
10
|
+
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
|
11
|
+
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
|
|
12
|
+
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
|
|
13
|
+
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
|
|
14
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
The CA path symlinks can be created by c_rehash(1ssl).
|
|
2
|
+
|
|
3
|
+
But in order for the tests to work on Windows, they have to be regular files.
|
|
4
|
+
You can turn them all into regular files by running this on a GNU system:
|
|
5
|
+
|
|
6
|
+
for file in $(find . -type l); do
|
|
7
|
+
cp -iv --remove-destination $(readlink -e $file) $file
|
|
8
|
+
done
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
|
|
3
|
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
|
4
|
+
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
|
5
|
+
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
|
6
|
+
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
|
7
|
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
|
8
|
+
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
|
9
|
+
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
|
10
|
+
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
|
11
|
+
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
|
|
12
|
+
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
|
|
13
|
+
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
|
|
14
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
|
3
|
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
|
4
|
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
|
5
|
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
|
6
|
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
|
7
|
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
|
8
|
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
|
9
|
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
|
10
|
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
|
11
|
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
|
12
|
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
|
13
|
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
|
14
|
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
|
15
|
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
|
16
|
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
|
17
|
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
|
18
|
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
|
19
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
|
|
3
|
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
|
4
|
+
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
|
5
|
+
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
|
6
|
+
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
|
7
|
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
|
8
|
+
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
|
9
|
+
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
|
10
|
+
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
|
11
|
+
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
|
|
12
|
+
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
|
|
13
|
+
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
|
|
14
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require_relative '_lib'
|
|
2
|
+
require 'json'
|
|
3
|
+
|
|
4
|
+
describe RestClient::Request do
|
|
5
|
+
before(:all) do
|
|
6
|
+
WebMock.disable!
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
after(:all) do
|
|
10
|
+
WebMock.enable!
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def default_httpbin_url
|
|
14
|
+
# add a hack to work around java/jruby bug
|
|
15
|
+
# java.lang.RuntimeException: Could not generate DH keypair with backtrace
|
|
16
|
+
# Also (2017-04-09) Travis Jruby versions have a broken CA keystore
|
|
17
|
+
if ENV['TRAVIS_RUBY_VERSION'] =~ /\Ajruby-/
|
|
18
|
+
'http://httpbin.org/'
|
|
19
|
+
else
|
|
20
|
+
'https://httpbin.org/'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def httpbin(suffix='')
|
|
25
|
+
url = ENV.fetch('HTTPBIN_URL', default_httpbin_url)
|
|
26
|
+
unless url.end_with?('/')
|
|
27
|
+
url += '/'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
url + suffix
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def execute_httpbin(suffix, opts={})
|
|
34
|
+
opts = {url: httpbin(suffix)}.merge(opts)
|
|
35
|
+
RestClient::Request.execute(opts)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def execute_httpbin_json(suffix, opts={})
|
|
39
|
+
JSON.parse(execute_httpbin(suffix, opts))
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe '.execute' do
|
|
43
|
+
it 'sends a user agent' do
|
|
44
|
+
data = execute_httpbin_json('user-agent', method: :get)
|
|
45
|
+
expect(data['user-agent']).to match(/rest-client/)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'receives cookies on 302' do
|
|
49
|
+
expect {
|
|
50
|
+
execute_httpbin('cookies/set?foo=bar', method: :get, max_redirects: 0)
|
|
51
|
+
}.to raise_error(RestClient::Found) { |ex|
|
|
52
|
+
expect(ex.http_code).to eq 302
|
|
53
|
+
expect(ex.response.cookies['foo']).to eq 'bar'
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'passes along cookies through 302' do
|
|
58
|
+
data = execute_httpbin_json('cookies/set?foo=bar', method: :get)
|
|
59
|
+
expect(data).to have_key('cookies')
|
|
60
|
+
expect(data['cookies']['foo']).to eq 'bar'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'handles quote wrapped cookies' do
|
|
64
|
+
expect {
|
|
65
|
+
execute_httpbin('cookies/set?foo=' + CGI.escape('"bar:baz"'),
|
|
66
|
+
method: :get, max_redirects: 0)
|
|
67
|
+
}.to raise_error(RestClient::Found) { |ex|
|
|
68
|
+
expect(ex.http_code).to eq 302
|
|
69
|
+
expect(ex.response.cookies['foo']).to eq '"bar:baz"'
|
|
70
|
+
}
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'sends basic auth' do
|
|
74
|
+
user = 'user'
|
|
75
|
+
pass = 'pass'
|
|
76
|
+
|
|
77
|
+
data = execute_httpbin_json("basic-auth/#{user}/#{pass}", method: :get, user: user, password: pass)
|
|
78
|
+
expect(data).to eq({'authenticated' => true, 'user' => user})
|
|
79
|
+
|
|
80
|
+
expect {
|
|
81
|
+
execute_httpbin_json("basic-auth/#{user}/#{pass}", method: :get, user: user, password: 'badpass')
|
|
82
|
+
}.to raise_error(RestClient::Unauthorized) { |ex|
|
|
83
|
+
expect(ex.http_code).to eq 401
|
|
84
|
+
}
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|