Files
hjem/main.go
2026-06-23 14:07:17 -04:00

87 lines
1.6 KiB
Go

package main
import (
"bufio"
_ "embed"
"flag"
"fmt"
"log"
"net/http"
"os"
"path/filepath"
"strings"
"text/template"
)
//go:embed hjem.html
var hjemTemplate string
var port = flag.Int("p", 1437, "set the port for hjem to use")
type HjemData struct {
OS string
Email string
}
func main() {
flag.Parse()
t, err := template.New("hjem").Parse(hjemTemplate)
if err != nil {
panic(err)
}
user_os := "Unknown"
file, err := os.Open("/etc/os-release")
if err != nil {
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
if scanner.Scan() {
user_os = strings.TrimRight(strings.TrimLeft(scanner.Text(), "NAME='"), "'")
}
user_email := "unknown@example.com"
file, err = os.Open(filepath.Join(func() string {
hostname, err := os.UserHomeDir()
if err != nil {
panic(err)
}
return hostname
}(), ".gitconfig"))
if err != nil {
panic(err)
}
defer file.Close()
scanner = bufio.NewScanner(file)
for scanner.Scan() {
text := scanner.Text()
if strings.Contains(text, "email = ") {
user_email = strings.TrimLeft(strings.TrimSpace(text), "email = ")
break
}
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html; charset=utf-8")
err := t.ExecuteTemplate(w, "hjem", HjemData{
OS: user_os,
Email: user_email,
})
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
})
fmt.Printf("Web server is available at http://0.0.0.0:%d\n", *port)
fmt.Println("Press Ctrl+C to stop")
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil))
}