simple-s3 0.0.8 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
data/bin/simple-s3 CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
2
  require File.dirname(__FILE__) + '/../lib/simple-s3'
3
- SimpleS3.upload!
3
+ SimpleS3.run!
@@ -9,12 +9,30 @@ class SimpleS3
9
9
  @config
10
10
  end
11
11
 
12
+ def self.default_exclude_files
13
+ ['simple-s3.yml', '.git', '.rvmrc', 'Gemfile', 'Gemfile.lock', '.gitignore', '.gitmodules']
14
+ end
15
+
16
+ def self.s3_access_key
17
+ self.config['s3_access_key']
18
+ end
19
+
20
+ def self.s3_secret_key
21
+ self.config['s3_secret_key']
22
+ end
23
+
24
+ def self.run!
25
+ self.upload!
26
+ self.invalidate!
27
+ end
28
+
12
29
  def self.upload!
13
30
  @config = config
14
31
  bucket = @config['bucket'].to_s
15
32
  raise 'Simple-S3: Bucket not defined' if bucket.length == 0
16
33
 
17
34
  exclude = @config['exclude_files'] || []
35
+ exclude |= self.default_exclude_files
18
36
  inc = @config['include_files'] || './**/*'
19
37
  metadata = @config['metadata'] || {}
20
38
  metadata[:access] ||= 'public-read'
@@ -32,8 +50,8 @@ class SimpleS3
32
50
  raise 'Simple-S3: No files found' if files.length == 0
33
51
 
34
52
  AWS::S3::Base.establish_connection!(
35
- :access_key_id => @config['access_key'],
36
- :secret_access_key => @config['secret_key']
53
+ :access_key_id => self.s3_access_key
54
+ :secret_access_key => self.s3_secret_key
37
55
  )
38
56
 
39
57
  files.each do |file|
@@ -50,4 +68,54 @@ class SimpleS3
50
68
  puts "Simple-S3: Upload Completed!"
51
69
  end
52
70
 
71
+ def invalidate!
72
+ @config = config
73
+ distribution = @config['cloudfront_distribution_id']
74
+ return if distribution.nil?
75
+
76
+ aws_account = self.s3_access_key
77
+ aws_secret = self.s3_secret_key
78
+
79
+ path = ['/','/*','/**/*']
80
+
81
+ date = Time.now.strftime("%a, %d %b %Y %H:%M:%S %Z")
82
+ digest = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), aws_secret, date)).strip
83
+ uri = URI.parse("https://cloudfront.amazonaws.com/2012-07-01/distribution/#{distribution}/invalidation")
84
+
85
+ path_xml = ''
86
+ path.each do |p|
87
+ path_xml += '<Path>'+p+'</Path>'
88
+ end
89
+
90
+ req = Net::HTTP::Post.new(uri.path)
91
+ req.initialize_http_header({
92
+ 'x-amz-date' => date,
93
+ 'Content-Type' => 'text/xml',
94
+ 'Authorization' => "AWS %s:%s" % [aws_account, digest]
95
+ })
96
+
97
+ xml = '<InvalidationBatch xmlns="http://cloudfront.amazonaws.com/doc/2012-07-01/">' +
98
+ ' <Paths>' +
99
+ ' <Quantity>' + path.length.to_s + '</Quantity>' +
100
+ ' <Items>' +
101
+ path_xml +
102
+ ' </Items>' +
103
+ ' </Paths>' +
104
+ ' <CallerReference>SOMETHING_SPECIAL_' + Time.now.utc.to_i.to_s + '</CallerReference>' +
105
+ '</InvalidationBatch>'
106
+ req.body = xml
107
+
108
+ http = Net::HTTP.new(uri.host, uri.port)
109
+ http.use_ssl = true
110
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
111
+ res = http.request(req)
112
+
113
+ # it was successful if response code was a 201
114
+ if res.code == '201'
115
+ puts 'Simple-S3: Invalidation Successful'
116
+ else
117
+ raise res.body.to_s
118
+ end
119
+ end
120
+
53
121
  end
@@ -1,3 +1,3 @@
1
1
  class SimpleS3
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.10"
3
3
  end
data/simple-s3.gem CHANGED
Binary file
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 8
9
- version: 0.0.8
8
+ - 10
9
+ version: 0.0.10
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matias Niemela