Hello community, here is the log from the commit of package rubygem-excon for openSUSE:Factory checked in at 2016-03-07 13:28:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-excon (Old) and /work/SRC/openSUSE:Factory/.rubygem-excon.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-excon" Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-excon/rubygem-excon.changes 2015-08-05 06:49:49.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.rubygem-excon.new/rubygem-excon.changes 2016-03-07 13:29:20.000000000 +0100 @@ -1,0 +2,30 @@ +Wed Mar 2 05:31:23 UTC 2016 - co...@suse.com + +- updated to version 0.47.0 + see installed changelog.txt + + 0.47.0 02/29/2016 + ================= + + fix bundled certs + fix instrumentors to allow recording timings + +------------------------------------------------------------------- +Sat Feb 27 05:36:03 UTC 2016 - co...@suse.com + +- updated to version 0.46.0 + see installed changelog.txt + + 0.46.0 02/26/2016 + + empty host header for unix sockets + raise EOFError on unexpectedly read nil + add host/path/port to response + keep cookies through redirects + fix to skip decompressing empty bodies + fix escaping for query string + README improvements + fix SocketError initializer + fix incorrect error class usage + +------------------------------------------------------------------- Old: ---- excon-0.45.4.gem New: ---- excon-0.47.0.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-excon.spec ++++++ --- /var/tmp/diff_new_pack.hdvdPy/_old 2016-03-07 13:29:21.000000000 +0100 +++ /var/tmp/diff_new_pack.hdvdPy/_new 2016-03-07 13:29:21.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package rubygem-excon # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -24,7 +24,7 @@ # Name: rubygem-excon -Version: 0.45.4 +Version: 0.47.0 Release: 0 %define mod_name excon %define mod_full_name %{mod_name}-%{version} ++++++ excon-0.45.4.gem -> excon-0.47.0.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CONTRIBUTORS.md new/CONTRIBUTORS.md --- old/CONTRIBUTORS.md 2015-07-13 17:17:57.000000000 +0200 +++ new/CONTRIBUTORS.md 2016-02-29 17:40:18.000000000 +0100 @@ -12,6 +12,7 @@ * Carl Hörberg <carl.hoerb...@gmail.com> * Carlos Sanchez <csanc...@maestrodev.com> * Claudio Poli <masterk...@gmail.com> +* Colin Dean <colind...@us.ibm.com> * Damien Mathieu <dam...@heroku.com> * Dan Hensgen <d...@methodhead.com> * Dan Peterson <dpi...@gmail.com> @@ -44,6 +45,7 @@ * Joshua Mckinney <joshmc...@gmail.com> * Joshua Napoli <jnap...@swipely-napoli.home> * Joshua Napoli <jnapoli@swipely-napoli.local> +* Joshua Smith <kogn...@gmail.com> * Kensuke Nagae <kya...@gmail.com> * Konstantin Shabanov <eteht...@gmail.com> * Kyle Rames <kyle.ra...@rackspace.com> @@ -105,4 +107,4 @@ * rkyrychuk <ruslan.kyryc...@gmail.com> * sshaw <skye.s...@gmail.com> * twrodriguez <tw.rodrig...@gmail.com> -* zimbatm <zimb...@zimbatm.com> \ No newline at end of file +* zimbatm <zimb...@zimbatm.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Gemfile.lock new/Gemfile.lock --- old/Gemfile.lock 2015-07-13 17:17:57.000000000 +0200 +++ new/Gemfile.lock 2016-02-29 17:40:18.000000000 +0100 @@ -1,7 +1,7 @@ PATH remote: . specs: - excon (0.45.4) + excon (0.47.0) GEM remote: http://rubygems.org/ @@ -9,6 +9,7 @@ activesupport (3.2.6) i18n (~> 0.6) multi_json (~> 1.0) + backports (3.6.4) bouncy-castle-java (1.5.0147) chronic (0.6.7) delorean (2.0.0) @@ -29,6 +30,8 @@ rack (1.6.0) rack-protection (1.2.0) rack + rack-test (0.6.3) + rack (>= 1.0) raindrops (0.13.0) rake (0.9.2.2) rdoc (3.12) @@ -244,6 +247,13 @@ rack (~> 1.3, >= 1.3.6) rack-protection (~> 1.2) tilt (~> 1.3, >= 1.3.3) + sinatra-contrib (1.3.2) + backports (>= 2.0) + eventmachine + rack-protection + rack-test + sinatra (~> 1.3.0) + tilt (~> 1.3) tilt (1.3.3) unicorn (4.8.3) kgio (~> 2.6) @@ -268,4 +278,8 @@ rubysl (~> 2.0) shindo sinatra + sinatra-contrib unicorn + +BUNDLED WITH + 1.11.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md --- old/README.md 2015-07-13 17:17:57.000000000 +0200 +++ new/README.md 2016-02-29 17:40:18.000000000 +0100 @@ -132,9 +132,6 @@ # connection = Excon.new('http://geemus.com/', :tcp_nodelay => true) -# opt-in to omitting port from http:80 and https:443 -connection = Excon.new('http://geemus.com/', :omit_default_port => true) - # set longer connect_timeout (default is 60 seconds) connection = Excon.new('http://geemus.com/', :connect_timeout => 360) @@ -151,6 +148,20 @@ connection = Excon.new('http://geemus.com/', uri_parser: Addressable::URI) ``` +Compared to web browsers and other http client libraries, e.g. curl, Excon is a bit more low-level and doesn't assume much by default. If you are seeing different results compared to other clients, the following options might help: + +```ruby +# opt-in to omitting port from http:80 and https:443 +connection = Excon.new('http://geemus.com/', :omit_default_port => true) + +# accept gzip encoding +connection = Excon.new('http://geemus.com/', :headers => { "Accept" => "gzip" }) + +# turn off peer verification (less secure) +Excon.defaults[:ssl_verify_peer] = false +connection = Excon.new('https://...') +``` + ## Chunked Requests You can make `Transfer-Encoding: chunked` requests by passing a block that will deliver chunks, delivering an empty chunk to signal completion. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Rakefile new/Rakefile --- old/Rakefile 2015-07-13 17:17:57.000000000 +0200 +++ new/Rakefile 2016-02-29 17:40:18.000000000 +0100 @@ -138,7 +138,7 @@ task :update_certs do require File.join(File.dirname(__FILE__), 'lib', 'excon') File.open(File.join(File.dirname(__FILE__), 'data', 'cacert.pem'), 'w') do |file| - data = Excon.get("http://curl.haxx.se/ca/cacert.pem").body + data = Excon.get("https://curl.haxx.se/ca/cacert.pem").body file.write(data) end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/changelog.txt new/changelog.txt --- old/changelog.txt 2015-07-13 17:17:57.000000000 +0200 +++ new/changelog.txt 2016-02-29 17:40:18.000000000 +0100 @@ -1,3 +1,22 @@ +0.47.0 02/29/2016 +================= + +fix bundled certs +fix instrumentors to allow recording timings + +0.46.0 02/26/2016 +================= + +empty host header for unix sockets +raise EOFError on unexpectedly read nil +add host/path/port to response +keep cookies through redirects +fix to skip decompressing empty bodies +fix escaping for query string +README improvements +fix SocketError initializer +fix incorrect error class usage + 0.45.4 07/13/2015 ================= Files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/data/cacert.pem new/data/cacert.pem --- old/data/cacert.pem 2015-07-13 17:17:57.000000000 +0200 +++ new/data/cacert.pem 2016-02-29 17:40:18.000000000 +0100 @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Wed Apr 22 03:12:04 2015 +## Certificate data from Mozilla as of: Wed Jan 20 04:12:04 2016 ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -14,30 +14,10 @@ ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.25. -## SHA1: ed3c0bbfb7912bcc00cd2033b0cb85c98d10559c +## SHA1: 0ab47e2f41518f8d223eab517cb799e5b071231e ## -Equifax Secure CA -================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE -ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT -B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR -fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW -8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE -CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS -spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 -zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB -BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 -70+sB3c4 ------END CERTIFICATE----- - GlobalSign Root CA ================== -----BEGIN CERTIFICATE----- @@ -105,30 +85,6 @@ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- -Verisign Class 4 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS -tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM -8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW -Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX -Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt -mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd -RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG -UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- @@ -695,31 +651,6 @@ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== -----END CERTIFICATE----- -UTN DATACorp SGC Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ -BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa -MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w -HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy -dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys -raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo -wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA -9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv -33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud -DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 -BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD -LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 -DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 -I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx -EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP -DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - UTN USERFirst Hardware Root CA ============================== -----BEGIN CERTIFICATE----- @@ -1142,54 +1073,6 @@ oKfN5XozNmr6mis= -----END CERTIFICATE----- -TURKTRUST Certificate Services Provider Root 1 -============================================== ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP -MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 -acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx -MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg -U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB -TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC -aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX -yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i -Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ -8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 -W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME -BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 -sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE -q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY -nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 2 -============================================== ------BEGIN CERTIFICATE----- -MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN -MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr -dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G -A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls -acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe -LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI -x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g -QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr -5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB -AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt -Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 -Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ -hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P -9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 -UrbnBEI= ------END CERTIFICATE----- - SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- @@ -1589,56 +1472,6 @@ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- -TC TrustCenter Class 2 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy -IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw -MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 -c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE -AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw -IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 -xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ -Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u -SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB -7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 -Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU -cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i -SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G -dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ -KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj -TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP -JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk -vQ== ------END CERTIFICATE----- - -TC TrustCenter Universal CA I -============================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy -IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN -MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg -VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw -JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC -qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv -xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw -ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O -gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j -BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG -1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy -vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 -ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a -7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - Deutsche Telekom Root CA 2 ========================== -----BEGIN CERTIFICATE----- @@ -1661,28 +1494,6 @@ Cm26OWMohpLzGITY+9HPBVZkVw== -----END CERTIFICATE----- -ComSign Secured CA -================== ------BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE -AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w -NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD -QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs -49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH -7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB -kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 -9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw -AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t -U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA -j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC -AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a -BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp -FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP -51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz -OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== ------END CERTIFICATE----- - Cybertrust Global Root ====================== -----BEGIN CERTIFICATE----- @@ -1784,26 +1595,6 @@ wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho -----END CERTIFICATE----- -Buypass Class 3 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 -MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh -c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx -ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 -n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia -AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c -1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 -pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA -EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 -htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj -el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 ------END CERTIFICATE----- - EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 ========================================================================== -----BEGIN CERTIFICATE----- @@ -2635,29 +2426,6 @@ +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= -----END CERTIFICATE----- -A-Trust-nQual-03 -================ ------BEGIN CERTIFICATE----- -MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE -Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy -a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R -dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw -RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 -ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 -c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA -zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n -yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE -SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 -iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V -cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV -eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 -ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr -sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd -JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS -mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 -ahq97BvIxYSazQ== ------END CERTIFICATE----- - TWCA Root Certification Authority ================================= -----BEGIN CERTIFICATE----- @@ -3986,3 +3754,140 @@ kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su -----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 +========================================================= +-----BEGIN CERTIFICATE----- +MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg +RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw +ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w +SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE +n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp +ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 +jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m +ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP +9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV +4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH +HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo +BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq +URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl +lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 +B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6 +========================================================= +-----BEGIN CERTIFICATE----- +MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5 +MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL +BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf +aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm +aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a +2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED +wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb +HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV ++DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT +9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R +fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy +o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW +hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1 +O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw== +-----END CERTIFICATE----- + +Certinomis - Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg +LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx +EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD +ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos +P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo +d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap +z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 +8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x +RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE +6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t +FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV +PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH +i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj +YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I +6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV +WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw +Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX +lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ +y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 +Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng +DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi +I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM +cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr +hkIGuUE= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +Certification Authority of WoSign G2 +==================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx +CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai +XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du +W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9 +5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK +v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI +hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY +P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3 +TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu ++sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+ +7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= +-----END CERTIFICATE----- + +CA WoSign ECC Root +================== +-----BEGIN CERTIFICATE----- +MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD +TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v +dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK +ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU +t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw +QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R +MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0 +Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu +a/GRspBl9JrmkO5K +-----END CERTIFICATE----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/excon.gemspec new/excon.gemspec --- old/excon.gemspec 2015-07-13 17:17:57.000000000 +0200 +++ new/excon.gemspec 2016-02-29 17:40:18.000000000 +0100 @@ -13,8 +13,8 @@ ## If your rubyforge_project name is different, then edit it and comment out ## the sub! line in the Rakefile s.name = 'excon' - s.version = '0.45.4' - s.date = '2015-07-13' + s.version = '0.47.0' + s.date = '2016-02-29' s.rubyforge_project = 'excon' ## Make sure your summary is short. The description may be as long @@ -62,6 +62,7 @@ s.add_development_dependency('rdoc') s.add_development_dependency('shindo') s.add_development_dependency('sinatra') + s.add_development_dependency('sinatra-contrib') s.add_development_dependency('json', '>= 1.8.2') ## Leave this section as-is. It will be automatically generated from the @@ -104,6 +105,7 @@ lib/excon/extensions/uri.rb lib/excon/headers.rb lib/excon/middlewares/base.rb + lib/excon/middlewares/capture_cookies.rb lib/excon/middlewares/decompress.rb lib/excon/middlewares/escape_path.rb lib/excon/middlewares/expects.rb @@ -131,6 +133,7 @@ tests/errors_tests.rb tests/header_tests.rb tests/middlewares/canned_response_tests.rb + tests/middlewares/capture_cookies_tests.rb tests/middlewares/decompress_tests.rb tests/middlewares/escape_path_tests.rb tests/middlewares/idempotent_tests.rb @@ -147,6 +150,7 @@ tests/rackups/proxy.ru tests/rackups/query_string.ru tests/rackups/redirecting.ru + tests/rackups/redirecting_with_cookie.ru tests/rackups/request_headers.ru tests/rackups/request_methods.ru tests/rackups/response_header.ru diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon/connection.rb new/lib/excon/connection.rb --- old/lib/excon/connection.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/lib/excon/connection.rb 2016-02-29 17:40:18.000000000 +0100 @@ -207,7 +207,7 @@ datum[:headers] = @data[:headers].merge(datum[:headers] || {}) if datum[:scheme] == UNIX - datum[:headers]['Host'] ||= '' << datum[:socket] + datum[:headers]['Host'] = '' else datum[:headers]['Host'] ||= '' << datum[:host] << port_string(datum) end @@ -383,7 +383,7 @@ unix_proxy = @data[:proxy] ? @data[:proxy][:scheme] == UNIX : false sockets[@socket_key] ||= if @data[:scheme] == UNIX || unix_proxy Excon::UnixSocket.new(@data) - elsif @data[:scheme] == HTTPS + elsif @data[:ssl_uri_schemes].include?(@data[:scheme]) Excon::SSLSocket.new(@data) else Excon::Socket.new(@data) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon/constants.rb new/lib/excon/constants.rb --- old/lib/excon/constants.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/lib/excon/constants.rb 2016-02-29 17:40:18.000000000 +0100 @@ -1,6 +1,6 @@ module Excon - VERSION = '0.45.4' + VERSION = '0.47.0' CR_NL = "\r\n" @@ -132,6 +132,7 @@ :read_timeout => 60, :retry_limit => DEFAULT_RETRY_LIMIT, :ssl_verify_peer => true, + :ssl_uri_schemes => [HTTPS], :tcp_nodelay => false, :thread_safe_sockets => true, :uri_parser => URI, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon/errors.rb new/lib/excon/errors.rb --- old/lib/excon/errors.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/lib/excon/errors.rb 2016-02-29 17:40:18.000000000 +0100 @@ -8,7 +8,7 @@ class SocketError < Error attr_reader :socket_error - def initialize(socket_error=Excon::Error.new) + def initialize(socket_error=Excon::Errors::Error.new) if socket_error.message =~ /certificate verify failed/ super("Unable to verify certificate, please set `Excon.defaults[:ssl_ca_path] = path_to_certs`, `ENV['SSL_CERT_DIR'] = path_to_certs`, `Excon.defaults[:ssl_ca_file] = path_to_file`, `ENV['SSL_CERT_FILE'] = path_to_file`, `Excon.defaults[:ssl_verify_callback] = callback` (see OpenSSL::SSL::SSLContext#verify_callback), or `Excon.defaults[:ssl_verify_peer] = false` (less secure).") else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon/middlewares/capture_cookies.rb new/lib/excon/middlewares/capture_cookies.rb --- old/lib/excon/middlewares/capture_cookies.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/excon/middlewares/capture_cookies.rb 2016-02-29 17:40:18.000000000 +0100 @@ -0,0 +1,31 @@ +module Excon + module Middleware + class CaptureCookies < Excon::Middleware::Base + + def extract_cookies_from_set_cookie(set_cookie) + set_cookie.split(',').map { |full| full.split(';').first.strip }.join('; ') + end + + def get_header(datum, header) + _, header_value = datum[:response][:headers].detect do |key, value| + key.casecmp(header) == 0 + end + header_value + end + + def response_call(datum) + cookie = get_header(datum, 'Set-Cookie') + if cookie + cookie = extract_cookies_from_set_cookie(cookie) + unless datum[:headers].key?("Cookie") + datum[:headers]["Cookie"] = cookie + else + original_cookies = datum[:headers]["Cookie"] + datum[:headers]["Cookie"] = original_cookies.empty? ? cookie : [original_cookies,cookie].join('; ') + end + end + super(datum) + end + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon/middlewares/decompress.rb new/lib/excon/middlewares/decompress.rb --- old/lib/excon/middlewares/decompress.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/lib/excon/middlewares/decompress.rb 2016-02-29 17:40:18.000000000 +0100 @@ -12,16 +12,17 @@ end def response_call(datum) - unless datum.has_key?(:response_block) + body = datum[:response][:body] + unless datum.has_key?(:response_block) || body.nil? || body.empty? if key = datum[:response][:headers].keys.detect {|k| k.casecmp('Content-Encoding') == 0 } encodings = Utils.split_header_value(datum[:response][:headers][key]) if encoding = encodings.last if encoding.casecmp('deflate') == 0 # assume inflate omits header - datum[:response][:body] = Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(datum[:response][:body]) + datum[:response][:body] = Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(body) encodings.pop elsif encoding.casecmp('gzip') == 0 || encoding.casecmp('x-gzip') == 0 - datum[:response][:body] = Zlib::GzipReader.new(StringIO.new(datum[:response][:body])).read + datum[:response][:body] = Zlib::GzipReader.new(StringIO.new(body)).read encodings.pop end datum[:response][:headers][key] = encodings.join(', ') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon/middlewares/instrumentor.rb new/lib/excon/middlewares/instrumentor.rb --- old/lib/excon/middlewares/instrumentor.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/lib/excon/middlewares/instrumentor.rb 2016-02-29 17:40:18.000000000 +0100 @@ -3,9 +3,12 @@ class Instrumentor < Excon::Middleware::Base def error_call(datum) if datum.has_key?(:instrumentor) - datum[:instrumentor].instrument("#{datum[:instrumentor_name]}.error", :error => datum[:error]) + datum[:instrumentor].instrument("#{datum[:instrumentor_name]}.error", :error => datum[:error]) do + @stack.error_call(datum) + end + else + @stack.error_call(datum) end - @stack.error_call(datum) end def request_call(datum) @@ -25,9 +28,12 @@ def response_call(datum) if datum.has_key?(:instrumentor) - datum[:instrumentor].instrument("#{datum[:instrumentor_name]}.response", datum[:response]) + datum[:instrumentor].instrument("#{datum[:instrumentor_name]}.response", datum[:response]) do + @stack.response_call(datum) + end + else + @stack.response_call(datum) end - @stack.response_call(datum) end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon/middlewares/redirect_follower.rb new/lib/excon/middlewares/redirect_follower.rb --- old/lib/excon/middlewares/redirect_follower.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/lib/excon/middlewares/redirect_follower.rb 2016-02-29 17:40:18.000000000 +0100 @@ -1,14 +1,21 @@ module Excon module Middleware class RedirectFollower < Excon::Middleware::Base + + def get_header(datum, header) + _, header_value = datum[:response][:headers].detect do |key, value| + key.casecmp(header) == 0 + end + header_value + end + def response_call(datum) if datum.has_key?(:response) case datum[:response][:status] when 301, 302, 303, 307, 308 uri_parser = datum[:uri_parser] || Excon.defaults[:uri_parser] - _, location = datum[:response][:headers].detect do |key, value| - key.casecmp('Location') == 0 - end + + location = get_header(datum, 'Location') uri = uri_parser.parse(location) # delete old/redirect response diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon/response.rb new/lib/excon/response.rb --- old/lib/excon/response.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/lib/excon/response.rb 2016-02-29 17:40:18.000000000 +0100 @@ -16,17 +16,20 @@ def headers @data[:headers] end - def status=(new_status) - @data[:status] = new_status + def host + @data[:host] end - def status - @data[:status] + def local_address + @data[:local_address] end - def status_line - @data[:status_line] + def local_port + @data[:local_port] end - def status_line=(new_status_line) - @data[:status_line] = new_status_line + def path + @data[:path] + end + def port + @data[:port] end def reason_phrase=(new_reason_phrase) @data[:reason_phrase] = new_reason_phrase @@ -40,11 +43,17 @@ def remote_ip @data[:remote_ip] end - def local_port - @data[:local_port] + def status=(new_status) + @data[:status] = new_status end - def local_address - @data[:local_address] + def status + @data[:status] + end + def status_line + @data[:status_line] + end + def status_line=(new_status_line) + @data[:status_line] = new_status_line end def self.parse(socket, datum) @@ -57,7 +66,10 @@ datum[:response] = { :body => '', + :host => datum[:host], :headers => Excon::Headers.new, + :path => datum[:path], + :port => datum[:port], :status => status, :status_line => line, :reason_phrase => reason_phrase @@ -100,25 +112,27 @@ if response_block while (chunk_size = socket.readline.chomp!.to_i(16)) > 0 while chunk_size > 0 - chunk = socket.read(chunk_size) + chunk = socket.read(chunk_size) || raise(EOFError) chunk_size -= chunk.bytesize response_block.call(chunk, nil, nil) end new_line_size = 2 # 2 == "\r\n".length while new_line_size > 0 - new_line_size -= socket.read(new_line_size).length + chunk = socket.read(new_line_size) || raise(EOFError) + new_line_size -= chunk.length end end else while (chunk_size = socket.readline.chomp!.to_i(16)) > 0 while chunk_size > 0 - chunk = socket.read(chunk_size) + chunk = socket.read(chunk_size) || raise(EOFError) chunk_size -= chunk.bytesize datum[:response][:body] << chunk end new_line_size = 2 # 2 == "\r\n".length while new_line_size > 0 - new_line_size -= socket.read(new_line_size).length + chunk = socket.read(new_line_size) || raise(EOFError) + new_line_size -= chunk.length end end end @@ -131,13 +145,13 @@ if remaining = content_length if response_block while remaining > 0 - chunk = socket.read([datum[:chunk_size], remaining].min) + chunk = socket.read([datum[:chunk_size], remaining].min) || raise(EOFError) response_block.call(chunk, [remaining - chunk.bytesize, 0].max, content_length) remaining -= chunk.bytesize end else while remaining > 0 - chunk = socket.read([datum[:chunk_size], remaining].min) + chunk = socket.read([datum[:chunk_size], remaining].min) || raise(EOFError) datum[:response][:body] << chunk remaining -= chunk.bytesize end @@ -160,7 +174,7 @@ def self.parse_headers(socket, datum) last_key = nil - until (data = socket.readline.chomp!).empty? + until (data = socket.readline.chomp).empty? if !data.lstrip!.nil? raise Excon::Errors::ResponseParseError, 'malformed header' unless last_key # append to last_key's last value diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon/utils.rb new/lib/excon/utils.rb --- old/lib/excon/utils.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/lib/excon/utils.rb 2016-02-29 17:40:18.000000000 +0100 @@ -40,11 +40,12 @@ when Hash str << '?' datum[:query].sort_by {|k,_| k.to_s }.each do |key, values| + key = CGI.escape(key.to_s) if values.nil? - str << key.to_s << '&' + str << key << '&' else [values].flatten.each do |value| - str << key.to_s << '=' << CGI.escape(value.to_s) << '&' + str << key << '=' << CGI.escape(value.to_s) << '&' end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/excon.rb new/lib/excon.rb --- old/lib/excon.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/lib/excon.rb 2016-02-29 17:40:18.000000000 +0100 @@ -30,6 +30,7 @@ require 'excon/middlewares/decompress' require 'excon/middlewares/escape_path' require 'excon/middlewares/redirect_follower' +require 'excon/middlewares/capture_cookies' require 'excon/pretty_printer' require 'excon/socket' require 'excon/ssl_socket' @@ -209,9 +210,9 @@ nil end - # get a list of defined stubs + # get a list of defined stubs for the current thread def stubs - @stubs ||= [] + Thread.current[:_excon_stubs] ||= [] end # remove first/oldest stub matching request_params diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2015-07-13 17:17:57.000000000 +0200 +++ new/metadata 2016-02-29 17:40:18.000000000 +0100 @@ -1,7 +1,7 @@ --- !ruby/object:Gem::Specification name: excon version: !ruby/object:Gem::Version - version: 0.45.4 + version: 0.47.0 platform: ruby authors: - dpiddy (Dan Peterson) @@ -10,7 +10,7 @@ autorequire: bindir: bin cert_chain: [] -date: 2015-07-13 00:00:00.000000000 Z +date: 2016-02-29 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: activesupport @@ -125,6 +125,20 @@ - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency + name: sinatra-contrib + requirement: !ruby/object:Gem::Requirement + requirements: + - - ">=" + - !ruby/object:Gem::Version + version: '0' + type: :development + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - ">=" + - !ruby/object:Gem::Version + version: '0' +- !ruby/object:Gem::Dependency name: json requirement: !ruby/object:Gem::Requirement requirements: @@ -180,6 +194,7 @@ - lib/excon/extensions/uri.rb - lib/excon/headers.rb - lib/excon/middlewares/base.rb +- lib/excon/middlewares/capture_cookies.rb - lib/excon/middlewares/decompress.rb - lib/excon/middlewares/escape_path.rb - lib/excon/middlewares/expects.rb @@ -207,6 +222,7 @@ - tests/errors_tests.rb - tests/header_tests.rb - tests/middlewares/canned_response_tests.rb +- tests/middlewares/capture_cookies_tests.rb - tests/middlewares/decompress_tests.rb - tests/middlewares/escape_path_tests.rb - tests/middlewares/idempotent_tests.rb @@ -223,6 +239,7 @@ - tests/rackups/proxy.ru - tests/rackups/query_string.ru - tests/rackups/redirecting.ru +- tests/rackups/redirecting_with_cookie.ru - tests/rackups/request_headers.ru - tests/rackups/request_methods.ru - tests/rackups/response_header.ru @@ -266,7 +283,7 @@ version: '0' requirements: [] rubyforge_project: excon -rubygems_version: 2.2.2 +rubygems_version: 2.5.1 signing_key: specification_version: 2 summary: speed, persistence, http(s) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tests/basic_tests.rb new/tests/basic_tests.rb --- old/tests/basic_tests.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/tests/basic_tests.rb 2016-02-29 17:40:18.000000000 +0100 @@ -1,3 +1,5 @@ +require 'json' + Shindo.tests('Excon basics') do with_rackup('basic.ru') do basic_tests @@ -246,6 +248,19 @@ response[:status] end end + + tests('http Host header is empty') do + tests('GET /headers').returns("") do + connection = Excon::Connection.new({ + :socket => file_name, + :nonblock => false, + :scheme => 'unix', + :ssl_verify_peer => false + }) + response = connection.request(:method => :get, :path => '/headers') + JSON.parse(response.body)['HTTP_HOST'] + end + end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tests/middlewares/capture_cookies_tests.rb new/tests/middlewares/capture_cookies_tests.rb --- old/tests/middlewares/capture_cookies_tests.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/tests/middlewares/capture_cookies_tests.rb 2016-02-29 17:40:18.000000000 +0100 @@ -0,0 +1,34 @@ +Shindo.tests("Excon redirecting with cookie preserved") do + env_init + + with_rackup('redirecting_with_cookie.ru') do + tests('second request will send cookies set by the first').returns('ok') do + Excon.get( + 'http://127.0.0.1:9292', + :path => '/sets_cookie', + :middlewares => Excon.defaults[:middlewares] + [Excon::Middleware::CaptureCookies, Excon::Middleware::RedirectFollower] + ).body + end + + tests('second request will send multiple cookies set by the first').returns('ok') do + Excon.get( + 'http://127.0.0.1:9292', + :path => '/sets_multi_cookie', + :middlewares => Excon.defaults[:middlewares] + [Excon::Middleware::CaptureCookies, Excon::Middleware::RedirectFollower] + ).body + end + end + + with_rackup('redirecting.ru') do + tests("runs normally when there are no cookies set").returns('ok') do + Excon.post( + 'http://127.0.0.1:9292', + :path => '/first', + :middlewares => Excon.defaults[:middlewares] + [Excon::Middleware::CaptureCookies, Excon::Middleware::RedirectFollower], + :body => "a=Some_content" + ).body + end + end + + env_restore +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tests/middlewares/decompress_tests.rb new/tests/middlewares/decompress_tests.rb --- old/tests/middlewares/decompress_tests.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/tests/middlewares/decompress_tests.rb 2016-02-29 17:40:18.000000000 +0100 @@ -29,6 +29,11 @@ tests('removes processed encoding from header').returns('') do resp[:headers]['Content-Encoding'] end + + tests('empty response body').returns('') do + resp = @connection.request(:body => '') + resp[:body] + end end tests('deflate') do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tests/middlewares/instrumentation_tests.rb new/tests/middlewares/instrumentation_tests.rb --- old/tests/middlewares/instrumentation_tests.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/tests/middlewares/instrumentation_tests.rb 2016-02-29 17:40:18.000000000 +0100 @@ -3,13 +3,19 @@ class SimpleInstrumentor class << self - attr_accessor :events + attr_accessor :events, :blocks def instrument(name, params = {}, &block) - @events ||= [] @events << name + @blocks << name if block_given? + yield if block_given? end + + def reset! + @events = [] + @blocks = [] + end end end @@ -26,6 +32,10 @@ Excon.stubs.clear end + before do + SimpleInstrumentor.reset! + end + def subscribe(match) @events = [] ActiveSupport::Notifications.subscribe(match) do |*args| @@ -238,6 +248,19 @@ SimpleInstrumentor.events end + tests('always passes the block').returns( + ['excon.request', 'excon.response']) do + stub_success + connection = Excon.new( + 'http://127.0.0.1:9292', + :instrumentor => SimpleInstrumentor, + :mock => true + ) + connection.get(:idempotent => true) + + SimpleInstrumentor.blocks + end + tests('does not generate events when not provided').returns(0) do subscribe(/excon/) stub_success diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tests/middlewares/mock_tests.rb new/tests/middlewares/mock_tests.rb --- old/tests/middlewares/mock_tests.rb 2015-07-13 17:17:57.000000000 +0200 +++ new/tests/middlewares/mock_tests.rb 2016-02-29 17:40:18.000000000 +0100 @@ -252,5 +252,26 @@ Excon.stubs.clear end + tests("thread-local stubs") do + q1, q2 = Queue.new, Queue.new + connection = Excon.new('http://127.0.0.1:9292', :mock => true) + Excon.stub({}, {:body => '1'}) + t = Thread.new do + Excon.stub({}, {:body => '2'}) + q1.push nil + q2.pop + connection.request(:method => :get).body + end + q1.pop + tests("get on a different thread").returns('1') do + connection.request(:method => :get).body + end + q2.push nil + tests("get on a different thread").returns('2') do + t.join.value + end + Excon.stubs.clear + end + env_restore end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tests/query_string_tests.rb new/tests/query_string_tests.rb --- old/tests/query_string_tests.rb 2015-07-13 17:17:58.000000000 +0200 +++ new/tests/query_string_tests.rb 2016-02-29 17:40:18.000000000 +0100 @@ -52,12 +52,12 @@ response = connection.request(:method => :get, :path => '/query', :query => {'foo[]' => ['bar', 'baz'], :me => 'too'}) query_string = response.body[7..-1] # query string sent - test("query string sent includes 'foo[]=bar'") do - query_string.split('&').include?('foo[]=bar') + test("query string sent includes 'foo%5B%5D=bar'") do + query_string.split('&').include?('foo%5B%5D=bar') end - test("query string sent includes 'foo[]=baz'") do - query_string.split('&').include?('foo[]=baz') + test("query string sent includes 'foo%5B%5D=baz'") do + query_string.split('&').include?('foo%5B%5D=baz') end test("query string sent includes 'me=too'") do @@ -65,5 +65,23 @@ end end + tests(":query => {'foo%=#' => 'bar%=#'}") do + response = connection.request(:method => :get, :path => '/query', :query => {'foo%=#' => 'bar%=#'}) + query_string = response.body[7..-1] # query string sent + + tests("query string sent").returns('foo%25%3D%23=bar%25%3D%23') do + query_string + end + end + + tests(":query => {'foo%=#' => nil}") do + response = connection.request(:method => :get, :path => '/query', :query => {'foo%=#' => nil}) + query_string = response.body[7..-1] # query string sent + + tests("query string sent").returns('foo%25%3D%23') do + query_string + end + end + end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tests/rackups/basic.rb new/tests/rackups/basic.rb --- old/tests/rackups/basic.rb 2015-07-13 17:17:58.000000000 +0200 +++ new/tests/rackups/basic.rb 2016-02-29 17:40:18.000000000 +0100 @@ -1,4 +1,5 @@ require 'sinatra' +require 'json' require File.join(File.dirname(__FILE__), 'webrick_patch') class Basic < Sinatra::Base @@ -10,6 +11,11 @@ 'x' * value.to_i end + get('/headers') do + content_type :json + request.env.select{|key, _| key.start_with? 'HTTP_'}.to_json + end + post('/body-sink') do request.body.read.size.to_s end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tests/rackups/redirecting_with_cookie.ru new/tests/rackups/redirecting_with_cookie.ru --- old/tests/rackups/redirecting_with_cookie.ru 1970-01-01 01:00:00.000000000 +0100 +++ new/tests/rackups/redirecting_with_cookie.ru 2016-02-29 17:40:18.000000000 +0100 @@ -0,0 +1,40 @@ +require 'sinatra' +require 'sinatra/cookies' +require 'json' +require File.join(File.dirname(__FILE__), 'webrick_patch') + +class App < Sinatra::Base + helpers Sinatra::Cookies + set :environment, :production + enable :dump_errors + + get('/sets_cookie') do + cookies[:chocolatechip] = "chunky" + redirect "/requires_cookie" + end + + get('/requires_cookie') do + cookie = cookies[:chocolatechip] + unless cookie.nil? || cookie != "chunky" + "ok" + else + JSON.pretty_generate(headers) + end + end + + get('/sets_multi_cookie') do + cookies[:chocolatechip] = "chunky" + cookies[:thinmints] = "minty" + redirect "/requires_cookie" + end + + get('/requires_cookie') do + if cookies[:chocolatechip] == "chunky" && cookies[:thinmints] == "minty" + "ok" + else + JSON.pretty_generate(headers) + end + end +end + +run App diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tests/servers/good.rb new/tests/servers/good.rb --- old/tests/servers/good.rb 2015-07-13 17:17:58.000000000 +0200 +++ new/tests/servers/good.rb 2016-02-29 17:40:18.000000000 +0100 @@ -55,9 +55,14 @@ case encoding when 'gzip' - io = (Zlib::GzipWriter.new(StringIO.new) << request[:body]).finish - io.rewind - body = io.read + body = request[:body] + if(body.nil? || body.empty?) + body = '' + else + io = (Zlib::GzipWriter.new(StringIO.new) << request[:body]).finish + io.rewind + body = io.read + end when 'deflate' # drops the zlib header deflator = Zlib::Deflate.new(nil, -Zlib::MAX_WBITS)