class OutputBuilderCommon

Defined in:

output_builder/common.cr

Constant Summary

HANDLED_PARAM_TYPES = Set {"header", "cookie", "query", "path", "extra", "flag", "argument", "env", "form", "json"}

Parameter kinds already covered by the dedicated render sections above (trees, named lists, query params baked into URL, or body payloads).

MOBILE_METADATA_KEYS = ["via", "query", "action", "category", "host", "package", "component_type", "exported", "explicit", "permission", "read_permission", "write_permission", "grant_uri_permissions", "path_permissions", "extras"]

Fixed order so plain output is deterministic. The protocol drives the prefix and "path" comes from path params, so neither is repeated here. component_type/exported/explicit appear on explicit-intent (filter-less exported) and provider surfaces; the *_permission / grant_uri_permissions / path_permissions keys only on providers. Absent keys are skipped per endpoint.

MOBILE_PROTOCOL_LABELS = {"mobile-scheme" => "SCHEME", "android-intent" => "INTENT", "universal-link" => "UNIVERSAL", "android-provider" => "PROVIDER"}

Mobile entry points keep method = "GET" internally; the protocol carries the real semantics and drives the display prefix.

PARAM_NAME_FIELDS = [{"extra", "extras"}, {"flag", "flags"}, {"argument", "arguments"}, {"env", "env"}]

Parameter kinds drawn as one cyan comma-joined line of names, in emission order: {param_type, label}.

PARAM_TREE_FIELDS = [{"header", "headers", ": "}, {"cookie", "cookies", "="}]

Parameter kinds drawn as an indented tree under a ○ <label>: header, in emission order: {param_type, label, name/value separator}. Both are green and both mark params the analyzer could not resolve; the separator follows the wire syntax of the thing being printed (Name: value for a header, name=value for a cookie).

Instance Method Summary

Instance methods inherited from class OutputBuilder

analyzer_failures : Array(AnalyzerFailure) analyzer_failures, analyzer_failures=(analyzer_failures : Array(AnalyzerFailure)) analyzer_failures=, bake_endpoint(url : String, params : Array(Param)) bake_endpoint, io : IO io, io=(io : IO) io=, logger : NoirLogger logger, ob_puts(message) ob_puts, output_file : String output_file, print(endpoints : Array(Endpoint), passive_results : Array(PassiveScanResult))
print
print

Constructor methods inherited from class OutputBuilder

new(options : Hash(String, YAML::Any)) new

Instance Method Detail

def print(endpoints : Array(Endpoint), passive_results : Array(PassiveScanResult)) #

The plain report is the only format that frames itself — a heading over the endpoint list, and the passive-scan findings appended below a second one. Both used to sit in NoirRunner#report, which forced the runner to special-case "is this the default format?" on either side of a dispatch that otherwise treats every format alike.


[View source]
def print(endpoints : Array(Endpoint)) #

[View source]