rails_nexus 2.1.0 → 2.1.3
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/CHANGELOG.md +110 -0
- data/README.md +68 -13
- data/SECURITY.md +11 -0
- data/THIRD_PARTY_NOTICES.md +14 -0
- data/app/assets/config/rails_nexus_manifest.js +1 -1
- data/app/assets/javascripts/rails_nexus/application.js +55 -0
- data/app/controllers/rails_nexus/analytics_controller.rb +13 -26
- data/app/controllers/rails_nexus/application_controller.rb +6 -2
- data/app/controllers/rails_nexus/cron_jobs_controller.rb +1 -9
- data/app/controllers/rails_nexus/database_health_controller.rb +0 -10
- data/app/controllers/rails_nexus/logged_exceptions_controller.rb +0 -2
- data/app/controllers/rails_nexus/n1_patterns_controller.rb +0 -2
- data/app/controllers/rails_nexus/settings_controller.rb +1 -39
- data/app/controllers/rails_nexus/source_code_controller.rb +9 -13
- data/app/controllers/rails_nexus/stats_controller.rb +33 -159
- data/app/helpers/rails_nexus/logged_exceptions_helper.rb +4 -49
- data/app/helpers/rails_nexus/source_code_helper.rb +49 -10
- data/app/javascript/rails_nexus/application.js +15 -3
- data/app/models/rails_nexus/logged_exception.rb +27 -13
- data/app/views/layouts/rails_nexus/_sidebar_navigation.html.erb +0 -11
- data/app/views/layouts/rails_nexus/application.html.erb +2 -13
- data/app/views/rails_nexus/stats/index.html.erb +1 -102
- data/config/routes.rb +0 -11
- data/lib/generators/rails_nexus/install_generator.rb +1 -1
- data/lib/generators/rails_nexus/templates/INSTALL.md +1 -0
- data/lib/generators/rails_nexus/templates/migration.rb +0 -82
- data/lib/generators/rails_nexus/templates/rails_nexus.rb +3 -0
- data/lib/generators/rails_nexus/templates/views/layouts/rails_nexus/application.html.erb +1 -1
- data/lib/rails_nexus/configuration.rb +10 -45
- data/lib/rails_nexus/database_adapter.rb +53 -0
- data/lib/rails_nexus/engine.rb +6 -17
- data/lib/rails_nexus/logger.rb +1 -12
- data/lib/rails_nexus/notifications.rb +27 -20
- data/lib/rails_nexus/version.rb +1 -1
- data/lib/rails_nexus/webhook_client.rb +151 -0
- data/lib/rails_nexus.rb +37 -23
- data/lib/tasks/rails_nexus.rake +0 -80
- data/rails_nexus.gemspec +4 -5
- metadata +12 -41
- data/app/controllers/rails_nexus/backup_controller.rb +0 -120
- data/app/jobs/rails_nexus/backup_job.rb +0 -18
- data/app/models/rails_nexus/backup.rb +0 -107
- data/app/models/rails_nexus/backup_config.rb +0 -158
- data/app/services/rails_nexus/backup_runner.rb +0 -62
- data/app/services/rails_nexus/backup_service.rb +0 -682
- data/app/views/rails_nexus/backup/_form.html.erb +0 -334
- data/app/views/rails_nexus/backup/config_history.html.erb +0 -67
- data/app/views/rails_nexus/backup/edit.html.erb +0 -15
- data/app/views/rails_nexus/backup/history.html.erb +0 -75
- data/app/views/rails_nexus/backup/index.html.erb +0 -112
- data/app/views/rails_nexus/backup/new.html.erb +0 -15
- data/config/importmap.rb +0 -15
- data/db/seeds/backup_configs.rb +0 -140
- data/lib/generators/rails_nexus/backup_generator.rb +0 -70
- data/lib/generators/rails_nexus/templates/backup/backup_helper.sh +0 -152
- data/lib/generators/rails_nexus/templates/backup/config.rb +0 -27
- data/lib/generators/rails_nexus/templates/backup/models/daily_backup.rb +0 -24
- data/lib/generators/rails_nexus/templates/backup/models/full_backup.rb +0 -35
- data/lib/generators/rails_nexus/templates/backup/models/sync_backup.rb +0 -43
- data/lib/generators/rails_nexus/templates/backup/mysql-config/db_config.cnf +0 -15
- data/lib/generators/rails_nexus/templates/backup/schedule.rb +0 -28
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 78f69603552ed8908670a66523d222bd7e7221fb4202133db0e4967b7676e069
|
|
4
|
+
data.tar.gz: 8fce257592b3eff5989d41dec5cd6be2a26351b64e98558ed566b889a98400a3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b8cfe97fc4a57e6dbaed6c007da8ae2045a3039ea0aee70e4cd82b654932faa4a5f8419740a494f537c31aa11b4aef837ce4cfc420e88be312e212b880de667b
|
|
7
|
+
data.tar.gz: 4b3ad524e5e0d44b008cf44e63bb2b6941f580de2a6163daa44f9079054eb69bea0100810b6e6e944da5d3a630805ae6302e89b7708d4c1577595d017f1f0667
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to RailsNexus will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [2.1.1] - 2026-08-23
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Security controls** — Global fail-closed dashboard authorization, webhook destination policy controls, safe source browsing, and recursive sensitive-parameter filtering.
|
|
12
|
+
- **Database compatibility CI** — SQLite, PostgreSQL, and MySQL/MariaDB coverage plus Ruby 3.2–4.0 and Rails 8.0–8.1 test matrices.
|
|
13
|
+
- **Release security** — Private vulnerability reporting guidance, dependency updates, static analysis, dependency auditing, and MFA release metadata.
|
|
14
|
+
- **Advanced exception filtering** — Ransack filters now cover exception type, source, message/class/source search, platform, priority, workflow status, assignee, time range, and minimum occurrence count.
|
|
15
|
+
- **Sortable exception table** — Exception, platform, source, message, occurrence count, workflow priority, and last-seen columns can be sorted without leaving the Turbo Frame.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- **Exception boundary** — New installations capture `StandardError` while fatal process and VM exceptions retain normal Ruby/Rails behavior.
|
|
19
|
+
- **Frontend distribution** — RailsNexus now ships a fingerprintable prebuilt bundle and no longer requires or modifies Importmap.
|
|
20
|
+
- **Portable analytics** — Time grouping is bounded and isolated for SQLite, PostgreSQL, and MySQL/MariaDB.
|
|
21
|
+
- **Pagy pagination** — Replaced WillPaginate with Pagy for exception and cron-job pagination.
|
|
22
|
+
- **Compact exception table** — The message column is constrained and ellipsized with the complete message available as a tooltip; source, fingerprint, workflow, assignment, and occurrence metadata are presented in a denser layout.
|
|
23
|
+
- **Occurrence performance** — The exception table uses each fingerprint's stored `occurrence_count`, removing the per-row count query.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
- **Backup process safety** — External backup tools receive validated argument arrays and secrets through protected environment/configuration channels.
|
|
27
|
+
- **Webhook request safety** — Webhook delivery validates schemes, DNS results, network ranges, redirects, and host policy before connecting.
|
|
28
|
+
- **Source viewer safety** — Canonical path containment and non-shell Git execution prevent path and command injection.
|
|
29
|
+
- **Legacy namespace boot compatibility** — Applications that still include `RailsOps::ExceptionLoggable` can boot while migrating to `RailsNexus::ExceptionLoggable`.
|
|
30
|
+
- **Unified exception query** — Legacy and Ransack filters now compose in one relation, platform filtering works independently of source filtering, and filtered bulk deletion deletes the same result set shown in the table.
|
|
31
|
+
- **Filter pills** — Removing a Ransack filter pill now correctly removes its nested `q` parameter.
|
|
32
|
+
- **Zero-config engine assets** — The engine registers its prebuilt JavaScript and CSS assets without depending on the host's application entry point or assets.
|
|
33
|
+
- **Local Hotwire assets** — Turbo and Stimulus are served from their Rails gems instead of third-party CDN URLs, improving CSP compatibility and offline deployment.
|
|
34
|
+
- **Host entry-point isolation** — RailsNexus no longer adds pins or imports to the host application's JavaScript setup.
|
|
35
|
+
|
|
36
|
+
## [1.1.0] - 2026-08-22
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
- **Exception cause chains** — Automatically captures the full exception chain (`exception.cause`) up to 10 levels deep. New "Cause Chain" tab in the detail view shows each exception with its message and backtrace snippet.
|
|
40
|
+
- **Breadcrumbs (activity trail)** — Subscribes to ActiveSupport::Notifications to capture SQL queries, controller actions, cache reads/writes, job executions, mailer deliveries, and partial renders before a crash. Thread-local ring buffer (50 entries) flushed on exception. Enable with `config.breadcrumbs_enabled = true`.
|
|
41
|
+
- **Storm protection (circuit breaker)** — Prevents error floods from crashing the app with DB writes. Per-process threshold (default: 50 errors/sec), auto-opens circuit when exceeded, sheds 90% of errors, auto-resets after cooldown. Enable with `config.storm_protection_enabled = true`.
|
|
42
|
+
- **User impact scoring** — Tracks `user_id` on each exception and ranks errors by unique users affected (not occurrence count). User Impact table on the dashboard shows top 5 errors. Enable with `config.user_impact_tracking = true`.
|
|
43
|
+
- **System health snapshots** — Captures GC stats, memory (RSS/VSZ), thread count, DB connection pool utilization, and Ruby version at the moment of each exception. New "System Health" tab in detail view.
|
|
44
|
+
- **Exception fingerprinting** — Generates SHA256 fingerprints for grouping similar exceptions. Duplicate exceptions increment an `occurrence_count` instead of creating new rows.
|
|
45
|
+
- **Database health summary** — Live database stats on the Statistics page: adapter, version, ping latency, active connections, pool size, uptime, and per-table row counts.
|
|
46
|
+
- **Backup status detection** — Detects the `backup` gem and shows config path, model files, backup directory stats, last backup time, storage destination, database adapters, notifiers, and crontab scheduling.
|
|
47
|
+
- **Server statistics dashboard** — New `/rails_nexus/stats` page with memory, CPU, disk, Ruby/Rails info, Sidekiq stats, process info, and exception trend charts.
|
|
48
|
+
- **Cron job monitoring** — New `RailsNexus::CronJob` model and `/rails_nexus/cron_jobs` page to track scheduled task runs with status, duration, hostname, and error details. Rake tasks: `rails_nexus:wrap_cron`, `rails_nexus:cron_stats`, `rails_nexus:cron_cleanup`.
|
|
49
|
+
- **Webhook configuration UI** — New `/rails_nexus/settings` page to view configured webhooks, send test payloads, and see delivery history with status codes and timing.
|
|
50
|
+
- **Webhook delivery logging** — Every webhook attempt (success or failure) logged to `RailsNexus::WebhookDelivery` with request/response body, status code, duration, and error message.
|
|
51
|
+
- **New migration templates** — `migration_cron_jobs.rb`, `migration_webhook_deliveries.rb`, and `migration_advanced_features.rb` for the new columns and tables.
|
|
52
|
+
- **New configuration options** — `breadcrumbs_enabled`, `storm_protection_enabled`, `storm_threshold_per_second`, `storm_cooldown_seconds`, `user_impact_tracking`, `show_server_stats`, `cron_job_tracking`, `log_webhook_deliveries`, and more.
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
- **Sidebar navigation** — Added Statistics, Cron Jobs, and Settings links to the dashboard sidebar.
|
|
56
|
+
- **Exception detail view** — New tabs for Cause Chain, Breadcrumbs, and System Health alongside existing Overview, Backtrace, Request, Environment, and User Info tabs.
|
|
57
|
+
- **Exception index view** — User Impact ranking table displayed above filters when data is available.
|
|
58
|
+
- **Stats controller** — Now collects system, Ruby, Sidekiq, database, backup, and storm protection stats.
|
|
59
|
+
|
|
60
|
+
## [1.0.1] - 2026-08-22
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
- **Tailwind-like utility classes** — Embedded utility CSS (display, flexbox, spacing, typography, colors, animations, responsive breakpoints) so the dashboard works with or without Tailwind CSS.
|
|
64
|
+
- **Standard Stimulus controller locations** — Moved controllers to `app/javascript/controllers/` (Stimulus's default scan path) so `bin/rails stimulus:manifest:update` registers them automatically without extra configuration.
|
|
65
|
+
- **Dark mode auto-detection** — Theme controller now respects `prefers-color-scheme` media query for the `auto` theme setting, in addition to localStorage persistence.
|
|
66
|
+
- **Generator template updates** — `rails_nexus:customize` now generates sidebar and theme controller templates in the standard Stimulus location with localStorage-backed theme persistence.
|
|
67
|
+
|
|
68
|
+
### Fixed
|
|
69
|
+
- **Theme controller localStorage persistence** — The engine's theme controller previously ignored the user's saved preference and always overwrote localStorage with the server-side default on every page load. Now it checks localStorage first, falls back to the server config, and respects system color-scheme preference.
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
- **Version bumped to 1.0.1** — Indicates the Tailwind/Hotwire modernization milestone.
|
|
73
|
+
- **Removed legacy Sprockets JS** — Deleted `app/assets/javascripts/rails_nexus/application.js` (the old vanilla Stimulus registration shim) since controllers now live in the standard importmap/esbuild path.
|
|
74
|
+
- **Removed unused legacy image directory** — Cleaned up an unused image placeholder.
|
|
75
|
+
- **Removed old `rails_nexus/controllers/` directory** — Sidebar and theme controllers moved from `app/javascript/rails_nexus/controllers/` to `app/javascript/controllers/`.
|
|
76
|
+
- **Customize generator updated** — Output paths and post-install instructions reflect the new controller locations.
|
|
77
|
+
- **CSS file restructured** — Utility classes are now at the top of the stylesheet above the legacy `rn-*` component styles for clearer layering.
|
|
78
|
+
|
|
79
|
+
## [0.2.0] - 2026-08-21
|
|
80
|
+
|
|
81
|
+
### Added
|
|
82
|
+
- **Install generator** — `bin/rails generate rails_nexus:install` sets up routes, migration, and initializer in one command.
|
|
83
|
+
- **Configuration DSL** — `RailsNexus.configure` block for auth, app name, per-page, and exception data.
|
|
84
|
+
- **Auth by default** — `auth_block` configuration prevents unauthenticated access. Dashboard returns 403 when no auth is configured.
|
|
85
|
+
- **Self-contained CSS** — Dashboard works without Tailwind CSS. Custom stylesheets are engine-provided.
|
|
86
|
+
- **Database indexes** — Added indexes on `created_at`, `exception_class`, and `[controller_name, action_name]` for faster queries.
|
|
87
|
+
- **Backward compatibility** — Legacy `ExceptionLoggable` class attributes still work alongside the new configuration DSL.
|
|
88
|
+
|
|
89
|
+
### Fixed
|
|
90
|
+
- **Message formatting** — Exception messages are no longer nil when no extra data is attached.
|
|
91
|
+
- **Removed stray `.gem` files** from the repository.
|
|
92
|
+
|
|
93
|
+
### Changed
|
|
94
|
+
- Views use engine-scoped CSS classes instead of Tailwind utility classes.
|
|
95
|
+
- Layout no longer depends on host application assets.
|
|
96
|
+
|
|
97
|
+
## [0.1.1] - 2026-08-20
|
|
98
|
+
|
|
99
|
+
### Added
|
|
100
|
+
- `rails_nexus:tailwind:sources` rake task for Tailwind v4 source discovery.
|
|
101
|
+
|
|
102
|
+
## [0.1.0] - 2024-03-30
|
|
103
|
+
|
|
104
|
+
### Added
|
|
105
|
+
- Initial release.
|
|
106
|
+
- Exception logging via `RailsNexus::ExceptionLoggable`.
|
|
107
|
+
- Dashboard with filtering, search, pagination.
|
|
108
|
+
- Turbo Frames and Streams for SPA-like UX.
|
|
109
|
+
- RSS feed.
|
|
110
|
+
- Turbo Stream-based delete operations.
|
data/README.md
CHANGED
|
@@ -33,13 +33,6 @@ RailsNexus is an extensible operations and administration console for Rails appl
|
|
|
33
33
|
- **Execution Times** — Monitor job duration and detect slow jobs
|
|
34
34
|
- **Cleanup** — Automatic old job record removal
|
|
35
35
|
|
|
36
|
-
### 💾 Backup Management
|
|
37
|
-
- **Backup Dashboard** — Health status, model listing, recent backups
|
|
38
|
-
- **File Browser** — View all backup files with size, age, and format
|
|
39
|
-
- **Trigger from UI** — Run backups directly from the dashboard
|
|
40
|
-
- **Settings Editor** — Configure paths, thresholds, and notifications
|
|
41
|
-
- **Health Monitoring** — Alerts when backups are stale or missing
|
|
42
|
-
- **Cron Schedule** — View and manage backup schedules
|
|
43
36
|
|
|
44
37
|
### 🖥️ Server Statistics
|
|
45
38
|
- **Memory Usage** — RAM and swap monitoring
|
|
@@ -85,7 +78,7 @@ RailsNexus is an extensible operations and administration console for Rails appl
|
|
|
85
78
|
|
|
86
79
|
- Ruby 3.2 or newer
|
|
87
80
|
- Rails 8.0 or newer
|
|
88
|
-
-
|
|
81
|
+
- SQLite 3, PostgreSQL, or MySQL/MariaDB
|
|
89
82
|
|
|
90
83
|
## Installation
|
|
91
84
|
|
|
@@ -108,10 +101,20 @@ This will:
|
|
|
108
101
|
1. Copy the database migration with proper indexes.
|
|
109
102
|
2. Create a configuration initializer at `config/initializers/rails_nexus.rb`.
|
|
110
103
|
3. Mount the engine in your routes.
|
|
111
|
-
4. Add `rescue_from
|
|
104
|
+
4. Add `rescue_from StandardError, with: :log_exception_handler` to `ApplicationController`.
|
|
112
105
|
|
|
113
106
|
The dashboard is now available at `/rails_nexus`.
|
|
114
107
|
|
|
108
|
+
Backup management is provided separately by
|
|
109
|
+
[backup_nexus](https://github.com/tamiru/backup_nexus). Add it when your
|
|
110
|
+
application needs the backup dashboard and runner:
|
|
111
|
+
|
|
112
|
+
```ruby
|
|
113
|
+
gem "backup_nexus"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Then run bin/rails generate backup_nexus:install.
|
|
117
|
+
|
|
115
118
|
### Optional UI customization
|
|
116
119
|
|
|
117
120
|
The mounted dashboard already includes its CSS, Turbo, and Stimulus controllers.
|
|
@@ -151,6 +154,10 @@ class Api::V1::BaseController < ActionController::API
|
|
|
151
154
|
end
|
|
152
155
|
```
|
|
153
156
|
|
|
157
|
+
Older applications using `RailsOps::ExceptionLoggable` remain supported for
|
|
158
|
+
boot compatibility. Update them to `RailsNexus::ExceptionLoggable` when
|
|
159
|
+
convenient.
|
|
160
|
+
|
|
154
161
|
### Background jobs (Sidekiq)
|
|
155
162
|
|
|
156
163
|
RailsNexus automatically logs Sidekiq job exceptions when the middleware is configured:
|
|
@@ -168,7 +175,10 @@ end
|
|
|
168
175
|
|
|
169
176
|
The dashboard contains sensitive information. **Do not expose it to unauthenticated users.**
|
|
170
177
|
|
|
171
|
-
|
|
178
|
+
Authentication is applied globally by `RailsNexus::ApplicationController`,
|
|
179
|
+
including workflow mutations and source-code viewing. If `auth_block` is
|
|
180
|
+
missing, returns `false`/`nil`, or raises an error, every dashboard request
|
|
181
|
+
returns `403 Forbidden`. Configure authentication:
|
|
172
182
|
|
|
173
183
|
```ruby
|
|
174
184
|
# config/initializers/rails_nexus.rb
|
|
@@ -294,8 +304,18 @@ config.webhooks = [
|
|
|
294
304
|
]
|
|
295
305
|
config.webhook_timeout = 5
|
|
296
306
|
config.webhook_headers = { "Authorization" => "Bearer token" }
|
|
307
|
+
config.webhook_allowed_hosts = ["hooks.slack.com", "*.example.com"] # optional
|
|
308
|
+
config.webhook_denied_hosts = ["blocked.example.com"]
|
|
309
|
+
# HTTP is only available in development, and only with this explicit opt-in:
|
|
310
|
+
config.webhook_allow_http_in_development = false
|
|
297
311
|
```
|
|
298
312
|
|
|
313
|
+
Webhook destinations must use HTTPS, cannot contain URL credentials, and are
|
|
314
|
+
resolved and pinned to a validated public IP before connecting. Private,
|
|
315
|
+
loopback, link-local, metadata, multicast, unspecified, reserved, and redirect
|
|
316
|
+
destinations are rejected. Logged delivery URLs redact their path and query so
|
|
317
|
+
provider tokens are not persisted.
|
|
318
|
+
|
|
299
319
|
POST JSON to each URL on every new exception:
|
|
300
320
|
```json
|
|
301
321
|
{
|
|
@@ -347,7 +367,7 @@ rake rails_nexus:test_webhook # Test webhook configuration
|
|
|
347
367
|
|
|
348
368
|
### Hotwire (default)
|
|
349
369
|
|
|
350
|
-
RailsNexus
|
|
370
|
+
RailsNexus ships a prebuilt JavaScript asset containing Turbo and its namespaced Stimulus controllers. It does not require `importmap-rails`, does not modify the host JavaScript entry point, and works in hosts using Importmap, jsbundling/esbuild/Bun, or no JavaScript bundler. The bundle reuses a host Stimulus application exposed as `window.Stimulus`; otherwise it starts one engine-scoped application and reuses it across repeated loads.
|
|
351
371
|
|
|
352
372
|
### Styling
|
|
353
373
|
|
|
@@ -365,7 +385,7 @@ If your app uses Tailwind, add the gem's views as a source:
|
|
|
365
385
|
|
|
366
386
|
#### Asset pipelines
|
|
367
387
|
|
|
368
|
-
The engine registers its JavaScript
|
|
388
|
+
The engine registers and precompiles its fingerprintable JavaScript and CSS assets automatically. Both Propshaft and Sprockets hosts can mount RailsNexus without changing the host asset manifest.
|
|
369
389
|
|
|
370
390
|
The entry point is `rails_nexus/application`; it does not replace or depend on the host app's `application` entry point. Turbo and Stimulus are served locally from their Rails gems rather than from a CDN.
|
|
371
391
|
|
|
@@ -384,7 +404,14 @@ Four controllers are included and registered by the engine's entry point:
|
|
|
384
404
|
|
|
385
405
|
The engine creates a `rails_nexus_exceptions` table with columns for exception class, controller/action, message, backtrace, request, environment, user information, user agent, remote IP, and timestamps.
|
|
386
406
|
|
|
387
|
-
|
|
407
|
+
RailsNexus applies Rails' configured parameter filters plus built-in password, token, authorization, cookie, session, and secret filters before persistence. Application-provided free-form messages can still contain sensitive data, so apply your normal database encryption, retention, backup, and access-control policies.
|
|
408
|
+
|
|
409
|
+
Analytics time grouping works on SQLite, PostgreSQL, and MySQL/MariaDB. Row counts work on all three; physical table-size and server uptime/connection metrics are displayed only where the adapter exposes them safely, and otherwise show as unavailable.
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
## Security
|
|
413
|
+
|
|
414
|
+
The dashboard denies every request unless `auth_block` returns a truthy value. Webhooks use HTTPS by default, resolve and pin public destinations, reject redirects and private/reserved networks, and support explicit host allow/deny lists. See [SECURITY.md](SECURITY.md) for private vulnerability reporting.
|
|
388
415
|
|
|
389
416
|
## Generators
|
|
390
417
|
|
|
@@ -414,6 +441,34 @@ gem build rails_nexus.gemspec
|
|
|
414
441
|
|
|
415
442
|
The repository includes a Rails dummy application under `test/dummy` for engine integration testing.
|
|
416
443
|
|
|
444
|
+
## CI/CD
|
|
445
|
+
|
|
446
|
+
GitHub Actions runs the test matrix, database compatibility checks, asset builds,
|
|
447
|
+
and security checks on pushes and pull requests. Releases are published to
|
|
448
|
+
RubyGems when a version tag is pushed.
|
|
449
|
+
|
|
450
|
+
Before the first release, configure a RubyGems [Trusted Publisher](https://guides.rubygems.org/trusted-publishing/)
|
|
451
|
+
for:
|
|
452
|
+
|
|
453
|
+
- Owner: `tamiru`
|
|
454
|
+
- Repository: `rails_nexus`
|
|
455
|
+
- Workflow: `release.yml`
|
|
456
|
+
- GitHub environment: `release`
|
|
457
|
+
|
|
458
|
+
Create the `release` environment in GitHub and add required reviewers if you
|
|
459
|
+
want a manual approval before publishing. No RubyGems API key is needed.
|
|
460
|
+
|
|
461
|
+
To release a version, update `lib/rails_nexus/version.rb` and `CHANGELOG.md`,
|
|
462
|
+
merge the changes to `main`, then push a matching tag:
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
git tag v2.1.2
|
|
466
|
+
git push origin v2.1.2
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
The workflow verifies that the tag matches the gem version, runs the tests,
|
|
470
|
+
builds and validates the gem, then publishes it and creates the GitHub release.
|
|
471
|
+
|
|
417
472
|
## Support
|
|
418
473
|
|
|
419
474
|
If you find RailsNexus useful, consider supporting the project:
|
data/SECURITY.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
Security fixes are provided for the latest released RailsNexus minor version. Users should upgrade to the newest patch release before reporting an issue.
|
|
6
|
+
|
|
7
|
+
## Reporting a vulnerability
|
|
8
|
+
|
|
9
|
+
Please do not open a public issue for a suspected vulnerability. Use GitHub's private security advisory form at `https://github.com/tamiru/rails_nexus/security/advisories/new`, or email `tamiruhailu@gmail.com` if the form is unavailable.
|
|
10
|
+
|
|
11
|
+
Include the affected version, impact, reproduction steps, and any suggested mitigation. You can expect an acknowledgement within seven days. Details will remain private until a fix and coordinated disclosure are ready.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Third-Party Notices
|
|
2
|
+
|
|
3
|
+
The prebuilt `rails_nexus/application.js` asset contains Turbo and Stimulus.
|
|
4
|
+
|
|
5
|
+
- Turbo: Copyright (c) 2020 Basecamp
|
|
6
|
+
- Stimulus: Copyright (c) 2021 Basecamp
|
|
7
|
+
|
|
8
|
+
Both are distributed under the MIT License:
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
//= link_directory ../stylesheets/rails_nexus .css
|
|
2
|
-
//=
|
|
2
|
+
//= link rails_nexus/application.js
|