tmpchat / cmd / frontend / main.go

@ 57cd687b81d1640c584c2673280ec456a5463380 | history


package main

import (
	"fmt"
	"html/template"
	"io/ioutil"
	"log"
	"net/http"

	"github.com/google/uuid"
	"github.com/ianschenck/envflag"
)

func getTemplate(desc string, funcMap template.FuncMap) *template.Template {
	t, _ := ioutil.ReadFile(
		fmt.Sprintf("templates/%s.gohtml", desc),
	)
	return template.Must(template.New(desc).Funcs(funcMap).Parse(string(t)))
}

type tmpchatHandler struct {
	signalingURL string
}

func (h tmpchatHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	channelName := r.URL.Path[1:] // Omit leading slash in path
	var tmpl *template.Template
	fm := template.FuncMap{
		"safeURL": func(u string) template.URL { return template.URL(u) },
	}
	if channelName == "" {
		tmpl = getTemplate("tmpchat-index", fm)
	} else {
		tmpl = getTemplate("tmpchat-channel", fm)
	}
	userID := uuid.New().String()
	d := tmpchatPageData{
		channelName,
		userID,
		h.signalingURL,
	}
	_ = tmpl.Execute(w, d)
}

type tmpchatPageData struct {
	ChannelName  string
	UserID       string
	SignalingURL string
}

func main() {
	var signalingURL string
	envflag.StringVar(&signalingURL, "TMPCHAT_SIGNALING_URL", "ws://signaling:5050", "URL for tmpchat signaling server")
	envflag.Parse()
	http.Handle("/", tmpchatHandler{signalingURL})
	log.Fatal(http.ListenAndServe(":8080", nil))
}