caboose-cms 0.4.49 → 0.4.50
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjVkMTFlNjhiNDVlM2QxY2U5NDI1OGFlMjdiOTZlNTBiNzkxOTEzMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YmI5ODI3ZGRjZDhjMGVhZjA5MjE3YzgyNzNkY2JjZTBlMjA0ZGZiOQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2I4Y2Q0NzcwZjQxOWNiYzU3MDVhNmViOGNiNDFkZTg4N2RiZDQ2ZGZkOTBl
|
10
|
+
ZGMzY2QwM2I5ZTNhY2RhN2ZiMzcwMmYxOTFjYjYxMTk4NTVkNGMxZDdmMzc2
|
11
|
+
ODVkNmVmZWE4YzgxMTA0ZmMyNTMyOTM0NThiMTUzZTU4MDJhNmQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODU1OGE5OGZjN2M5YjFiMDU5YjdhMTQwM2EwYzZkNmQ5NDgzZmRhNDY2MWQ4
|
14
|
+
MDg1NzBjOTg2MWRlNzEyNTJlOTczZDk3ZDgyZGY1YzZmZGYwYjYxYWE1MDhi
|
15
|
+
ZTUwZmNmYWVhMDA1NDFlM2U4ZmM3YTkwZGU1OGUzOGRjMjYxZmY=
|
@@ -0,0 +1 @@
|
|
1
|
+
(function(a,b){a.ajaxPrefilter(function(d,c,e){if(d.iframe){d.originalURL=d.url;return"iframe"}});a.ajaxTransport("iframe",function(l,j,k){var f=null,i=null,e="iframe-"+a.now(),d=a(l.files).filter(":file:enabled"),h=null,c=null;function g(){d.each(function(o,n){var m=a(n);m.data("clone").replaceWith(m)});f.remove();i.one("load",function(){i.remove()});i.attr("src","javascript:false;")}l.dataTypes.shift();l.data=j.data;if(d.length){f=a("<form enctype='multipart/form-data' method='post'></form>").hide().attr({action:l.originalURL,target:e});if(typeof(l.data)==="string"&&l.data.length>0){a.error("data must not be serialized")}a.each(l.data||{},function(m,n){if(a.isPlainObject(n)){m=n.name;n=n.value}a("<input type='hidden' />").attr({name:m,value:n}).appendTo(f)});a("<input type='hidden' value='IFrame' name='X-Requested-With' />").appendTo(f);if(l.dataTypes[0]&&l.accepts[l.dataTypes[0]]){c=l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", */*; q=0.01":"")}else{c=l.accepts["*"]}a("<input type='hidden' name='X-HTTP-Accept'>").attr("value",c).appendTo(f);h=d.after(function(m){var o=a(this),n=o.clone().prop("disabled",true);o.data("clone",n);return n}).next();d.appendTo(f);return{send:function(n,m){i=a("<iframe src='javascript:false;' name='"+e+"' id='"+e+"' style='display:none'></iframe>");i.one("load",function(){i.one("load",function(){var u=this.contentWindow?this.contentWindow.document:(this.contentDocument?this.contentDocument:this.document),q=u.documentElement?u.documentElement:u.body,p=q.getElementsByTagName("textarea")[0],r=p&&p.getAttribute("data-type")||null,o=p&&p.getAttribute("data-status")||200,t=p&&p.getAttribute("data-statusText")||"OK",s={html:q.innerHTML,text:r?p.value:q?(q.textContent||q.innerText):null};g();m(o,t,s,r?("Content-Type: "+r):null)});f[0].submit()});a("body").append(f,i)},abort:function(){if(i!==null){i.unbind("load").attr("src","javascript:false;");g()}}}}})})(jQuery);
|
@@ -19,8 +19,7 @@ module Caboose
|
|
19
19
|
# GET /admin/images/new
|
20
20
|
def admin_new
|
21
21
|
return unless user_is_allowed('images', 'add')
|
22
|
-
@
|
23
|
-
@parent = Page.find(@parent_id)
|
22
|
+
@media_category_id = params[:media_category_id]
|
24
23
|
render :layout => 'caboose/admin'
|
25
24
|
end
|
26
25
|
|
@@ -217,52 +216,98 @@ module Caboose
|
|
217
216
|
render json: resp
|
218
217
|
end
|
219
218
|
|
220
|
-
|
219
|
+
## PUT /admin/images/sign-s3
|
220
|
+
#def admin_sign_s3
|
221
|
+
# return unless user_is_allowed('images', 'add')
|
222
|
+
#
|
223
|
+
# config = YAML.load(File.read(Rails.root.join('config', 'aws.yml')))[Rails.env]
|
224
|
+
# access_key = config['access_key_id']
|
225
|
+
# secret_key = config['secret_access_key']
|
226
|
+
# bucket = config['bucket']
|
227
|
+
# s3 = AWS::S3.new(
|
228
|
+
# :access_key_id => access_key,
|
229
|
+
# :secret_access_key => secret_key
|
230
|
+
# )
|
231
|
+
#
|
232
|
+
# name = params[:name]
|
233
|
+
# mi = MediaImage.create(
|
234
|
+
# :media_category_id => params[:media_category_id],
|
235
|
+
# :name => params[:name]
|
236
|
+
# )
|
237
|
+
# pp = s3.buckets[bucket].presigned_post(
|
238
|
+
# :key => "media-images/test.jpg", #{mi.id}.#{File.extname(name)}",
|
239
|
+
# :expires => DateTime.now + 10.seconds,
|
240
|
+
# :success_action_status => 201,
|
241
|
+
# :acl => :public_read
|
242
|
+
# )
|
243
|
+
#
|
244
|
+
# render :json => {
|
245
|
+
# 'media_image' => mi,
|
246
|
+
# 'presigned_post' => {
|
247
|
+
# 'url' => pp.url.to_s,
|
248
|
+
# 'fields' => pp.fields
|
249
|
+
# }
|
250
|
+
# }
|
251
|
+
#
|
252
|
+
# #expires = (DateTime.now.utc + 10.seconds).to_i
|
253
|
+
# #amz_headers = "x-amz-acl:public-read"
|
254
|
+
# #put_request = "PUT\n\n#{mime_type}\n#{expires}\n#{amz_headers}\n/#{bucket}/media-images/#{object_name}"
|
255
|
+
# #signature = CGI.escape(Base64.encode64("#{OpenSSL::HMAC.digest('sha1', secret_key, put_request)}\n"))
|
256
|
+
# ##signature = base64.encodestring(hmac.new(secret_key, put_request, sha1).digest())
|
257
|
+
# ##signature = urllib.quote_plus(signature.strip())
|
258
|
+
# #render :json => {
|
259
|
+
# # 'signed_request' => "#{url}?AWSAccessKeyId=#{access_key}&Expires=#{expires}&Signature=#{signature}",
|
260
|
+
# # 'url' => url
|
261
|
+
# #}
|
262
|
+
#
|
263
|
+
# #pp = AWS::S3::PresignedPost.new(s3.buckets[bucket],
|
264
|
+
# # :key => "media-images/#{object_name}",
|
265
|
+
# # :expires => DateTime.now + 10.seconds,
|
266
|
+
# # :content_type => mime_type
|
267
|
+
# #)
|
268
|
+
# #url = "#{pp.url.to_s}#{pp.key}" #"https://#{pp.bucket.name}.s3.amazonaws.com/#{pp.key}"
|
269
|
+
# #render :json => {
|
270
|
+
# # 'signed_request' => "#{url}?AWSAccessKeyId=#{access_key}&Expires=#{pp.expires.to_time.to_i}&Signature=#{pp.fields[:signature]}",
|
271
|
+
# # 'url' => url
|
272
|
+
# #}
|
273
|
+
#
|
274
|
+
#end
|
275
|
+
|
221
276
|
def admin_sign_s3
|
222
|
-
|
223
|
-
|
224
|
-
config = YAML.load(File.read(Rails.root.join('config', 'aws.yml')))[Rails.env]
|
225
|
-
Caboose.log(config)
|
226
|
-
access_key = config['access_key_id']
|
227
|
-
secret_key = config['secret_access_key']
|
228
|
-
bucket = config['bucket']
|
229
|
-
s3 = AWS::S3.new(
|
230
|
-
:access_key_id => access_key,
|
231
|
-
:secret_access_key => secret_key
|
232
|
-
)
|
277
|
+
@document = Document.create(params[:doc])
|
233
278
|
|
234
|
-
|
235
|
-
|
279
|
+
policy = {"expiration" => 10.seconds.from_now.utc.xmlschema,
|
280
|
+
"conditions" => [
|
281
|
+
{"bucket" => 'cabooseit'},
|
282
|
+
{"acl" => "public-read"},
|
283
|
+
{"success_action_status" => "200"}
|
284
|
+
]
|
285
|
+
}
|
286
|
+
policy = Base64.encode64(policy.to_json).gsub(/\n/,'')
|
236
287
|
|
237
|
-
#expires = (DateTime.now.utc + 10.seconds).to_i
|
238
|
-
#amz_headers = "x-amz-acl:public-read"
|
239
|
-
#put_request = "PUT\n\n#{mime_type}\n#{expires}\n#{amz_headers}\n/#{bucket}/media-images/#{object_name}"
|
240
|
-
#signature = CGI.escape(Base64.encode64("#{OpenSSL::HMAC.digest('sha1', secret_key, put_request)}\n"))
|
241
|
-
##signature = base64.encodestring(hmac.new(secret_key, put_request, sha1).digest())
|
242
|
-
##signature = urllib.quote_plus(signature.strip())
|
243
|
-
#render :json => {
|
244
|
-
# 'signed_request' => "#{url}?AWSAccessKeyId=#{access_key}&Expires=#{expires}&Signature=#{signature}",
|
245
|
-
# 'url' => url
|
246
|
-
#}
|
247
|
-
|
248
|
-
pp = AWS::S3::PresignedPost.new(s3.buckets[bucket],
|
249
|
-
:key => "media-images/#{object_name}",
|
250
|
-
:expires => DateTime.now + 10.seconds,
|
251
|
-
:content_type => mime_type
|
252
|
-
)
|
253
|
-
url = "#{pp.url.to_s}#{pp.key}" #"https://#{pp.bucket.name}.s3.amazonaws.com/#{pp.key}"
|
254
288
|
render :json => {
|
255
|
-
|
256
|
-
|
289
|
+
:policy => policy,
|
290
|
+
:signature => s3_upload_signature,
|
291
|
+
:key => @document.s3_key,
|
292
|
+
:success_action_redirect => document_upload_success_document_url(@document)
|
257
293
|
}
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
294
|
+
end
|
295
|
+
|
296
|
+
def s3_upload_policy_document
|
297
|
+
ret = {"expiration" => 10.seconds.from_now.utc.xmlschema,
|
298
|
+
"conditions" => [
|
299
|
+
{"bucket" => 'cabooseit'},
|
300
|
+
{"acl" => "public-read"},
|
301
|
+
{"success_action_status" => "200"}
|
302
|
+
]
|
303
|
+
}
|
304
|
+
return Base64.encode64(ret.to_json).gsub(/\n/,'')
|
305
|
+
end
|
306
|
+
|
307
|
+
# sign our request by Base64 encoding the policy document.
|
308
|
+
def s3_upload_signature
|
309
|
+
signature = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'),
|
310
|
+
YOUR_SECRET_KEY, s3_upload_policy_document)).gsub("\n","")
|
266
311
|
end
|
267
312
|
|
268
313
|
end
|
data/app/models/caboose/page.rb
CHANGED
@@ -73,7 +73,7 @@ class Caboose::Page < ActiveRecord::Base
|
|
73
73
|
uri.chop! if uri.end_with?('/')
|
74
74
|
uri[0] = '' if uri.starts_with?('/')
|
75
75
|
|
76
|
-
return self.index_page if uri.length == 0
|
76
|
+
return self.index_page(host_with_port) if uri.length == 0
|
77
77
|
|
78
78
|
page = false
|
79
79
|
parts = uri.split('/')
|
@@ -1,9 +1,10 @@
|
|
1
1
|
|
2
2
|
<h1>Upload Images</h1>
|
3
3
|
|
4
|
-
<
|
5
|
-
<
|
6
|
-
<div
|
4
|
+
<form action='https://cabooseit.s3.amazonaws.com' method='post' id='new_image_form' enctype='multipart/form-data'>
|
5
|
+
<input type="file" name="new_image" id="new_image" />
|
6
|
+
<div class='#progress'><div class='#bar'></div></div>
|
7
|
+
<form>
|
7
8
|
|
8
9
|
<% content_for :caboose_css do %>
|
9
10
|
<style type='text/css'>
|
@@ -14,49 +15,47 @@
|
|
14
15
|
|
15
16
|
<% content_for :caboose_js do %>
|
16
17
|
<%= javascript_include_tag 'jquery.ui.all' %>
|
18
|
+
<%= javascript_include_tag 'caboose/jquery.iframe-transport.js' %>
|
17
19
|
<%= javascript_include_tag 'caboose/jquery.fileupload.js' %>
|
18
20
|
<script type='text/javascript'>
|
19
21
|
|
20
|
-
$(function() {
|
21
|
-
$('
|
22
|
-
|
23
|
-
|
24
|
-
var form = $(fileInput.parents('form:first'));
|
25
|
-
var submitButton = form.find('input[type="submit"]');
|
26
|
-
var progressBar = $("<div class='bar'></div>");
|
27
|
-
var barContainer = $("<div class='progress'></div>").append(progressBar);
|
22
|
+
$(document).ready(function() {
|
23
|
+
$('#new_image').fileupload({
|
24
|
+
forceIframeTransport: true,
|
25
|
+
autoUpload: true,
|
28
26
|
|
29
|
-
fileInput
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
}
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
27
|
+
//fileInput: $('#new_image'),
|
28
|
+
//url: pp.url,
|
29
|
+
type: 'POST',
|
30
|
+
//formData: pp.fields,
|
31
|
+
//paramName: 'file', // S3 does not like nested name fields i.e. name="user[avatar_url]"
|
32
|
+
//dataType: 'XML', // S3 returns XML if success_action_status is set to 201
|
33
|
+
replaceFileInput: false,
|
34
|
+
|
35
|
+
add: function(e, data) {
|
36
|
+
$.ajax({
|
37
|
+
url: '/admin/images/sign-s3',
|
38
|
+
type: 'get',
|
39
|
+
data: {
|
40
|
+
name: document.getElementById('new_image').value,
|
41
|
+
media_category_id: <%= @media_category_id %>
|
42
|
+
},
|
43
|
+
async: false,
|
44
|
+
success: function(resp) {
|
45
|
+
pp = resp.presigned_post;
|
46
|
+
var form = $('#new_image_form');
|
47
|
+
for (var i in pp.fields)
|
48
|
+
form.append($('<input/>').attr('type', 'hidden').attr('name', i).val(pp.fields[i]));
|
49
|
+
//form.attr('action', pp.url);
|
50
|
+
}
|
51
|
+
});
|
52
|
+
data.submit();
|
53
|
+
},
|
54
|
+
progressall: function (e, data) { $('#bar').css('width', parseInt(data.loaded / data.total * 100, 10) + '%') },
|
55
|
+
start: function (e) { $('#bar').css('background', 'green').css('display', 'block').css('width', '0%').text("Loading..."); },
|
56
|
+
done: function(e, data) { $('#bar').text("Uploading done"); },
|
57
|
+
fail: function(e, data) { $('#bar').css("background", "red").text("Failed"); }
|
58
|
+
});
|
60
59
|
});
|
61
60
|
|
62
61
|
</script>
|
data/lib/caboose/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.50
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -196,6 +196,7 @@ files:
|
|
196
196
|
- app/assets/javascripts/caboose/application.js
|
197
197
|
- app/assets/javascripts/caboose/jquery.detect.js
|
198
198
|
- app/assets/javascripts/caboose/jquery.fileupload.js
|
199
|
+
- app/assets/javascripts/caboose/jquery.iframe-transport.js
|
199
200
|
- app/assets/javascripts/caboose/jquery.placeholder.js
|
200
201
|
- app/assets/javascripts/caboose/lodash.min.js
|
201
202
|
- app/assets/javascripts/caboose/main.js
|