query_console 0.1.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 +7 -0
- data/MIT-LICENSE +21 -0
- data/README.md +382 -0
- data/Rakefile +11 -0
- data/app/controllers/query_console/application_controller.rb +38 -0
- data/app/controllers/query_console/queries_controller.rb +43 -0
- data/app/javascript/query_console/application.js +20 -0
- data/app/javascript/query_console/controllers/collapsible_controller.js +42 -0
- data/app/javascript/query_console/controllers/editor_controller.js +77 -0
- data/app/javascript/query_console/controllers/history_controller.js +124 -0
- data/app/services/query_console/audit_logger.rb +50 -0
- data/app/services/query_console/runner.rb +89 -0
- data/app/services/query_console/sql_limiter.rb +48 -0
- data/app/services/query_console/sql_validator.rb +72 -0
- data/app/views/query_console/queries/_results.html.erb +191 -0
- data/app/views/query_console/queries/new.html.erb +565 -0
- data/config/importmap.rb +13 -0
- data/config/routes.rb +4 -0
- data/lib/generators/query_console/install/README +28 -0
- data/lib/generators/query_console/install/install_generator.rb +19 -0
- data/lib/generators/query_console/install/templates/query_console.rb +61 -0
- data/lib/query_console/configuration.rb +41 -0
- data/lib/query_console/engine.rb +29 -0
- data/lib/query_console/version.rb +3 -0
- data/lib/query_console.rb +7 -0
- metadata +159 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module QueryConsole
|
|
2
|
+
class Configuration
|
|
3
|
+
attr_accessor :enabled_environments,
|
|
4
|
+
:max_rows,
|
|
5
|
+
:timeout_ms,
|
|
6
|
+
:authorize,
|
|
7
|
+
:current_actor,
|
|
8
|
+
:forbidden_keywords,
|
|
9
|
+
:allowed_starts_with
|
|
10
|
+
|
|
11
|
+
def initialize
|
|
12
|
+
@enabled_environments = ["development"]
|
|
13
|
+
@max_rows = 500
|
|
14
|
+
@timeout_ms = 3000
|
|
15
|
+
@authorize = nil # nil means deny by default
|
|
16
|
+
@current_actor = -> (_controller) { "unknown" }
|
|
17
|
+
@forbidden_keywords = %w[
|
|
18
|
+
update delete insert drop alter create grant revoke truncate
|
|
19
|
+
execute exec sp_executesql xp_ sp_ merge replace into
|
|
20
|
+
shutdown backup restore transaction commit rollback
|
|
21
|
+
]
|
|
22
|
+
@allowed_starts_with = %w[select with]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class << self
|
|
27
|
+
attr_writer :configuration
|
|
28
|
+
|
|
29
|
+
def configuration
|
|
30
|
+
@configuration ||= Configuration.new
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def configure
|
|
34
|
+
yield(configuration)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def reset_configuration!
|
|
38
|
+
@configuration = Configuration.new
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module QueryConsole
|
|
2
|
+
class Engine < ::Rails::Engine
|
|
3
|
+
isolate_namespace QueryConsole
|
|
4
|
+
|
|
5
|
+
config.generators do |g|
|
|
6
|
+
g.test_framework :rspec
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Ensure engine assets and views are available
|
|
10
|
+
config.eager_load_paths << File.expand_path("../app/services", __dir__)
|
|
11
|
+
|
|
12
|
+
# Load Hotwire (Turbo & Stimulus)
|
|
13
|
+
initializer "query_console.importmap", before: "importmap" do |app|
|
|
14
|
+
if app.config.respond_to?(:importmap)
|
|
15
|
+
app.config.importmap.paths << root.join("config/importmap.rb")
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Ensure Turbo and Stimulus are available
|
|
20
|
+
initializer "query_console.hotwire" do |app|
|
|
21
|
+
unless defined?(Turbo)
|
|
22
|
+
require "turbo-rails"
|
|
23
|
+
end
|
|
24
|
+
unless defined?(Stimulus)
|
|
25
|
+
require "stimulus-rails"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: query_console
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Johnson Gnanasekar
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rails
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '7.0'
|
|
19
|
+
- - ">="
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 7.0.0
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - "~>"
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '7.0'
|
|
29
|
+
- - ">="
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: 7.0.0
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: turbo-rails
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - "~>"
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '2.0'
|
|
39
|
+
type: :runtime
|
|
40
|
+
prerelease: false
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - "~>"
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '2.0'
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: stimulus-rails
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
requirements:
|
|
50
|
+
- - "~>"
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '1.3'
|
|
53
|
+
type: :runtime
|
|
54
|
+
prerelease: false
|
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - "~>"
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '1.3'
|
|
60
|
+
- !ruby/object:Gem::Dependency
|
|
61
|
+
name: importmap-rails
|
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
|
63
|
+
requirements:
|
|
64
|
+
- - "~>"
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '2.0'
|
|
67
|
+
type: :runtime
|
|
68
|
+
prerelease: false
|
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
70
|
+
requirements:
|
|
71
|
+
- - "~>"
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
version: '2.0'
|
|
74
|
+
- !ruby/object:Gem::Dependency
|
|
75
|
+
name: rspec-rails
|
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
|
77
|
+
requirements:
|
|
78
|
+
- - "~>"
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: '5.0'
|
|
81
|
+
type: :development
|
|
82
|
+
prerelease: false
|
|
83
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
84
|
+
requirements:
|
|
85
|
+
- - "~>"
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: '5.0'
|
|
88
|
+
- !ruby/object:Gem::Dependency
|
|
89
|
+
name: sqlite3
|
|
90
|
+
requirement: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - "~>"
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '1.4'
|
|
95
|
+
type: :development
|
|
96
|
+
prerelease: false
|
|
97
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
98
|
+
requirements:
|
|
99
|
+
- - "~>"
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: '1.4'
|
|
102
|
+
description: A Rails engine that provides a web-based SQL query console with read-only
|
|
103
|
+
enforcement, authorization hooks, and audit logging.
|
|
104
|
+
email:
|
|
105
|
+
- johnson@example.com
|
|
106
|
+
executables: []
|
|
107
|
+
extensions: []
|
|
108
|
+
extra_rdoc_files: []
|
|
109
|
+
files:
|
|
110
|
+
- MIT-LICENSE
|
|
111
|
+
- README.md
|
|
112
|
+
- Rakefile
|
|
113
|
+
- app/controllers/query_console/application_controller.rb
|
|
114
|
+
- app/controllers/query_console/queries_controller.rb
|
|
115
|
+
- app/javascript/query_console/application.js
|
|
116
|
+
- app/javascript/query_console/controllers/collapsible_controller.js
|
|
117
|
+
- app/javascript/query_console/controllers/editor_controller.js
|
|
118
|
+
- app/javascript/query_console/controllers/history_controller.js
|
|
119
|
+
- app/services/query_console/audit_logger.rb
|
|
120
|
+
- app/services/query_console/runner.rb
|
|
121
|
+
- app/services/query_console/sql_limiter.rb
|
|
122
|
+
- app/services/query_console/sql_validator.rb
|
|
123
|
+
- app/views/query_console/queries/_results.html.erb
|
|
124
|
+
- app/views/query_console/queries/new.html.erb
|
|
125
|
+
- config/importmap.rb
|
|
126
|
+
- config/routes.rb
|
|
127
|
+
- lib/generators/query_console/install/README
|
|
128
|
+
- lib/generators/query_console/install/install_generator.rb
|
|
129
|
+
- lib/generators/query_console/install/templates/query_console.rb
|
|
130
|
+
- lib/query_console.rb
|
|
131
|
+
- lib/query_console/configuration.rb
|
|
132
|
+
- lib/query_console/engine.rb
|
|
133
|
+
- lib/query_console/version.rb
|
|
134
|
+
homepage: https://github.com/JohnsonGnanasekar/query_console
|
|
135
|
+
licenses:
|
|
136
|
+
- MIT
|
|
137
|
+
metadata:
|
|
138
|
+
homepage_uri: https://github.com/JohnsonGnanasekar/query_console
|
|
139
|
+
changelog_uri: https://github.com/JohnsonGnanasekar/query_console/blob/main/CHANGELOG.md
|
|
140
|
+
bug_tracker_uri: https://github.com/JohnsonGnanasekar/query_console/issues
|
|
141
|
+
documentation_uri: https://github.com/JohnsonGnanasekar/query_console/blob/main/README.md
|
|
142
|
+
rdoc_options: []
|
|
143
|
+
require_paths:
|
|
144
|
+
- lib
|
|
145
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
146
|
+
requirements:
|
|
147
|
+
- - ">="
|
|
148
|
+
- !ruby/object:Gem::Version
|
|
149
|
+
version: 3.1.0
|
|
150
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
|
+
requirements:
|
|
152
|
+
- - ">="
|
|
153
|
+
- !ruby/object:Gem::Version
|
|
154
|
+
version: '0'
|
|
155
|
+
requirements: []
|
|
156
|
+
rubygems_version: 3.6.7
|
|
157
|
+
specification_version: 4
|
|
158
|
+
summary: Mountable Rails engine for secure read-only SQL queries
|
|
159
|
+
test_files: []
|