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,
 | |
| 	}
 | |
| }
 |