{"record":{"id":"78dcf94b96346bd9","repo":"kgretzky/evilginx2","slug":"lure-for-path-s-not-found","errorCode":null,"errorMessage":"lure for path '%s' not found","messagePattern":"lure for path '(.+?)' not found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"core/config.go","lineNumber":754,"sourceCode":"\t} else {\n\t\treturn nil, fmt.Errorf(\"index out of bounds: %d\", index)\n\t}\n}\n\nfunc (c *Config) GetLureByPath(site string, host string, path string) (*Lure, error) {\n\tfor _, l := range c.lures {\n\t\tif l.Phishlet == site {\n\t\t\tpl, err := c.GetPhishlet(site)\n\t\t\tif err == nil {\n\t\t\t\tif host == l.Hostname || host == pl.GetLandingPhishHost() {\n\t\t\t\t\tif l.Path == path {\n\t\t\t\t\t\treturn l, nil\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"lure for path '%s' not found\", path)\n}\n\nfunc (c *Config) GetPhishlet(site string) (*Phishlet, error) {\n\tpl, ok := c.phishlets[site]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"phishlet '%s' not found\", site)\n\t}\n\treturn pl, nil\n}\n\nfunc (c *Config) GetPhishletNames() []string {\n\treturn c.phishletNames\n}\n\nfunc (c *Config) GetSiteDomain(site string) (string, bool) {\n\tif o, ok := c.phishletConfig[site]; ok {\n\t\treturn o.Hostname, ok\n\t}","sourceCodeStart":736,"sourceCodeEnd":772,"githubUrl":"https://github.com/kgretzky/evilginx2/blob/4c0988a1d9db4d172a185e979a38bfd0efdb5830/core/config.go#L736-L772","documentation":"GetLureByPath exhaustively scanned all lures and found none matching the given site whose hostname (or the phishlet's landing phish host) and path both match. It fires when no lure is registered for that exact site/host/path combination, which can also happen indirectly when the lure references a phishlet that no longer resolves (GetPhishlet error is silently skipped).","triggerScenarios":"Calling cfg.GetLureByPath(site, host, path) where no lure exists with that exact Phishlet/Host/Path combination.","commonSituations":"Path trailing-slash or case mismatches; lure belongs to a different phishlet or host than requested; the lure was deleted or never created; resolving the lure for an incoming request URL that isn't a lure URL.","solutions":["List lures and verify the exact path/host/phishlet combination exists before lookup","Normalize the path (trailing slash, URL-decoding, case) before calling","Create the lure with CreateLure if it should exist"],"exampleFix":"// before\nlure, err := cfg.GetLureByPath(site, host, req.URL.Path)\n// after\npath := strings.TrimSuffix(req.URL.Path, \"/\")\nlure, err := cfg.GetLureByPath(site, host, path)\nif err != nil { /* not a lure URL, handle as normal request */ }","handlingStrategy":"fallback","validationCode":"// normalize path before lookup\np := strings.TrimSuffix(req.URL.Path, \"/\")","typeGuard":null,"tryCatchPattern":"lure, err := cfg.GetLureByPath(site, host, path)\nif err != nil {\n    // treat as non-lure traffic; continue normal proxy handling\n}","preventionTips":["Normalize trailing slashes and case before lookup","Verify phishlet and host match the lure's settings","Handle not-found as normal traffic, not a fatal error"],"tags":["config","lure","not-found","go"],"backgroundTag":"resource-not-found","analyzedSha":"4c0988a1d9db4d172a185e979a38bfd0efdb5830","analyzedAt":"2026-09-05T19:23:07.238Z","contentChangedAt":"2026-09-05T19:23:07.238Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}