redactor_s3 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +45 -0
- data/app/controllers/redactor_s3/files_controller.rb +4 -6
- data/app/views/redactor_s3/{files/_config.html.erb → _config.html.erb} +6 -7
- data/app/views/redactor_s3/files/index.jbuilder +2 -2
- data/lib/rails/generators/redactor_s3/install/install_generator.rb +15 -0
- data/lib/rails/generators/redactor_s3/install/templates/initializer.rb +11 -0
- data/lib/redactor_s3.rb +2 -1
- data/lib/redactor_s3/config.rb +46 -0
- data/lib/redactor_s3/redactor_s3.rb +18 -0
- data/lib/redactor_s3/version.rb +1 -1
- metadata +7 -10
- data/app/assets/javascripts/redactor_s3/application.js +0 -13
- data/app/assets/javascripts/redactor_s3/files.js +0 -2
- data/app/assets/stylesheets/redactor_s3/application.css +0 -13
- data/app/assets/stylesheets/redactor_s3/files.css +0 -4
- data/app/models/redactor_s3/settings.rb +0 -43
- data/app/views/layouts/redactor_s3/application.html.erb +0 -14
- data/config/initializers/redactor_s3.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b728ee99cfe4c22b0819ef40e7f262d6970c89a1
|
4
|
+
data.tar.gz: 325900ea4a9afbb746c86f08daa8fbb5e290d9fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d08e2fd3829fc465369d7f05abfb96a2fa493e726af738f0ad3db614ac78f8e1d221c51913c4371b4f75442e1c4ccfbe789460dad7d47e787268cbe2c3ef0718
|
7
|
+
data.tar.gz: 714c439f623ef954d0bc69f248d39659cdb1e292bbf713933fcf3c0c416bdd2721176b7cd8d8c2a7a7eb102dfab6762ef4fc32eec2920ef4e2443822a5bea169
|
data/README.rdoc
CHANGED
@@ -1,3 +1,48 @@
|
|
1
1
|
= RedactorS3
|
2
|
+
This gem provides easy integration between redactor.js and Amazon S3 for rails applications
|
2
3
|
|
4
|
+
== Getting started
|
5
|
+
1. Add the gem:
|
6
|
+
gem 'redactor_s3'
|
7
|
+
2. Mount it inside your routes:
|
8
|
+
mount RedactorS3::Engine => "/s3"
|
9
|
+
3. Run the installer:
|
10
|
+
rails generate redactor_s3:install
|
11
|
+
Dont forget to edit the config file
|
12
|
+
|
13
|
+
== Usage
|
14
|
+
To use it you need to render some hidden fields in the views where you will be using redactor
|
15
|
+
|
16
|
+
Example:
|
17
|
+
# edit.html.rb
|
18
|
+
...
|
19
|
+
...
|
20
|
+
<textarea class="redactor"></textarea>
|
21
|
+
<%= render 'redactor_s3/config' %>
|
22
|
+
|
23
|
+
You then need to configure your redactor instance in jquery:
|
24
|
+
# edit.js
|
25
|
+
...
|
26
|
+
...
|
27
|
+
$("textarea.redactor").redactor({
|
28
|
+
...
|
29
|
+
...
|
30
|
+
imageUpload: $("#aws_endpoint").val(),
|
31
|
+
uploadCrossDomain: true,
|
32
|
+
uploadFields: {
|
33
|
+
'key': '#aws_key',
|
34
|
+
'AWSAccessKeyId': '#aws_access_key',
|
35
|
+
'acl': '#aws_acl',
|
36
|
+
'success_action_redirect': '#aws_success_path',
|
37
|
+
'policy': '#aws_policy',
|
38
|
+
'signature': '#aws_signature',
|
39
|
+
'Content-Type': '#aws_content_type'
|
40
|
+
},
|
41
|
+
imageGetJson: $("#aws_files_path").val()
|
42
|
+
});
|
43
|
+
|
44
|
+
|
45
|
+
You should now be good to go
|
46
|
+
|
47
|
+
== License
|
3
48
|
This project rocks and uses MIT-LICENSE.
|
@@ -5,15 +5,13 @@ require_dependency "jbuilder"
|
|
5
5
|
module RedactorS3
|
6
6
|
class FilesController < ApplicationController
|
7
7
|
def success
|
8
|
-
|
9
|
-
render json: { filelink: "http://#{settings.s3_host}/#{params[:key]}" }
|
8
|
+
render json: { filelink: "#{RedactorS3.config.s3_host_url}/#{params[:key]}" }
|
10
9
|
end
|
11
10
|
|
12
11
|
def index
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@files = bucket.objects.with_prefix(@settings.prefix)
|
12
|
+
s3 = AWS::S3.new access_key_id: RedactorS3.config.access_key, secret_access_key: RedactorS3.config.secret_key, s3_endpoint: RedactorS3.config.endpoint
|
13
|
+
bucket = s3.buckets[RedactorS3.config.bucket]
|
14
|
+
@files = bucket.objects.with_prefix(RedactorS3.config.prefix)
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -1,10 +1,9 @@
|
|
1
|
-
|
2
|
-
<input type="hidden" id="
|
3
|
-
<input type="hidden" id="aws_access_key" name="aws_access_key" value="<%= settings.access_key %>">
|
1
|
+
<input type="hidden" id="aws_key" name="aws_key" value="<%= RedactorS3.config.prefix %>${filename}">
|
2
|
+
<input type="hidden" id="aws_access_key" name="aws_access_key" value="<%= RedactorS3.config.access_key %>">
|
4
3
|
<input type="hidden" id="aws_acl" name="aws_acl" value="public-read">
|
5
|
-
<input type="hidden" id="aws_success_path" name="aws_success_path" value="<%=
|
6
|
-
<input type="hidden" id="aws_policy" name="aws_policy" value="<%=
|
7
|
-
<input type="hidden" id="aws_signature" name="aws_signature" value="<%=
|
4
|
+
<input type="hidden" id="aws_success_path" name="aws_success_path" value="<%= RedactorS3.config.success_url %>">
|
5
|
+
<input type="hidden" id="aws_policy" name="aws_policy" value="<%= RedactorS3.config.policy %>">
|
6
|
+
<input type="hidden" id="aws_signature" name="aws_signature" value="<%= RedactorS3.config.signature %>">
|
8
7
|
<input type="hidden" id="aws_content_type" name="aws_content_type" value="">
|
9
|
-
<input type="hidden" id="aws_endpoint" name="aws_endpoint" value="<%=
|
8
|
+
<input type="hidden" id="aws_endpoint" name="aws_endpoint" value="<%= RedactorS3.config.bucket_url %>">
|
10
9
|
<input type="hidden" id="aws_files_path" name="aws_files_path" value="/s3/files">
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module RedactorS3
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
desc 'Creates an initializer at config/initializers/radactor_s3.rb'
|
5
|
+
|
6
|
+
def self.source_root
|
7
|
+
@source_root ||= File.expand_path("../templates", __FILE__)
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_initializer_file
|
11
|
+
template 'initializer.rb', File.join('config', 'initializers', 'redactor_s3.rb')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
RedactorS3.configure do |config|
|
2
|
+
config.application_host = 'my.domain.com'
|
3
|
+
config.bucket = 'mybucket'
|
4
|
+
config.access_key = 'AWS_ACCESS_KEY_ID'
|
5
|
+
config.secret_key = 'AWS_SECRET_ACCESS_KEY'
|
6
|
+
|
7
|
+
## Optinal
|
8
|
+
# config.region = 'eu-west-1'
|
9
|
+
# config.s3_host = 'mybucket.example.com'
|
10
|
+
# config.prefix = 'files/'
|
11
|
+
end
|
data/lib/redactor_s3.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
module RedactorS3
|
2
|
+
class Config
|
3
|
+
attr_accessor :application_host, :bucket, :access_key, :secret_key, :region, :prefix, :s3_alias
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
self.prefix = 'files/'
|
7
|
+
end
|
8
|
+
|
9
|
+
def success_url
|
10
|
+
"http://#{application_host}/s3/success"
|
11
|
+
end
|
12
|
+
|
13
|
+
def bucket_url
|
14
|
+
"http://#{self.bucket}.#{self.endpoint}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def s3_host_url
|
18
|
+
self.s3_alias ? "http://#{self.s3_alias}" : self.bucket_url
|
19
|
+
end
|
20
|
+
|
21
|
+
def endpoint
|
22
|
+
s3_prefix = 's3'
|
23
|
+
s3_prefix << "-#{self.region}" if region
|
24
|
+
"#{s3_prefix}.amazonaws.com"
|
25
|
+
end
|
26
|
+
|
27
|
+
def policy
|
28
|
+
policy_json="{'expiration': '2020-01-01T00:00:00Z',
|
29
|
+
'conditions': [
|
30
|
+
{'bucket': '#{self.bucket}'},
|
31
|
+
['starts-with', '$key', ''],
|
32
|
+
{'acl': 'public-read'},
|
33
|
+
{'success_action_redirect': '#{self.success_url}'},
|
34
|
+
['starts-with', '$Content-Type', ''],
|
35
|
+
['content-length-range', 0, 1048576]
|
36
|
+
]
|
37
|
+
}"
|
38
|
+
|
39
|
+
Base64.encode64(policy_json).gsub("\n","")
|
40
|
+
end
|
41
|
+
|
42
|
+
def signature
|
43
|
+
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), self.secret_key, policy)).gsub("\n","")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/redactor_s3/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redactor_s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aske Hansen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -87,21 +87,18 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
- app/assets/javascripts/redactor_s3/application.js
|
91
|
-
- app/assets/javascripts/redactor_s3/files.js
|
92
|
-
- app/assets/stylesheets/redactor_s3/application.css
|
93
|
-
- app/assets/stylesheets/redactor_s3/files.css
|
94
90
|
- app/controllers/redactor_s3/application_controller.rb
|
95
91
|
- app/controllers/redactor_s3/files_controller.rb
|
96
92
|
- app/helpers/redactor_s3/application_helper.rb
|
97
93
|
- app/helpers/redactor_s3/files_helper.rb
|
98
|
-
- app/
|
99
|
-
- app/views/layouts/redactor_s3/application.html.erb
|
100
|
-
- app/views/redactor_s3/files/_config.html.erb
|
94
|
+
- app/views/redactor_s3/_config.html.erb
|
101
95
|
- app/views/redactor_s3/files/index.jbuilder
|
102
|
-
- config/initializers/redactor_s3.rb
|
103
96
|
- config/routes.rb
|
97
|
+
- lib/rails/generators/redactor_s3/install/install_generator.rb
|
98
|
+
- lib/rails/generators/redactor_s3/install/templates/initializer.rb
|
99
|
+
- lib/redactor_s3/config.rb
|
104
100
|
- lib/redactor_s3/engine.rb
|
101
|
+
- lib/redactor_s3/redactor_s3.rb
|
105
102
|
- lib/redactor_s3/version.rb
|
106
103
|
- lib/redactor_s3.rb
|
107
104
|
- lib/tasks/redactor_s3_tasks.rake
|
@@ -1,13 +0,0 @@
|
|
1
|
-
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
-
// listed below.
|
3
|
-
//
|
4
|
-
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
-
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
-
//
|
7
|
-
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
-
// compiled file.
|
9
|
-
//
|
10
|
-
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
11
|
-
// GO AFTER THE REQUIRES BELOW.
|
12
|
-
//
|
13
|
-
//= require_tree .
|
@@ -1,13 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
-
* listed below.
|
4
|
-
*
|
5
|
-
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
-
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
-
*
|
8
|
-
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
-
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
-
*
|
11
|
-
*= require_self
|
12
|
-
*= require_tree .
|
13
|
-
*/
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module RedactorS3
|
2
|
-
class Settings
|
3
|
-
attr_accessor :application_host, :bucket, :access_key, :secret_key, :endpoint, :s3_host, :prefix
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
@application_host = RedactorS3.application_host
|
7
|
-
@bucket = RedactorS3.bucket
|
8
|
-
@access_key = RedactorS3.access_key
|
9
|
-
@secret_key = RedactorS3.secret_key
|
10
|
-
|
11
|
-
@endpoint = RedactorS3.endpoint || 's3.amazonaws.com'
|
12
|
-
@s3_host = RedactorS3.s3_host || "#{@bucket}.#{@endpoint}"
|
13
|
-
@prefix = RedactorS3.prefix || 'files/'
|
14
|
-
end
|
15
|
-
|
16
|
-
def bucket_url
|
17
|
-
"http://#{@bucket}.#{@endpoint}"
|
18
|
-
end
|
19
|
-
|
20
|
-
def success_url
|
21
|
-
"http://#{@application_host}/s3/success"
|
22
|
-
end
|
23
|
-
|
24
|
-
def policy
|
25
|
-
policy_json="{'expiration': '2020-01-01T00:00:00Z',
|
26
|
-
'conditions': [
|
27
|
-
{'bucket': '#{@bucket}'},
|
28
|
-
['starts-with', '$key', ''],
|
29
|
-
{'acl': 'public-read'},
|
30
|
-
{'success_action_redirect': '#{success_url}'},
|
31
|
-
['starts-with', '$Content-Type', ''],
|
32
|
-
['content-length-range', 0, 1048576]
|
33
|
-
]
|
34
|
-
}"
|
35
|
-
|
36
|
-
Base64.encode64(policy_json).gsub("\n","")
|
37
|
-
end
|
38
|
-
|
39
|
-
def signature
|
40
|
-
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), @secret_key, policy)).gsub("\n","")
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>RedactorS3</title>
|
5
|
-
<%= stylesheet_link_tag "redactor_s3/application", media: "all" %>
|
6
|
-
<%= javascript_include_tag "redactor_s3/application" %>
|
7
|
-
<%= csrf_meta_tags %>
|
8
|
-
</head>
|
9
|
-
<body>
|
10
|
-
|
11
|
-
<%= yield %>
|
12
|
-
|
13
|
-
</body>
|
14
|
-
</html>
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# # These are required options
|
2
|
-
# RedactorS3.application_host = 'www.example.com' # your domain
|
3
|
-
# RedactorS3.bucket = 'mybucket' # your s3 bucket name
|
4
|
-
# RedactorS3.access_key = 'AWS_ACCESS_KEY_ID' # your aws access key id
|
5
|
-
# RedactorS3.secret_key = 'AWS_SECRET_ACCESS_KEY' #your aws secret access key
|
6
|
-
|
7
|
-
|
8
|
-
# # These are optinal options
|
9
|
-
# RedactorS3.endpoint = 's3-eu-west-1.amazonaws.com' # use this for eu buckets
|
10
|
-
# RedactorS3.s3_host = 'mybucket.example.com' # use this if you have a alias for your s3 bucket
|
11
|
-
# RedactorS3.prefix = 'files' # all uploads goes the this folder
|