cartoonist 0.0.19.3 → 0.0.20

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 38127839d9063d465a90b25cd7de8b455c482870
4
- data.tar.gz: 991ab59f3bd9f8d06bc14197e977bb5b3608ed0a
3
+ metadata.gz: 7fdb2663d615944f6df0658c68f6afc244720e71
4
+ data.tar.gz: b058bf06907f2d1627952a859a68296f38cb6170
5
5
  SHA512:
6
- metadata.gz: 406996381365ae93a3355611735880a87ecaa344552456f4899e36298351b065d7ace6821106f25e2d45305c78c0360e9a17dc35c377234875d6d4b2b35c9c42
7
- data.tar.gz: 07311127ded11081f7433d655857ae0620cf8dc0594bb0597448cc604b42229e5671b32b484405fd90ea8426bb5bad7795aee8be68147b9737cae14658a2ed89
6
+ metadata.gz: 418c3d4b10260d1d6d3581f93b9102058e09fcc3a5c04aba619c064256372d7b05dc98ba074378d088573c887999adbbf4b9ccc9432490aa1c5b7d47287bd3af
7
+ data.tar.gz: 4f860bb05491304f94ff880d849fc98d6d818dc8cf3a2ccad4003b2ac4b91ae2225520f4be1e493de7e702839b4f3ea17db277547822b5fab081fdeb612ea4ca
@@ -42,6 +42,7 @@ class Admin::SettingsController < AdminCartoonistController
42
42
  Setting[:secret_token] = SecureRandom.hex 30
43
43
  Setting[:secret_key_base] = SecureRandom.hex 64
44
44
  Setting[:devise_pepper] = SecureRandom.hex 64
45
+ Setting[:devise_secret_key] = SecureRandom.hex 64
45
46
  # This MUST go AFTER we set the pepper
46
47
  User.create! :email => params[:admin_email], :password => params[:admin_password], :password_confirmation => params[:admin_confirm_password], :name => params[:admin_name]
47
48
  redirect_to "/admin"
@@ -6,24 +6,6 @@ class AdminController < AdminCartoonistController
6
6
  redirect_to "/admin/main"
7
7
  end
8
8
 
9
- def backup
10
- respond_to do |format|
11
- format.html { redirect_to "/admin/main" }
12
-
13
- format.tgz do
14
- backup = Backup.new :tgz
15
- headers["Content-Disposition"] = backup.content_disposition
16
- self.response_body = backup.response_body
17
- end
18
-
19
- format.zip do
20
- backup = Backup.new :zip
21
- headers["Content-Disposition"] = backup.content_disposition
22
- self.response_body = backup.response_body
23
- end
24
- end
25
- end
26
-
27
9
  def reload
28
10
  if Rails.env.production?
29
11
  %x[git pull]
@@ -0,0 +1,17 @@
1
+ class BackupController < AdminCartoonistController
2
+ include ActionController::Live
3
+
4
+ def backup
5
+ respond_to do |format|
6
+ format.html { redirect_to "/admin/main" }
7
+
8
+ format.tgz do
9
+ Backup.new(:tgz).stream_to response
10
+ end
11
+
12
+ format.zip do
13
+ Backup.new(:zip).stream_to response
14
+ end
15
+ end
16
+ end
17
+ end
data/app/models/backup.rb CHANGED
@@ -15,43 +15,39 @@ class Backup
15
15
  "#{prefix}cartoonist-backup-#{Time.now.strftime("%Y-%m-%d_%H%M%S")}.#{@extension}"
16
16
  end
17
17
 
18
- def response_body
19
- Enumerator.new do |out|
20
- send @extension, out
21
- end
18
+ def stream_to(response)
19
+ response.headers["Content-Disposition"] = content_disposition
20
+ send @extension, response.stream
21
+ ensure
22
+ response.stream.close
22
23
  end
23
24
 
24
- def zip(out)
25
- buffer = Zip::ZipOutputStream.write_buffer do |zos|
25
+ # TODO: Maybe investigate zipline gem a little more and figure out
26
+ # how it streams zips, and use that here, so this can be properly
27
+ # streamed.
28
+ def zip(stream)
29
+ buffer = Zip::OutputStream.write_buffer do |zos|
26
30
  Backup.each do |entry|
27
31
  zos.put_next_entry entry.path
28
32
  zos.write entry.content
29
33
  end
30
34
  end
31
35
 
32
- out << buffer.string
36
+ stream.write buffer.string
33
37
  end
