From 55ef39b056b42865e88937e84cfa36e11a6f6dfb Mon Sep 17 00:00:00 2001 From: Philipp Thun Date: Wed, 10 Aug 2022 08:36:22 +0200 Subject: [PATCH 1/3] Use Addressable::URI.encode_component instead of URI.encode Update Ruby version to 3.0. Co-authored-by: Johannes Haass --- .ruby-version | 2 +- fog-aliyun.gemspec | 3 ++- lib/fog/aliyun/compute.rb | 12 +++++++----- lib/fog/aliyun/requests/compute/attach_disk.rb | 4 +++- .../compute/create_security_group_egress_ip_rule.rb | 6 ++++-- .../compute/create_security_group_egress_sg_rule.rb | 4 +++- .../compute/create_security_group_ip_rule.rb | 6 ++++-- .../compute/create_security_group_sg_rule.rb | 4 +++- lib/fog/aliyun/requests/compute/create_vpc.rb | 4 +++- lib/fog/aliyun/requests/compute/create_vswitch.rb | 4 +++- .../compute/delete_security_group_egress_ip_rule.rb | 6 ++++-- .../compute/delete_security_group_egress_sg_rule.rb | 4 +++- .../compute/delete_security_group_ip_rule.rb | 6 ++++-- .../compute/delete_security_group_sg_rule.rb | 4 +++- lib/fog/aliyun/requests/compute/detach_disk.rb | 4 +++- lib/fog/aliyun/requests/compute/modify_vpc.rb | 4 +++- lib/fog/aliyun/requests/compute/modify_vswitch.rb | 4 +++- .../aliyun/requests/storage/get_object_http_url.rb | 4 +++- .../aliyun/requests/storage/get_object_https_url.rb | 4 +++- spec/fog/aliyun_spec.rb | 10 ++++++++++ 20 files changed, 72 insertions(+), 27 deletions(-) diff --git a/.ruby-version b/.ruby-version index 73462a5..b0f2dcb 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.5.1 +3.0.4 diff --git a/fog-aliyun.gemspec b/fog-aliyun.gemspec index 67f43dd..fc4f02d 100644 --- a/fog-aliyun.gemspec +++ b/fog-aliyun.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |spec| spec.require_paths = ['lib'] spec.add_development_dependency 'bundler' - spec.add_development_dependency 'mime-types', '~> 2.6', '>= 2.6.2' + spec.add_development_dependency 'mime-types', '~> 3.4' spec.add_development_dependency 'pry-nav' spec.add_development_dependency 'rake' spec.add_development_dependency 'rspec' @@ -30,6 +30,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'memory_profiler' spec.add_development_dependency 'aliyun-sdk', '~> 0.8.0' + spec.add_dependency 'addressable', '~> 2.8.0' spec.add_dependency 'aliyun-sdk', '~> 0.8.0' spec.add_dependency 'fog-core' spec.add_dependency 'fog-json' diff --git a/lib/fog/aliyun/compute.rb b/lib/fog/aliyun/compute.rb index b525b55..c188b3d 100644 --- a/lib/fog/aliyun/compute.rb +++ b/lib/fog/aliyun/compute.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun < Fog::Service @@ -350,7 +352,7 @@ def VPCrequest(params) # operation compute-- default URL def defaultAliyunUri(action, sigNonce, time) parTimeFormat = time.strftime('%Y-%m-%dT%H:%M:%SZ') - urlTimeFormat = URI.encode(parTimeFormat, ':') + urlTimeFormat = Addressable::URI.encode_component(parTimeFormat, Addressable::URI::CharacterClasses::UNRESERVED + '|') '?Format=JSON&AccessKeyId=' + @aliyun_accesskey_id + '&Action=' + action + '&SignatureMethod=HMAC-SHA1&RegionId=' + @aliyun_region_id + '&SignatureNonce=' + sigNonce + '&SignatureVersion=1.0&Version=2014-05-26&Timestamp=' + urlTimeFormat end @@ -370,7 +372,7 @@ def defaultAliyunQueryParameters(action, sigNonce, time) def defaultAliyunVPCUri(action, sigNonce, time) parTimeFormat = time.strftime('%Y-%m-%dT%H:%M:%SZ') - urlTimeFormat = URI.encode(parTimeFormat, ':') + urlTimeFormat = Addressable::URI.encode_component(parTimeFormat, Addressable::URI::CharacterClasses::UNRESERVED + '|') '?Format=JSON&AccessKeyId=' + @aliyun_accesskey_id + '&Action=' + action + '&SignatureMethod=HMAC-SHA1&RegionId=' + @aliyun_region_id + '&SignatureNonce=' + sigNonce + '&SignatureVersion=1.0&Version=2016-04-28&Timestamp=' + urlTimeFormat end @@ -420,18 +422,18 @@ def defalutVPCParameters(action, sigNonce, time) # building querystrings with string concatination. def sign(accessKeySecret, parameters) signature = sign_without_encoding(accessKeySecret, parameters) - URI.encode(signature, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + Addressable::URI.encode_component(signature, Addressable::URI::CharacterClasses::UNRESERVED + '|') end def sign_without_encoding(accessKeySecret, parameters) sortedParameters = parameters.sort canonicalizedQueryString = '' sortedParameters.each do |k, v| - canonicalizedQueryString += '&' + URI.encode(k, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + '=' + URI.encode(v, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + canonicalizedQueryString += '&' + Addressable::URI.encode_component(k, Addressable::URI::CharacterClasses::UNRESERVED + '|') + '=' + Addressable::URI.encode_component(v, Addressable::URI::CharacterClasses::UNRESERVED + '|') end canonicalizedQueryString[0] = '' - stringToSign = 'GET&%2F&' + URI.encode(canonicalizedQueryString, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + stringToSign = 'GET&%2F&' + Addressable::URI.encode_component(canonicalizedQueryString, Addressable::URI::CharacterClasses::UNRESERVED + '|') key = accessKeySecret + '&' digVer = OpenSSL::Digest.new('sha1') diff --git a/lib/fog/aliyun/requests/compute/attach_disk.rb b/lib/fog/aliyun/requests/compute/attach_disk.rb index 6ca38e3..2940de8 100644 --- a/lib/fog/aliyun/requests/compute/attach_disk.rb +++ b/lib/fog/aliyun/requests/compute/attach_disk.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -46,7 +48,7 @@ def attach_disk(instanceId, diskId, options = {}) if device parameters['Device'] = device pathUrl += '&Device=' - pathUrl += URI.encode(device, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(device, Addressable::URI::CharacterClasses::UNRESERVED + '|') end signature = sign(@aliyun_accesskey_secret, parameters) diff --git a/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb b/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb index 84ed1eb..9fc511d 100644 --- a/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb +++ b/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -19,7 +21,7 @@ def create_security_group_egress_ip_rule(securitygroup_id, destCidrIp, nicType, parameters['DestCidrIp'] = destCidrIp pathUrl += '&DestCidrIp=' - pathUrl += URI.encode(destCidrIp, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(destCidrIp, Addressable::URI::CharacterClasses::UNRESERVED + '|') nicType ||= 'intranet' parameters['NicType'] = nicType pathUrl += '&NicType=' @@ -29,7 +31,7 @@ def create_security_group_egress_ip_rule(securitygroup_id, destCidrIp, nicType, portRange ||= '-1/-1' parameters['PortRange'] = portRange pathUrl += '&PortRange=' - pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(portRange, Addressable::URI::CharacterClasses::UNRESERVED + '|') protocol = option[:protocol] protocol ||= 'all' diff --git a/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb b/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb index ac503e9..5dfd800 100644 --- a/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb +++ b/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -30,7 +32,7 @@ def create_security_group_egress_sg_rule(securitygroup_id, dest_group_id, option portRange ||= '-1/-1' parameters['PortRange'] = portRange pathUrl += '&PortRange=' - pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(portRange, Addressable::URI::CharacterClasses::UNRESERVED + '|') protocol = option[:protocol] protocol ||= 'all' diff --git a/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb b/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb index 9fa5f55..fb10daf 100644 --- a/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb +++ b/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -19,7 +21,7 @@ def create_security_group_ip_rule(securitygroup_id, sourceCidrIp, nicType, optio parameters['SourceCidrIp'] = sourceCidrIp pathUrl += '&SourceCidrIp=' - pathUrl += URI.encode(sourceCidrIp, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(sourceCidrIp, Addressable::URI::CharacterClasses::UNRESERVED + '|') nicType ||= 'intranet' parameters['NicType'] = nicType pathUrl += '&NicType=' @@ -29,7 +31,7 @@ def create_security_group_ip_rule(securitygroup_id, sourceCidrIp, nicType, optio portRange ||= '-1/-1' parameters['PortRange'] = portRange pathUrl += '&PortRange=' - pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(portRange, Addressable::URI::CharacterClasses::UNRESERVED + '|') protocol = option[:protocol] protocol ||= 'all' diff --git a/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb b/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb index 3a8b6e4..43529ef 100644 --- a/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb +++ b/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -30,7 +32,7 @@ def create_security_group_sg_rule(securitygroup_id, source_securitygroup_id, opt portRange ||= '-1/-1' parameters['PortRange'] = portRange pathUrl += '&PortRange=' - pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(portRange, Addressable::URI::CharacterClasses::UNRESERVED + '|') protocol = option[:protocol] protocol ||= 'all' diff --git a/lib/fog/aliyun/requests/compute/create_vpc.rb b/lib/fog/aliyun/requests/compute/create_vpc.rb index 6020b0e..6029c48 100644 --- a/lib/fog/aliyun/requests/compute/create_vpc.rb +++ b/lib/fog/aliyun/requests/compute/create_vpc.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -15,7 +17,7 @@ def create_vpc(cidrBlock, options = {}) parameters['CidrBlock'] = cidrBlock pathUrl += '&CidrBlock=' - pathUrl += URI.encode(cidrBlock, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(cidrBlock, Addressable::URI::CharacterClasses::UNRESERVED + '|') name = options[:name] desc = options[:description] diff --git a/lib/fog/aliyun/requests/compute/create_vswitch.rb b/lib/fog/aliyun/requests/compute/create_vswitch.rb index 2cc5e5d..cceaca7 100644 --- a/lib/fog/aliyun/requests/compute/create_vswitch.rb +++ b/lib/fog/aliyun/requests/compute/create_vswitch.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -19,7 +21,7 @@ def create_vswitch(vpcId, cidrBlock, options = {}) parameters['CidrBlock'] = cidrBlock pathUrl += '&CidrBlock=' - pathUrl += URI.encode(cidrBlock, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(cidrBlock, Addressable::URI::CharacterClasses::UNRESERVED + '|') parameters['ZoneId'] = @aliyun_zone_id pathUrl += '&ZoneId=' diff --git a/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb b/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb index 7ba34dd..c26c1bf 100644 --- a/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb +++ b/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -19,7 +21,7 @@ def delete_security_group_egress_ip_rule(securitygroup_id, destCidrIp, nicType, parameters['DestCidrIp'] = destCidrIp pathUrl += '&DestCidrIp=' - pathUrl += URI.encode(destCidrIp, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(destCidrIp, Addressable::URI::CharacterClasses::UNRESERVED + '|') nicType ||= 'intranet' parameters['NicType'] = nicType pathUrl += '&NicType=' @@ -29,7 +31,7 @@ def delete_security_group_egress_ip_rule(securitygroup_id, destCidrIp, nicType, portRange ||= '-1/-1' parameters['PortRange'] = portRange pathUrl += '&PortRange=' - pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(portRange, Addressable::URI::CharacterClasses::UNRESERVED + '|') protocol = option[:protocol] protocol ||= 'all' diff --git a/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb b/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb index 797e240..852354d 100644 --- a/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb +++ b/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -30,7 +32,7 @@ def delete_security_group_egress_sg_rule(securitygroup_id, dest_group_id, option portRange ||= '-1/-1' parameters['PortRange'] = portRange pathUrl += '&PortRange=' - pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(portRange, Addressable::URI::CharacterClasses::UNRESERVED + '|') protocol = option[:protocol] protocol ||= 'all' diff --git a/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb b/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb index cd905e7..5cb84eb 100644 --- a/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb +++ b/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -19,7 +21,7 @@ def delete_security_group_ip_rule(securitygroup_id, sourceCidrIp, nicType, optio parameters['SourceCidrIp'] = sourceCidrIp pathUrl += '&SourceCidrIp=' - pathUrl += URI.encode(sourceCidrIp, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(sourceCidrIp, Addressable::URI::CharacterClasses::UNRESERVED + '|') nicType ||= 'intranet' parameters['NicType'] = nicType pathUrl += '&NicType=' @@ -29,7 +31,7 @@ def delete_security_group_ip_rule(securitygroup_id, sourceCidrIp, nicType, optio portRange ||= '-1/-1' parameters['PortRange'] = portRange pathUrl += '&PortRange=' - pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(portRange, Addressable::URI::CharacterClasses::UNRESERVED + '|') protocol = option[:protocol] protocol ||= 'all' diff --git a/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb b/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb index b7d0a7f..41ef268 100644 --- a/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb +++ b/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -30,7 +32,7 @@ def delete_security_group_sg_rule(securitygroup_id, source_securitygroup_id, opt portRange ||= '-1/-1' parameters['PortRange'] = portRange pathUrl += '&PortRange=' - pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(portRange, Addressable::URI::CharacterClasses::UNRESERVED + '|') protocol = option[:protocol] protocol ||= 'all' diff --git a/lib/fog/aliyun/requests/compute/detach_disk.rb b/lib/fog/aliyun/requests/compute/detach_disk.rb index 109a02c..b683506 100644 --- a/lib/fog/aliyun/requests/compute/detach_disk.rb +++ b/lib/fog/aliyun/requests/compute/detach_disk.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -25,7 +27,7 @@ def detach_disk(instanceId, diskId, _options = {}) if device parameters['Device'] = device pathUrl += '&Device=' - pathUrl += URI.encode(device, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(device, Addressable::URI::CharacterClasses::UNRESERVED + '|') end signature = sign(@aliyun_accesskey_secret, parameters) pathUrl += '&Signature=' diff --git a/lib/fog/aliyun/requests/compute/modify_vpc.rb b/lib/fog/aliyun/requests/compute/modify_vpc.rb index 0ed14bc..a5e4cca 100644 --- a/lib/fog/aliyun/requests/compute/modify_vpc.rb +++ b/lib/fog/aliyun/requests/compute/modify_vpc.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -15,7 +17,7 @@ def modify_vpc(vpcId, options = {}) parameters['VpcId'] = vpcId pathUrl += '&VpcId=' - pathUrl += URI.encode(vpcId, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(vpcId, Addressable::URI::CharacterClasses::UNRESERVED + '|') name = options[:name] desc = options[:description] diff --git a/lib/fog/aliyun/requests/compute/modify_vswitch.rb b/lib/fog/aliyun/requests/compute/modify_vswitch.rb index f261f12..6644136 100644 --- a/lib/fog/aliyun/requests/compute/modify_vswitch.rb +++ b/lib/fog/aliyun/requests/compute/modify_vswitch.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Compute class Aliyun @@ -15,7 +17,7 @@ def modify_switch(vSwitchId, options = {}) parameters['VSwitchId'] = vSwitchId pathUrl += '&VSwitchId=' - pathUrl += URI.encode(vpcId, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + pathUrl += Addressable::URI.encode_component(vpcId, Addressable::URI::CharacterClasses::UNRESERVED + '|') name = options[:name] desc = options[:description] diff --git a/lib/fog/aliyun/requests/storage/get_object_http_url.rb b/lib/fog/aliyun/requests/storage/get_object_http_url.rb index 3d64e97..a101a75 100644 --- a/lib/fog/aliyun/requests/storage/get_object_http_url.rb +++ b/lib/fog/aliyun/requests/storage/get_object_http_url.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Aliyun class Storage @@ -24,7 +26,7 @@ def get_object_http_url_public(bucket_name, object_name, expires) signature = sign('GET', expires_time, nil, resource) 'http://' + bucket_name + '.' + @host + '/' + object_name + '?OSSAccessKeyId=' + @aliyun_accesskey_id + '&Expires=' + expires_time + - '&Signature=' + URI.encode(signature, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + '&Signature=' + Addressable::URI.encode_component(signature, Addressable::URI::CharacterClasses::UNRESERVED + '|') elsif acl == 'public-read' || acl == 'public-read-write' 'http://' + bucket_name + '.' + @host + '/' + object_name else diff --git a/lib/fog/aliyun/requests/storage/get_object_https_url.rb b/lib/fog/aliyun/requests/storage/get_object_https_url.rb index 3d9f8c8..ff9a930 100644 --- a/lib/fog/aliyun/requests/storage/get_object_https_url.rb +++ b/lib/fog/aliyun/requests/storage/get_object_https_url.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'addressable' + module Fog module Aliyun class Storage @@ -24,7 +26,7 @@ def get_object_https_url_public(bucket_name, object_name, expires) signature = sign('GET', expires_time, nil, resource) 'https://' + bucket_name + '.' + @host + '/' + object_name + '?OSSAccessKeyId=' + @aliyun_accesskey_id + '&Expires=' + expires_time + - '&Signature=' + URI.encode(signature, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + '&Signature=' + Addressable::URI.encode_component(signature, Addressable::URI::CharacterClasses::UNRESERVED + '|') elsif acl == 'public-read' || acl == 'public-read-write' 'https://' + bucket_name + '.' + @host + '/' + object_name else diff --git a/spec/fog/aliyun_spec.rb b/spec/fog/aliyun_spec.rb index b2e2aca..91a867a 100644 --- a/spec/fog/aliyun_spec.rb +++ b/spec/fog/aliyun_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'spec_helper' +require 'addressable' describe Fog::Aliyun do it 'has a version number' do @@ -10,4 +11,13 @@ it 'does something useful' do expect(true).to eq(true) end + + it 'encodes uris' do + all_ascii_chars_plus_space = '!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ' + # The above string encoded with URI.encode(all_ascii_chars_plus_space, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" '): + uri_encoded_string = '%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B|%7D~%20' + + encoded_string = Addressable::URI.encode_component(all_ascii_chars_plus_space, Addressable::URI::CharacterClasses::UNRESERVED + '|') + expect(encoded_string).to eq(uri_encoded_string) + end end From 4c364c8d29f9c8eac0b3bdf193b29186588682fc Mon Sep 17 00:00:00 2001 From: Philipp Thun Date: Wed, 10 Aug 2022 16:33:31 +0200 Subject: [PATCH 2/3] Fix "ArgumentError: tried to create Proc object without a block" --- lib/fog/aliyun/requests/storage/get_object.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/aliyun/requests/storage/get_object.rb b/lib/fog/aliyun/requests/storage/get_object.rb index a92aff4..f3b0db1 100644 --- a/lib/fog/aliyun/requests/storage/get_object.rb +++ b/lib/fog/aliyun/requests/storage/get_object.rb @@ -30,7 +30,7 @@ def get_object(bucket_name, object_name, options = {}, &block) end if block_given? - http_options[:response_block] = Proc.new + http_options[:response_block] = Proc.new {} end resources = { From 2cc9b85a554343a9a8ceb8d533cfc489544e3097 Mon Sep 17 00:00:00 2001 From: Philipp Thun Date: Wed, 10 Aug 2022 16:51:07 +0200 Subject: [PATCH 3/3] When rescuing from generic exceptions, don't rely on specifc fields --- lib/fog/aliyun/models/storage/files.rb | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/fog/aliyun/models/storage/files.rb b/lib/fog/aliyun/models/storage/files.rb index 2055cb3..207657e 100644 --- a/lib/fog/aliyun/models/storage/files.rb +++ b/lib/fog/aliyun/models/storage/files.rb @@ -71,11 +71,10 @@ def get(key, options = {}, &block) }) new(file_data) rescue Exception => error - case error.http_code.to_i - when 404 - nil - else - raise(error) + if error.respond_to?(:http_code) && error.http_code.to_i == 404 + nil + else + raise(error) end end end @@ -108,11 +107,10 @@ def head(key, options = {}) }) new(file_data) rescue Exception => error - case error.http_code.to_i - when 404 - nil - else - raise(error) + if error.respond_to?(:http_code) && error.http_code.to_i == 404 + nil + else + raise(error) end end end