{"record":{"id":"74d0a087fe0a7664","repo":"kgretzky/evilginx2","slug":"edit-image-url-must-be-absolute","errorCode":null,"errorMessage":"edit: image url must be absolute","messagePattern":"edit: image url must be absolute","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/terminal.go","lineNumber":994,"sourceCode":"\t\t\t\t\tl.Info = val\n\t\t\t\t\tdo_update = true\n\t\t\t\t\tlog.Info(\"info = '%s'\", l.Info)\n\t\t\t\tcase \"og_title\":\n\t\t\t\t\tl.OgTitle = val\n\t\t\t\t\tdo_update = true\n\t\t\t\t\tlog.Info(\"og_title = '%s'\", l.OgTitle)\n\t\t\t\tcase \"og_desc\":\n\t\t\t\t\tl.OgDescription = val\n\t\t\t\t\tdo_update = true\n\t\t\t\t\tlog.Info(\"og_desc = '%s'\", l.OgDescription)\n\t\t\t\tcase \"og_image\":\n\t\t\t\t\tif val != \"\" {\n\t\t\t\t\t\tu, err := url.Parse(val)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"edit: %v\", err)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif !u.IsAbs() {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"edit: image url must be absolute\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tl.OgImageUrl = u.String()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tl.OgImageUrl = \"\"\n\t\t\t\t\t}\n\t\t\t\t\tdo_update = true\n\t\t\t\t\tlog.Info(\"og_image = '%s'\", l.OgImageUrl)\n\t\t\t\tcase \"og_url\":\n\t\t\t\t\tif val != \"\" {\n\t\t\t\t\t\tu, err := url.Parse(val)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"edit: %v\", err)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif !u.IsAbs() {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"edit: site url must be absolute\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tl.OgUrl = u.String()\n\t\t\t\t\t} else {","sourceCodeStart":976,"sourceCodeEnd":1012,"githubUrl":"https://github.com/kgretzky/evilginx2/blob/4c0988a1d9db4d172a185e979a38bfd0efdb5830/core/terminal.go#L976-L1012","documentation":"In 'lures edit <id> og_image <value>', the provided image URL parsed but is not absolute (no scheme/host, e.g. a relative path). The Open Graph image URL must be a full absolute URL, so the edit is rejected and the lure is not updated.","triggerScenarios":"Running `lures edit <id> og_image` with a relative or scheme-less value such as '/images/og.png' or 'example.com/og.png'.","commonSituations":"Configuring social-share preview images using a path relative to the phishing host instead of a fully qualified URL.","solutions":["Provide a fully qualified URL: `lures edit 0 og_image https://example.com/og.png`","Check the value starts with http:// or https:// before running the command","Pass an empty string if the goal is to remove the og image"],"exampleFix":"// before\nlures edit 0 og_image /static/og.png\n// after\nlures edit 0 og_image https://example.com/static/og.png","handlingStrategy":"validation","validationCode":"u, err := url.Parse(val)\nif err != nil || !u.IsAbs() {\n    return errors.New(\"og_image must be absolute, e.g. https://example.com/og.png\")\n}","typeGuard":"func isAbsoluteURL(s string) bool {\n    u, err := url.Parse(s)\n    return err == nil && u.IsAbs()\n}","tryCatchPattern":"if !isAbsoluteURL(val) {\n    return errors.New(\"og_image must include scheme and host\")\n}","preventionTips":["Always give og_image a fully qualified https:// URL","Never use site-relative paths for OG metadata","Pass an empty string to clear the field"],"tags":["cli","url-validation","og-metadata","evilginx2"],"backgroundTag":"invalid-url-format","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"}