func main() { swaggerSpec, err := spec.New(swaggerJSON, "") if err != nil { log.Fatalln(err) } port := os.Getenv("PORT") if port == "" { port = "0" } host := os.Getenv("HOST") if host == "" { host = "localhost" } api := operations.NewToDoListAPI(swaggerSpec) configureAPI(api) listener, err := net.Listen("tcp", host+":"+port) if err != nil { log.Fatalln(err) } fmt.Printf("serving to do list at http://%s\n", listener.Addr()) if err := http.Serve(listener, api.Serve()); err != nil { log.Fatalln(err) } }
func main() { swaggerSpec, err := spec.New(SwaggerJSON, "") if err != nil { log.Fatalln(err) } parser := flags.NewParser(&opts, flags.Default) parser.ShortDescription = swaggerSpec.Spec().Info.Title parser.LongDescription = swaggerSpec.Spec().Info.Description if _, err := parser.Parse(); err != nil { os.Exit(1) } api := operations.NewToDoListAPI(swaggerSpec) configureAPI(api) handler := api.Serve() httpServer := &graceful.Server{Server: new(http.Server)} httpServer.Handler = handler listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", opts.Host, opts.Port)) if err != nil { log.Fatalln(err) } fmt.Printf("serving to do list at http://%s\n", listener.Addr()) go func() { if err := httpServer.Serve(tcpKeepAliveListener{listener.(*net.TCPListener)}); err != nil { log.Fatalln(err) } }() httpsServer := &graceful.Server{Server: new(http.Server)} httpsServer.Handler = handler httpsServer.TLSConfig = new(tls.Config) httpsServer.TLSConfig.NextProtos = []string{"http/1.1"} // https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet#Rule_-_Only_Support_Strong_Protocols httpsServer.TLSConfig.MinVersion = tls.VersionTLS11 httpsServer.TLSConfig.Certificates = make([]tls.Certificate, 1) httpsServer.TLSConfig.Certificates[0], err = tls.LoadX509KeyPair(string(opts.TLSCertificate), string(opts.TLSCertificateKey)) if err != nil { log.Fatal(err) } if opts.TLSHost == "" { opts.TLSHost = opts.Host } tlsListener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", opts.TLSHost, opts.TLSPort)) if err != nil { log.Fatalln(err) } fmt.Printf("serving to do list at https://%s\n", tlsListener.Addr()) wrapped := tls.NewListener(tcpKeepAliveListener{tlsListener.(*net.TCPListener)}, httpsServer.TLSConfig) if err := httpsServer.Serve(wrapped); err != nil { log.Fatalln(err) } }