safer_rails_console 0.5.1 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://circleci.com/gh/salsify/safer_rails_console.svg?style=svg)](https://circleci.com/gh/salsify/safer_rails_console)
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/safer_rails_console.svg)](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!
|