From 5e161373422b795400c7d8d4ef88ddceaea084a4 Mon Sep 17 00:00:00 2001 From: Maxim Lebedev Date: Wed, 6 Dec 2023 00:27:16 +0600 Subject: [PATCH] :technologist: Created user domain page emulation tool --- tools/homepage/main.go | 86 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 tools/homepage/main.go diff --git a/tools/homepage/main.go b/tools/homepage/main.go new file mode 100644 index 0000000..61258a4 --- /dev/null +++ b/tools/homepage/main.go @@ -0,0 +1,86 @@ +// This package represent a simple tool for emulate simple localhost user domain +// onepage with support localhost IndieAuth instance. +package main + +import ( + "flag" + "fmt" + "log" + "net/http" + "os" + "time" + + "source.toby3d.me/toby3d/auth/internal/common" +) + +const ( + template string = `` + + `` + + `` + + `Playground homepage` + + `%[1]s` + + `` + + `` + + `
` + + `` + + `` + + `` + + `` + + `` + + `` + + `` + + `
` + + `` + + `` + templateLinksDeprecated string = `` + + `` + templateLinksModern string = `` +) + +var ( + target *string = flag.String("target", "http://127.0.0.1:3000", "set specific IndieAuth server addr") + addr *string = flag.String("addr", ":8080", "set specific port for pseudo homepage") + deprecated *bool = flag.Bool("deprecated", false, "enable deprecated handlers and links") +) + +func main() { + flag.Parse() + + log := log.New(os.Stdout, "homepage\t", log.LstdFlags) + server := http.Server{ + Addr: *addr, + Handler: NewHandler(*addr, *target, *deprecated), + DisableGeneralOptionsHandler: false, + TLSConfig: nil, + ReadTimeout: 500 * time.Millisecond, + ReadHeaderTimeout: 0, + WriteTimeout: 500 * time.Millisecond, + IdleTimeout: 0, + MaxHeaderBytes: 0, + TLSNextProto: nil, + ConnState: nil, + ErrorLog: log, + BaseContext: nil, + ConnContext: nil, + } + + log.Println("started pseudo homepage on", *addr) + if err := server.ListenAndServe(); err != nil { + log.Fatalln(err) + } +} + +func NewHandler(addr, target string, deprecated bool) http.HandlerFunc { + partial := fmt.Sprintf(templateLinksModern, target) + + if deprecated { + partial = fmt.Sprintf(templateLinksDeprecated, target) + } + + tpl := fmt.Sprintf(template, partial, addr, target) + + return func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set(common.HeaderContentType, common.MIMETextHTMLCharsetUTF8) + fmt.Fprint(w, tpl) + } +}