|
|
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.
// +build autocert
// This file contains autocert and cloud.google.com/go/storage
// dependencies we want to hide by default from the Go build system,
// which currently doesn't know how to fetch non-golang.org/x/*
// dependencies. The Dockerfile builds the production binary
// with this code using --tags=autocert.
package main
import ( "context" "crypto/tls" "log" "net/http"
"cloud.google.com/go/storage" "golang.org/x/build/autocertcache" "golang.org/x/crypto/acme/autocert" )
func init() { runHTTPS = runHTTPSAutocert }
func runHTTPSAutocert(h http.Handler) error { var cache autocert.Cache if b := *autoCertCacheBucket; b != "" { sc, err := storage.NewClient(context.Background()) if err != nil { log.Fatalf("storage.NewClient: %v", err) } cache = autocertcache.NewGoogleCloudStorageCache(sc, b) } m := autocert.Manager{ Prompt: autocert.AcceptTOS, HostPolicy: autocert.HostWhitelist(*autoCertDomain), Cache: cache, } s := &http.Server{ Addr: ":https", Handler: h, TLSConfig: &tls.Config{GetCertificate: m.GetCertificate}, } return s.ListenAndServeTLS("", "") }
|