s3_signed_url 0.1.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 +9 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.md +61 -0
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/exe/s3_signed_url +26 -0
- data/lib/s3_signed_url/cli.rb +63 -0
- data/lib/s3_signed_url/version.rb +3 -0
- data/lib/s3_signed_url.rb +6 -0
- data/s3_signed_url.gemspec +24 -0
- metadata +99 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e89d7163d358dadabdb1ec032ca482bfe42e4d17
|
4
|
+
data.tar.gz: 859da70891af6af7131d6cd942639f90de7dbb11
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3ba85983786c2efd8fdb676910a4460cac86e76c11770b1dee400d924df706ad5307daaa60ac007aa35a09822b7c8876a5886ea09fc6ac3a1cd5f81656de0de1
|
7
|
+
data.tar.gz: 4c9935f0136c2991ae60b54a208392d79457e67566cc7e1780715f347b0905556580582f3b65ec69a86048dda917284066549fc8ffd0cae8a92119319b460c69
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# s3_signed_url
|
2
|
+
|
3
|
+
s3_signed_url generates signed URLs to get S3 objects.
|
4
|
+
|
5
|
+
Our backend is described in [official documetns](http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html).
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 's3_signed_url'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install s3_signed_url
|
22
|
+
|
23
|
+
Ands 3_signed_url requires `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, and `AWS_REGION`.
|
24
|
+
So you should get them from AWS IAM, and set in `~/.aws/credentials` or environment variables.
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
|
29
|
+
Generate URL for s3://examplebucket/test.txt:
|
30
|
+
|
31
|
+
$ s3_signed_url s3://examplebucket/test.txt
|
32
|
+
https://s3.amazonaws.com/examplebucket/test.txt?...
|
33
|
+
|
34
|
+
The generated uses HTTPS by default. To use HTTP, append `--no-secure` option:
|
35
|
+
|
36
|
+
$ s3_signed_url s3://examplebucket/test.txt --no-secure
|
37
|
+
http://s3.amazonaws.com/examplebucket/test.txt?...
|
38
|
+
|
39
|
+
And generated URLs expires in 15 minutes by default. If you want to set it manually, append `--expire` option with the number of seconds:
|
40
|
+
|
41
|
+
$ s3_signed_url s3://examplebucket/test.txt --expire 1800
|
42
|
+
https://s3.amazonaws.com/examplebucket/test.txt?...
|
43
|
+
|
44
|
+
If you want to upload a new file and generated a signed url for it, append `--upload` option with the path to file:
|
45
|
+
|
46
|
+
$ s3_signed_url s3://examplebucket/test.txt --upload /path/to/test.txt
|
47
|
+
https://s3.amazonaws.com/examplebucket/test.txt?...
|
48
|
+
|
49
|
+
## Development
|
50
|
+
|
51
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
52
|
+
|
53
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
54
|
+
|
55
|
+
## Contributing
|
56
|
+
|
57
|
+
1. Fork it ( https://github.com/a2ikm/s3_signed_url/fork )
|
58
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
59
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
60
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
61
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "s3_signed_url"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/exe/s3_signed_url
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "optparse"
|
4
|
+
require "s3_signed_url"
|
5
|
+
|
6
|
+
options = {}
|
7
|
+
|
8
|
+
OptionParser.new do |op|
|
9
|
+
op.version = S3SignedUrl::VERSION
|
10
|
+
op.banner = "Usage: s3_signed_url URL [--upload FILE]"
|
11
|
+
|
12
|
+
op.on "-e", "--expire SECONDS", "The number of seconds before the presigned URL expires. Defaults: 900 (15 min)" do |v|
|
13
|
+
options[:expire] = v
|
14
|
+
end
|
15
|
+
|
16
|
+
op.on "-u", "--upload FILE", "Upload the file for the URL" do |v|
|
17
|
+
options[:upload] = v
|
18
|
+
end
|
19
|
+
|
20
|
+
op.on "-s", "--[no-]secure", "Use HTTPS or not. Default: true" do |v|
|
21
|
+
options[:secure] = v
|
22
|
+
end
|
23
|
+
end.parse!(ARGV)
|
24
|
+
|
25
|
+
url = ARGV[0]
|
26
|
+
S3SignedUrl::Cli.new(url, options).run
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "uri"
|
2
|
+
require "aws-sdk"
|
3
|
+
|
4
|
+
module S3SignedUrl
|
5
|
+
class Cli
|
6
|
+
attr_reader :s3_uri, :options
|
7
|
+
|
8
|
+
def initialize(s3_url, options = {})
|
9
|
+
@s3_uri = URI(s3_url)
|
10
|
+
@options = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
upload
|
15
|
+
presigned_url = generate_presigned_url
|
16
|
+
|
17
|
+
puts presigned_url
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def upload
|
23
|
+
return unless options.key?(:upload)
|
24
|
+
|
25
|
+
path = options[:upload]
|
26
|
+
object_body = File.read(File.expand_path(path))
|
27
|
+
|
28
|
+
client.put_object(
|
29
|
+
bucket: bucket_name,
|
30
|
+
body: object_body,
|
31
|
+
key: object_key
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def generate_presigned_url
|
36
|
+
opts = {
|
37
|
+
bucket: bucket_name,
|
38
|
+
key: object_key,
|
39
|
+
secure: options[:secure]
|
40
|
+
}
|
41
|
+
|
42
|
+
opts[:expires_in] = options[:expire].to_i if options.key?(:expire)
|
43
|
+
|
44
|
+
signer.presigned_url(:get_object, opts)
|
45
|
+
end
|
46
|
+
|
47
|
+
def signer
|
48
|
+
@signer ||= Aws::S3::Presigner.new(client: client)
|
49
|
+
end
|
50
|
+
|
51
|
+
def client
|
52
|
+
@client ||= Aws::S3::Client.new
|
53
|
+
end
|
54
|
+
|
55
|
+
def bucket_name
|
56
|
+
@s3_uri.host
|
57
|
+
end
|
58
|
+
|
59
|
+
def object_key
|
60
|
+
@s3_uri.path.sub(%r{\A/}, "")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 's3_signed_url/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "s3_signed_url"
|
8
|
+
spec.version = S3SignedUrl::VERSION
|
9
|
+
spec.authors = ["Masato Ikeda"]
|
10
|
+
spec.email = ["masato.ikeda@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Generate signed URLs to get S3 objects.}
|
13
|
+
spec.description = %q{Generate signed URLs to get S3 objects.}
|
14
|
+
spec.homepage = "https://github.com/a2ikm/s3_signed_url"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "aws-sdk", "~> 2"
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
23
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: s3_signed_url
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Masato Ikeda
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.9'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
description: Generate signed URLs to get S3 objects.
|
56
|
+
email:
|
57
|
+
- masato.ikeda@gmail.com
|
58
|
+
executables:
|
59
|
+
- s3_signed_url
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- ".gitignore"
|
64
|
+
- ".travis.yml"
|
65
|
+
- Gemfile
|
66
|
+
- README.md
|
67
|
+
- Rakefile
|
68
|
+
- bin/console
|
69
|
+
- bin/setup
|
70
|
+
- exe/s3_signed_url
|
71
|
+
- lib/s3_signed_url.rb
|
72
|
+
- lib/s3_signed_url/cli.rb
|
73
|
+
- lib/s3_signed_url/version.rb
|
74
|
+
- s3_signed_url.gemspec
|
75
|
+
homepage: https://github.com/a2ikm/s3_signed_url
|
76
|
+
licenses: []
|
77
|
+
metadata: {}
|
78
|
+
post_install_message:
|
79
|
+
rdoc_options: []
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
requirements: []
|
93
|
+
rubyforge_project:
|
94
|
+
rubygems_version: 2.4.5
|
95
|
+
signing_key:
|
96
|
+
specification_version: 4
|
97
|
+
summary: Generate signed URLs to get S3 objects.
|
98
|
+
test_files: []
|
99
|
+
has_rdoc:
|