yellow.git


yellow

~ opinionated web scanning pipeline for pentesters in a hurry
git clone https://github.com/djnnvx/yellow.git
log | files | refs | archive | README | LICENSE

robotstxt_test.go (1794B)

      1 package scan
      2 
      3 import (
      4 	"net/http"
      5 	"net/http/httptest"
      6 	"os"
      7 	"testing"
      8 
      9 	"evil.djnn.sh/djnn/yellow/core"
     10 )
     11 
     12 const robotsBody = "User-agent: *\nDisallow: /admin\nDisallow: /backup\n"
     13 
     14 func TestRobotsTxtSavesBody(t *testing.T) {
     15 	srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
     16 		_, _ = w.Write([]byte(robotsBody))
     17 	}))
     18 	defer srv.Close()
     19 
     20 	dir := t.TempDir()
     21 	if err := (&RobotsTxt{}).Run(&core.Context{Domain: srv.URL, ScanPath: dir}); err != nil {
     22 		t.Fatalf("Run returned %v", err)
     23 	}
     24 
     25 	got, err := os.ReadFile(dir + "/robots.txt")
     26 	if err != nil {
     27 		t.Fatalf("robots.txt not written: %v", err)
     28 	}
     29 	if string(got) != robotsBody {
     30 		t.Errorf("got %q, want %q", got, robotsBody)
     31 	}
     32 }
     33 
     34 func TestRobotsTxt404WritesNothing(t *testing.T) {
     35 	srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
     36 		http.NotFound(w, r)
     37 	}))
     38 	defer srv.Close()
     39 
     40 	dir := t.TempDir()
     41 	if err := (&RobotsTxt{}).Run(&core.Context{Domain: srv.URL, ScanPath: dir}); err != nil {
     42 		t.Fatalf("Run returned %v", err)
     43 	}
     44 
     45 	if _, err := os.Stat(dir + "/robots.txt"); !os.IsNotExist(err) {
     46 		t.Error("404 left a robots.txt behind")
     47 	}
     48 }
     49 
     50 func TestSitemapSavesBody(t *testing.T) {
     51 	const body = `<?xml version="1.0"?><urlset><url><loc>https://x/a</loc></url></urlset>`
     52 
     53 	srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
     54 		_, _ = w.Write([]byte(body))
     55 	}))
     56 	defer srv.Close()
     57 
     58 	dir := t.TempDir()
     59 	if err := (&Sitemap{}).Run(&core.Context{Domain: srv.URL, ScanPath: dir}); err != nil {
     60 		t.Fatalf("Run returned %v", err)
     61 	}
     62 
     63 	got, err := os.ReadFile(dir + "/sitemap.xml")
     64 	if err != nil {
     65 		t.Fatalf("sitemap.xml not written: %v", err)
     66 	}
     67 	if string(got) != body {
     68 		t.Errorf("got %q, want %q", got, body)
     69 	}
     70 }