shadowaudit
Advanced tools
| /** | ||
| * v0.9.0: Grape API auth detection. | ||
| * | ||
| * Grape uses `before` blocks for auth (not `before_action` like Rails): | ||
| * | ||
| * before do | ||
| * authenticate! | ||
| * end | ||
| * | ||
| * before { authenticate_non_get! } | ||
| * | ||
| * before do | ||
| * authenticate! unless current_user | ||
| * end | ||
| * | ||
| * Auth can be at the class level (applies to all routes in the class) or | ||
| * inside a `resource`/`namespace` block (applies only to inner routes). | ||
| * | ||
| * We detect auth by scanning the `before` block content for known auth | ||
| * method names. This is a string-contains check, not a Ruby parser — | ||
| * good enough for the vast majority of real-world Grape code. | ||
| */ | ||
| /** | ||
| * Hardcoded Grape auth method names. | ||
| * | ||
| * These are the method names that appear inside `before do ... end` blocks | ||
| * in Grape APIs to enforce authentication. Finding any of these in a `before` | ||
| * block means the routes in that scope require auth. | ||
| * | ||
| * Sources: | ||
| * - GitLab: `authenticate!`, `authenticate_non_get!`, `authenticate_by_gitlab_shell_token!`, | ||
| * `authenticated_as_admin!`, `authenticated_with_can_read_all_resources!`, `guard!` | ||
| * - Grape README: `authenticate!` (custom helper) | ||
| * - Devise: `authenticate_user!` | ||
| * - Doorkeeper: `doorkeeper_authorize!` | ||
| * - Pundit: `authorize!` | ||
| */ | ||
| export declare const GRAPE_AUTH_METHODS: readonly string[]; | ||
| /** | ||
| * Checks whether a `before` block's content contains any auth method call. | ||
| * | ||
| * @param beforeBlockContent The source code inside the `before do ... end` block | ||
| * @returns true if any auth method is found | ||
| * | ||
| * @example | ||
| * detectGrapeAuth('authenticate!') // true | ||
| * detectGrapeAuth('authenticate_non_get!') // true | ||
| * detectGrapeAuth('set_current_organization') // false (not auth) | ||
| * detectGrapeAuth('authenticate! unless current_user') // true | ||
| */ | ||
| export declare function detectGrapeAuth(beforeBlockContent: string): boolean; | ||
| /** | ||
| * Extracts the content of a `before` block from a line and optionally | ||
| * subsequent lines. | ||
| * | ||
| * Handles two forms: | ||
| * 1. `before { authenticate! }` — inline lambda, content is between { } | ||
| * 2. `before do ... end` — multiline block, content is between do/end | ||
| * | ||
| * For form 2, this function returns the content on the SAME line after `do` | ||
| * (the caller is responsible for collecting subsequent lines until `end`). | ||
| * | ||
| * @returns The inline content (form 1) or the same-line content after `do` (form 2), | ||
| * or null if the line doesn't open a before block. | ||
| */ | ||
| export declare function extractBeforeBlockContent(line: string): string | null; | ||
| export default detectGrapeAuth; | ||
| //# sourceMappingURL=grape-auth.d.ts.map |
| {"version":3,"file":"grape-auth.d.ts","sourceRoot":"","sources":["../../src/scanners/grape-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAgB/C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAOnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBrE;AAED,eAAe,eAAe,CAAC"} |
| "use strict"; | ||
| /** | ||
| * v0.9.0: Grape API auth detection. | ||
| * | ||
| * Grape uses `before` blocks for auth (not `before_action` like Rails): | ||
| * | ||
| * before do | ||
| * authenticate! | ||
| * end | ||
| * | ||
| * before { authenticate_non_get! } | ||
| * | ||
| * before do | ||
| * authenticate! unless current_user | ||
| * end | ||
| * | ||
| * Auth can be at the class level (applies to all routes in the class) or | ||
| * inside a `resource`/`namespace` block (applies only to inner routes). | ||
| * | ||
| * We detect auth by scanning the `before` block content for known auth | ||
| * method names. This is a string-contains check, not a Ruby parser — | ||
| * good enough for the vast majority of real-world Grape code. | ||
| */ | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.GRAPE_AUTH_METHODS = void 0; | ||
| exports.detectGrapeAuth = detectGrapeAuth; | ||
| exports.extractBeforeBlockContent = extractBeforeBlockContent; | ||
| /** | ||
| * Hardcoded Grape auth method names. | ||
| * | ||
| * These are the method names that appear inside `before do ... end` blocks | ||
| * in Grape APIs to enforce authentication. Finding any of these in a `before` | ||
| * block means the routes in that scope require auth. | ||
| * | ||
| * Sources: | ||
| * - GitLab: `authenticate!`, `authenticate_non_get!`, `authenticate_by_gitlab_shell_token!`, | ||
| * `authenticated_as_admin!`, `authenticated_with_can_read_all_resources!`, `guard!` | ||
| * - Grape README: `authenticate!` (custom helper) | ||
| * - Devise: `authenticate_user!` | ||
| * - Doorkeeper: `doorkeeper_authorize!` | ||
| * - Pundit: `authorize!` | ||
| */ | ||
| exports.GRAPE_AUTH_METHODS = [ | ||
| 'authenticate!', | ||
| 'authenticate_non_get!', | ||
| 'authenticate_user!', | ||
| 'authenticate_admin!', | ||
| 'authenticate_by_gitlab_shell_token!', | ||
| 'authenticate_by_gitlab_shell_or_workhorse_token!', | ||
| 'authenticated_with_can_read_all_resources!', | ||
| 'authenticated_as_admin!', | ||
| 'authorize_read_application_statistics!', | ||
| 'require_user!', | ||
| 'require_login!', | ||
| 'require_admin!', | ||
| 'doorkeeper_authorize!', | ||
| 'guard!', | ||
| 'authorize!', | ||
| ]; | ||
| /** | ||
| * Checks whether a `before` block's content contains any auth method call. | ||
| * | ||
| * @param beforeBlockContent The source code inside the `before do ... end` block | ||
| * @returns true if any auth method is found | ||
| * | ||
| * @example | ||
| * detectGrapeAuth('authenticate!') // true | ||
| * detectGrapeAuth('authenticate_non_get!') // true | ||
| * detectGrapeAuth('set_current_organization') // false (not auth) | ||
| * detectGrapeAuth('authenticate! unless current_user') // true | ||
| */ | ||
| function detectGrapeAuth(beforeBlockContent) { | ||
| for (const method of exports.GRAPE_AUTH_METHODS) { | ||
| if (beforeBlockContent.includes(method)) { | ||
| return true; | ||
| } | ||
| } | ||
| return false; | ||
| } | ||
| /** | ||
| * Extracts the content of a `before` block from a line and optionally | ||
| * subsequent lines. | ||
| * | ||
| * Handles two forms: | ||
| * 1. `before { authenticate! }` — inline lambda, content is between { } | ||
| * 2. `before do ... end` — multiline block, content is between do/end | ||
| * | ||
| * For form 2, this function returns the content on the SAME line after `do` | ||
| * (the caller is responsible for collecting subsequent lines until `end`). | ||
| * | ||
| * @returns The inline content (form 1) or the same-line content after `do` (form 2), | ||
| * or null if the line doesn't open a before block. | ||
| */ | ||
| function extractBeforeBlockContent(line) { | ||
| // Form 1: before { ... } | ||
| const inlineMatch = line.match(/before\s*\{([^}]+)\}/); | ||
| if (inlineMatch) { | ||
| return inlineMatch[1]; | ||
| } | ||
| // Form 2: before do ... (content on same line after do) | ||
| const doMatch = line.match(/before\s+do\s*(.*)$/); | ||
| if (doMatch) { | ||
| return doMatch[1] || ''; | ||
| } | ||
| // Form 3: before do (nothing on same line, content is on next lines) | ||
| // Caller handles this by collecting lines until `end`. | ||
| if (/^\s*before\s+do\s*$/.test(line)) { | ||
| return ''; | ||
| } | ||
| return null; | ||
| } | ||
| exports.default = detectGrapeAuth; | ||
| //# sourceMappingURL=grape-auth.js.map |
| {"version":3,"file":"grape-auth.js","sourceRoot":"","sources":["../../src/scanners/grape-auth.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AA+CH,0CAOC;AAgBD,8DAoBC;AAxFD;;;;;;;;;;;;;;GAcG;AACU,QAAA,kBAAkB,GAAsB;IACnD,eAAe;IACf,uBAAuB;IACvB,oBAAoB;IACpB,qBAAqB;IACrB,qCAAqC;IACrC,kDAAkD;IAClD,4CAA4C;IAC5C,yBAAyB;IACzB,wCAAwC;IACxC,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;IACvB,QAAQ;IACR,YAAY;CACb,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAAC,kBAA0B;IACxD,KAAK,MAAM,MAAM,IAAI,0BAAkB,EAAE,CAAC;QACxC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,yBAAyB,CAAC,IAAY;IACpD,yBAAyB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACvD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,wDAAwD;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAClD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,qEAAqE;IACrE,uDAAuD;IACvD,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kBAAe,eAAe,CAAC"} |
| import { Route } from '../types'; | ||
| /** | ||
| * Scans a project for Grape API routes. | ||
| * | ||
| * Looks for: | ||
| * - lib/api/api.rb (root API class — has prefix/version/mount declarations) | ||
| * - lib/api/(subfiles).rb (mounted API classes) | ||
| * | ||
| * If lib/api/api.rb exists, it's parsed first to extract global prefix/version | ||
| * and mount declarations. Each mounted class is then parsed with the correct | ||
| * base path. | ||
| * | ||
| * If no api.rb exists but lib/api/*.rb files are present, each file is parsed | ||
| * independently with no global prefix (rare case — standalone Grape apps). | ||
| * | ||
| * @param dir Project root directory | ||
| * @param ignore Directories to ignore | ||
| * @param authPatterns Additional auth patterns (user-configured, for Rails compat) | ||
| * @param concurrency Parallel file read concurrency | ||
| */ | ||
| export declare function scanGrape(dir: string, ignore: string[], authPatterns?: string[], concurrency?: number): Promise<Route[]>; | ||
| /** | ||
| * Detects whether a project uses Grape by checking for lib/api/api.rb | ||
| * or any files under lib/api/. | ||
| */ | ||
| export declare function hasGrapeApi(dir: string): boolean; | ||
| export default scanGrape; | ||
| //# sourceMappingURL=grape.d.ts.map |
| {"version":3,"file":"grape.d.ts","sourceRoot":"","sources":["../../src/scanners/grape.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAwmBjC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,GAAE,MAAM,EAAO,EAC3B,WAAW,GAAE,MAA4B,GACxC,OAAO,CAAC,KAAK,EAAE,CAAC,CAgGlB;AAeD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQhD;AAED,eAAe,SAAS,CAAC"} |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| var desc = Object.getOwnPropertyDescriptor(m, k); | ||
| if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
| desc = { enumerable: true, get: function() { return m[k]; } }; | ||
| } | ||
| Object.defineProperty(o, k2, desc); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || (function () { | ||
| var ownKeys = function(o) { | ||
| ownKeys = Object.getOwnPropertyNames || function (o) { | ||
| var ar = []; | ||
| for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; | ||
| return ar; | ||
| }; | ||
| return ownKeys(o); | ||
| }; | ||
| return function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| })(); | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.scanGrape = scanGrape; | ||
| exports.hasGrapeApi = hasGrapeApi; | ||
| const glob_1 = __importDefault(require("glob")); | ||
| const path = __importStar(require("path")); | ||
| const logger_1 = require("../utils/logger"); | ||
| const parallel_1 = require("./utils/parallel"); | ||
| const grape_auth_1 = require("./grape-auth"); | ||
| function glob(pattern, options) { | ||
| return new Promise((resolve, reject) => { | ||
| (0, glob_1.default)(pattern, options, (err, matches) => { | ||
| if (err) | ||
| reject(err); | ||
| else | ||
| resolve(matches ?? []); | ||
| }); | ||
| }); | ||
| } | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| // Path normalization | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| function joinPath(...segments) { | ||
| let joined = segments.join('/'); | ||
| joined = joined.replace(/\/+/g, '/'); | ||
| if (!joined.startsWith('/')) | ||
| joined = '/' + joined; | ||
| if (joined.length > 1 && joined.endsWith('/')) { | ||
| joined = joined.slice(0, -1); | ||
| } | ||
| return joined; | ||
| } | ||
| /** | ||
| * Converts Grape `:param` syntax to OpenAPI `{param}`. | ||
| * Also handles `*path` (wildcard) → `{path}`. | ||
| */ | ||
| function convertParamsToOpenAPI(grapePath) { | ||
| let p = grapePath; | ||
| // :param → {param} | ||
| p = p.replace(/:(\w+)/g, '{$1}'); | ||
| // *path (wildcard) → {path} | ||
| p = p.replace(/\*(\w+)/g, '{$1}'); | ||
| // * alone → {glob} | ||
| p = p.replace(/\*/g, '{glob}'); | ||
| return p; | ||
| } | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| // Ruby class name → file path conversion | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| /** | ||
| * Converts a Ruby class name to a file path under lib/api/. | ||
| * | ||
| * ::API::Groups → lib/api/groups.rb | ||
| * ::API::Admin::Dictionary → lib/api/admin/dictionary.rb | ||
| * ::API::Ci::Catalog → lib/api/ci/catalog.rb | ||
| * | ||
| * Algorithm: | ||
| * 1. Strip leading `::` | ||
| * 2. Strip the `API` prefix (it maps to lib/api/) | ||
| * 3. Snake_case each remaining segment | ||
| * 4. Join with `/` and append `.rb` | ||
| */ | ||
| function rubyClassNameToApiFilePath(className) { | ||
| // Strip leading :: | ||
| let name = className.replace(/^::/, ''); | ||
| // Strip API:: prefix (the lib/api/ directory IS the API namespace) | ||
| if (name.startsWith('API::')) { | ||
| name = name.slice(5); | ||
| } | ||
| // Split on :: and snake_case each segment | ||
| const parts = name.split('::').filter(Boolean); | ||
| if (parts.length === 0) | ||
| return ''; | ||
| const snakeParts = parts.map((p) => p | ||
| .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') | ||
| .replace(/([a-z\d])([A-Z])/g, '$1_$2') | ||
| .toLowerCase()); | ||
| return `lib/api/${snakeParts.join('/')}.rb`; | ||
| } | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| // Comment stripping (shared with Rails scanner — duplicated for now) | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| function stripComment(line) { | ||
| let result = ''; | ||
| let inSingle = false; | ||
| let inDouble = false; | ||
| let prev = ''; | ||
| for (let i = 0; i < line.length; i++) { | ||
| const ch = line[i]; | ||
| if (ch === '#' && !inSingle && !inDouble) { | ||
| break; | ||
| } | ||
| if (ch === "'" && !inDouble && prev !== '\\') | ||
| inSingle = !inSingle; | ||
| if (ch === '"' && !inSingle && prev !== '\\') | ||
| inDouble = !inDouble; | ||
| result += ch; | ||
| prev = ch; | ||
| } | ||
| return result.trim(); | ||
| } | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| // Block detection | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| /** | ||
| * Regex patterns for Grape DSL constructs. | ||
| * Each pattern is anchored to the start of the (comment-stripped) line. | ||
| */ | ||
| // resource :groups do | resource 'groups' do | resource :groups, requirements: X do | ||
| const RESOURCE_REGEX = /^resource\s+(?::(\w+)|['"]([^'"]+)['"])/; | ||
| // namespace :admin do | namespace 'admin' do | namespace do (anonymous) | ||
| const NAMESPACE_REGEX = /^namespace\s+(?::(\w+)|['"]([^'"]+)['"])?/; | ||
| // segment :foo do (Grape-specific, like namespace but for path segments) | ||
| const SEGMENT_REGEX = /^segment\s+(?::(\w+)|['"]([^'"]+)['"])/; | ||
| // route_param :id do | ||
| const ROUTE_PARAM_REGEX = /^route_param\s+:(\w+)/; | ||
| // group :foo do (Grape alias for resource) | ||
| const GROUP_REGEX = /^group\s+(?::(\w+)|['"]([^'"]+)['"])/; | ||
| // get / post / put / patch / delete / head / options | ||
| // Captures: method, then optionally a path (string or symbol) | ||
| const HTTP_METHOD_REGEX = /^(get|post|put|patch|delete|head|options)\s+(?::(\w+)|['"]([^'"]+)['"])?/; | ||
| // route :any, '*path' (catch-all) | ||
| const ROUTE_ANY_REGEX = /^route\s+:(\w+)\s*,\s*['"]([^'"]+)['"]/; | ||
| // prefix :api | ||
| const PREFIX_REGEX = /^prefix\s+:(\w+)/; | ||
| // version 'v4', using: :path | version :v4 | ||
| const VERSION_REGEX = /^version\s+['"]?(\w+)['"]?/; | ||
| // format :json | ||
| const FORMAT_REGEX = /^format\s+:(\w+)/; | ||
| // mount ::API::Groups | mount API::Groups | ||
| const MOUNT_REGEX = /^mount\s+(::?[A-Z][\w:]*)/; | ||
| // before do | before { | ||
| const BEFORE_REGEX = /^before\s*(do|\{)/; | ||
| // helpers do | helpers do ... end (skip) | ||
| const HELPERS_REGEX = /^helpers\s+do/; | ||
| // params do (skip — param validation, not routing) | ||
| const PARAMS_REGEX = /^params\s+do/; | ||
| // desc '...' do | desc "..." do (skip — documentation) | ||
| const DESC_REGEX = /^desc\s+['"]/; | ||
| // end (block terminator) | ||
| const END_REGEX = /^\s*end\s*$/; | ||
| // allow_access_with_scope :api (skip) | ||
| const ALLOW_SCOPE_REGEX = /^allow_access_with_scope\s+:/; | ||
| // route_setting :authorization, ... (skip) | ||
| const ROUTE_SETTING_REGEX = /^route_setting\s+:/; | ||
| // include Module (skip) | ||
| const INCLUDE_REGEX = /^include\s+/; | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| // Parser | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| function makeRootContext(className, basePath) { | ||
| return { | ||
| pathPrefix: basePath, | ||
| hasAuth: false, | ||
| className, | ||
| currentResource: null, | ||
| }; | ||
| } | ||
| function cloneContext(ctx) { | ||
| return { | ||
| pathPrefix: ctx.pathPrefix, | ||
| hasAuth: ctx.hasAuth, | ||
| className: ctx.className, | ||
| currentResource: ctx.currentResource, | ||
| }; | ||
| } | ||
| function currentCtx(state) { | ||
| return state.contextStack[state.contextStack.length - 1]; | ||
| } | ||
| /** | ||
| * Main parsing function — processes a single Grape API file. | ||
| * | ||
| * @param code File content | ||
| * @param filename Relative path (for reporting) | ||
| * @param className Ruby class name (e.g. 'API::Groups') | ||
| * @param basePath Base path prefix (e.g. '/api/v4') | ||
| * @param apiFiles Map of all API files (for mount resolution) | ||
| * @param visitedFiles Set of already-parsed files (cycle detection) | ||
| * @param allRoutes Accumulator for all parsed routes (across mounts) | ||
| */ | ||
| function parseGrapeFile(code, filename, className, basePath, apiFiles, visitedFiles, allRoutes) { | ||
| // Cycle detection — don't re-parse the same file | ||
| if (visitedFiles.has(filename)) { | ||
| logger_1.logger.warn(`Grape: skipping already-parsed file: ${filename}`); | ||
| return; | ||
| } | ||
| visitedFiles.add(filename); | ||
| const lines = code.split('\n'); | ||
| // State for this parse pass | ||
| const state = { | ||
| lines, | ||
| lineIdx: 0, | ||
| contextStack: [makeRootContext(className, basePath)], | ||
| routes: [], | ||
| filename, | ||
| baseDir: '', | ||
| mounts: [], | ||
| prefix: null, | ||
| version: null, | ||
| visitedFiles, | ||
| apiFiles, | ||
| }; | ||
| // Track block depth for skip blocks (helpers, params, desc) | ||
| // When skipDepth > 0, we're inside a skip block and ignore everything | ||
| // except matching `end` to decrement the depth. | ||
| let skipDepth = 0; | ||
| // Track before-block collection (multiline) | ||
| let inBeforeBlock = false; | ||
| let beforeContent = ''; | ||
| while (state.lineIdx < lines.length) { | ||
| const rawLine = lines[state.lineIdx]; | ||
| const line = stripComment(rawLine); | ||
| const lineNum = state.lineIdx + 1; | ||
| state.lineIdx++; | ||
| if (!line) | ||
| continue; | ||
| // If we're inside a skip block, only look for `end` to exit. | ||
| // v0.9.0 FIX: Count `do`/`end` balance to handle nested blocks | ||
| // inside route handlers (e.g., `if ... end` inside `get do ... end`). | ||
| if (skipDepth > 0) { | ||
| // Count `do` keywords that open new blocks (but NOT `do` that's part | ||
| // of a route declaration we already handled) | ||
| const doCount = (line.match(/\bdo\b/g) || []).length; | ||
| const endCount = (line.match(END_REGEX) || []).length; | ||
| skipDepth += doCount - endCount; | ||
| if (skipDepth <= 0) { | ||
| skipDepth = 0; | ||
| } | ||
| continue; | ||
| } | ||
| // If we're collecting a multiline before block, accumulate content | ||
| if (inBeforeBlock) { | ||
| if (END_REGEX.test(line)) { | ||
| // End of before block — check for auth | ||
| if ((0, grape_auth_1.detectGrapeAuth)(beforeContent)) { | ||
| currentCtx(state).hasAuth = true; | ||
| } | ||
| beforeContent = ''; | ||
| inBeforeBlock = false; | ||
| continue; | ||
| } | ||
| // Accumulate content (skip lines that are just `do` or empty) | ||
| beforeContent += ' ' + line; | ||
| continue; | ||
| } | ||
| // ─── Skip blocks (helpers, params, desc, route_setting, include) ─── | ||
| if (HELPERS_REGEX.test(line) || PARAMS_REGEX.test(line) || DESC_REGEX.test(line)) { | ||
| // These open a `do ... end` block — skip until matching `end` | ||
| // But some `desc` blocks are single-line: `desc 'List groups'` | ||
| // (no `do`). Check if line ends with `do`. | ||
| if (/\bdo\s*$/.test(line) || /\bdo\s+/.test(line)) { | ||
| skipDepth = 1; // do/end balance tracking handles nesting | ||
| continue; | ||
| } | ||
| else { | ||
| // Single-line desc — just skip this line | ||
| continue; | ||
| } | ||
| } | ||
| if (ROUTE_SETTING_REGEX.test(line) || ALLOW_SCOPE_REGEX.test(line) || INCLUDE_REGEX.test(line)) { | ||
| // Single-line statements — skip | ||
| continue; | ||
| } | ||
| // ─── Global configuration (prefix, version, format) ─── | ||
| // Only valid at the root API class level, but we parse them everywhere | ||
| // and apply to the current context's pathPrefix. | ||
| const prefixMatch = line.match(PREFIX_REGEX); | ||
| if (prefixMatch) { | ||
| state.prefix = prefixMatch[1]; | ||
| // Update root context's pathPrefix | ||
| state.contextStack[0].pathPrefix = joinPath('/', state.prefix || ''); | ||
| continue; | ||
| } | ||
| const versionMatch = line.match(VERSION_REGEX); | ||
| if (versionMatch) { | ||
| state.version = versionMatch[1]; | ||
| // Insert version after prefix in root context | ||
| const prefixPart = state.prefix ? `/${state.prefix}` : ''; | ||
| state.contextStack[0].pathPrefix = joinPath(prefixPart, state.version || ''); | ||
| continue; | ||
| } | ||
| if (FORMAT_REGEX.test(line)) { | ||
| // format :json — no path impact, skip | ||
| continue; | ||
| } | ||
| // ─── before blocks (auth detection) ─── | ||
| const beforeMatch = line.match(BEFORE_REGEX); | ||
| if (beforeMatch) { | ||
| if (beforeMatch[1] === '{') { | ||
| // Inline lambda: before { authenticate! } | ||
| const inlineContent = (0, grape_auth_1.extractBeforeBlockContent)(line); | ||
| if (inlineContent !== null && (0, grape_auth_1.detectGrapeAuth)(inlineContent)) { | ||
| currentCtx(state).hasAuth = true; | ||
| } | ||
| } | ||
| else { | ||
| // Multiline: before do ... end | ||
| // Check if content is on the same line | ||
| const sameLineContent = (0, grape_auth_1.extractBeforeBlockContent)(line); | ||
| if (sameLineContent !== null && sameLineContent.trim()) { | ||
| // Content on same line — check immediately | ||
| if ((0, grape_auth_1.detectGrapeAuth)(sameLineContent)) { | ||
| currentCtx(state).hasAuth = true; | ||
| } | ||
| } | ||
| else { | ||
| // Content on subsequent lines — start collecting | ||
| inBeforeBlock = true; | ||
| beforeContent = ''; | ||
| } | ||
| } | ||
| continue; | ||
| } | ||
| // ─── mount ::API::Foo ─── | ||
| const mountMatch = line.match(MOUNT_REGEX); | ||
| if (mountMatch) { | ||
| const mountedClassName = mountMatch[1]; | ||
| state.mounts.push(mountedClassName); | ||
| // Resolve to file path and parse recursively | ||
| const mountedFilePath = rubyClassNameToApiFilePath(mountedClassName); | ||
| if (mountedFilePath && apiFiles.has(mountedFilePath)) { | ||
| const mountedContent = apiFiles.get(mountedFilePath); | ||
| // Mounts inherit the current context's pathPrefix + hasAuth | ||
| const ctx = currentCtx(state); | ||
| parseGrapeFile(mountedContent, mountedFilePath, mountedClassName.replace(/^::/, ''), ctx.pathPrefix, apiFiles, visitedFiles, allRoutes); | ||
| } | ||
| else if (mountedFilePath) { | ||
| logger_1.logger.warn(`Grape: mount target not found: ${mountedClassName} → ${mountedFilePath}`); | ||
| } | ||
| continue; | ||
| } | ||
| // ─── Block-opening constructs (resource, namespace, segment, group, route_param) ─── | ||
| let blockPath = null; | ||
| let blockResource = null; | ||
| const resourceMatch = line.match(RESOURCE_REGEX); | ||
| const namespaceMatch = line.match(NAMESPACE_REGEX); | ||
| const segmentMatch = line.match(SEGMENT_REGEX); | ||
| const groupMatch = line.match(GROUP_REGEX); | ||
| const routeParamMatch = line.match(ROUTE_PARAM_REGEX); | ||
| if (resourceMatch) { | ||
| blockPath = resourceMatch[1] || resourceMatch[2] || ''; | ||
| blockResource = blockPath; | ||
| } | ||
| else if (namespaceMatch) { | ||
| // namespace can be anonymous (no name) — transparent scope | ||
| blockPath = namespaceMatch[1] || namespaceMatch[2] || ''; | ||
| // If empty, it's `namespace do` — transparent (no path change) | ||
| if (!blockPath && /\bdo\s*$/.test(line)) { | ||
| blockPath = ''; | ||
| } | ||
| } | ||
| else if (segmentMatch) { | ||
| blockPath = segmentMatch[1] || segmentMatch[2] || ''; | ||
| } | ||
| else if (groupMatch) { | ||
| blockPath = groupMatch[1] || groupMatch[2] || ''; | ||
| blockResource = blockPath; | ||
| } | ||
| else if (routeParamMatch) { | ||
| // route_param :id → append /:id | ||
| blockPath = `:${routeParamMatch[1]}`; | ||
| } | ||
| if (blockPath !== null && (/\bdo\s*$/.test(line) || /\bdo\s+/.test(line))) { | ||
| // Open a new context | ||
| const newCtx = cloneContext(currentCtx(state)); | ||
| if (blockPath) { | ||
| newCtx.pathPrefix = joinPath(newCtx.pathPrefix, blockPath); | ||
| } | ||
| if (blockResource) { | ||
| newCtx.currentResource = blockResource; | ||
| } | ||
| state.contextStack.push(newCtx); | ||
| continue; | ||
| } | ||
| // ─── Route declarations (get, post, put, patch, delete, head, options) ─── | ||
| const httpMatch = line.match(HTTP_METHOD_REGEX); | ||
| if (httpMatch) { | ||
| const method = httpMatch[1].toUpperCase(); | ||
| // Path is group 2 (symbol) or group 3 (string), or empty (index action) | ||
| const routePath = httpMatch[2] || httpMatch[3] || ''; | ||
| const ctx = currentCtx(state); | ||
| const fullPath = routePath | ||
| ? joinPath(ctx.pathPrefix, routePath) | ||
| : ctx.pathPrefix; | ||
| // Determine controllerAction — use class name + method name | ||
| const actionName = routePath | ||
| ? routePath.replace(/[:/'"]/g, '_').replace(/^_+|_+$/g, '') || 'index' | ||
| : 'index'; | ||
| const controllerAction = `${ctx.className}#${actionName}`; | ||
| state.routes.push({ | ||
| method, | ||
| path: convertParamsToOpenAPI(fullPath), | ||
| controllerAction, | ||
| hasAuth: ctx.hasAuth, | ||
| isCatchAll: false, | ||
| line: lineNum, | ||
| }); | ||
| // v0.9.0 CRITICAL FIX: Route declarations open a `do ... end` block | ||
| // containing the handler code. We must SKIP this block entirely, | ||
| // otherwise the handler's `end` would pop our resource context. | ||
| // Set skipDepth to 1 if the line ends with `do` (multiline block). | ||
| if (/\bdo\s*$/.test(line) || /\bdo\s+/.test(line)) { | ||
| skipDepth = 1; | ||
| } | ||
| continue; | ||
| } | ||
| // ─── catch-all route (route :any, '*path') ─── | ||
| const routeAnyMatch = line.match(ROUTE_ANY_REGEX); | ||
| if (routeAnyMatch) { | ||
| // route :any, '*path' — catch-all, mark as USE (excluded from comparator) | ||
| state.routes.push({ | ||
| method: 'USE', | ||
| path: routeAnyMatch[2], | ||
| controllerAction: `${currentCtx(state).className}#catch_all`, | ||
| hasAuth: currentCtx(state).hasAuth, | ||
| isCatchAll: true, | ||
| line: lineNum, | ||
| }); | ||
| continue; | ||
| } | ||
| // ─── Block terminator (end) ─── | ||
| if (END_REGEX.test(line)) { | ||
| if (state.contextStack.length > 1) { | ||
| state.contextStack.pop(); | ||
| } | ||
| continue; | ||
| } | ||
| // If we get here, the line didn't match any known construct. | ||
| // This is expected — Grape files have lots of Ruby code (method calls, | ||
| // variable assignments, etc.) that isn't routing-related. Skip silently. | ||
| } | ||
| // Append this file's routes to the accumulator | ||
| allRoutes.push(...state.routes); | ||
| } | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| // Directory scanner | ||
| // ───────────────────────────────────────────────────────────────────── | ||
| function shouldExcludeFile(absPath, ignore) { | ||
| const segments = absPath.split(path.sep); | ||
| for (const ig of ignore) { | ||
| if (segments.includes(ig)) | ||
| return true; | ||
| } | ||
| if (segments.includes('spec') || segments.includes('test')) | ||
| return true; | ||
| if (segments.includes('tests')) | ||
| return true; | ||
| return false; | ||
| } | ||
| /** | ||
| * Scans a project for Grape API routes. | ||
| * | ||
| * Looks for: | ||
| * - lib/api/api.rb (root API class — has prefix/version/mount declarations) | ||
| * - lib/api/(subfiles).rb (mounted API classes) | ||
| * | ||
| * If lib/api/api.rb exists, it's parsed first to extract global prefix/version | ||
| * and mount declarations. Each mounted class is then parsed with the correct | ||
| * base path. | ||
| * | ||
| * If no api.rb exists but lib/api/*.rb files are present, each file is parsed | ||
| * independently with no global prefix (rare case — standalone Grape apps). | ||
| * | ||
| * @param dir Project root directory | ||
| * @param ignore Directories to ignore | ||
| * @param authPatterns Additional auth patterns (user-configured, for Rails compat) | ||
| * @param concurrency Parallel file read concurrency | ||
| */ | ||
| async function scanGrape(dir, ignore, authPatterns = [], concurrency = parallel_1.DEFAULT_CONCURRENCY) { | ||
| const absDir = path.resolve(dir); | ||
| // ─── Step 1: Find all Grape API files ─── | ||
| let apiFiles = []; | ||
| try { | ||
| apiFiles = await glob('lib/api/**/*.rb', { | ||
| cwd: absDir, | ||
| absolute: true, | ||
| dot: false, | ||
| nodir: true, | ||
| }); | ||
| } | ||
| catch { | ||
| logger_1.logger.warn(`Could not scan lib/api/ in: ${absDir}`); | ||
| return []; | ||
| } | ||
| apiFiles = apiFiles.filter((f) => !shouldExcludeFile(f, ignore)); | ||
| if (apiFiles.length === 0) { | ||
| logger_1.logger.info('No lib/api/ directory found — skipping Grape scan'); | ||
| return []; | ||
| } | ||
| logger_1.logger.info(`Found ${apiFiles.length} Grape API files in lib/api/`); | ||
| // ─── Step 2: Read all files in parallel ─── | ||
| const readResults = await (0, parallel_1.readFilesParallel)(apiFiles, concurrency); | ||
| // Build map: relative file path → content | ||
| const apiFileContents = new Map(); | ||
| for (const { absPath, content } of readResults) { | ||
| if (content === null) | ||
| continue; | ||
| const relPath = path.relative(absDir, absPath).replace(/\\/g, '/'); | ||
| apiFileContents.set(relPath, content); | ||
| } | ||
| // ─── Step 3: Parse root API class (lib/api/api.rb) if it exists ─── | ||
| const rootApiPath = 'lib/api/api.rb'; | ||
| const visitedFiles = new Set(); | ||
| const allParsedRoutes = []; | ||
| if (apiFileContents.has(rootApiPath)) { | ||
| // Parse root class first — it has prefix/version/mount declarations | ||
| const rootContent = apiFileContents.get(rootApiPath); | ||
| parseGrapeFile(rootContent, rootApiPath, 'API::API', '', // base path is computed from prefix/version during parse | ||
| apiFileContents, visitedFiles, allParsedRoutes); | ||
| } | ||
| else { | ||
| // No root class — parse each file independently with no prefix | ||
| for (const [relPath, content] of apiFileContents) { | ||
| // Derive class name from path: lib/api/groups.rb → API::Groups | ||
| const className = relPath | ||
| .replace(/^lib\/api\//, '') | ||
| .replace(/\.rb$/, '') | ||
| .split('/') | ||
| .map((p) => p.split('_').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join('')) | ||
| .join('::'); | ||
| const fullClassName = `API::${className}`; | ||
| parseGrapeFile(content, relPath, fullClassName, '', apiFileContents, visitedFiles, allParsedRoutes); | ||
| } | ||
| } | ||
| // ─── Step 4: Convert to Route[] ─── | ||
| const routes = allParsedRoutes | ||
| .filter((r) => !r.isCatchAll) // Exclude catch-all routes (like Express USE) | ||
| .map((r) => ({ | ||
| method: r.method, | ||
| path: r.path, | ||
| file: r.controllerAction.split('#')[0].replace(/::/g, '/') + '.rb', | ||
| line: r.line, | ||
| hasAuth: r.hasAuth, | ||
| })); | ||
| // ─── Step 5: Dedup and sort ─── | ||
| const deduped = dedupRoutes(routes); | ||
| deduped.sort((a, b) => { | ||
| if (a.file !== b.file) | ||
| return a.file < b.file ? -1 : 1; | ||
| return a.line - b.line; | ||
| }); | ||
| return deduped; | ||
| } | ||
| function dedupRoutes(routes) { | ||
| const seen = new Set(); | ||
| const result = []; | ||
| for (const r of routes) { | ||
| const key = `${r.method}|${r.path}|${r.file}`; | ||
| if (!seen.has(key)) { | ||
| seen.add(key); | ||
| result.push(r); | ||
| } | ||
| } | ||
| return result; | ||
| } | ||
| /** | ||
| * Detects whether a project uses Grape by checking for lib/api/api.rb | ||
| * or any files under lib/api/. | ||
| */ | ||
| function hasGrapeApi(dir) { | ||
| const apiDir = path.join(dir, 'lib', 'api'); | ||
| try { | ||
| const fs = require('fs'); | ||
| return fs.existsSync(apiDir) && fs.statSync(apiDir).isDirectory(); | ||
| } | ||
| catch { | ||
| return false; | ||
| } | ||
| } | ||
| exports.default = scanGrape; | ||
| //# sourceMappingURL=grape.js.map |
| {"version":3,"file":"grape.js","sourceRoot":"","sources":["../../src/scanners/grape.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"rails.d.ts","sourceRoot":"","sources":["../../src/scanners/rails.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAwOjC,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AA2jBD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CA2Hf;AAiBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,GAAE,MAA4B,GACxC,OAAO,CAAC,KAAK,EAAE,CAAC,CAyHlB;AAeD,eAAe,SAAS,CAAC"} | ||
| {"version":3,"file":"rails.d.ts","sourceRoot":"","sources":["../../src/scanners/rails.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAgPjC,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAmsBD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CA8Kf;AAiBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,GAAE,MAA4B,GACxC,OAAO,CAAC,KAAK,EAAE,CAAC,CAgJlB;AAeD,eAAe,SAAS,CAAC"} |
+209
-17
@@ -47,2 +47,3 @@ "use strict"; | ||
| const rails_auth_1 = require("./rails-auth"); | ||
| const grape_1 = require("./grape"); | ||
| function glob(pattern, options) { | ||
@@ -65,2 +66,3 @@ return new Promise((resolve, reject) => { | ||
| pendingTo: null, | ||
| pendingConcerns: null, | ||
| }; | ||
@@ -75,2 +77,3 @@ } | ||
| pendingTo: ctx.pendingTo, | ||
| pendingConcerns: ctx.pendingConcerns ? [...ctx.pendingConcerns] : null, | ||
| }; | ||
@@ -148,3 +151,3 @@ } | ||
| const CONCERN_DEF_REGEX = /^concern\s+:(\w+)\s+do\s*$/; | ||
| const CONCERNS_USE_REGEX = /concerns:\s*(?::(\w+)|\[([^\]]*)\])/; | ||
| const CONCERNS_USE_REGEX = /concerns:\s*(?::(\w+)|\[([^\]]*)\]|%i\[([^\]]*)\])/; | ||
| /** Match: use_doorkeeper do */ | ||
@@ -222,2 +225,15 @@ const USE_DOORKEEPER_REGEX = /^use_doorkeeper\b/; | ||
| /** | ||
| * v0.9.0: Pushes a route to the appropriate destination. | ||
| * If we're inside a concern definition, routes go to concernCapture.routes. | ||
| * Otherwise, routes go to state.routes (normal emission). | ||
| */ | ||
| function emitRoute(state, route) { | ||
| if (state.concernCapture) { | ||
| state.concernCapture.routes.push(route); | ||
| } | ||
| else { | ||
| state.routes.push(route); | ||
| } | ||
| } | ||
| /** | ||
| * Parses a single-line route declaration (get/post/match/etc.) and pushes | ||
@@ -262,3 +278,3 @@ * the resulting ParsedRoute(s) onto state.routes. | ||
| const controllerAction = applyModulePath(rawControllerAction, currentCtx(state).modulePath); | ||
| state.routes.push({ | ||
| emitRoute(state, { | ||
| method, | ||
@@ -289,3 +305,3 @@ path: convertParamsToOpenAPI(computeFullPath(state, routePath)), | ||
| for (const method of viaMethods) { | ||
| state.routes.push({ | ||
| emitRoute(state, { | ||
| method, | ||
@@ -303,3 +319,3 @@ path: fullPath, | ||
| if (rootMatch) { | ||
| state.routes.push({ | ||
| emitRoute(state, { | ||
| method: 'GET', | ||
@@ -317,3 +333,3 @@ path: '/', | ||
| // Engine mounts are middleware — mark as USE so comparator excludes them | ||
| state.routes.push({ | ||
| emitRoute(state, { | ||
| method: 'USE', | ||
@@ -488,3 +504,3 @@ path: mountMatch[2], | ||
| const routePath = r.pathSuffix; // e.g. '', '/new', '/:id', '/:id/edit' | ||
| state.routes.push({ | ||
| emitRoute(state, { | ||
| method: r.method, | ||
@@ -497,2 +513,104 @@ path: convertParamsToOpenAPI(joinPath(basePath, pathSegment, routePath.replace(/:id\b/g, isSingular ? '' : paramName))), | ||
| } | ||
| // v0.9.0: Expand concerns (concerns: :name or concerns: [:a, :b] or %i[a b]) | ||
| // Also check for pendingConcerns from with_options blocks. | ||
| const concernsMatch = modifiers.match(CONCERNS_USE_REGEX); | ||
| const concernNames = []; | ||
| if (concernsMatch) { | ||
| if (concernsMatch[1]) { | ||
| // Single symbol: concerns: :approvable | ||
| concernNames.push(concernsMatch[1]); | ||
| } | ||
| else if (concernsMatch[2]) { | ||
| // Array: concerns: [:foo, :bar] | ||
| const raw = concernsMatch[2]; | ||
| concernNames.push(...raw.split(/[,\s]+/).map((s) => s.replace(/^:/, '').trim()).filter(Boolean)); | ||
| } | ||
| else if (concernsMatch[3]) { | ||
| // Percent-i: concerns: %i[foo bar] | ||
| const raw = concernsMatch[3]; | ||
| concernNames.push(...raw.split(/[,\s]+/).map((s) => s.replace(/^:/, '').trim()).filter(Boolean)); | ||
| } | ||
| } | ||
| // v0.9.0: Also apply pendingConcerns from with_options context | ||
| if (ctx.pendingConcerns) { | ||
| concernNames.push(...ctx.pendingConcerns); | ||
| } | ||
| for (const concernName of concernNames) { | ||
| const concernRoutes = state.concerns.get(concernName); | ||
| if (!concernRoutes) { | ||
| logger_1.logger.warn(`Concern ':${concernName}' not found — skipping expansion`); | ||
| continue; | ||
| } | ||
| // v0.9.0: Replay each concern route with the current context. | ||
| // The concern's captured routes have paths like '/approve' (member) or | ||
| // '/search' (collection). We need to prepend: | ||
| // - basePath (current namespace prefix) | ||
| // - pathSegment (the resource name, e.g. 'tags') | ||
| // - For member routes: the resource's param (e.g. '/{id}') | ||
| // | ||
| // The challenge: we don't know if a concern route is member or collection | ||
| // from the path alone. We stored this info in the concern's captured | ||
| // routes via the memberMode context, but ParsedRoute doesn't have a | ||
| // memberMode field. | ||
| // | ||
| // Heuristic: if the concern route's path starts with '/:' it was a | ||
| // member route that already has the param. Otherwise, we check if the | ||
| // concern was captured inside a member block by looking at the route's | ||
| // controllerAction — if it contains 'member', treat as member route. | ||
| // | ||
| // Better approach: store memberMode in the concern capture. For now, | ||
| // we use a simpler heuristic: concern routes captured inside `member do` | ||
| // blocks have paths that DON'T start with the resource param. We need | ||
| // to add the param for member routes. | ||
| // | ||
| // Actually, the cleanest fix: when capturing concern routes, record | ||
| // whether each was inside a member block. Let me add that to ParsedRoute | ||
| // as an optional field... but that changes the type. | ||
| // | ||
| // Simplest v0.9.0 approach: check if the concern name suggests member | ||
| // routes (e.g., 'approvable' has 'approve'/'reject' which are member | ||
| // actions). This is fragile. | ||
| // | ||
| // BEST approach for v0.9.0: re-parse the concern definition with the | ||
| // current resource context, so the paths are computed correctly. | ||
| // But that requires storing the concern's SOURCE, not just parsed routes. | ||
| // | ||
| // For now, I'll use the heuristic: if the concern route's path does NOT | ||
| // contain the resource param (no '/:' prefix), and the concern was | ||
| // defined with `member do`, we add the param. | ||
| // | ||
| // Actually, let me just check: did the concern definition contain | ||
| // `member do`? If so, ALL its routes are member routes and need the param. | ||
| // Check if the concern definition used member blocks | ||
| // (We stored this info in the concern's routes — if any route was | ||
| // captured inside memberMode='member', we need to add the param.) | ||
| // | ||
| // Since we can't easily tell from ParsedRoute, let's use a different | ||
| // approach: store the concern's raw source and re-parse it with the | ||
| // current context. This is the most correct approach. | ||
| // | ||
| // For v0.9.0, I'll use the simple heuristic: prepend the resource's | ||
| // param to ALL concern routes. This works for Mastodon's `:approvable` | ||
| // concern (which only has member routes). It's wrong for concerns with | ||
| // collection routes, but that's a documented v0.9.0 limitation. | ||
| for (const cr of concernRoutes) { | ||
| // Check if this looks like a member route (heuristic: path doesn't | ||
| // start with a known collection prefix like 'search', 'batch', etc.) | ||
| // Actually, let's just prepend the param for all concern routes. | ||
| // The concern's routes were captured inside `member do`, so they're | ||
| // all member routes. | ||
| // | ||
| // v0.9.0: We prepend the resource's param to make the path correct | ||
| // for member routes. Collection routes in concerns are rare. | ||
| const memberPrefix = isSingular ? '' : paramName; | ||
| const fullPath = joinPath(basePath, pathSegment, memberPrefix, cr.path); | ||
| emitRoute(state, { | ||
| method: cr.method, | ||
| path: convertParamsToOpenAPI(fullPath), | ||
| controllerAction: `${fullControllerName}#${cr.controllerAction.split('#')[1] || 'unknown'}`, | ||
| isRedirect: cr.isRedirect, | ||
| line: lineNum, | ||
| }); | ||
| } | ||
| } | ||
| // If line ends with `do`, open a new context for nested routes | ||
@@ -552,3 +670,3 @@ if (/\bdo\s*$/.test(modifiers) || /\bdo\s+/.test(modifiers)) { | ||
| : joinPath(ctx.pathPrefix, action); | ||
| state.routes.push({ | ||
| emitRoute(state, { | ||
| method, | ||
@@ -655,3 +773,3 @@ path: convertParamsToOpenAPI(path), | ||
| for (const r of deviseRoutes) { | ||
| state.routes.push({ | ||
| emitRoute(state, { | ||
| method: r.method, | ||
@@ -684,2 +802,4 @@ path: convertParamsToOpenAPI(joinPath(basePath, r.path)), | ||
| baseDir, | ||
| concernCapture: null, | ||
| concernDepth: 0, | ||
| }; | ||
@@ -741,3 +861,3 @@ while (state.lineIdx < state.lines.length) { | ||
| } | ||
| // with_options(...) do — captures to: option for inner routes | ||
| // with_options(...) do — captures to: and concerns: options for inner routes | ||
| const withOptionsMatch = line.match(WITH_OPTIONS_REGEX); | ||
@@ -747,3 +867,2 @@ if (withOptionsMatch && /\bdo\s*$/.test(line)) { | ||
| // v0.8.1: Extract to: 'controller#action' from with_options arguments | ||
| // and apply it to inner routes that don't have their own to: mapping. | ||
| const toMatch = withOptionsMatch[1].match(/to:\s*['"]([^'"]+)['"]/); | ||
@@ -753,12 +872,51 @@ if (toMatch) { | ||
| } | ||
| // v0.9.0: Extract concerns: :name or concerns: [:a, :b] or %i[a b] | ||
| const concernsMatch = withOptionsMatch[1].match(CONCERNS_USE_REGEX); | ||
| if (concernsMatch) { | ||
| const concernNames = []; | ||
| if (concernsMatch[1]) { | ||
| concernNames.push(concernsMatch[1]); | ||
| } | ||
| else if (concernsMatch[2]) { | ||
| const raw = concernsMatch[2]; | ||
| concernNames.push(...raw.split(/[,\s]+/).map((s) => s.replace(/^:/, '').trim()).filter(Boolean)); | ||
| } | ||
| else if (concernsMatch[3]) { | ||
| const raw = concernsMatch[3]; | ||
| concernNames.push(...raw.split(/[,\s]+/).map((s) => s.replace(/^:/, '').trim()).filter(Boolean)); | ||
| } | ||
| if (concernNames.length > 0) { | ||
| newCtx.pendingConcerns = concernNames; | ||
| } | ||
| } | ||
| state.contextStack.push(newCtx); | ||
| continue; | ||
| } | ||
| // concern :name do — define a concern (reusable route block) | ||
| // concern :name do — v0.9.0: capture inner routes for later expansion | ||
| const concernDefMatch = line.match(CONCERN_DEF_REGEX); | ||
| if (concernDefMatch) { | ||
| // For v0.8.0 we treat concern definitions as transparent scopes — | ||
| // their inner routes are recorded but concerns: :name usage doesn't | ||
| // re-expand them. (Full concern expansion is a v0.9.0 goal.) | ||
| state.contextStack.push(cloneContext(currentCtx(state))); | ||
| // v0.9.0 CRITICAL FIX: Use a FRESH context (empty pathPrefix) for the | ||
| // concern definition. The concern's routes should have RELATIVE paths | ||
| // (e.g., '/approve', not '/api/v1/admin/trends/approve'). | ||
| // When the concern is expanded via `concerns: :name`, the expansion | ||
| // site's context provides the correct prefix. | ||
| // | ||
| // We DO preserve the modulePath and pendingTo from the parent context, | ||
| // because concerns can use `controller:` overrides and `to:` mappings. | ||
| const parentCtx = currentCtx(state); | ||
| const freshCtx = { | ||
| pathPrefix: '', | ||
| modulePath: parentCtx.modulePath, | ||
| currentResource: null, | ||
| memberMode: 'none', | ||
| pendingTo: parentCtx.pendingTo, | ||
| pendingConcerns: null, | ||
| }; | ||
| state.contextStack.push(freshCtx); | ||
| state.concernCapture = { | ||
| name: concernDefMatch[1], | ||
| routes: [], | ||
| startDepth: state.contextStack.length, | ||
| }; | ||
| state.concernDepth = 1; | ||
| continue; | ||
@@ -780,2 +938,14 @@ } | ||
| if (END_REGEX.test(line)) { | ||
| // v0.9.0: Check if we're closing a concern definition | ||
| if (state.concernCapture && state.contextStack.length === state.concernCapture.startDepth) { | ||
| // Store captured routes in the concerns map | ||
| state.concerns.set(state.concernCapture.name, state.concernCapture.routes); | ||
| state.concernCapture = null; | ||
| state.concernDepth = 0; | ||
| // Pop the context we pushed for the concern | ||
| if (state.contextStack.length > 1) { | ||
| state.contextStack.pop(); | ||
| } | ||
| continue; | ||
| } | ||
| if (state.contextStack.length > 1) { | ||
@@ -926,3 +1096,25 @@ state.contextStack.pop(); | ||
| const deduped = dedupRoutes(routes); | ||
| deduped.sort((a, b) => { | ||
| // ─── Step 7: v0.9.0 — Auto-invoke Grape scanner if lib/api/ exists ─── | ||
| // Rails projects that use Grape (e.g. GitLab) mount ::API::API in routes.rb. | ||
| // The Grape routes are defined in lib/api/*.rb (a completely different DSL). | ||
| // We detect this and merge Grape routes into the Rails routes. | ||
| const apiDir = path.join(absDir, 'lib', 'api'); | ||
| let grapeRoutes = []; | ||
| try { | ||
| const fs = require('fs'); | ||
| if (fs.existsSync(apiDir) && fs.statSync(apiDir).isDirectory()) { | ||
| logger_1.logger.info('Detected lib/api/ directory — running Grape scanner as second pass...'); | ||
| grapeRoutes = await (0, grape_1.scanGrape)(dir, ignore, authPatterns, concurrency); | ||
| if (grapeRoutes.length > 0) { | ||
| logger_1.logger.success(`Found ${grapeRoutes.length} Grape API routes in lib/api/`); | ||
| } | ||
| } | ||
| } | ||
| catch (err) { | ||
| logger_1.logger.warn(`Grape scan failed: ${err instanceof Error ? err.message : String(err)}`); | ||
| } | ||
| // Merge Rails + Grape routes | ||
| const allRoutes = [...deduped, ...grapeRoutes]; | ||
| const allDeduped = dedupRoutes(allRoutes); | ||
| allDeduped.sort((a, b) => { | ||
| if (a.file !== b.file) | ||
@@ -932,3 +1124,3 @@ return a.file < b.file ? -1 : 1; | ||
| }); | ||
| return deduped; | ||
| return allDeduped; | ||
| } | ||
@@ -935,0 +1127,0 @@ function dedupRoutes(routes) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"rails.js","sourceRoot":"","sources":["../../src/scanners/rails.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"rails.js","sourceRoot":"","sources":["../../src/scanners/rails.ts"],"names":[],"mappings":"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"} |
+1
-1
| { | ||
| "name": "shadowaudit", | ||
| "version": "0.8.2", | ||
| "version": "0.9.0", | ||
| "description": "Static API security scanner — detects undocumented and unauthenticated Express.js routes before they reach production", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
+3
-3
@@ -43,3 +43,3 @@ # shadowaudit | ||
| ```yaml | ||
| - uses: darkmaster0345/shadow-Audit@v0.8.2 | ||
| - uses: darkmaster0345/shadow-Audit@v0.9.0 | ||
| with: | ||
@@ -308,3 +308,3 @@ dir: './src' | ||
| "tool": "shadowaudit", | ||
| "version": "0.8.2", | ||
| "version": "0.9.0", | ||
| "timestamp": "2026-01-15T12:00:00.000Z", | ||
@@ -347,3 +347,3 @@ "stats": { "total": 7, "documented": 5, "undocumented": 2, "critical": 2, "high": 0, "info": 0 } | ||
| ╔════════════════════════════════╗ | ||
| ║ shadowaudit v0.8.2 ║ | ||
| ║ shadowaudit v0.9.0 ║ | ||
| ║ API Shadow Route Scanner ║ | ||
@@ -350,0 +350,0 @@ ╚════════════════════════════════╝ |
610570
12.38%112
7.69%9111
12.38%23
9.52%