Skip to content
Snippets Groups Projects
main.go 1.64 KiB
Newer Older
  • Learn to ignore specific revisions
  • Bolke de Bruin's avatar
    Bolke de Bruin committed
    package main
    
    import (
    	"crypto/tls"
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	"flag"
    
    	"github.com/prometheus/client_golang/prometheus/promhttp"
    	"github.com/prometheus/client_golang/prometheus"
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	"log"
    	"net/http"
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	"os"
    	"strconv"
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    func main() {
    	port := flag.Int("port", 443, "port to listen on for incoming connections")
    	certFile := flag.String("certfile", "server.pem", "public key certificate file")
    	keyFile := flag.String("keyfile", "key.pem", "private key file")
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	flag.Parse()
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	if *certFile == "" || *keyFile == "" {
    		log.Fatal("Both certfile and keyfile need to be specified")
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	//mux := http.NewServeMux()
    	//mux.HandleFunc("*", HelloServer)
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	log.Printf("Starting remote desktop gateway server")
    	cfg := &tls.Config{}
    	tlsDebug := os.Getenv("SSLKEYLOGFILE")
    	if tlsDebug != "" {
    		w, err := os.OpenFile(tlsDebug, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
    		if err != nil {
    			log.Fatalf("Cannot open key log file %s for writing %s", tlsDebug, err)
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    		}
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    		log.Printf("Key log file set to: %s", tlsDebug)
    		cfg.KeyLogWriter = w
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	}
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	cert, err := tls.LoadX509KeyPair(*certFile, *keyFile)
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	if err != nil {
    		log.Fatal(err)
    	}
    	cfg.Certificates = append(cfg.Certificates, cert)
    	server := http.Server{
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    		Addr:      ":" + strconv.Itoa(*port),
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    		TLSConfig: cfg,
    
    		TLSNextProto: make(map[string]func(*http.Server, *tls.Conn, http.Handler)), // disable http2
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	}
    
    	http.HandleFunc("/remoteDesktopGateway/", handleGatewayProtocol)
    
    	http.Handle("/metrics", promhttp.Handler())
    
    	prometheus.MustRegister(connectionCache)
    	prometheus.MustRegister(legacyConnections)
    	prometheus.MustRegister(websocketConnections)
    
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	err = server.ListenAndServeTLS("", "")
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    	if err != nil {
    		log.Fatal("ListenAndServe: ", err)
    	}
    
    Bolke de Bruin's avatar
    Bolke de Bruin committed
    }