56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
|
package gobustervhost
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/fatih/color"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
white = color.New(color.FgWhite).SprintFunc()
|
||
|
yellow = color.New(color.FgYellow).SprintFunc()
|
||
|
green = color.New(color.FgGreen).SprintFunc()
|
||
|
blue = color.New(color.FgBlue).SprintFunc()
|
||
|
red = color.New(color.FgRed).SprintFunc()
|
||
|
cyan = color.New(color.FgCyan).SprintFunc()
|
||
|
)
|
||
|
|
||
|
// Result represents a single result
|
||
|
type Result struct {
|
||
|
Found bool
|
||
|
Vhost string
|
||
|
StatusCode int
|
||
|
Size int64
|
||
|
Header http.Header
|
||
|
}
|
||
|
|
||
|
// ResultToString converts the Result to it's textual representation
|
||
|
func (r Result) ResultToString() (string, error) {
|
||
|
statusText := yellow("Missed")
|
||
|
if r.Found {
|
||
|
statusText = green("Found")
|
||
|
}
|
||
|
|
||
|
statusCodeColor := white
|
||
|
if r.StatusCode == 200 {
|
||
|
statusCodeColor = green
|
||
|
} else if r.StatusCode >= 300 && r.StatusCode < 400 {
|
||
|
statusCodeColor = cyan
|
||
|
} else if r.StatusCode >= 400 && r.StatusCode < 500 {
|
||
|
statusCodeColor = yellow
|
||
|
} else if r.StatusCode >= 500 && r.StatusCode < 600 {
|
||
|
statusCodeColor = red
|
||
|
}
|
||
|
|
||
|
statusCode := statusCodeColor(fmt.Sprintf("Status: %d", r.StatusCode))
|
||
|
|
||
|
location := r.Header.Get("Location")
|
||
|
locationString := ""
|
||
|
if location != "" {
|
||
|
locationString = blue(fmt.Sprintf(" [--> %s]", location))
|
||
|
}
|
||
|
|
||
|
return fmt.Sprintf("%s: %s %s [Size: %d]%s\n", statusText, r.Vhost, statusCode, r.Size, locationString), nil
|
||
|
}
|