moserp-s3sync 1.2.6 → 1.2.6.1
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.
- data/README +4 -2
- data/lib/S3.rb +21 -17
- data/lib/S3_s3sync_mod.rb +2 -2
- data/lib/s3try.rb +4 -2
- metadata +2 -2
data/README
CHANGED
@@ -78,7 +78,9 @@ Required:
|
|
78
78
|
If you don't know what these are, then s3sync is probably not the
|
79
79
|
right tool for you to be starting out with.
|
80
80
|
Optional:
|
81
|
-
AWS_S3_HOST -
|
81
|
+
AWS_S3_HOST - Host on which to access the service
|
82
|
+
AWS_S3_PORT - Port on which to access the service
|
83
|
+
AWS_S3_VIRTUAL_PATH - the path of the service
|
82
84
|
HTTP_PROXY_HOST,HTTP_PROXY_PORT,HTTP_PROXY_USER,HTTP_PROXY_PASSWORD - proxy
|
83
85
|
SSL_CERT_DIR - Where your Cert Authority keys live; for verification
|
84
86
|
SSL_CERT_FILE - If you have just one PEM file for CA verification
|
@@ -403,4 +405,4 @@ Version 1.2.6
|
|
403
405
|
Catch connect errors and retry.
|
404
406
|
----------
|
405
407
|
|
406
|
-
FNORD
|
408
|
+
FNORD
|
data/lib/S3.rb
CHANGED
@@ -33,12 +33,13 @@ end
|
|
33
33
|
# in another tool (such as your web browser for GETs).
|
34
34
|
module S3
|
35
35
|
DEFAULT_HOST = 's3.amazonaws.com'
|
36
|
+
DEFAULT_VIRTUAL_PATH = ''
|
36
37
|
PORTS_BY_SECURITY = { true => 443, false => 80 }
|
37
38
|
METADATA_PREFIX = 'x-amz-meta-'
|
38
39
|
AMAZON_HEADER_PREFIX = 'x-amz-'
|
39
40
|
|
40
41
|
# builds the canonical string for signing.
|
41
|
-
def S3.canonical_string(method, bucket="", path="", path_args={}, headers={}, expires=nil)
|
42
|
+
def S3.canonical_string(method, virtual_path, bucket="", path="", path_args={}, headers={}, expires=nil)
|
42
43
|
interesting_headers = {}
|
43
44
|
headers.each do |key, value|
|
44
45
|
lk = key.downcase
|
@@ -74,6 +75,7 @@ module S3
|
|
74
75
|
end
|
75
76
|
end
|
76
77
|
|
78
|
+
buf << "#{virtual_path}"
|
77
79
|
# build the path using the bucket and key
|
78
80
|
if not bucket.empty?
|
79
81
|
buf << "/#{bucket}"
|
@@ -93,7 +95,6 @@ module S3
|
|
93
95
|
elsif path_args.has_key?('logging')
|
94
96
|
buf << '?logging'
|
95
97
|
end
|
96
|
-
|
97
98
|
return buf
|
98
99
|
end
|
99
100
|
|
@@ -137,11 +138,12 @@ module S3
|
|
137
138
|
attr_accessor :calling_format
|
138
139
|
|
139
140
|
def initialize(aws_access_key_id, aws_secret_access_key, is_secure=true,
|
140
|
-
server=DEFAULT_HOST, port=PORTS_BY_SECURITY[is_secure],
|
141
|
+
server=DEFAULT_HOST, port=PORTS_BY_SECURITY[is_secure], vpath=DEFAULT_VIRTUAL_PATH,
|
141
142
|
calling_format=CallingFormat::REGULAR)
|
142
143
|
@aws_access_key_id = aws_access_key_id
|
143
144
|
@aws_secret_access_key = aws_secret_access_key
|
144
145
|
@server = server
|
146
|
+
@virtual_path = vpath
|
145
147
|
@is_secure = is_secure
|
146
148
|
@calling_format = calling_format
|
147
149
|
@port = port
|
@@ -221,7 +223,6 @@ end
|
|
221
223
|
|
222
224
|
private
|
223
225
|
def make_request(method, bucket='', key='', path_args={}, headers={}, data='', metadata={})
|
224
|
-
|
225
226
|
# build the domain based on the calling format
|
226
227
|
server = ''
|
227
228
|
if bucket.empty?
|
@@ -234,11 +235,11 @@ end
|
|
234
235
|
elsif @calling_format == CallingFormat::VANITY
|
235
236
|
server = bucket
|
236
237
|
else
|
237
|
-
server = @server
|
238
|
+
server = "#{@server}"
|
238
239
|
end
|
239
240
|
|
240
241
|
# build the path based on the calling format
|
241
|
-
path =
|
242
|
+
path = "#{@virtual_path}"
|
242
243
|
if (not bucket.empty?) and (@calling_format == CallingFormat::REGULAR)
|
243
244
|
path << "/#{bucket}"
|
244
245
|
end
|
@@ -260,7 +261,7 @@ end
|
|
260
261
|
set_headers(req, headers)
|
261
262
|
set_headers(req, metadata, METADATA_PREFIX)
|
262
263
|
|
263
|
-
set_aws_auth_header(req, @aws_access_key_id, @aws_secret_access_key, bucket, key, path_args)
|
264
|
+
set_aws_auth_header(req, @aws_access_key_id, @aws_secret_access_key, @virtual_path, bucket, key, path_args)
|
264
265
|
if req.request_body_permitted?
|
265
266
|
return http.request(req, data)
|
266
267
|
else
|
@@ -285,7 +286,7 @@ end
|
|
285
286
|
end
|
286
287
|
|
287
288
|
# set the Authorization header using AWS signed header authentication
|
288
|
-
def set_aws_auth_header(request, aws_access_key_id, aws_secret_access_key, bucket='', key='', path_args={})
|
289
|
+
def set_aws_auth_header(request, aws_access_key_id, aws_secret_access_key, virtual_path='', bucket='', key='', path_args={})
|
289
290
|
# we want to fix the date here if it's not already been done.
|
290
291
|
request['Date'] ||= Time.now.httpdate
|
291
292
|
|
@@ -296,7 +297,7 @@ end
|
|
296
297
|
request['Content-Type'] ||= ''
|
297
298
|
|
298
299
|
canonical_string =
|
299
|
-
S3.canonical_string(request.method, bucket, key, path_args, request.to_hash, nil)
|
300
|
+
S3.canonical_string(request.method, virtual_path, bucket, key, path_args, request.to_hash, nil)
|
300
301
|
encoded_canonical = S3.encode(aws_secret_access_key, canonical_string)
|
301
302
|
|
302
303
|
request['Authorization'] = "AWS #{aws_access_key_id}:#{encoded_canonical}"
|
@@ -325,12 +326,13 @@ end
|
|
325
326
|
DEFAULT_EXPIRES_IN = 60
|
326
327
|
|
327
328
|
def initialize(aws_access_key_id, aws_secret_access_key, is_secure=true,
|
328
|
-
server=DEFAULT_HOST, port=PORTS_BY_SECURITY[is_secure],
|
329
|
+
server=DEFAULT_HOST, port=PORTS_BY_SECURITY[is_secure], vpath=DEFAULT_VIRTUAL_PATH,
|
329
330
|
format=CallingFormat::REGULAR)
|
330
331
|
@aws_access_key_id = aws_access_key_id
|
331
332
|
@aws_secret_access_key = aws_secret_access_key
|
332
333
|
@protocol = is_secure ? 'https' : 'http'
|
333
334
|
@server = server
|
335
|
+
@virtual_path = vpath
|
334
336
|
@port = port
|
335
337
|
@calling_format = format
|
336
338
|
# by default expire
|
@@ -429,11 +431,11 @@ end
|
|
429
431
|
end
|
430
432
|
|
431
433
|
canonical_string =
|
432
|
-
S3::canonical_string(method, bucket, key, path_args, headers, expires)
|
434
|
+
S3::canonical_string(method, @virtual_path, bucket, key, path_args, headers, expires)
|
433
435
|
encoded_canonical =
|
434
436
|
S3::encode(@aws_secret_access_key, canonical_string)
|
435
437
|
|
436
|
-
url = CallingFormat.build_url_base(@protocol, @server, @port, bucket, @calling_format)
|
438
|
+
url = CallingFormat.build_url_base(@protocol, @server, @port, @virtual_path, bucket, @calling_format)
|
437
439
|
|
438
440
|
path_args["Signature"] = encoded_canonical.to_s
|
439
441
|
path_args["Expires"] = expires.to_s
|
@@ -469,16 +471,16 @@ end
|
|
469
471
|
VANITY = 2 # http://<vanity_domain>/key -- vanity_domain resolves to s3.amazonaws.com
|
470
472
|
|
471
473
|
# build the url based on the calling format, and bucket
|
472
|
-
def CallingFormat.build_url_base(protocol, server, port, bucket, format)
|
474
|
+
def CallingFormat.build_url_base(protocol, server, port, vpath, bucket, format)
|
473
475
|
build_url_base = "#{protocol}://"
|
474
476
|
if bucket.empty?
|
475
|
-
build_url_base << "#{server}:#{port}"
|
477
|
+
build_url_base << "#{server}:#{port}/${vpath}"
|
476
478
|
elsif format == SUBDOMAIN
|
477
|
-
build_url_base << "#{bucket}.#{server}:#{port}"
|
479
|
+
build_url_base << "#{bucket}.#{server}:#{port}/${vpath}"
|
478
480
|
elsif format == VANITY
|
479
|
-
build_url_base << "#{bucket}:#{port}"
|
481
|
+
build_url_base << "#{bucket}:#{port}/${vpath}"
|
480
482
|
else
|
481
|
-
build_url_base << "#{server}:#{port}/#{bucket}"
|
483
|
+
build_url_base << "#{server}:#{port}/${vpath}/#{bucket}"
|
482
484
|
end
|
483
485
|
return build_url_base
|
484
486
|
end
|
@@ -566,8 +568,10 @@ end
|
|
566
568
|
elsif name == 'StorageClass'
|
567
569
|
@curr_entry.storage_class = @curr_text
|
568
570
|
elsif name == 'ID'
|
571
|
+
@curr_entry.owner = Owner.new if !@curr_entry.owner
|
569
572
|
@curr_entry.owner.id = @curr_text
|
570
573
|
elsif name == 'DisplayName'
|
574
|
+
@curr_entry.owner = Owner.new if !@curr_entry.owner
|
571
575
|
@curr_entry.owner.display_name = @curr_text
|
572
576
|
elsif name == 'CommonPrefixes'
|
573
577
|
@common_prefixes << @common_prefix_entry
|
data/lib/S3_s3sync_mod.rb
CHANGED
@@ -60,7 +60,7 @@ module S3
|
|
60
60
|
alias __make_request__ make_request
|
61
61
|
def make_request(method, bucket='', key='', path_args={}, headers={}, data='', metadata={}, streamOut=nil)
|
62
62
|
# build the path based on the calling format
|
63
|
-
path =
|
63
|
+
path = "#{@virtual_path}"
|
64
64
|
if (not bucket.empty?) and (@calling_format == CallingFormat::REGULAR)
|
65
65
|
path << "/#{bucket}"
|
66
66
|
end
|
@@ -80,7 +80,7 @@ module S3
|
|
80
80
|
set_headers(req, metadata, METADATA_PREFIX)
|
81
81
|
set_headers(req, {'Connection' => 'keep-alive', 'Keep-Alive' => '300'})
|
82
82
|
|
83
|
-
set_aws_auth_header(req, @aws_access_key_id, @aws_secret_access_key, bucket, key, path_args)
|
83
|
+
set_aws_auth_header(req, @aws_access_key_id, @aws_secret_access_key, @virtual_path, bucket, key, path_args)
|
84
84
|
|
85
85
|
http = $S3syncHttp
|
86
86
|
|
data/lib/s3try.rb
CHANGED
@@ -12,6 +12,8 @@ module S3sync
|
|
12
12
|
$AWS_ACCESS_KEY_ID = ENV["AWS_ACCESS_KEY_ID"]
|
13
13
|
$AWS_SECRET_ACCESS_KEY = ENV["AWS_SECRET_ACCESS_KEY"]
|
14
14
|
$AWS_S3_HOST = (ENV["AWS_S3_HOST"] or "s3.amazonaws.com")
|
15
|
+
$AWS_S3_PORT = (ENV["AWS_S3_PORT"] or "80")
|
16
|
+
$AWS_S3_VIRTUAL_PATH = (ENV["AWS_S3_VIRTUAL_PATH"] or "")
|
15
17
|
$HTTP_PROXY_HOST = ENV["HTTP_PROXY_HOST"]
|
16
18
|
$HTTP_PROXY_PORT = ENV["HTTP_PROXY_PORT"]
|
17
19
|
$HTTP_PROXY_USER = ENV["HTTP_PROXY_USER"]
|
@@ -40,7 +42,7 @@ module S3sync
|
|
40
42
|
|
41
43
|
# ---------- CONNECT ---------- #
|
42
44
|
|
43
|
-
$S3syncConnection = S3::AWSAuthConnection.new($AWS_ACCESS_KEY_ID, $AWS_SECRET_ACCESS_KEY, $S3syncOptions['--ssl'], $AWS_S3_HOST)
|
45
|
+
$S3syncConnection = S3::AWSAuthConnection.new($AWS_ACCESS_KEY_ID, $AWS_SECRET_ACCESS_KEY, $S3syncOptions['--ssl'], $AWS_S3_HOST, $AWS_S3_PORT, $AWS_S3_VIRTUAL_PATH)
|
44
46
|
$S3syncConnection.calling_format = S3::CallingFormat::string_to_format($AWS_CALLING_FORMAT)
|
45
47
|
if $S3syncOptions['--ssl']
|
46
48
|
if $SSL_CERT_DIR
|
@@ -53,7 +55,7 @@ module S3sync
|
|
53
55
|
end
|
54
56
|
end
|
55
57
|
def S3sync.s3urlSetup
|
56
|
-
$S3syncGenerator = S3::QueryStringAuthGenerator.new($AWS_ACCESS_KEY_ID, $AWS_SECRET_ACCESS_KEY, $S3syncOptions['--ssl'], $AWS_S3_HOST)
|
58
|
+
$S3syncGenerator = S3::QueryStringAuthGenerator.new($AWS_ACCESS_KEY_ID, $AWS_SECRET_ACCESS_KEY, $S3syncOptions['--ssl'], $AWS_S3_HOST, $AWS_S3_PORT, $AWS_S3_VIRTUAL_PATH)
|
57
59
|
$S3syncGenerator.calling_format = S3::CallingFormat::string_to_format($AWS_CALLING_FORMAT)
|
58
60
|
$S3syncGenerator.expires_in = $S3syncOptions['--expires-in']
|
59
61
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moserp-s3sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.6
|
4
|
+
version: 1.2.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ""
|
@@ -36,7 +36,7 @@ files:
|
|
36
36
|
- README
|
37
37
|
- README_s3cmd
|
38
38
|
has_rdoc: true
|
39
|
-
homepage: http://
|
39
|
+
homepage: http://github.com/moserp/s3sync
|
40
40
|
licenses: []
|
41
41
|
|
42
42
|
post_install_message:
|