safer_rails_console 0.5.1 → 0.7.0
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 +4 -4
- data/.circleci/config.yml +18 -14
- data/.github/CODEOWNERS +1 -0
- data/.rubocop.yml +3 -5
- data/Appraisals +8 -12
- data/CHANGELOG.md +8 -4
- data/README.md +1 -1
- data/gemfiles/{5.0.gemfile → 7.0.gemfile} +1 -1
- data/gemfiles/{5.1.gemfile → 7.1.gemfile} +1 -1
- data/lib/safer_rails_console/colors.rb +2 -0
- data/lib/safer_rails_console/console.rb +7 -3
- data/lib/safer_rails_console/consoles/irb.rb +6 -12
- data/lib/safer_rails_console/patches/boot/sandbox_flag.rb +6 -51
- data/lib/safer_rails_console/patches/boot.rb +1 -1
- data/lib/safer_rails_console/patches/railtie/sandbox.rb +7 -8
- data/lib/safer_rails_console/patches/railtie.rb +1 -1
- data/lib/safer_rails_console/patches/sandbox/auto_rollback.rb +16 -18
- data/lib/safer_rails_console/patches/sandbox/transaction_read_only.rb +12 -16
- data/lib/safer_rails_console/patches/sandbox.rb +1 -1
- data/lib/safer_rails_console/rails_version.rb +4 -28
- data/lib/safer_rails_console/version.rb +1 -1
- data/lib/safer_rails_console.rb +8 -4
- data/safer_rails_console.gemspec +9 -5
- metadata +14 -13
- data/gemfiles/5.2.gemfile +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 840e4ef2b80ecf2857bea14be562cfe28c89f6e89ea3a21360178f60d847c866
|
|
4
|
+
data.tar.gz: 610e1c17331dc3f6ba9a0081121fdcb793d5c2ac2c5961024c529d29eb2bce06
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ba71d14210be305bd54e0152dc2c907ef33d06786479a26709094c6fd6f8f9d5eca3f3567b6c5bcbaf997c761a1e506c04d18b0e7eab3856e38084d30e8fa4b1
|
|
7
|
+
data.tar.gz: 30438483fb18cc19e230e11a7e84b6573dc149b369b103f50aa83eebe86eea75862f9a72529491b2d54b3683c1f7cf48401709d49f936ece8608c703d1e7dc53
|
data/.circleci/config.yml
CHANGED
|
@@ -2,14 +2,14 @@ version: 2.1
|
|
|
2
2
|
jobs:
|
|
3
3
|
lint:
|
|
4
4
|
docker:
|
|
5
|
-
- image:
|
|
5
|
+
- image: cimg/ruby:2.7.8
|
|
6
6
|
working_directory: ~/safer_rails_console
|
|
7
7
|
steps:
|
|
8
8
|
- checkout
|
|
9
9
|
- restore_cache:
|
|
10
10
|
keys:
|
|
11
|
-
- v2-gems-ruby-2.
|
|
12
|
-
- v2-gems-ruby-2.
|
|
11
|
+
- v2-gems-ruby-2.7.8-{{ checksum "safer_rails_console.gemspec" }}-{{ checksum "Gemfile" }}
|
|
12
|
+
- v2-gems-ruby-2.7.8-
|
|
13
13
|
- run:
|
|
14
14
|
name: Install Gems
|
|
15
15
|
command: |
|
|
@@ -18,7 +18,7 @@ jobs:
|
|
|
18
18
|
bundle clean
|
|
19
19
|
fi
|
|
20
20
|
- save_cache:
|
|
21
|
-
key: v2-gems-ruby-2.
|
|
21
|
+
key: v2-gems-ruby-2.7.8-{{ checksum "safer_rails_console.gemspec" }}-{{ checksum "Gemfile" }}
|
|
22
22
|
paths:
|
|
23
23
|
- "vendor/bundle"
|
|
24
24
|
- "gemfiles/vendor/bundle"
|
|
@@ -32,11 +32,11 @@ jobs:
|
|
|
32
32
|
gemfile:
|
|
33
33
|
type: string
|
|
34
34
|
docker:
|
|
35
|
-
- image:
|
|
35
|
+
- image: cimg/ruby:<< parameters.ruby_version >>
|
|
36
36
|
environment:
|
|
37
37
|
CIRCLE_TEST_REPORTS: "test-results"
|
|
38
38
|
BUNDLE_GEMFILE: "/home/circleci/safer_rails_console/<< parameters.gemfile >>"
|
|
39
|
-
- image:
|
|
39
|
+
- image: cimg/postgres:12.9
|
|
40
40
|
environment:
|
|
41
41
|
POSTGRES_USER: "circleci"
|
|
42
42
|
POSTGRES_DB: "safer_rails_console_test"
|
|
@@ -71,16 +71,20 @@ workflows:
|
|
|
71
71
|
jobs:
|
|
72
72
|
- lint
|
|
73
73
|
- test:
|
|
74
|
-
ruby_version: "2.5.8"
|
|
75
74
|
matrix:
|
|
76
75
|
parameters:
|
|
76
|
+
ruby_version:
|
|
77
|
+
- "2.7.8"
|
|
78
|
+
- "3.0.6"
|
|
79
|
+
- "3.1.4"
|
|
80
|
+
- "3.2.2"
|
|
77
81
|
gemfile:
|
|
78
|
-
- "gemfiles/5.0.gemfile"
|
|
79
|
-
- "gemfiles/5.1.gemfile"
|
|
80
|
-
- "gemfiles/5.2.gemfile"
|
|
81
82
|
- "gemfiles/6.0.gemfile"
|
|
82
83
|
- "gemfiles/6.1.gemfile"
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
- "gemfiles/7.0.gemfile"
|
|
85
|
+
- "gemfiles/7.1.gemfile"
|
|
86
|
+
exclude:
|
|
87
|
+
- ruby_version: "3.1.4"
|
|
88
|
+
gemfile: "gemfiles/6.0.gemfile"
|
|
89
|
+
- ruby_version: "3.2.2"
|
|
90
|
+
gemfile: "gemfiles/6.0.gemfile"
|
data/.github/CODEOWNERS
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* @jturkel @salsify/infrastructure-services @mattsmith0308
|
data/.rubocop.yml
CHANGED
|
@@ -2,10 +2,8 @@ inherit_gem:
|
|
|
2
2
|
salsify_rubocop: conf/rubocop_rails.yml
|
|
3
3
|
|
|
4
4
|
AllCops:
|
|
5
|
-
TargetRubyVersion: 2.
|
|
5
|
+
TargetRubyVersion: 2.7
|
|
6
6
|
Exclude:
|
|
7
7
|
- 'vendor/**/*'
|
|
8
|
-
- 'gemfiles
|
|
9
|
-
|
|
10
|
-
Style/FrozenStringLiteralComment:
|
|
11
|
-
Enabled: true
|
|
8
|
+
- 'gemfiles/**/*'
|
|
9
|
+
- 'spec/internal/**/*'
|
data/Appraisals
CHANGED
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
appraise '5.0' do
|
|
4
|
-
gem 'rails', '~> 5.0.0'
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
appraise '5.1' do
|
|
8
|
-
gem 'rails', '~> 5.1.0'
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
appraise '5.2' do
|
|
12
|
-
gem 'rails', '~> 5.2.0'
|
|
13
|
-
end
|
|
14
|
-
|
|
15
3
|
appraise '6.0' do
|
|
16
4
|
gem 'rails', '~> 6.0.0'
|
|
17
5
|
end
|
|
@@ -19,3 +7,11 @@ end
|
|
|
19
7
|
appraise '6.1' do
|
|
20
8
|
gem 'rails', '~> 6.1.0'
|
|
21
9
|
end
|
|
10
|
+
|
|
11
|
+
appraise '7.0' do
|
|
12
|
+
gem 'rails', '~> 7.0.0'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
appraise '7.1' do
|
|
16
|
+
gem 'rails', '~> 7.1.0'
|
|
17
|
+
end
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.7.0
|
|
4
|
+
- Add support for Rails 7.1.
|
|
5
|
+
|
|
6
|
+
## v0.6.0
|
|
7
|
+
- Drop support for Ruby < 2.7 and Rails < 6.0.
|
|
8
|
+
- Add support for Ruby 3.1.
|
|
9
|
+
- Add support for Rails 7.0.
|
|
10
|
+
|
|
3
11
|
## [v0.5.1](https://github.com/salsify/safer_rails_console/tree/v0.5.0) (2020-01-29)
|
|
4
12
|
|
|
5
13
|
[Full Changelog](https://github.com/salsify/safer_rails_console/compare/v0.5.0...v0.5.1)
|
|
@@ -121,7 +129,3 @@
|
|
|
121
129
|
**Merged pull requests:**
|
|
122
130
|
|
|
123
131
|
- Initial Implementation [\#2](https://github.com/salsify/safer_rails_console/pull/2) ([timothysu](https://github.com/timothysu))
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
|
data/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://circleci.com/gh/salsify/safer_rails_console)
|
|
4
4
|
[](https://badge.fury.io/rb/safer_rails_console)
|
|
5
5
|
|
|
6
|
-
This gem makes Rails console sessions less dangerous in specified environments by warning, color-coding, auto-sandboxing
|
|
6
|
+
This gem makes Rails console sessions less dangerous in specified environments by warning, color-coding, and auto-sandboxing PostgreSQL connections. In the future we'd like to extend this to make other external connections read-only too (e.g. disable job queueing, non-GET HTTP requests, etc.)
|
|
7
7
|
|
|
8
8
|
## Installation
|
|
9
9
|
|
|
@@ -14,13 +14,17 @@ module SaferRailsConsole
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def load_config
|
|
17
|
-
gem = Gem::Specification.find_by_name('safer_rails_console')
|
|
17
|
+
gem = Gem::Specification.find_by_name('safer_rails_console')
|
|
18
18
|
gem_root = gem.gem_dir
|
|
19
|
-
ARGV.push
|
|
19
|
+
ARGV.push(
|
|
20
|
+
'-r',
|
|
21
|
+
File.join(gem_root, 'lib', 'safer_rails_console', 'consoles', "#{SaferRailsConsole.config.console}.rb")
|
|
22
|
+
)
|
|
20
23
|
end
|
|
21
24
|
|
|
22
25
|
def sandbox_user_prompt
|
|
23
|
-
puts
|
|
26
|
+
puts 'Defaulting the console into sandbox mode.' # rubocop:disable Rails/Output
|
|
27
|
+
puts "Type 'disable' to disable. Anything else will begin a sandboxed session:" # rubocop:disable Rails/Output
|
|
24
28
|
input = gets.strip
|
|
25
29
|
input != 'disable'
|
|
26
30
|
end
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
app_name = if SaferRailsConsole::RailsVersion.six_or_above?
|
|
6
|
-
::Rails.application.class.module_parent.to_s.underscore.dasherize
|
|
7
|
-
else
|
|
8
|
-
::Rails.application.class.parent.to_s.underscore.dasherize
|
|
9
|
-
end
|
|
3
|
+
app_name = ::Rails.application.class.module_parent.to_s.underscore.dasherize
|
|
10
4
|
env_name = SaferRailsConsole.environment_name
|
|
11
5
|
status = ::Rails.application.sandbox ? 'read-only' : 'writable'
|
|
12
6
|
color = SaferRailsConsole.prompt_color
|
|
@@ -14,11 +8,11 @@ color = SaferRailsConsole.prompt_color
|
|
|
14
8
|
prompt = "#{app_name}(#{env_name})(#{status}):%03n:%i"
|
|
15
9
|
|
|
16
10
|
IRB.conf[:PROMPT][:RAILS_ENV] = {
|
|
17
|
-
PROMPT_I: color_text("#{prompt}> ", color),
|
|
18
|
-
PROMPT_N: color_text("#{prompt}> ", color),
|
|
19
|
-
PROMPT_S: color_text("#{prompt}%l ", color),
|
|
20
|
-
PROMPT_C: color_text("#{prompt}* ", color),
|
|
21
|
-
RETURN: "#{color_text('=> ', color)}%s\n"
|
|
11
|
+
PROMPT_I: SaferRailsConsole::Colors.color_text("#{prompt}> ", color),
|
|
12
|
+
PROMPT_N: SaferRailsConsole::Colors.color_text("#{prompt}> ", color),
|
|
13
|
+
PROMPT_S: SaferRailsConsole::Colors.color_text("#{prompt}%l ", color),
|
|
14
|
+
PROMPT_C: SaferRailsConsole::Colors.color_text("#{prompt}* ", color),
|
|
15
|
+
RETURN: "#{SaferRailsConsole::Colors.color_text('=> ', color)}%s\n"
|
|
22
16
|
}
|
|
23
17
|
|
|
24
18
|
IRB.conf[:PROMPT_MODE] = :RAILS_ENV
|
|
@@ -2,54 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
require 'safer_rails_console/rails_version'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
module Patches
|
|
7
|
-
module Boot
|
|
8
|
-
module SandboxFlag
|
|
9
|
-
def self.console_options(opt, options = {})
|
|
10
|
-
opt.banner = 'Usage: rails console [environment] [options]'
|
|
11
|
-
opt.on('-s', '--[no-]sandbox', 'Explicitly enable/disable sandbox mode.') { |v| options[:sandbox] = v }
|
|
12
|
-
opt.on('-w', '--writable', 'Alias for --no-sandbox.') { |v| options[:writable] = v }
|
|
13
|
-
opt.on('-r', '--read-only', 'Alias for --sandbox.') { |v| options[:'read-only'] = v }
|
|
14
|
-
opt.on('-e', '--environment=name', String,
|
|
15
|
-
'Specifies the environment to run this console under (test/development/production).',
|
|
16
|
-
'Default: development') { |v| options[:environment] = v.strip }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
module Rails
|
|
20
|
-
module CommandsTasks50
|
|
21
|
-
def console
|
|
22
|
-
require_command!('console')
|
|
23
|
-
::Rails::Console.singleton_class.prepend(::SaferRailsConsole::Patches::Boot::SandboxFlag::Rails::Console50)
|
|
24
|
-
super
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
module Console50
|
|
29
|
-
def parse_arguments(arguments)
|
|
30
|
-
options = {}
|
|
31
|
-
|
|
32
|
-
OptionParser.new do |opt|
|
|
33
|
-
::SaferRailsConsole::Patches::Boot::SandboxFlag.console_options(opt, options)
|
|
34
|
-
opt.parse!(arguments)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
set_options_env(arguments, options)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
if SaferRailsConsole::RailsVersion.five_zero?
|
|
47
|
-
require 'rails/commands/commands_tasks'
|
|
48
|
-
::Rails::CommandsTasks.prepend(SaferRailsConsole::Patches::Boot::SandboxFlag::Rails::CommandsTasks50)
|
|
49
|
-
elsif SaferRailsConsole::RailsVersion.five_one_or_above?
|
|
5
|
+
if SaferRailsConsole::RailsVersion.supported?
|
|
50
6
|
require 'rails/command'
|
|
51
7
|
require 'rails/commands/console/console_command'
|
|
52
|
-
# Rails
|
|
8
|
+
# Rails defaults `sandbox` to `false`, but we need it to NOT have a default value and
|
|
9
|
+
# be `nil` when it is not user-specified
|
|
53
10
|
::Rails::Command::ConsoleCommand.class_eval do
|
|
54
11
|
remove_class_option :sandbox
|
|
55
12
|
class_option :sandbox, aliases: '-s', type: :boolean, desc: 'Explicitly enable/disable sandbox mode.'
|
|
@@ -57,9 +14,7 @@ elsif SaferRailsConsole::RailsVersion.five_one_or_above?
|
|
|
57
14
|
class_option :'read-only', aliases: '-r', type: :boolean, desc: 'Alias for --sandbox.'
|
|
58
15
|
end
|
|
59
16
|
else
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"or remove \"require 'safer_rails_console/patches/boot'\" from your application's 'config/boot.rb'."
|
|
64
|
-
end
|
|
17
|
+
raise "No boot/sandbox_flag patch for rails version '#{::Rails.version}' exists. "\
|
|
18
|
+
'Please disable safer_rails_console, use a supported version of rails, '\
|
|
19
|
+
"or remove \"require 'safer_rails_console/patches/boot'\" from your application's 'config/boot.rb'."
|
|
65
20
|
end
|
|
@@ -13,8 +13,11 @@ module SaferRailsConsole
|
|
|
13
13
|
true
|
|
14
14
|
elsif options[:writable]
|
|
15
15
|
false
|
|
16
|
+
elsif SaferRailsConsole.sandbox_environment? &&
|
|
17
|
+
SaferRailsConsole.config.sandbox_prompt
|
|
18
|
+
SaferRailsConsole::Console.sandbox_user_prompt
|
|
16
19
|
else
|
|
17
|
-
SaferRailsConsole.sandbox_environment?
|
|
20
|
+
SaferRailsConsole.sandbox_environment?
|
|
18
21
|
end
|
|
19
22
|
end
|
|
20
23
|
|
|
@@ -27,14 +30,10 @@ module SaferRailsConsole
|
|
|
27
30
|
end
|
|
28
31
|
|
|
29
32
|
if SaferRailsConsole::RailsVersion.supported?
|
|
30
|
-
|
|
31
|
-
require 'rails/commands/console/console_command'
|
|
32
|
-
else
|
|
33
|
-
require 'rails/commands/console'
|
|
34
|
-
end
|
|
33
|
+
require 'rails/commands/console/console_command'
|
|
35
34
|
|
|
36
35
|
::Rails::Console.singleton_class.prepend(SaferRailsConsole::Patches::Sandbox::Rails::Console)
|
|
37
36
|
else
|
|
38
|
-
raise "No sandbox patch for rails version '#{::Rails.version}' exists. "\
|
|
39
|
-
'
|
|
37
|
+
raise "No sandbox patch for rails version '#{::Rails.version}' exists. Please disable safer_rails_console, "\
|
|
38
|
+
'use a supported version of rails, or disable SaferRailsConsole.config.sandbox_environments.'
|
|
40
39
|
end
|
|
@@ -4,7 +4,6 @@ module SaferRailsConsole
|
|
|
4
4
|
module Patches
|
|
5
5
|
module Sandbox
|
|
6
6
|
module AutoRollback
|
|
7
|
-
extend SaferRailsConsole::Colors
|
|
8
7
|
|
|
9
8
|
def self.rollback_and_begin_new_transaction
|
|
10
9
|
connection = ::ActiveRecord::Base.connection
|
|
@@ -12,32 +11,31 @@ module SaferRailsConsole
|
|
|
12
11
|
connection.begin_db_transaction
|
|
13
12
|
end
|
|
14
13
|
|
|
15
|
-
def self.handle_and_reraise_exception(
|
|
16
|
-
if
|
|
17
|
-
puts color_text(
|
|
14
|
+
def self.handle_and_reraise_exception(error)
|
|
15
|
+
if error.message.include?('PG::ReadOnlySqlTransaction')
|
|
16
|
+
puts SaferRailsConsole::Colors.color_text( # rubocop:disable Rails/Output
|
|
17
|
+
'An operation could not be completed due to read-only mode.',
|
|
18
|
+
SaferRailsConsole::Colors::RED
|
|
19
|
+
)
|
|
18
20
|
else
|
|
19
21
|
rollback_and_begin_new_transaction
|
|
20
22
|
end
|
|
21
23
|
|
|
22
|
-
raise
|
|
24
|
+
raise error
|
|
23
25
|
end
|
|
24
26
|
|
|
25
|
-
module
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
rescue => e
|
|
31
|
-
SaferRailsConsole::Patches::Sandbox::AutoRollback.handle_and_reraise_exception(e)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
27
|
+
module PostgreSQLAdapterPatch
|
|
28
|
+
def execute_and_clear(...)
|
|
29
|
+
super
|
|
30
|
+
rescue StandardError => e
|
|
31
|
+
SaferRailsConsole::Patches::Sandbox::AutoRollback.handle_and_reraise_exception(e)
|
|
34
32
|
end
|
|
35
33
|
end
|
|
34
|
+
|
|
35
|
+
if defined?(::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
|
36
|
+
::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(PostgreSQLAdapterPatch)
|
|
37
|
+
end
|
|
36
38
|
end
|
|
37
39
|
end
|
|
38
40
|
end
|
|
39
41
|
end
|
|
40
|
-
|
|
41
|
-
if defined?(::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
|
42
|
-
::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(SaferRailsConsole::Patches::Sandbox::AutoRollback::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter5)
|
|
43
|
-
end
|
|
@@ -4,25 +4,21 @@ module SaferRailsConsole
|
|
|
4
4
|
module Patches
|
|
5
5
|
module Sandbox
|
|
6
6
|
module TransactionReadOnly
|
|
7
|
-
module
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
super
|
|
12
|
-
execute 'SET TRANSACTION READ ONLY'
|
|
13
|
-
end
|
|
14
|
-
end
|
|
7
|
+
module PostgreSQLAdapterPatch
|
|
8
|
+
def begin_db_transaction
|
|
9
|
+
super
|
|
10
|
+
execute 'SET TRANSACTION READ ONLY'
|
|
15
11
|
end
|
|
16
12
|
end
|
|
13
|
+
|
|
14
|
+
if defined?(::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
|
15
|
+
::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(PostgreSQLAdapterPatch)
|
|
16
|
+
|
|
17
|
+
# Ensure transaction is read-only if it was began before this patch was loaded
|
|
18
|
+
connection = ::ActiveRecord::Base.connection
|
|
19
|
+
connection.execute 'SET TRANSACTION READ ONLY' if connection.open_transactions > 0
|
|
20
|
+
end
|
|
17
21
|
end
|
|
18
22
|
end
|
|
19
23
|
end
|
|
20
24
|
end
|
|
21
|
-
|
|
22
|
-
if defined?(::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
|
23
|
-
::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(SaferRailsConsole::Patches::Sandbox::TransactionReadOnly::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
|
24
|
-
|
|
25
|
-
# Ensure transaction is read-only if it was began before this patch was loaded
|
|
26
|
-
connection = ::ActiveRecord::Base.connection
|
|
27
|
-
connection.execute 'SET TRANSACTION READ ONLY' if connection.open_transactions > 0
|
|
28
|
-
end
|
|
@@ -8,37 +8,13 @@ module SaferRailsConsole
|
|
|
8
8
|
|
|
9
9
|
class << self
|
|
10
10
|
def supported?
|
|
11
|
-
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def five_zero?
|
|
15
|
-
@is_five_zero = Gem::Requirement.new('~> 5.0.0').satisfied_by?(SaferRailsConsole::RailsVersion::RAILS_VERSION) if @is_five_zero.nil?
|
|
16
|
-
@is_five_zero
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def five_one?
|
|
20
|
-
@is_five_one = Gem::Requirement.new('~> 5.1.0').satisfied_by?(SaferRailsConsole::RailsVersion::RAILS_VERSION) if @is_five_one.nil?
|
|
21
|
-
@is_five_one
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def five_one_or_above?
|
|
25
|
-
@is_five_one_or_above = SaferRailsConsole::RailsVersion::RAILS_VERSION >= ::Gem::Version.new('5.1.0') if @is_five_one_or_above.nil?
|
|
26
|
-
@is_five_one_or_above
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def five_two?
|
|
30
|
-
@is_five_two = Gem::Requirement.new('~> 5.2.0').satisfied_by?(SaferRailsConsole::RailsVersion::RAILS_VERSION) if @is_five_two.nil?
|
|
31
|
-
@is_five_two
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def six_zero?
|
|
35
|
-
@is_six_zero = Gem::Requirement.new('~> 6.0.0').satisfied_by?(SaferRailsConsole::RailsVersion::RAILS_VERSION) if @is_six_zero.nil?
|
|
36
|
-
@is_six_zero
|
|
11
|
+
six_or_above?
|
|
37
12
|
end
|
|
38
13
|
|
|
39
14
|
def six_or_above?
|
|
40
|
-
@
|
|
41
|
-
|
|
15
|
+
return @six_or_above if defined?(@six_or_above)
|
|
16
|
+
|
|
17
|
+
@six_or_above = SaferRailsConsole::RailsVersion::RAILS_VERSION >= ::Gem::Version.new('6.0.0')
|
|
42
18
|
end
|
|
43
19
|
end
|
|
44
20
|
end
|
data/lib/safer_rails_console.rb
CHANGED
|
@@ -12,16 +12,20 @@ module SaferRailsConsole
|
|
|
12
12
|
def environment_name
|
|
13
13
|
if ENV.key?('SAFER_RAILS_CONSOLE_ENVIRONMENT_NAME')
|
|
14
14
|
ENV['SAFER_RAILS_CONSOLE_ENVIRONMENT_NAME']
|
|
15
|
+
elsif config.environment_names.key?(::Rails.env.downcase)
|
|
16
|
+
config.environment_names[::Rails.env.downcase]
|
|
15
17
|
else
|
|
16
|
-
|
|
18
|
+
'unknown env'
|
|
17
19
|
end
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
def prompt_color
|
|
21
23
|
if ENV.key?('SAFER_RAILS_CONSOLE_PROMPT_COLOR')
|
|
22
24
|
SaferRailsConsole::Colors.const_get(ENV['SAFER_RAILS_CONSOLE_PROMPT_COLOR'].upcase)
|
|
25
|
+
elsif config.environment_prompt_colors.key?(::Rails.env.downcase)
|
|
26
|
+
config.environment_prompt_colors[::Rails.env.downcase]
|
|
23
27
|
else
|
|
24
|
-
|
|
28
|
+
SaferRailsConsole::Colors::NONE
|
|
25
29
|
end
|
|
26
30
|
end
|
|
27
31
|
|
|
@@ -69,9 +73,9 @@ module SaferRailsConsole
|
|
|
69
73
|
'staging' => SaferRailsConsole::Colors::YELLOW,
|
|
70
74
|
'production' => SaferRailsConsole::Colors::RED
|
|
71
75
|
},
|
|
72
|
-
sandbox_environments:
|
|
76
|
+
sandbox_environments: ['production'],
|
|
73
77
|
sandbox_prompt: false,
|
|
74
|
-
warn_environments:
|
|
78
|
+
warn_environments: ['production'],
|
|
75
79
|
warn_text: "WARNING: YOU ARE USING RAILS CONSOLE IN PRODUCTION!\n" \
|
|
76
80
|
'Changing data can cause serious data loss. ' \
|
|
77
81
|
'Make sure you know what you\'re doing.'
|
data/safer_rails_console.gemspec
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
|
-
lib = File.expand_path('
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
5
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
6
5
|
require 'safer_rails_console/version'
|
|
7
6
|
|
|
@@ -12,7 +11,9 @@ Gem::Specification.new do |spec|
|
|
|
12
11
|
spec.email = ['engineering@salsify.com']
|
|
13
12
|
|
|
14
13
|
spec.summary = 'Make rails console less dangerous!'
|
|
15
|
-
spec.description = 'This gem makes Rails console sessions less dangerous in specified environments by warning,
|
|
14
|
+
spec.description = 'This gem makes Rails console sessions less dangerous in specified environments by warning, ' \
|
|
15
|
+
'color-coding, auto-sandboxing, and allowing read-only external connections ' \
|
|
16
|
+
'(disables job queueing, non-GET requests, etc.)'
|
|
16
17
|
spec.homepage = 'https://github.com/salsify/safer_rails_console'
|
|
17
18
|
spec.license = 'MIT'
|
|
18
19
|
|
|
@@ -20,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
|
20
21
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
21
22
|
if spec.respond_to?(:metadata)
|
|
22
23
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
24
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
23
25
|
else
|
|
24
26
|
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
|
|
25
27
|
end
|
|
@@ -31,6 +33,8 @@ Gem::Specification.new do |spec|
|
|
|
31
33
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
32
34
|
spec.require_paths = ['lib']
|
|
33
35
|
|
|
36
|
+
spec.required_ruby_version = '>= 2.7'
|
|
37
|
+
|
|
34
38
|
spec.add_development_dependency 'appraisal', '~> 2.2'
|
|
35
39
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
36
40
|
spec.add_development_dependency 'climate_control', '~> 0.2.0'
|
|
@@ -40,7 +44,7 @@ Gem::Specification.new do |spec|
|
|
|
40
44
|
spec.add_development_dependency 'rake', '~> 12.0'
|
|
41
45
|
spec.add_development_dependency 'rspec', '~> 3.6'
|
|
42
46
|
spec.add_development_dependency 'rspec_junit_formatter'
|
|
43
|
-
spec.add_development_dependency 'salsify_rubocop', '~>
|
|
47
|
+
spec.add_development_dependency 'salsify_rubocop', '~> 1.27.0'
|
|
44
48
|
|
|
45
|
-
spec.add_runtime_dependency 'rails', '>=
|
|
49
|
+
spec.add_runtime_dependency 'rails', '>= 6.0', '< 7.2'
|
|
46
50
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: safer_rails_console
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Salsify, Inc
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-10-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: appraisal
|
|
@@ -142,34 +142,34 @@ dependencies:
|
|
|
142
142
|
requirements:
|
|
143
143
|
- - "~>"
|
|
144
144
|
- !ruby/object:Gem::Version
|
|
145
|
-
version:
|
|
145
|
+
version: 1.27.0
|
|
146
146
|
type: :development
|
|
147
147
|
prerelease: false
|
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
149
|
requirements:
|
|
150
150
|
- - "~>"
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
|
-
version:
|
|
152
|
+
version: 1.27.0
|
|
153
153
|
- !ruby/object:Gem::Dependency
|
|
154
154
|
name: rails
|
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
|
156
156
|
requirements:
|
|
157
157
|
- - ">="
|
|
158
158
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: '
|
|
159
|
+
version: '6.0'
|
|
160
160
|
- - "<"
|
|
161
161
|
- !ruby/object:Gem::Version
|
|
162
|
-
version: '
|
|
162
|
+
version: '7.2'
|
|
163
163
|
type: :runtime
|
|
164
164
|
prerelease: false
|
|
165
165
|
version_requirements: !ruby/object:Gem::Requirement
|
|
166
166
|
requirements:
|
|
167
167
|
- - ">="
|
|
168
168
|
- !ruby/object:Gem::Version
|
|
169
|
-
version: '
|
|
169
|
+
version: '6.0'
|
|
170
170
|
- - "<"
|
|
171
171
|
- !ruby/object:Gem::Version
|
|
172
|
-
version: '
|
|
172
|
+
version: '7.2'
|
|
173
173
|
description: This gem makes Rails console sessions less dangerous in specified environments
|
|
174
174
|
by warning, color-coding, auto-sandboxing, and allowing read-only external connections
|
|
175
175
|
(disables job queueing, non-GET requests, etc.)
|
|
@@ -180,6 +180,7 @@ extensions: []
|
|
|
180
180
|
extra_rdoc_files: []
|
|
181
181
|
files:
|
|
182
182
|
- ".circleci/config.yml"
|
|
183
|
+
- ".github/CODEOWNERS"
|
|
183
184
|
- ".gitignore"
|
|
184
185
|
- ".overcommit.yml"
|
|
185
186
|
- ".rspec"
|
|
@@ -192,11 +193,10 @@ files:
|
|
|
192
193
|
- Rakefile
|
|
193
194
|
- bin/console
|
|
194
195
|
- bin/setup
|
|
195
|
-
- gemfiles/5.0.gemfile
|
|
196
|
-
- gemfiles/5.1.gemfile
|
|
197
|
-
- gemfiles/5.2.gemfile
|
|
198
196
|
- gemfiles/6.0.gemfile
|
|
199
197
|
- gemfiles/6.1.gemfile
|
|
198
|
+
- gemfiles/7.0.gemfile
|
|
199
|
+
- gemfiles/7.1.gemfile
|
|
200
200
|
- lib/safer_rails_console.rb
|
|
201
201
|
- lib/safer_rails_console/colors.rb
|
|
202
202
|
- lib/safer_rails_console/console.rb
|
|
@@ -217,6 +217,7 @@ licenses:
|
|
|
217
217
|
- MIT
|
|
218
218
|
metadata:
|
|
219
219
|
allowed_push_host: https://rubygems.org
|
|
220
|
+
rubygems_mfa_required: 'true'
|
|
220
221
|
post_install_message:
|
|
221
222
|
rdoc_options: []
|
|
222
223
|
require_paths:
|
|
@@ -225,14 +226,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
225
226
|
requirements:
|
|
226
227
|
- - ">="
|
|
227
228
|
- !ruby/object:Gem::Version
|
|
228
|
-
version: '
|
|
229
|
+
version: '2.7'
|
|
229
230
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
230
231
|
requirements:
|
|
231
232
|
- - ">="
|
|
232
233
|
- !ruby/object:Gem::Version
|
|
233
234
|
version: '0'
|
|
234
235
|
requirements: []
|
|
235
|
-
rubygems_version: 3.
|
|
236
|
+
rubygems_version: 3.3.26
|
|
236
237
|
signing_key:
|
|
237
238
|
specification_version: 4
|
|
238
239
|
summary: Make rails console less dangerous!
|