Skip to content
Snippets Groups Projects
main.go 1.47 KiB
Newer Older
  • Learn to ignore specific revisions
  • Lars Seipel's avatar
    Lars Seipel committed
    package main
    
    import (
    	"flag"
    	"fmt"
    	"net/http"
    	"os"
    	"strings"
    
    	"github.com/miekg/dns"
    	"go.uber.org/zap"
    )
    
    var listenAddr = flag.String("listen-addr",
    	getEnvDefault("LISTEN_ADDR", ":8080"),
    	"local address for serving HTTP (`host:port`)")
    
    func main() {
    	flag.Parse()
    	logger, err := zap.NewProduction()
    	if err != nil {
    		fmt.Fprintln(os.Stderr, err)
    		os.Exit(1)
    	}
    	log := logger.Sugar()
    
    	mux := http.NewServeMux()
    	mux.HandleFunc("GET /twm/ask", func(w http.ResponseWriter, r *http.Request) {
    		log := log.With(
    			zap.String("remote_addr", r.RemoteAddr),
    			zap.String("request_method", r.Method),
    			zap.String("request_path", r.URL.Path),
    			zap.String("request_url", r.URL.String()),
    			zap.String("xff", r.Header.Get("X-Forwarded-For")),
    		)
    		domain := r.FormValue("domain")
    		log.Info("handle request", "domain", domain)
    
    		// We don't want to tie down names to a specific h-da.cloud
    		// project, so accept everything beneath users.h-da.cloud.
    		if dns.IsSubDomain("users.h-da.cloud.", strings.TrimSuffix(domain, ".")+".") {
    			w.WriteHeader(204)
    		}
    
    		// Deny everything else
    		w.WriteHeader(403)
    	})
    
    	// For readiness/liveliness indication
    	readyz := func(w http.ResponseWriter, r *http.Request) {
    		w.WriteHeader(200)
    	}
    	livez := readyz
    	mux.HandleFunc("GET /readyz", readyz)
    	mux.HandleFunc("GET /livez", livez)
    
    	log.Fatal(
    		http.ListenAndServe(*listenAddr, mux),
    	)
    
    }
    
    func getEnvDefault(k, def string) string {
    	if v := os.Getenv(k); v != "" {
    		return v
    	}
    	return def
    }