41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package web
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
blog "github.com/letsencrypt/boulder/log"
|
|
)
|
|
|
|
type errorWriter struct {
|
|
blog.Logger
|
|
}
|
|
|
|
func (ew errorWriter) Write(p []byte) (n int, err error) {
|
|
// log.Logger will append a newline to all messages before calling
|
|
// Write. Our log checksum checker doesn't like newlines, because
|
|
// syslog will strip them out so the calculated checksums will
|
|
// differ. So that we don't hit this corner case for every line
|
|
// logged from inside net/http.Server we strip the newline before
|
|
// we get to the checksum generator.
|
|
p = bytes.TrimRight(p, "\n")
|
|
ew.Logger.Err(fmt.Sprintf("net/http.Server: %s", string(p)))
|
|
return
|
|
}
|
|
|
|
// NewServer returns an http.Server which will listen on the given address, when
|
|
// started, for each path in the handler. Errors are sent to the given logger.
|
|
func NewServer(listenAddr string, handler http.Handler, logger blog.Logger) http.Server {
|
|
return http.Server{
|
|
ReadTimeout: 30 * time.Second,
|
|
WriteTimeout: 120 * time.Second,
|
|
IdleTimeout: 120 * time.Second,
|
|
Addr: listenAddr,
|
|
ErrorLog: log.New(errorWriter{logger}, "", 0),
|
|
Handler: handler,
|
|
}
|
|
}
|