Class: RailsAiContext::Introspectors::SecurityIntrospector

Inherits:
Object
  • Object
show all
Extended by:
StaticTier
Defined in:
lib/rails_ai_context/introspectors/security_introspector.rb

Overview

Inspects Rails security configuration NOT already covered by auth_introspector (Devise/Pundit/etc). Captures the framework-level controls: CSRF, force_ssl, HSTS, host_authorization, PermissionsPolicy, ContentSecurityPolicy directives, cookie config, browser-version gates. Covers RAILS_NERVOUS_SYSTEM.md ยง32 (Security layer).

Constant Summary

Constants included from StaticTier

RailsAiContext::Introspectors::StaticTier::ALTERNATE_SOURCE, RailsAiContext::Introspectors::StaticTier::FILES_ONLY, RailsAiContext::Introspectors::StaticTier::KINDS, RailsAiContext::Introspectors::StaticTier::RUNTIME_ONLY

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from StaticTier

answers_statically?, static_tier, static_tier_declared?, unavailable_reason, validate_static_tier!

Constructor Details

#initialize(app) ⇒ SecurityIntrospector

Returns a new instance of SecurityIntrospector.



16
17
18
# File 'lib/rails_ai_context/introspectors/security_introspector.rb', line 16

def initialize(app)
  @app = app
end

Instance Attribute Details

#appObject (readonly)

Returns the value of attribute app.



14
15
16
# File 'lib/rails_ai_context/introspectors/security_introspector.rb', line 14

def app
  @app
end

Instance Method Details

#callObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/rails_ai_context/introspectors/security_introspector.rb', line 20

def call
  {
    force_ssl: !!app.config.force_ssl,
    ssl_options: extract_ssl_options,
    host_authorization: extract_host_authorization,
    content_security_policy: extract_csp,
    permissions_policy: extract_permissions_policy,
    csrf: extract_csrf,
    cookies: extract_cookie_config,
    allow_browser: extract_allow_browser,
    signed_global_id: extract_signed_gid
  }
rescue => e
  $stderr.puts "[rails-ai-context] SecurityIntrospector#call failed: #{e.message}" if ENV["DEBUG"]
  { error: e.message }
end