trixie/main.go
Elara6331 2b23f0caef
Some checks failed
ci/woodpecker/tag/manifest unknown status
ci/woodpecker/tag/build/1 Pipeline failed
ci/woodpecker/tag/build/2 Pipeline failed
Initial Commit
2025-05-16 16:39:55 +02:00

88 lines
1.9 KiB
Go

package main
import (
"embed"
"io/fs"
"log/slog"
"net/http"
"net/url"
"os"
"go.elara.ws/loggers"
"go.elara.ws/salix"
)
var log = slog.New(loggers.NewPretty(os.Stderr, loggers.Options{Level: slog.LevelInfo}))
//go:embed templates
var tmpls embed.FS
func main() {
baseURL, ok := os.LookupEnv("INSTANCE_URL")
if !ok {
log.Error("INSTANCE_URL environment variable must be set")
os.Exit(1)
}
_, ok = os.LookupEnv("SHARED_SECRET")
if !ok {
log.Error("SHARED_SECRET environment variable must be set")
os.Exit(1)
}
u, err := url.ParseRequestURI(baseURL)
if err != nil {
log.Error("Invalid INSTANCE_URL", slog.Any("error", err))
os.Exit(1)
}
tmplFS, err := fs.Sub(tmpls, "templates")
if err != nil {
log.Error("Error getting templates subdirectory", slog.Any("error", err))
os.Exit(1)
}
ns := salix.New().
WithEscapeHTML(true).
WithWriteOnSuccess(true).
WithVarMap(map[string]any{"instURL": u})
err = ns.ParseFSGlob(tmplFS, "*")
if err != nil {
log.Error("Error parsing templates", slog.Any("error", err))
os.Exit(1)
}
mux := http.NewServeMux()
mux.Handle("/", handleErr(ns, func(w http.ResponseWriter, r *http.Request) error {
return ns.ExecuteTemplate(w, "form.html", nil)
}))
mux.Handle("/register", handleErr(ns, func(w http.ResponseWriter, r *http.Request) error {
err := r.ParseForm()
if err != nil {
return err
}
form := r.PostForm
// Check the automated script honeypot
if form.Get("nothing") != "" {
w.WriteHeader(http.StatusForbidden)
}
err = registerUser(form.Get("username"), form.Get("display_name"), form.Get("password"), *u)
if err != nil {
return err
}
return ns.ExecuteTemplate(w, "success.html", map[string]any{"dispName": form.Get("display_name")})
}))
if addr := os.Getenv("LISTEN_ADDR"); addr != "" {
http.ListenAndServe(addr, realIP(mux))
} else {
http.ListenAndServe(":2264", realIP(mux))
}
}