alchemy_cms 6.0.11 → 6.0.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/brakeman-analysis.yml +26 -26
- data/CHANGELOG.md +13 -0
- data/alchemy_cms.gemspec +0 -1
- data/app/models/alchemy/attachment/url.rb +1 -0
- data/app/models/alchemy/picture_thumb/create.rb +15 -3
- data/lib/alchemy/install/tasks.rb +8 -4
- data/lib/alchemy/modules.rb +2 -2
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +1 -1
- data/lib/generators/alchemy/install/install_generator.rb +27 -3
- data/lib/generators/alchemy/module/templates/ability.rb.tt +2 -3
- data/lib/generators/alchemy/module/templates/module_config.rb.tt +16 -14
- data/lib/non_stupid_digest_assets.rb +55 -0
- data/package.json +1 -1
- metadata +4 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d401fd3a44495f1a096fc4115eec8d32be8862305cc95c35715548147ec7688a
|
4
|
+
data.tar.gz: 8f9a98f79c64acafaad1eaef6358a1ca468ed00cb18e5dff15627f47db028bde
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7982344f2c8376017f665f70985da9f1263551a9424481646081a7cfa65a6cd65f7e87ee615cbd64ace815b9e6f4450c45625fea87330db7690233cb2b042d63
|
7
|
+
data.tar.gz: 4b148956360c26b3acb5495a341de5a14f809272fb709c856ff878882367af59b7b7a1133731c02e68fad2cf5404e00e5db8730b1b1b91d6a7a2e8511b5872b0
|
@@ -5,42 +5,42 @@ name: Brakeman Scan
|
|
5
5
|
|
6
6
|
on:
|
7
7
|
push:
|
8
|
-
branches: [
|
8
|
+
branches: [main]
|
9
9
|
pull_request:
|
10
10
|
# The branches below must be a subset of the branches above
|
11
|
-
branches: [
|
11
|
+
branches: [main]
|
12
12
|
schedule:
|
13
|
-
- cron:
|
13
|
+
- cron: "40 4 * * 2"
|
14
14
|
|
15
15
|
jobs:
|
16
16
|
brakeman-scan:
|
17
17
|
name: Brakeman Scan
|
18
18
|
runs-on: ubuntu-latest
|
19
19
|
steps:
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
# Checkout the repository to the GitHub Actions runner
|
21
|
+
- name: Checkout
|
22
|
+
uses: actions/checkout@v2
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
# Customize the ruby version depending on your needs
|
25
|
+
- name: Set up Ruby
|
26
|
+
uses: ruby/setup-ruby@v1
|
27
|
+
with:
|
28
|
+
ruby-version: "3.0"
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
- name: Setup Brakeman
|
31
|
+
env:
|
32
|
+
BRAKEMAN_VERSION: "5.4" # SARIF support is provided in Brakeman version 4.10+
|
33
|
+
run: |
|
34
|
+
gem install brakeman --version $BRAKEMAN_VERSION
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
# Execute Brakeman CLI and generate a SARIF output with the security issues identified during the analysis
|
37
|
+
- name: Scan
|
38
|
+
continue-on-error: true
|
39
|
+
run: |
|
40
|
+
brakeman -f sarif -o output.sarif.json .
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
# Upload the SARIF file generated in the previous step
|
43
|
+
- name: Upload SARIF
|
44
|
+
uses: github/codeql-action/upload-sarif@v1
|
45
|
+
with:
|
46
|
+
sarif_file: output.sarif.json
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## 6.0.13 (2023-03-29)
|
4
|
+
|
5
|
+
- Fix installer: Add seeds file if not exists [#2446](https://github.com/AlchemyCMS/alchemy_cms/pull/2446) ([tvdeyen](https://github.com/tvdeyen))
|
6
|
+
- Integrate non_stupid_digest_assets gem [#2430](https://github.com/AlchemyCMS/alchemy_cms/pull/2430) ([afdev82](https://github.com/afdev82))
|
7
|
+
|
8
|
+
## 6.0.12 (2022-11-19)
|
9
|
+
|
10
|
+
- More installer options [#2385](https://github.com/AlchemyCMS/alchemy_cms/pull/2385) ([tvdeyen](https://github.com/tvdeyen))
|
11
|
+
- Fix custom module installer [#2384](https://github.com/AlchemyCMS/alchemy_cms/pull/2384) ([tvdeyen](https://github.com/tvdeyen))
|
12
|
+
- Always provide format with attachment URLs [#2383](https://github.com/AlchemyCMS/alchemy_cms/pull/2383) ([mamhoff](https://github.com/mamhoff))
|
13
|
+
|
1
14
|
## 6.0.11 (2022-09-22)
|
2
15
|
|
3
16
|
- Do not touch pages when toggling element [#2377](https://github.com/AlchemyCMS/alchemy_cms/pull/2377) ([tvdeyen](https://github.com/tvdeyen))
|
data/alchemy_cms.gemspec
CHANGED
@@ -45,7 +45,6 @@ Gem::Specification.new do |gem|
|
|
45
45
|
gem.add_runtime_dependency "jquery-ui-rails", ["~> 6.0"]
|
46
46
|
gem.add_runtime_dependency "kaminari", ["~> 1.1"]
|
47
47
|
gem.add_runtime_dependency "originator", ["~> 3.1"]
|
48
|
-
gem.add_runtime_dependency "non-stupid-digest-assets", ["~> 1.0.8"]
|
49
48
|
gem.add_runtime_dependency "ransack", [">= 1.8", "< 4.0"]
|
50
49
|
gem.add_runtime_dependency "request_store", ["~> 1.2"]
|
51
50
|
gem.add_runtime_dependency "responders", [">= 2.0", "< 4.0"]
|
@@ -15,13 +15,25 @@ module Alchemy
|
|
15
15
|
# @return [Alchemy::PictureThumb] The persisted thumbnail record
|
16
16
|
#
|
17
17
|
def call(variant, signature, uid)
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
return if !variant.picture.valid?
|
19
|
+
|
20
|
+
# create the thumb before storing
|
21
|
+
# to prevent db race conditions
|
22
|
+
thumb = Alchemy::PictureThumb.create!(
|
21
23
|
picture: variant.picture,
|
22
24
|
signature: signature,
|
23
25
|
uid: uid,
|
24
26
|
)
|
27
|
+
begin
|
28
|
+
# process the image
|
29
|
+
image = variant.image
|
30
|
+
# store the processed image
|
31
|
+
image.to_file(server_path(uid)).close
|
32
|
+
rescue RuntimeError => e
|
33
|
+
Rails.logger.warn(e)
|
34
|
+
# destroy the thumb if processing or storing fails
|
35
|
+
thumb&.destroy
|
36
|
+
end
|
25
37
|
end
|
26
38
|
|
27
39
|
private
|
@@ -18,12 +18,10 @@ module Alchemy
|
|
18
18
|
inject_into_file "./config/routes.rb", "\n mount Alchemy::Engine => '#{mountpoint}'\n", { after: sentinel, verbose: true }
|
19
19
|
end
|
20
20
|
|
21
|
-
def set_primary_language(auto_accept
|
22
|
-
code = "en"
|
21
|
+
def set_primary_language(code: "en", name: "English", auto_accept: false)
|
23
22
|
unless auto_accept
|
24
23
|
code = ask("- What is the language code of your site's primary language?", default: code)
|
25
24
|
end
|
26
|
-
name = "English"
|
27
25
|
unless auto_accept
|
28
26
|
name = ask("- What is the name of your site's primary language?", default: name)
|
29
27
|
end
|
@@ -33,7 +31,13 @@ module Alchemy
|
|
33
31
|
end
|
34
32
|
|
35
33
|
def inject_seeder
|
36
|
-
|
34
|
+
seed_file = Rails.root.join("db", "seeds.rb")
|
35
|
+
args = [seed_file, "Alchemy::Seeder.seed!\n"]
|
36
|
+
if File.exist?(seed_file)
|
37
|
+
append_file(*args)
|
38
|
+
else
|
39
|
+
add_file(*args)
|
40
|
+
end
|
37
41
|
end
|
38
42
|
end
|
39
43
|
end
|
data/lib/alchemy/modules.rb
CHANGED
@@ -32,13 +32,13 @@ module Alchemy
|
|
32
32
|
defined_controllers = [definition_hash["navigation"]["controller"]]
|
33
33
|
|
34
34
|
if definition_hash["navigation"]["sub_navigation"].is_a?(Array)
|
35
|
-
defined_controllers.concat(definition_hash["navigation"]["sub_navigation"].map{ |x| x["controller"] })
|
35
|
+
defined_controllers.concat(definition_hash["navigation"]["sub_navigation"].map { |x| x["controller"] })
|
36
36
|
end
|
37
37
|
|
38
38
|
validate_controllers_existence(defined_controllers)
|
39
39
|
end
|
40
40
|
|
41
|
-
@@alchemy_modules
|
41
|
+
@@alchemy_modules |= [definition_hash]
|
42
42
|
end
|
43
43
|
|
44
44
|
private
|
data/lib/alchemy/version.rb
CHANGED
data/lib/alchemy_cms.rb
CHANGED
@@ -26,7 +26,22 @@ module Alchemy
|
|
26
26
|
class_option :skip_db_create,
|
27
27
|
type: :boolean,
|
28
28
|
default: false,
|
29
|
-
desc: "Skip
|
29
|
+
desc: "Skip creating the database during install."
|
30
|
+
|
31
|
+
class_option :skip_mount,
|
32
|
+
type: :boolean,
|
33
|
+
default: false,
|
34
|
+
desc: "Skip mounting into routes.rb during install."
|
35
|
+
|
36
|
+
class_option :default_language_code,
|
37
|
+
type: :string,
|
38
|
+
default: "en",
|
39
|
+
desc: "The default language code of your site."
|
40
|
+
|
41
|
+
class_option :default_language_name,
|
42
|
+
type: :string,
|
43
|
+
default: "English",
|
44
|
+
desc: "The default language name of your site."
|
30
45
|
|
31
46
|
source_root File.expand_path("files", __dir__)
|
32
47
|
|
@@ -34,6 +49,11 @@ module Alchemy
|
|
34
49
|
header
|
35
50
|
say "Welcome to AlchemyCMS!"
|
36
51
|
say "Let's begin with some questions.\n\n"
|
52
|
+
end
|
53
|
+
|
54
|
+
def mount
|
55
|
+
return if options[:skip_mount]
|
56
|
+
|
37
57
|
install_tasks.inject_routes(options[:auto_accept])
|
38
58
|
end
|
39
59
|
|
@@ -108,13 +128,17 @@ module Alchemy
|
|
108
128
|
|
109
129
|
def set_primary_language
|
110
130
|
header
|
111
|
-
install_tasks.set_primary_language(
|
131
|
+
install_tasks.set_primary_language(
|
132
|
+
code: options[:default_language_code],
|
133
|
+
name: options[:default_language_name],
|
134
|
+
auto_accept: options[:auto_accept]
|
135
|
+
)
|
112
136
|
end
|
113
137
|
|
114
138
|
def setup_database
|
115
139
|
rake("db:create", abort_on_failure: true) unless options[:skip_db_create]
|
116
140
|
# We can't invoke this rake task, because Rails will use wrong engine names otherwise
|
117
|
-
rake("
|
141
|
+
rake("alchemy:install:migrations", abort_on_failure: true)
|
118
142
|
rake("db:migrate", abort_on_failure: true)
|
119
143
|
install_tasks.inject_seeder
|
120
144
|
rake("db:seed", abort_on_failure: true)
|
@@ -1,17 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
controller: '/admin/<%= @module_name %>',
|
7
|
-
action: 'index',
|
8
|
-
image: 'alchemy/<%= @module_name %>_module.png',
|
9
|
-
sub_navigation: [{
|
1
|
+
Rails.application.config.to_prepare do
|
2
|
+
Alchemy::Modules.register_module({
|
3
|
+
name: '<%= @module_name %>',
|
4
|
+
order: 1,
|
5
|
+
navigation: {
|
10
6
|
name: 'modules.<%= @module_name %>',
|
11
7
|
controller: '/admin/<%= @module_name %>',
|
12
|
-
action: 'index'
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
action: 'index',
|
9
|
+
image: 'alchemy/<%= @module_name %>_module.png',
|
10
|
+
sub_navigation: [{
|
11
|
+
name: 'modules.<%= @module_name %>',
|
12
|
+
controller: '/admin/<%= @module_name %>',
|
13
|
+
action: 'index'
|
14
|
+
}]
|
15
|
+
}
|
16
|
+
})
|
16
17
|
|
17
|
-
Alchemy.register_ability(<%= @
|
18
|
+
Alchemy.register_ability(<%= @controller_class %>Ability)
|
19
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sprockets/manifest"
|
4
|
+
require "active_support/core_ext/module/attribute_accessors"
|
5
|
+
|
6
|
+
module NonStupidDigestAssets
|
7
|
+
mattr_accessor :whitelist
|
8
|
+
@@whitelist = []
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def assets(assets)
|
12
|
+
return assets if whitelist.empty?
|
13
|
+
|
14
|
+
whitelisted_assets(assets)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def whitelisted_assets(assets)
|
20
|
+
assets.select do |logical_path, _digest_path|
|
21
|
+
whitelist.any? do |item|
|
22
|
+
item =~ logical_path
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module CompileWithNonDigest
|
29
|
+
def compile(*args)
|
30
|
+
paths = super
|
31
|
+
NonStupidDigestAssets.assets(assets).each do |(logical_path, digest_path)|
|
32
|
+
full_digest_path = File.join dir, digest_path
|
33
|
+
full_digest_gz_path = "#{full_digest_path}.gz"
|
34
|
+
full_non_digest_path = File.join dir, logical_path
|
35
|
+
full_non_digest_gz_path = "#{full_non_digest_path}.gz"
|
36
|
+
|
37
|
+
if File.exist? full_digest_path
|
38
|
+
logger.debug "Writing #{full_non_digest_path}"
|
39
|
+
FileUtils.copy_file full_digest_path, full_non_digest_path, :preserve_attributes
|
40
|
+
else
|
41
|
+
logger.debug "Could not find: #{full_digest_path}"
|
42
|
+
end
|
43
|
+
if File.exist? full_digest_gz_path
|
44
|
+
logger.debug "Writing #{full_non_digest_gz_path}"
|
45
|
+
FileUtils.copy_file full_digest_gz_path, full_non_digest_gz_path, :preserve_attributes
|
46
|
+
else
|
47
|
+
logger.debug "Could not find: #{full_digest_gz_path}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
paths
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
Sprockets::Manifest.prepend NonStupidDigestAssets::CompileWithNonDigest
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alchemy_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
4
|
+
version: 6.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas von Deyen
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2023-03-29 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: actionmailer
|
@@ -387,20 +387,6 @@ dependencies:
|
|
387
387
|
- - "~>"
|
388
388
|
- !ruby/object:Gem::Version
|
389
389
|
version: '3.1'
|
390
|
-
- !ruby/object:Gem::Dependency
|
391
|
-
name: non-stupid-digest-assets
|
392
|
-
requirement: !ruby/object:Gem::Requirement
|
393
|
-
requirements:
|
394
|
-
- - "~>"
|
395
|
-
- !ruby/object:Gem::Version
|
396
|
-
version: 1.0.8
|
397
|
-
type: :runtime
|
398
|
-
prerelease: false
|
399
|
-
version_requirements: !ruby/object:Gem::Requirement
|
400
|
-
requirements:
|
401
|
-
- - "~>"
|
402
|
-
- !ruby/object:Gem::Version
|
403
|
-
version: 1.0.8
|
404
390
|
- !ruby/object:Gem::Dependency
|
405
391
|
name: ransack
|
406
392
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1419,6 +1405,7 @@ files:
|
|
1419
1405
|
- lib/generators/alchemy/site_layouts/templates/layout.html.haml
|
1420
1406
|
- lib/generators/alchemy/site_layouts/templates/layout.html.slim
|
1421
1407
|
- lib/generators/alchemy/views/views_generator.rb
|
1408
|
+
- lib/non_stupid_digest_assets.rb
|
1422
1409
|
- lib/tasks/alchemy/db.rake
|
1423
1410
|
- lib/tasks/alchemy/install.rake
|
1424
1411
|
- lib/tasks/alchemy/thumbnails.rake
|
@@ -1524,7 +1511,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1524
1511
|
version: '0'
|
1525
1512
|
requirements:
|
1526
1513
|
- ImageMagick (libmagick), v6.6 or greater.
|
1527
|
-
rubygems_version: 3.
|
1514
|
+
rubygems_version: 3.4.6
|
1528
1515
|
signing_key:
|
1529
1516
|
specification_version: 4
|
1530
1517
|
summary: A powerful, userfriendly and flexible CMS for Rails
|