trusty-cms 7.0.39 → 7.0.40

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +6 -7
  4. data/README.md +25 -0
  5. data/app/assets/builds/trusty_cms/ckeditor5.css +6966 -0
  6. data/app/assets/builds/trusty_cms/ckeditor5.css.map +7 -0
  7. data/app/assets/builds/trusty_cms/ckeditor5.js +105634 -0
  8. data/app/assets/builds/trusty_cms/ckeditor5.js.map +7 -0
  9. data/app/assets/config/trusty-cms-manifest.js +2 -0
  10. data/app/assets/javascripts/admin.js +0 -1
  11. data/app/assets/stylesheets/admin/_ckeditor.css +109 -0
  12. data/app/assets/stylesheets/admin/main.scss +1 -0
  13. data/app/assets/stylesheets/admin/partials/_content.scss +2 -0
  14. data/app/controllers/admin/assets_controller.rb +78 -23
  15. data/app/controllers/admin/pages_controller.rb +31 -0
  16. data/app/javascript/trusty_cms/ckeditor5.js +391 -0
  17. data/app/models/asset.rb +3 -1
  18. data/app/views/admin/page_parts/_page_part.html.haml +13 -9
  19. data/app/views/layouts/application.html.haml +6 -0
  20. data/config/routes.rb +3 -0
  21. data/lib/generators/trusty_cms/templates/application.rb.erb +0 -1
  22. data/lib/trusty_cms/engine.rb +5 -8
  23. data/lib/trusty_cms/version.rb +1 -1
  24. data/lib/trusty_cms.rb +2 -0
  25. data/package.json +20 -2
  26. data/spec/controllers/assets_controller.rb +66 -0
  27. data/spec/dummy/config/application.rb +1 -1
  28. data/spec/dummy/config/storage.yml +7 -0
  29. data/spec/dummy/db/schema.rb +24 -20
  30. data/spec/fixtures/files/sample.ics +10 -0
  31. data/spec/fixtures/files/sample.txt +1 -0
  32. data/spec/models/asset_spec.rb +39 -0
  33. data/trusty_cms.gemspec +1 -1
  34. data/yarn.lock +2213 -493
  35. metadata +21 -15
  36. data/app/assets/javascripts/ckeditor/config.js +0 -22
  37. data/app/assets/javascripts/ckeditor/contents.css +0 -0
@@ -10,8 +10,8 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
14
- create_table "active_storage_attachments", charset: "utf8", force: :cascade do |t|
13
+ ActiveRecord::Schema[7.2].define(version: 2025_06_06_144908) do
14
+ create_table "active_storage_attachments", charset: "utf8mb3", force: :cascade do |t|
15
15
  t.string "name", null: false
16
16
  t.string "record_type", null: false
17
17
  t.bigint "record_id", null: false
@@ -21,7 +21,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
21
21
  t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
22
22
  end
23
23
 
24
- create_table "active_storage_blobs", charset: "utf8", force: :cascade do |t|
24
+ create_table "active_storage_blobs", charset: "utf8mb3", force: :cascade do |t|
25
25
  t.string "key", null: false
26
26
  t.string "filename", null: false
27
27
  t.string "content_type"
@@ -33,13 +33,13 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
33
33
  t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
34
34
  end
35
35
 
36
- create_table "active_storage_variant_records", charset: "utf8", force: :cascade do |t|
36
+ create_table "active_storage_variant_records", charset: "utf8mb3", force: :cascade do |t|
37
37
  t.bigint "blob_id", null: false
38
38
  t.string "variation_digest", null: false
39
39
  t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true
40
40
  end
41
41
 
42
- create_table "admins", charset: "utf8", force: :cascade do |t|
42
+ create_table "admins", charset: "utf8mb3", force: :cascade do |t|
43
43
  t.string "email", default: "", null: false
44
44
  t.string "encrypted_password", default: "", null: false
45
45
  t.string "reset_password_token"
@@ -67,16 +67,19 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
67
67
  t.text "notes"
68
68
  t.datetime "created_at", precision: nil, null: false
69
69
  t.datetime "updated_at", precision: nil, null: false
70
+ t.string "otp_secret"
71
+ t.integer "consumed_timestep"
72
+ t.boolean "otp_required_for_login"
70
73
  end
71
74
 
72
- create_table "admins_sites", charset: "utf8", force: :cascade do |t|
75
+ create_table "admins_sites", charset: "utf8mb3", force: :cascade do |t|
73
76
  t.integer "admin_id", null: false
