44 "context"
55 "crypto/tls"
66 _ "embed"
7+ "encoding/gob"
8+ "encoding/hex"
79 "fmt"
810 "net"
911 "net/http"
@@ -15,20 +17,47 @@ import (
1517 "github.com/sprisa/localhost/util"
1618)
1719
18- //go:embed ssl/cert.pem
19- var cert []byte
20-
21- //go:embed ssl/key.pem
22- var certKey []byte
20+ type Certificate struct {
21+ Cert []byte
22+ Key []byte
23+ }
2324
2425func StartProxyService (
2526 ctx context.Context ,
26- tlsCert tls.Certificate ,
2727 addrIp net.IP ,
2828 listenPort int ,
2929 hostPort int ,
3030 availableSubdomains []string ,
3131) error {
32+ // res, err := http.Get("http://localhost:8080/certs")
33+ res , err := http .Get ("https://svc.host/certs" )
34+ if err != nil {
35+ return util .WrapError (err , "error fetching certs" )
36+ }
37+ decoder := gob .NewDecoder (res .Body )
38+ certificate := & Certificate {}
39+ err = decoder .Decode (certificate )
40+ if err != nil {
41+ return util .WrapError (err , "error decoding certificate" )
42+ }
43+
44+ cert := make ([]byte , hex .DecodedLen (len (certificate .Cert )))
45+ _ , err = hex .Decode (cert , certificate .Cert )
46+ if err != nil {
47+ return util .WrapError (err , "error decoding certificate.Cert" )
48+ }
49+
50+ certKey := make ([]byte , hex .DecodedLen (len (certificate .Key )))
51+ _ , err = hex .Decode (certKey , certificate .Key )
52+ if err != nil {
53+ return util .WrapError (err , "error decoding certificate.Key" )
54+ }
55+
56+ tlsCert , err := tls .X509KeyPair (cert , certKey )
57+ if err != nil {
58+ return util .WrapError (err , "error creating tls cert" )
59+ }
60+
3261 log := util .Log .With ().Int ("targetPort" , hostPort ).Logger ()
3362 handler := http .NewServeMux ()
3463
0 commit comments