policia 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in policia.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,18 @@
1
+ #coding: utf-8
2
+ require 'sinatra'
3
+ require 'policia'
4
+
5
+ get '/' do
6
+ document = { "expiration" => "2012-12-12T00:00:00Z",
7
+ "conditions" => [ {"bucket" => "YOUR-BUCKET-NAME"},
8
+ ["starts-with", "$key", ""],
9
+ {"acl" => "public-read"},
10
+ {"success_action_redirect" => "http://localhost:4567/process"},
11
+ ["starts-with", "$Content-Type", "image"], ] }
12
+ @policy_document = Policia.new("YOUR-S3-SECRET-KEY", document)
13
+ erb :index
14
+ end
15
+
16
+ get '/process' do
17
+ erb :process
18
+ end
@@ -0,0 +1,23 @@
1
+ <html>
2
+ <head>
3
+ <title>S3 POST Form</title>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
6
+ </head>
7
+ <body>
8
+ <form action="http://adotapart-eu.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
9
+ <input type="hidden" name="key" value="${filename}">
10
+ <input type="hidden" name="AWSAccessKeyId" value="AKIAJGANQFDFTVMK5STQ">
11
+ <input type="hidden" name="acl" value="public-read">
12
+ <input type="hidden" name="success_action_redirect" value="http://localhost:4567/process">
13
+ <input type="hidden" name="policy" value="<%= @policy_document.policy %>">
14
+ <input type="hidden" name="signature" value="<%= @policy_document.signature %>">
15
+ <input type="hidden" name="Content-Type" value="image/jpeg">
16
+ <!-- Include any additional input fields here -->
17
+
18
+ File to upload to S3:
19
+ <input name="file" type="file">
20
+ <input type="submit">
21
+ </form>
22
+ </body>
23
+ </html>
@@ -0,0 +1,2 @@
1
+ <% src = "http://#{params[:bucket]}.s3.amazonaws.com/#{params[:key]}" %>
2
+ <img src="<%= src %>" />
@@ -0,0 +1,3 @@
1
+ module Policia
2
+ VERSION = "0.0.1"
3
+ end
data/lib/policia.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'json'
2
+ require 'base64'
3
+ require 'openssl'
4
+ require 'digest/sha1'
5
+
6
+ class Policia
7
+ def initialize(secret, document)
8
+ @document = document.class == Hash ? document.to_json : document
9
+ @secret = secret
10
+ end
11
+
12
+ def policy
13
+ Base64.encode64(@document).gsub(/\n|\r/, '')
14
+ end
15
+
16
+ def signature
17
+ Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), @secret, policy)).gsub(/\n| |\r/, '')
18
+ end
19
+ end
data/policia.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "policia/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "policia"
7
+ s.version = Policia::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Antony Sastre"]
10
+ s.email = ["antony@adotapart.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Policia is a simple Amazon S3 Policy Document Signature generator.}
13
+ s.description = %q{Amazons uses a policy document protocol to allow things like regular forms and resful api to upload files to your buckets. The policy document can be a bit of a hassle to get encoded into a signature - this gem makes it easier. It gives you the choice of providing the document as a nice good'ol ruby Hash. Currently only supports ruby 1.9}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+ end
@@ -0,0 +1,32 @@
1
+ require File.expand_path('../lib/policia.rb', File.dirname(__FILE__))
2
+ require 'minitest/autorun'
3
+ require 'minitest/spec'
4
+ require 'json'
5
+
6
+ describe Policia do
7
+ before do
8
+ @secret = "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"
9
+ @document = { 'expiration' => "2007-12-01T12:00:00.000Z",
10
+ 'conditions' => [
11
+ { 'bucket' => "johnsmith" },
12
+ [ 'starts-with', "$key", "user/eric/" ],
13
+ { 'acl' => "public-read" },
14
+ { 'success_action_redirect' => "http://johnsmith.s3.amazonaws.com/successful_upload.html"},
15
+ [ 'starts-with', "$Content-Type", "image/" ],
16
+ { 'x-amz-meta-uuid' => "14365123651274" },
17
+ [ 'starts-with', "$x-amz-meta-tag", ""]
18
+ ] }.to_json
19
+ @policia = Policia.new(@secret, @document)
20
+ end
21
+
22
+ it "provides a Base64 encoded policy" do
23
+ @policia.policy.must_equal( Base64.encode64(@document).gsub(/\n|\r/, '') )
24
+ end
25
+
26
+ it "provides a Base64 encoded signature" do
27
+ hmac = OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), @secret, @policia.policy)
28
+ expected_signature = Base64.encode64(hmac).gsub(/\n| |\r/, '')
29
+
30
+ @policia.signature.must_equal( expected_signature )
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: policia
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Antony Sastre
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-05 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Amazons uses a policy document protocol to allow things like regular forms and resful api to upload files to your buckets. The policy document can be a bit of a hassle to get encoded into a signature - this gem makes it easier. It gives you the choice of providing the document as a nice good'ol ruby Hash. Currently only supports ruby 1.9
18
+ email:
19
+ - antony@adotapart.com
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - .gitignore
28
+ - Gemfile
29
+ - Rakefile
30
+ - example/policia_application.rb
31
+ - example/views/index.erb
32
+ - example/views/process.erb
33
+ - lib/policia.rb
34
+ - lib/policia/version.rb
35
+ - policia.gemspec
36
+ - test/policia_test.rb
37
+ has_rdoc: true
38
+ homepage: ""
39
+ licenses: []
40
+
41
+ post_install_message:
42
+ rdoc_options: []
43
+
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ requirements: []
59
+
60
+ rubyforge_project:
61
+ rubygems_version: 1.6.2
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: Policia is a simple Amazon S3 Policy Document Signature generator.
65
+ test_files:
66
+ - test/policia_test.rb