34
38
 
35
- def tgz(out)
36
- gzip = Zlib::GzipWriter.new Backup::ResponseOutWriter.new(out)
39
+ def tgz(stream)
40
+ gzip = Zlib::GzipWriter.new stream
37
41
 
38
- begin
39
- Archive::Tar::Minitar::Writer.open gzip do |tar|
40
- Backup.each do |entry|
41
- tar.add_file_simple entry.path, :mode => 0644, :size => entry.content.length do |output|
42
- output.write entry.content
43
- end
42
+ Archive::Tar::Minitar::Writer.open gzip do |tar|
43
+ Backup.each do |entry|
44
+ tar.add_file_simple entry.path, :mode => 0644, :size => entry.content.length do |output|
45
+ output.write entry.content
44
46
  end
45
47
  end
46
- ensure
47
- gzip.close
48
- end
49
- end
50
-
51
- class ResponseOutWriter < Struct.new(:stream)
52
- def write(content)
53
- stream << content
54
48
  end
49
+ ensure
50
+ gzip.close
55
51
  end
56
52
 
57
53
  class << self
data/cartoonist.gemspec CHANGED
@@ -1,7 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cartoonist"
3
- raise "Cannot find version file!" unless File.exists?(File.join(File.dirname(__FILE__), "../CARTOONIST_VERSION"))
4
- s.version = File.read File.join(File.dirname(__FILE__), "../CARTOONIST_VERSION")
3
+ s.version = "0.0.20"
5
4
  s.date = Time.now.strftime "%Y-%m-%d"
6
5
  s.summary = "Cartoonist Core"
7
6
  s.description = "This provides the main functionality and plugin api for Cartoonist."
@@ -12,11 +11,11 @@ Gem::Specification.new do |s|
12
11
  s.require_paths = ["lib"]
13
12
  s.homepage = "http://reasonnumber.com/cartoonist"
14
13
  s.add_dependency "actionpack-page_caching", "~> 1.0"
15
- s.add_dependency "devise", "~> 3.0"
14
+ s.add_dependency "devise", "~> 3.2"
16
15
  s.add_dependency "jquery-rails", "~> 3.0"
17
16
  s.add_dependency "omniauth-openid", "~> 1.0"
18
17
  s.add_dependency "railties", "~> 4.0"
19
18
  s.add_dependency "redcarpet", "~> 3.0"
20
- s.add_dependency "rubyzip", "~> 0.9"
19
+ s.add_dependency "rubyzip", "~> 1.0"
21
20
  s.add_dependency "minitar", "~> 0.5"
22
21
  end
@@ -41,7 +41,7 @@ en:
41
41
  general:
42
42
  actions:
43
43
  backup_tgz: Download Backup (tarball)
44
- backup_zip: Download Backup (zip)
44
+ backup_zip: "Download Backup (zip) (WARNING: Not Streamed)"
45
45
  reload: Update and Reload
46
46
  layout:
47
47
  actions: Actions
@@ -122,6 +122,7 @@ en:
122
122
  secret_key_base: "Secret Key Base: "
123
123
  secret_token: "Secret Token: "
124
124
  devise_pepper: "Devise Pepper: "
125
+ devise_secret_key: "Devise Secret Key: "
125
126
  tabs:
126
127
  advanced: Advanced
127
128
  general: General
@@ -0,0 +1,30 @@
1
+ class EnsureSecretsAreSet < ActiveRecord::Migration
2
+ def up
3
+ # We don't need to do any of this if they haven't gone through
4
+ # initial setup yet.
5
+ return if User.count == 0
6
+
7
+ if Setting[:secret_token] == Setting::Meta[:secret_token].default
8
+ puts "Setting secret_token"
9
+ Setting[:secret_token] = SecureRandom.hex 30
10
+ end
11
+
12
+ if Setting[:secret_key_base] == Setting::Meta[:secret_key_base].default
13
+ puts "Setting secret_key_base"
14
+ Setting[:secret_key_base] = SecureRandom.hex 64
15
+ end
16
+
17
+ if Setting[:devise_pepper] == Setting::Meta[:devise_pepper].default
18
+ puts "Setting devise_pepper"
19
+ Setting[:devise_pepper] = SecureRandom.hex 64
20
+ end
21
+
22
+ if Setting[:devise_secret_key] == Setting::Meta[:devise_secret_key].default
23
+ puts "Setting devise_secret_key"
24
+ Setting[:devise_secret_key] = SecureRandom.hex 64
25
+ end
26
+ end
27
+
28
+ def down
29
+ end
30
+ end
@@ -89,6 +89,7 @@ module Cartoonist
89
89
 
