Skip to content

Commit 64e4ffb

Browse files
committed
feat: web service support TLS
1 parent 42f5a14 commit 64e4ffb

File tree

14 files changed

+189
-47
lines changed

14 files changed

+189
-47
lines changed

cmd/serverNameExample_grpcGwPbExample/initial/createService.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ func CreateServices() []app.IServer {
1818
// case 1, create a http service without registry
1919
httpServer := server.NewHTTPServer_pbExample(httpAddr,
2020
server.WithHTTPIsProd(cfg.App.Env == "prod"),
21+
server.WithHTTPTLS(cfg.HTTP.TLS),
2122
)
2223

2324
// case 2, Create a http service and register it with consul or etcd or nacos
2425
//httpRegistry, httpInstance := registerService("http", cfg.App.Host, cfg.HTTP.Port)
2526
//httpServer := server.NewHTTPServer_pbExample(httpAddr,
2627
// server.WithHTTPRegistry(httpRegistry, httpInstance),
2728
// server.WithHTTPIsProd(cfg.App.Env == "prod"),
29+
// server.WithHTTPTLS(cfg.HTTP.TLS),
2830
//)
2931

3032
servers = append(servers, httpServer)

cmd/serverNameExample_grpcHttpPbExample/initial/createService.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func CreateServices() []app.IServer {
1919
// case 1, create http and grpc services without registry
2020
httpServer := server.NewHTTPServer(httpAddr,
2121
server.WithHTTPIsProd(cfg.App.Env == "prod"),
22+
server.WithHTTPTLS(cfg.HTTP.TLS),
2223
)
2324
grpcServer := server.NewGRPCServer(grpcAddr)
2425

@@ -27,6 +28,7 @@ func CreateServices() []app.IServer {
2728
//httpServer := server.NewHTTPServer(httpAddr,
2829
// server.WithHTTPRegistry(httpRegistry, httpInstance),
2930
// server.WithHTTPIsProd(cfg.App.Env == "prod"),
31+
// server.WithHTTPTLS(cfg.HTTP.TLS),
3032
//)
3133
//grpcRegistry, grpcInstance := registerService("grpc", cfg.App.Host, cfg.Grpc.Port)
3234
//grpcServer := server.NewGRPCServer(grpcAddr,

cmd/serverNameExample_httpExample/initial/createService.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ func CreateServices() []app.IServer {
1818
httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port)
1919
httpServer := server.NewHTTPServer(httpAddr,
2020
server.WithHTTPIsProd(cfg.App.Env == "prod"),
21+
server.WithHTTPTLS(cfg.HTTP.TLS),
2122
)
2223
servers = append(servers, httpServer)
2324

cmd/serverNameExample_httpPbExample/initial/createService.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ func CreateServices() []app.IServer {
1818
httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port)
1919
httpServer := server.NewHTTPServer_pbExample(httpAddr,
2020
server.WithHTTPIsProd(cfg.App.Env == "prod"),
21+
server.WithHTTPTLS(cfg.HTTP.TLS),
2122
)
2223
servers = append(servers, httpServer)
2324

cmd/serverNameExample_mixExample/initial/createService.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ func CreateServices() []app.IServer {
2626
httpServer := server.NewHTTPServer(httpAddr,
2727
server.WithHTTPRegistry(httpRegistry, httpInstance),
2828
server.WithHTTPIsProd(cfg.App.Env == "prod"),
29+
server.WithHTTPTLS(cfg.HTTP.TLS),
2930
)
3031
servers = append(servers, httpServer)
3132

cmd/sponge/commands/generate/rpc-gw-pb.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,6 @@ func (g *rpcGwPbGenerator) addFields(r replacer.Replacer) []replacer.Field {
212212
Old: appConfigFileMark2,
213213
New: getDBConfigCode(""), // no db config
214214
},
215-
{ // replace the configuration of the *.yml file
216-
Old: appConfigFileMark,
217-
New: "",
218-
},
219215
//{ // replace the contents of the model/init.go file
220216
// Old: modelInitDBFileMark,
221217
// New: getInitDBCode(DBDriverMysql), // default is mysql

cmd/sponge/commands/generate/template.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,17 @@ func NewCenter(configFile string) (*Center, error) {
370370
httpServerConfigCode = `# http server settings
371371
http:
372372
port: 8080 # listen port
373-
timeout: 0 # request timeout, unit(second), if 0 means not set, if greater than 0 means set timeout, if enableHTTPProfile is true, it needs to set 0 or greater than 60s`
373+
timeout: 0 # request timeout, unit(second), if 0 means not set, if greater than 0 means set timeout, if enableHTTPProfile is true, it needs to set 0 or greater than 60s
374+
tls:
375+
# TLS mode options:
376+
# self-signed - Use localhost self-signed certificate
377+
# encrypt - Use Let's Encrypt (requires domain & email)
378+
# external - Use external certificates (requires certFile & keyFile)
379+
enableMode: ""
380+
domain: "" # Required if enableMode = encrypt
381+
email: "" # Required if enableMode = encrypt
382+
certFile: "" # Required if enableMode = external, absolute path of cert file
383+
keyFile: "" # Required if enableMode = external, absolute path of key file`
374384

375385
rpcServerConfigCode = `# grpc server settings
376386
grpc:
@@ -414,6 +424,16 @@ grpcClient:
414424
http:
415425
port: 8080 # listen port
416426
timeout: 0 # request timeout, unit(second), if 0 means not set, if greater than 0 means set timeout, if enableHTTPProfile is true, it needs to set 0 or greater than 60s
427+
tls:
428+
# TLS mode options:
429+
# self-signed - Use localhost self-signed certificate
430+
# encrypt - Use Let's Encrypt (requires domain & email)
431+
# external - Use external certificates (requires certFile & keyFile)
432+
enableMode: ""
433+
domain: "" # Required if enableMode = encrypt
434+
email: "" # Required if enableMode = encrypt
435+
certFile: "" # Required if enableMode = external, absolute path of cert file
436+
keyFile: "" # Required if enableMode = external, absolute path of key file
417437
418438
419439
# grpc client-side settings, support for setting up multiple grpc clients.
@@ -441,7 +461,17 @@ grpcClient:
441461
grpcAndHTTPServerConfigCode = `# http server settings
442462
http:
443463
port: 8080 # listen port
444-
timeout: 0 # request timeout, unit(second), if 0 means not set, if greater than 0 means set timeout, if enableHTTPProfile is true, it needs to set 0 or greater than 60s
464+
timeout: 0 # request timeout, unit(second), if 0 means not set, if greater than 0 means set timeout, if enableHTTPProfile is true, it needs to set 0 or greater than 60s
465+
tls:
466+
# TLS mode options:
467+
# self-signed - Use localhost self-signed certificate
468+
# encrypt - Use Let's Encrypt (requires domain & email)
469+
# external - Use external certificates (requires certFile & keyFile)
470+
enableMode: ""
471+
domain: "" # Required if enableMode = encrypt
472+
email: "" # Required if enableMode = encrypt
473+
certFile: "" # Required if enableMode = external, absolute path of cert file
474+
keyFile: "" # Required if enableMode = external, absolute path of key file
445475
446476
447477
# grpc server settings

configs/serverNameExample.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,16 @@ app:
2323
http:
2424
port: 8080 # listen port
2525
timeout: 0 # request timeout, unit(second), if 0 means not set, if greater than 0 means set timeout, if enableHTTPProfile is true, it needs to set 0 or greater than 60s
26-
26+
tls:
27+
# TLS mode options:
28+
# self-signed - Use localhost self-signed certificate
29+
# encrypt - Use Let's Encrypt (requires domain & email)
30+
# external - Use external certificates (requires certFile & keyFile)
31+
enableMode: ""
32+
domain: "" # Required if enableMode = encrypt
33+
email: "" # Required if enableMode = encrypt
34+
certFile: "" # Required if enableMode = external, absolute path of cert file
35+
keyFile: "" # Required if enableMode = external, absolute path of key file
2736

2837
# grpc server settings
2938
grpc:

internal/config/serverNameExample.go

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/server/http.go

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,18 @@ import (
99
"github.com/gin-gonic/gin"
1010

1111
"github.com/go-dev-frame/sponge/pkg/app"
12+
"github.com/go-dev-frame/sponge/pkg/httpsrv"
1213
"github.com/go-dev-frame/sponge/pkg/servicerd/registry"
1314

15+
"github.com/go-dev-frame/sponge/internal/config"
1416
"github.com/go-dev-frame/sponge/internal/routers"
1517
)
1618

1719
var _ app.IServer = (*httpServer)(nil)
1820

1921
type httpServer struct {
2022
addr string
21-
server *http.Server
23+
server *httpsrv.Server
2224

2325
instance *registry.ServiceInstance
2426
iRegistry registry.Registry
@@ -33,8 +35,8 @@ func (s *httpServer) Start() error {
3335
}
3436
}
3537

36-
if err := s.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
37-
return fmt.Errorf("listen server error: %v", err)
38+
if err := s.server.Run(); err != nil {
39+
return fmt.Errorf("run %s service error: %v", s.server.Scheme(), err)
3840
}
3941
return nil
4042
}
@@ -56,7 +58,29 @@ func (s *httpServer) Stop() error {
5658

5759
// String comment
5860
func (s *httpServer) String() string {
59-
return "http service address " + s.addr
61+
return s.server.Scheme() + " service address is " + s.addr
62+
}
63+
64+
func newServer(server *http.Server, tls config.TLS) *httpsrv.Server {
65+
var c *httpsrv.Server
66+
switch httpsrv.Mode(tls.EnableMode) {
67+
case httpsrv.ModeTLSSelfSigned:
68+
c = httpsrv.New(server, httpsrv.NewTLSSelfSignedConfig())
69+
case httpsrv.ModeTLSEncrypt:
70+
c = httpsrv.New(server,
71+
httpsrv.NewTLSEAutoEncryptConfig(
72+
tls.Domain,
73+
tls.Email,
74+
// enable http redirect to https, port 80 to 443, default is false
75+
//httpsrv.WithTLSEncryptEnableRedirect(),
76+
),
77+
)
78+
case httpsrv.ModeTLSExternal:
79+
c = httpsrv.New(server, httpsrv.NewTLSExternalConfig(tls.CertFile, tls.KeyFile))
80+
default:
81+
c = httpsrv.New(server) // default is http, no tls
82+
}
83+
return c
6084
}
6185

6286
// NewHTTPServer creates a new http server
@@ -82,7 +106,7 @@ func NewHTTPServer(addr string, opts ...HTTPOption) app.IServer {
82106

83107
return &httpServer{
84108
addr: addr,
85-
server: server,
109+
server: newServer(server, o.tls),
86110
iRegistry: o.iRegistry,
87111
instance: o.instance,
88112
}
@@ -113,7 +137,7 @@ func NewHTTPServer_pbExample(addr string, opts ...HTTPOption) app.IServer { //no
113137

114138
return &httpServer{
115139
addr: addr,
116-
server: server,
140+
server: newServer(server, o.tls),
117141
iRegistry: o.iRegistry,
118142
instance: o.instance,
119143
}

0 commit comments

Comments
 (0)