77 lines
2.0 KiB
Go
77 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
"sort"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
var counter = 0
|
|
var hostname = os.Getenv("HOSTNAME")
|
|
var showEnvs = os.Getenv("YOSOY_SHOW_ENVS")
|
|
var showFiles = os.Getenv("YOSOY_SHOW_FILES")
|
|
|
|
func handler(w http.ResponseWriter, req *http.Request) {
|
|
if req.RequestURI == "/favicon.ico" {
|
|
w.WriteHeader(http.StatusNotFound)
|
|
return
|
|
}
|
|
|
|
remoteAddr := req.RemoteAddr
|
|
if index := strings.LastIndex(remoteAddr, ":"); index > 0 {
|
|
remoteAddr = remoteAddr[0:index]
|
|
}
|
|
fmt.Printf("[%v] - %v - %v - \"%v %v\"\n", hostname, time.Now().Format(time.RFC3339), remoteAddr, req.Method, req.RequestURI)
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Header().Add("Content-Type", "text/plain")
|
|
fmt.Fprintf(w, "Request URI: %v\n", req.RequestURI)
|
|
fmt.Fprintf(w, "Hostname: %v\n", hostname)
|
|
fmt.Fprintf(w, "Remote IP: %v\n", remoteAddr)
|
|
counter++
|
|
fmt.Fprintf(w, "Called: %v\n", counter)
|
|
fmt.Fprintln(w)
|
|
fmt.Fprintf(w, "HTTP headers:\n")
|
|
headers := make([]string, 0, len(req.Header))
|
|
for k := range req.Header {
|
|
headers = append(headers, k)
|
|
}
|
|
sort.Strings(headers)
|
|
for _, header := range headers {
|
|
headers := req.Header[header]
|
|
for _, h := range headers {
|
|
fmt.Fprintf(w, "%v: %v\n", header, h)
|
|
}
|
|
}
|
|
if strings.ToLower(showEnvs) == "true" || strings.ToLower(showEnvs) == "yes" || strings.ToLower(showEnvs) == "on" || showEnvs == "1" {
|
|
fmt.Fprintln(w)
|
|
fmt.Fprintf(w, "Env variables:\n")
|
|
for _, e := range os.Environ() {
|
|
fmt.Fprintln(w, e)
|
|
}
|
|
}
|
|
if len(showFiles) > 0 {
|
|
files := strings.Split(showFiles, ",")
|
|
for _, file := range files {
|
|
bytes, err := ioutil.ReadFile(file)
|
|
if err != nil {
|
|
fmt.Printf("[%v] - %v - could not read file %v: %v\n", hostname, time.Now().Format(time.RFC3339), file, err)
|
|
continue
|
|
}
|
|
fmt.Fprintln(w)
|
|
fmt.Fprintf(w, "File %v:\n", file)
|
|
contents := string(bytes)
|
|
fmt.Fprintln(w, contents)
|
|
}
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
fmt.Printf("[%v] - %v - yosoy is up!\n", hostname, time.Now().Format(time.RFC3339))
|
|
http.HandleFunc("/", handler)
|
|
http.ListenAndServe(":80", nil)
|
|
}
|