74
77
  t.integer "site_id", null: false
75
78
  t.index ["admin_id"], name: "index_admins_sites_on_admin_id"
76
79
  t.index ["site_id"], name: "index_admins_sites_on_site_id"
77
80
  end
78
81
 
79
- create_table "assets", charset: "utf8", force: :cascade do |t|
82
+ create_table "assets", charset: "utf8mb3", force: :cascade do |t|
80
83
  t.string "caption"
81
84
  t.string "title"
82
85
  t.string "asset_file_name"
@@ -92,19 +95,19 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
92
95
  t.string "original_extension"
93
96
  end
94
97
 
95
- create_table "config", charset: "utf8", force: :cascade do |t|
98
+ create_table "config", charset: "utf8mb3", force: :cascade do |t|
96
99
  t.string "key", limit: 40, default: "", null: false
97
100
  t.string "value", default: ""
98
101
  t.index ["key"], name: "key", unique: true
99
102
  end
100
103
 
101
- create_table "extension_meta", charset: "utf8", force: :cascade do |t|
104
+ create_table "extension_meta", charset: "utf8mb3", force: :cascade do |t|
102
105
  t.string "name"
103
106
  t.integer "schema_version", default: 0
104
107
  t.boolean "enabled", default: true
105
108
  end
106
109
 
107
- create_table "layouts", charset: "utf8", force: :cascade do |t|
110
+ create_table "layouts", charset: "utf8mb3", force: :cascade do |t|
108
111
  t.string "name", limit: 100
109
112
  t.text "content"
110
113
  t.datetime "created_at", precision: nil
@@ -116,20 +119,20 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
116
119
  t.integer "site_id"
117
120
  end
118
121
 
119
- create_table "page_attachments", charset: "utf8", force: :cascade do |t|
122
+ create_table "page_attachments", charset: "utf8mb3", force: :cascade do |t|
120
123
  t.integer "asset_id"
121
124
  t.integer "page_id"
122
125
  t.integer "position"
123
126
  end
124
127
 
125
- create_table "page_fields", charset: "utf8", force: :cascade do |t|
128
+ create_table "page_fields", charset: "utf8mb3", force: :cascade do |t|
126
129
  t.integer "page_id"
127
130
  t.string "name"
128
131
  t.string "content"
129
132
  t.index ["page_id", "name", "content"], name: "index_page_fields_on_page_id_and_name_and_content"
130
133
  end
131
134
 
132
- create_table "page_parts", charset: "utf8", force: :cascade do |t|
135
+ create_table "page_parts", charset: "utf8mb3", force: :cascade do |t|
133
136
  t.string "name", limit: 100
134
137
  t.string "filter_id", limit: 25
135
138
  t.text "content", size: :medium
@@ -137,7 +140,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
137
140
  t.index ["page_id", "name"], name: "parts_by_page"
138
141
  end
139
142
 
140
- create_table "pages", charset: "utf8", force: :cascade do |t|
143
+ create_table "pages", charset: "utf8mb3", force: :cascade do |t|
141
144
  t.string "title"
142
145
  t.string "slug", limit: 100
143
146
  t.string "breadcrumb", limit: 160
@@ -162,7 +165,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
162
165
  t.index ["virtual", "status_id"], name: "pages_published"
163
166
  end
164
167
 
165
- create_table "sessions", charset: "utf8", force: :cascade do |t|
168
+ create_table "sessions", charset: "utf8mb3", force: :cascade do |t|
166
169
  t.string "session_id"
167
170
  t.text "data"
168
171
  t.datetime "updated_at", precision: nil
@@ -170,7 +173,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
170
173
  t.index ["updated_at"], name: "index_sessions_on_updated_at"
171
174
  end
172
175
 
173
- create_table "sites", charset: "utf8", force: :cascade do |t|
176
+ create_table "sites", charset: "utf8mb3", force: :cascade do |t|
174
177
  t.string "name"
175
178
  t.string "domain"
176
179
  t.integer "homepage_id"
@@ -184,7 +187,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
184
187
  t.string "base_domain"
185
188
  end
186
189
 
187
- create_table "snippets", charset: "utf8", force: :cascade do |t|
190
+ create_table "snippets", charset: "utf8mb3", force: :cascade do |t|
188
191
  t.string "name", limit: 100, default: "", null: false
189
192
  t.string "filter_id", limit: 25
190
193
  t.text "content"