90
90
  # Setup a pepper to generate the encrypted password.
91
91
  devise_config.pepper = "temporary... this is initialized later, in the to_prepare block"
92
+ devise_config.secret_key = "temporary... this is initialized later, in the to_prepare block"
92
93
 
93
94
  # ==> Configuration for :confirmable
94
95
  # A period that the user is allowed to access the website even without
@@ -271,6 +272,12 @@ module Cartoonist
271
272
  end
272
273
  end
273
274
 
275
+ devise_secret_key_changed = lambda do
276
+ Devise.setup do |devise_config|
277
+ devise_config.secret_key = Setting[:devise_secret_key]
278
+ end
279
+ end
280
+
274
281
  Setting.define :domain, :order => 1
275
282
  Setting.define :site_name, :order => 2
276
283
  Setting.define :site_heading, :order => 3
@@ -300,11 +307,13 @@ module Cartoonist
300
307
  Setting.define :secret_token, :default => "ThisTokenMustBeRegenerated....", :onchange => secret_token_changed
301
308
  Setting.define :secret_key_base, :default => "ThisTokenMustBeRegenerated....", :onchange => secret_key_base_changed
302
309
  Setting.define :devise_pepper, :default => "ThisTokenMustBeRegenerated....", :onchange => devise_pepper_changed
310
+ Setting.define :devise_secret_key, :default => "ThisTokenMustBeRegenerated....", :onchange => devise_secret_key_changed
303
311
  end
304
312
 
305
313
  secret_token_changed.call
306
314
  secret_key_base_changed.call
307
315
  devise_pepper_changed.call
316
+ devise_secret_key_changed.call
308
317
  end
309
318
 
310
319
  Mime::Type.register "image/x-icon", :ico
@@ -337,11 +346,11 @@ module Cartoonist
337
346
  get "favicon" => "site#favicon", :defaults => { :format => "ico" }
338
347
  get "sitemap" => "site#sitemap", :defaults => { :format => "xml" }
339
348
  get "robots" => "site#robots", :defaults => { :format => "text" }
349
+ get "admin/backup" => "backup#backup"
340
350
 
341
351
  resource :admin, :controller => :admin, :only => [:show] do
342
352
  collection do
343
353
  get "cron"
344
- get "backup"
345
354
  get "main"
346
355
  get "reload"
347
356
  end
@@ -2,7 +2,7 @@ module Cartoonist
2
2
  class Version
3
3
  class << self
4
4
  def to_s
5
- "0.0.19.3"
5
+ "0.0.20"
6
6
  end
7
7
  end
8
8
  end
data/lib/cartoonist.rb CHANGED
@@ -5,7 +5,7 @@ require "jquery-rails"
5
5
  require "redcarpet"
6
6
  require "zlib"
7
7
  require "archive/tar/minitar"
8
- require "zip/zip"
8
+ require "zip"
9
9
 
10
10
  module Cartoonist
11
11
  module Admin
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cartoonist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.19.3
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Virata-Stone
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-21 00:00:00.000000000 Z
11
+ date: 2013-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack-page_caching
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '3.0'
33
+ version: '3.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: '3.0'
40
+ version: '3.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: jquery-rails
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - ~>
102
102
  - !ruby/object:Gem::Version
103
- version: '0.9'
103
+ version: '1.0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- version: '0.9'
110
+ version: '1.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: minitar
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -139,6 +139,7 @@ files:
139
139
  - app/controllers/admin/static_cache_controller.rb
140
140
  - app/controllers/admin_cartoonist_controller.rb
141
141
  - app/controllers/admin_controller.rb
142
+ - app/controllers/backup_controller.rb
142
143
  - app/controllers/cartoonist_controller.rb
143
144
  - app/controllers/site_controller.rb
144
145
  - app/helpers/admin/cache_helper.rb
@@ -191,9 +192,9 @@ files:
191
192
  - db/migrate/20120524032959_add_extension_to_database_files.rb
192
193
  - db/migrate/20121205091909_add_omniautable_to_users.rb
193
194
  - db/migrate/20130724085513_create_secret_key_base.rb
195
+ - db/migrate/20131117042451_ensure_secrets_are_set.rb
194
196
  - lib/cartoonist.rb
195
197
  - lib/cartoonist/engine.rb
