Initial Commit
This commit is contained in:
88
main.go
Normal file
88
main.go
Normal file
@@ -0,0 +1,88 @@
|
||||
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))
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user