@@ -197,7 +200,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
197
200
  t.index ["name", "site_id"], name: "name_site_id", unique: true
198
201
  end
199
202
 
200
- create_table "users", charset: "utf8", force: :cascade do |t|
203
+ create_table "users", charset: "utf8mb3", force: :cascade do |t|
201
204
  t.string "name", limit: 100
202
205
  t.string "email"
203
206
  t.string "login", limit: 40, default: "", null: false
@@ -218,7 +221,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
218
221
  t.datetime "password_reset_sent_at", precision: nil
219
222
  end
220
223
 
221
- create_table "version_associations", charset: "utf8", force: :cascade do |t|
224
+ create_table "version_associations", charset: "utf8mb3", force: :cascade do |t|
222
225
  t.integer "version_id"
223
226
  t.string "foreign_key_name", null: false
224
227
  t.integer "foreign_key_id"
@@ -227,7 +230,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
227
230
  t.index ["version_id"], name: "index_version_associations_on_version_id"
228
231
  end
229
232
 
230
- create_table "versions", charset: "utf8mb4", force: :cascade do |t|
233
+ create_table "versions", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
231
234
  t.string "whodunnit"
232
235
  t.datetime "created_at"
233
236
  t.bigint "item_id", null: false
@@ -235,6 +238,7 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
235
238
  t.string "event", null: false
236
239
  t.text "object", size: :long
237
240
  t.integer "transaction_id"
241
+ t.text "object_changes", size: :long
238
242
  t.index ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
239
243
  t.index ["transaction_id"], name: "index_versions_on_transaction_id"
240
244
  end
@@ -0,0 +1,10 @@
1
+ BEGIN:VCALENDAR
2
+ VERSION:2.0
3
+ PRODID:-//TrustyCMS Test//EN
4
+ BEGIN:VEVENT
5
+ UID:test-event@example.com
6
+ DTSTAMP:20250101T000000Z
7
+ DTSTART:20250101T010000Z
8
+ SUMMARY:Test Event
9
+ END:VEVENT
10
+ END:VCALENDAR
@@ -0,0 +1 @@
1
+ This is a plain text file used for testing unsupported content types.
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ require 'rack/test'
3
+
4
+ RSpec.describe Asset, type: :model do
5
+ let(:fixtures_path) { TrustyCms::Engine.root.join('spec', 'fixtures', 'files') }
6
+
7
+ def upload_fixture(filename, content_type)
8
+ Rack::Test::UploadedFile.new(fixtures_path.join(filename), content_type)
9
+ end
10
+
11
+ describe 'validations' do
12
+ it 'is valid when the content type is approved' do
13
+ asset = described_class.new(asset: upload_fixture('sample.ics', 'text/calendar'))
14
+
15
+ expect(asset).to be_valid
16
+ end
17
+
18
+ it 'is invalid when the content type is not approved' do
19
+ asset = described_class.new(asset: upload_fixture('sample.txt', 'text/plain'))
20
+
21
+ expect(asset).not_to be_valid
22
+ expect(asset.errors[:asset]).to include(a_string_matching(/file format/i))
23
+ end
24
+
25
+ it 'is invalid when the file exceeds the maximum size' do
26
+ Tempfile.open(['large', '.png']) do |tempfile|
27
+ tempfile.binmode
28
+ tempfile.write('0' * (10.megabytes + 1))
29
+ tempfile.rewind
30
+
31
+ uploaded = Rack::Test::UploadedFile.new(tempfile.path, 'image/png')
32
+ asset = described_class.new(asset: uploaded)
33
+
34
+ expect(asset).not_to be_valid
35
+ expect(asset.errors[:asset]).to include(a_string_matching(/10 MB/))
36
+ end
37
+ end
38
+ end
39
+ end
data/trusty_cms.gemspec CHANGED
@@ -30,7 +30,7 @@ a general purpose content management system--not merely a blogging engine.'
30
30
  s.add_dependency 'acts_as_tree', '~> 2.9.1'
31
31
  s.add_dependency 'base64'
32
32
  s.add_dependency 'bigdecimal'
33
- s.add_dependency 'ckeditor', '>= 4.2.2', '< 4.4.0'
33
+ s.add_dependency 'csso-rails', '~> 0.1'
34
34
  s.add_dependency 'delocalize', '>= 0.2', '< 2.0'
35
35
  s.add_dependency 'devise'
36
36
  s.add_dependency 'devise-two-factor'