196
- - lib/cartoonist/nginxtra.rb
197
198
  - lib/cartoonist/version.rb
198
199
  - public/errors/404.html
199
200
  - public/errors/422.html
@@ -1,103 +0,0 @@
1
- Nginxtra::Config::Extension.partial "nginx.conf", "cartoonist_rails" do |args, block|
2
- rails_server = args[:server] || :passenger
3
- ssl_details = args[:ssl]
4
- ruby_version = args[:ruby]
5
-
6
- if ssl_details
7
- default_port = 443
8
- else
9
- default_port = 80
10
- end
11
-
12
- if rails_server == :passenger && !@passenger_requirements_done
13
- @config.require_passenger!
14
- passenger_root!
15
- passenger_ruby! unless ruby_version
16
- @passenger_requirements_done = true
17
- end
18
-
19
- server do
20
- listen(args[:port] || default_port)
21
- server_name(args[:server_name] || "localhost")
22
- root File.join(File.absolute_path(File.expand_path(args[:root] || ".")), "public")
23
- gzip_static "on"
24
- passenger_ruby ruby_version if ruby_version
25
- passenger_on! if rails_server == :passenger
26
- rails_env(args[:environment] || "production")
27
-
28
- if ssl_details
29
- ssl "on"
30
- ssl_certificate ssl_details[:ssl_cert]
31
- ssl_certificate_key ssl_details[:ssl_key]
32
- @config.compile_option "--with-http_ssl_module"
33
- end
34
-
35
- block.call
36
- end
37
- end
38
-
39
- Nginxtra::Config::Extension.partial "nginx.conf", "cartoonist" do |args, block|
40
- if !@passenger_requirements_done
41
- @config.require_passenger!
42
- passenger_root!
43
- passenger_ruby!
44
- @passenger_requirements_done = true
45
- end
46
-
47
- cartoonist_type = args[:type] || "www"
48
- server_name = args[:server_name]
49
- root_path = args[:root]
50
- ssl_details = args[:ssl]
51
- ssl_details = { :ssl => ssl_details } if ssl_details
52
- short_expiration = args[:short_expiration] || "2h"
53
- long_expiration = args[:long_expiration] || "7d"
54
- ruby_version = args[:ruby]
55
-
56
- [{}, ssl_details].compact.each do |additional_options|
57
- options = { :server => :custom, :server_name => server_name, :root => root_path, :ruby => ruby_version }.merge additional_options
58
-
59
- cartoonist_rails options do
60
- location "~*", "^/_long_expiration_/#{cartoonist_type}(/.*?)(?:\\.html)?$" do
61
- expires long_expiration
62
- add_header "Cache-Control", "public"
63
- try_files "$1", "$1.html", "/cache/static$1", "@passenger"
64
- end
65
-
66
- ["/cache/static$uri", "$uri", "$uri.html"].each do |condition|
67
- _if "-f #{root_path}/public#{condition}" do
68
- rewrite "^(.*)$", "/_long_expiration_/#{cartoonist_type}$1", "last"
69
- end
70
- end
71
-
72
- ["html", "json", "rss"].each do |extension|
73
- location "~*", "^/_short_#{extension}_expiration_/#{cartoonist_type}(/.*?)(?:\\.#{extension})?$" do
74
- expires short_expiration
75
- add_header "Cache-Control", "public"
76
- try_files "/cache$1.#{cartoonist_type}.tmp.#{extension}", "@passenger"
77
- end
78
-
79
- location "~*", "^/_long_#{extension}_expiration_/#{cartoonist_type}(/.*?)(?:\\.#{extension})?$" do
80
- expires long_expiration
81
- add_header "Cache-Control", "public"
82
- try_files "/cache$1.#{cartoonist_type}.#{extension}", "@passenger"
83
- end
84
-
85
- _if "-f #{root_path}/public/cache$uri.#{cartoonist_type}.tmp.#{extension}" do
86
- rewrite "^(.*)$", "/_short_#{extension}_expiration_/#{cartoonist_type}$1", "last"
87
- end
88
-
89
- _if "-f #{root_path}/public/cache$uri.#{cartoonist_type}.#{extension}" do
90
- rewrite "^(.*)$", "/_long_#{extension}_expiration_/#{cartoonist_type}$1", "last"
91
- end
92
- end
93
-
94
- location "/" do
95
- try_files "/_jump_to_passenger_", "@passenger"
96
- end
97
-
98
- location "@passenger" do
99
- passenger_on!
100
- end
101
- end
102
- end
103
- end