server.go 1005 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package internal
  2. import (
  3. "crypto/tls"
  4. "fmt"
  5. "net/http"
  6. )
  7. func StartHttp(host string, port int, handler http.Handler) error {
  8. addr := fmt.Sprintf("%s:%d", host, port)
  9. server := buildHttpServer(addr, handler)
  10. return StartServer(server)
  11. }
  12. func StartHttps(host string, port int, certFile, keyFile string, handler http.Handler) error {
  13. addr := fmt.Sprintf("%s:%d", host, port)
  14. if server, err := buildHttpsServer(addr, handler, certFile, keyFile); err != nil {
  15. return err
  16. } else {
  17. return StartServer(server)
  18. }
  19. }
  20. func buildHttpServer(addr string, handler http.Handler) *http.Server {
  21. return &http.Server{Addr: addr, Handler: handler}
  22. }
  23. func buildHttpsServer(addr string, handler http.Handler, certFile, keyFile string) (*http.Server, error) {
  24. cert, err := tls.LoadX509KeyPair(certFile, keyFile)
  25. if err != nil {
  26. return nil, err
  27. }
  28. config := tls.Config{Certificates: []tls.Certificate{cert}}
  29. return &http.Server{
  30. Addr: addr,
  31. Handler: handler,
  32. TLSConfig: &config,
  33. }, nil
  34. }