Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit fd09464

Browse files
authored
add support for TLS (#349)
1 parent ad63a59 commit fd09464

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

main.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main // import "github.com/sourcegraph/go-langserver"
22

33
import (
44
"context"
5+
"crypto/tls"
56
"flag"
67
"fmt"
78
"io"
@@ -123,6 +124,24 @@ func run(cfg langserver.Config) error {
123124
go buildserver.FetchCommonDeps()
124125
}
125126

127+
listen := func(addr string) (*net.Listener, error) {
128+
listener, err := net.Listen("tcp", addr)
129+
if err != nil {
130+
log.Fatalf("Could not bind to address %s: %v", addr, err)
131+
return nil, err
132+
}
133+
if os.Getenv("TLS_CERT") != "" && os.Getenv("TLS_KEY") != "" {
134+
cert, err := tls.X509KeyPair([]byte(os.Getenv("TLS_CERT")), []byte(os.Getenv("TLS_KEY")))
135+
if err != nil {
136+
return nil, err
137+
}
138+
listener = tls.NewListener(listener, &tls.Config{
139+
Certificates: []tls.Certificate{cert},
140+
})
141+
}
142+
return &listener, nil
143+
}
144+
126145
if *printVersion {
127146
fmt.Println(version)
128147
return nil
@@ -155,18 +174,18 @@ func run(cfg langserver.Config) error {
155174

156175
switch *mode {
157176
case "tcp":
158-
lis, err := net.Listen("tcp", *addr)
177+
lis, err := listen(*addr)
159178
if err != nil {
160179
return err
161180
}
162-
defer lis.Close()
181+
defer (*lis).Close()
163182

164183
log.Println("langserver-go: listening for TCP connections on", *addr)
165184

166185
connectionCount := 0
167186

168187
for {
169-
conn, err := lis.Accept()
188+
conn, err := (*lis).Accept()
170189
if err != nil {
171190
return err
172191
}
@@ -206,8 +225,18 @@ func run(cfg langserver.Config) error {
206225
openGauge.Dec()
207226
})
208227

228+
l, err := listen(*addr)
229+
if err != nil {
230+
log.Println(err)
231+
return err
232+
}
233+
server := &http.Server{
234+
Handler: mux,
235+
ReadTimeout: 75 * time.Second,
236+
WriteTimeout: 60 * time.Second,
237+
}
209238
log.Println("langserver-go: listening for WebSocket connections on", *addr)
210-
err := http.ListenAndServe(*addr, mux)
239+
err = server.Serve(*l)
211240
log.Println(errors.Wrap(err, "HTTP server"))
212241
return err
213242

0 commit comments

Comments
 (0)