mirror of
https://github.com/lunchcat/sif.git
synced 2026-01-14 05:46:33 -08:00
introduce ScanResult interface and generic NewModuleResult constructor
for compile-time type safety when creating module results.
- add pkg/scan/result.go with ScanResult interface and named slice types
- add typed shodanMetadata struct to replace map[string]interface{}
- refactor supabase.go with typed response structs and json.RawMessage
- add ResultType() methods to all scan result types
- update sif.go to use NewModuleResult generic constructor
this provides type safety without breaking JSON serialization.
59 lines
2.8 KiB
Go
59 lines
2.8 KiB
Go
/*
|
|
·━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━·
|
|
: :
|
|
: █▀ █ █▀▀ · Blazing-fast pentesting suite :
|
|
: ▄█ █ █▀ · BSD 3-Clause License :
|
|
: :
|
|
: (c) 2022-2025 vmfunc (Celeste Hickenlooper), xyzeva, :
|
|
: lunchcat alumni & contributors :
|
|
: :
|
|
·━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━·
|
|
*/
|
|
|
|
package scan
|
|
|
|
// Named slice types for scan results.
|
|
// These provide better type safety and allow method implementations.
|
|
type (
|
|
HeaderResults []HeaderResult
|
|
DirectoryResults []DirectoryResult
|
|
CloudStorageResults []CloudStorageResult
|
|
DorkResults []DorkResult
|
|
SubdomainTakeoverResults []SubdomainTakeoverResult
|
|
)
|
|
|
|
// ScanResult is the interface that all scan result types implement.
|
|
// This enables type-safe handling of heterogeneous scan results.
|
|
type ScanResult interface {
|
|
// ResultType returns the unique identifier for this result type.
|
|
ResultType() string
|
|
}
|
|
|
|
// ResultType implementations for pointer result types.
|
|
|
|
func (r *ShodanResult) ResultType() string { return "shodan" }
|
|
func (r *SQLResult) ResultType() string { return "sql" }
|
|
func (r *LFIResult) ResultType() string { return "lfi" }
|
|
func (r *CMSResult) ResultType() string { return "cms" }
|
|
|
|
// ResultType implementations for slice result types.
|
|
|
|
func (r HeaderResults) ResultType() string { return "headers" }
|
|
func (r DirectoryResults) ResultType() string { return "dirlist" }
|
|
func (r CloudStorageResults) ResultType() string { return "cloudstorage" }
|
|
func (r DorkResults) ResultType() string { return "dork" }
|
|
func (r SubdomainTakeoverResults) ResultType() string { return "subdomain_takeover" }
|
|
|
|
// Compile-time interface satisfaction checks.
|
|
var (
|
|
_ ScanResult = (*ShodanResult)(nil)
|
|
_ ScanResult = (*SQLResult)(nil)
|
|
_ ScanResult = (*LFIResult)(nil)
|
|
_ ScanResult = (*CMSResult)(nil)
|
|
_ ScanResult = HeaderResults(nil)
|
|
_ ScanResult = DirectoryResults(nil)
|
|
_ ScanResult = CloudStorageResults(nil)
|
|
_ ScanResult = DorkResults(nil)
|
|
_ ScanResult = SubdomainTakeoverResults(nil)
|
|
)
|