fix(server): use gocfg to get port

This commit is contained in:
hexxa 2021-09-14 10:43:47 +08:00 committed by Hexxa
parent 05c89234f0
commit 04b39eff03
4 changed files with 30 additions and 18 deletions

2
go.mod
View file

@ -12,7 +12,7 @@ require (
github.com/go-playground/validator/v10 v10.9.0 // indirect github.com/go-playground/validator/v10 v10.9.0 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
github.com/golang/protobuf v1.5.2 // indirect github.com/golang/protobuf v1.5.2 // indirect
github.com/ihexxa/gocfg v0.0.0-20201206115732-ab537e3b1086 github.com/ihexxa/gocfg v0.0.0-20210914021417-6ba19520f0ff
github.com/ihexxa/multipart v0.0.0-20201207132919-72f6e0e58b25 github.com/ihexxa/multipart v0.0.0-20201207132919-72f6e0e58b25
github.com/jessevdk/go-flags v1.4.0 github.com/jessevdk/go-flags v1.4.0
github.com/json-iterator/go v1.1.11 // indirect github.com/json-iterator/go v1.1.11 // indirect

2
go.sum
View file

@ -59,6 +59,8 @@ github.com/hashicorp/go-version v1.0.0 h1:21MVWPKDphxa7ineQQTrCU5brh7OuVVAzGOCnn
github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/ihexxa/gocfg v0.0.0-20201206115732-ab537e3b1086 h1:1IzU4pzD8NyEHgJGLOS3Iq56b0zlAylRwbJq+08PD9Y= github.com/ihexxa/gocfg v0.0.0-20201206115732-ab537e3b1086 h1:1IzU4pzD8NyEHgJGLOS3Iq56b0zlAylRwbJq+08PD9Y=
github.com/ihexxa/gocfg v0.0.0-20201206115732-ab537e3b1086/go.mod h1:oqDTq1ywx4Qi9DdhFwwMHoPCYv6Txrfj2SY5WWcgiJs= github.com/ihexxa/gocfg v0.0.0-20201206115732-ab537e3b1086/go.mod h1:oqDTq1ywx4Qi9DdhFwwMHoPCYv6Txrfj2SY5WWcgiJs=
github.com/ihexxa/gocfg v0.0.0-20210914021417-6ba19520f0ff h1:rsaVb8KIlg3gd7CEPTV/Qi5cf6i4C12EmbnsRMjGxkY=
github.com/ihexxa/gocfg v0.0.0-20210914021417-6ba19520f0ff/go.mod h1:oqDTq1ywx4Qi9DdhFwwMHoPCYv6Txrfj2SY5WWcgiJs=
github.com/ihexxa/multipart v0.0.0-20201207132919-72f6e0e58b25 h1:gQCaP2qoFWCTz17jj9EUhE/plgqJwk3nHbcS4RHQYCw= github.com/ihexxa/multipart v0.0.0-20201207132919-72f6e0e58b25 h1:gQCaP2qoFWCTz17jj9EUhE/plgqJwk3nHbcS4RHQYCw=
github.com/ihexxa/multipart v0.0.0-20201207132919-72f6e0e58b25/go.mod h1:rhOAe/52S/J1fq1VnXvKX8FHuo65I+IcYUozW4M7+wE= github.com/ihexxa/multipart v0.0.0-20201207132919-72f6e0e58b25/go.mod h1:rhOAe/52S/J1fq1VnXvKX8FHuo65I+IcYUozW4M7+wE=
github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=

View file

@ -34,7 +34,7 @@ type Secrets struct {
type ServerCfg struct { type ServerCfg struct {
Debug bool `json:"debug" yaml:"debug"` Debug bool `json:"debug" yaml:"debug"`
Host string `json:"host" yaml:"host"` Host string `json:"host" yaml:"host"`
Port int `json:"port" yaml:"port"` Port int `json:"port" yaml:"port" cfg:"env"`
ReadTimeout int `json:"readTimeout" yaml:"readTimeout"` ReadTimeout int `json:"readTimeout" yaml:"readTimeout"`
WriteTimeout int `json:"writeTimeout" yaml:"writeTimeout"` WriteTimeout int `json:"writeTimeout" yaml:"writeTimeout"`
MaxHeaderBytes int `json:"maxHeaderBytes" yaml:"maxHeaderBytes"` MaxHeaderBytes int `json:"maxHeaderBytes" yaml:"maxHeaderBytes"`

View file

@ -10,6 +10,7 @@ import (
"os" "os"
"os/signal" "os/signal"
"path/filepath" "path/filepath"
"strconv"
"syscall" "syscall"
"time" "time"
@ -53,11 +54,20 @@ func NewServer(cfg gocfg.ICfg) (*Server, error) {
router := gin.Default() router := gin.Default()
router, err := initHandlers(router, cfg, deps) router, err := initHandlers(router, cfg, deps)
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("init handlers error: %w", err)
} }
port := cfg.GrabInt("Server.Port")
portStr, ok := cfg.String("ENV.PORT")
if ok {
port, err = strconv.Atoi(portStr)
if err != nil {
panic(fmt.Sprintf("invalid port: %s", portStr))
}
cfg.SetInt("Server.Port", port)
}
srv := &http.Server{ srv := &http.Server{
Addr: fmt.Sprintf("%s:%d", cfg.GrabString("Server.Host"), cfg.GrabInt("Server.Port")), Addr: fmt.Sprintf("%s:%d", cfg.GrabString("Server.Host"), port),
Handler: router, Handler: router,
ReadTimeout: time.Duration(cfg.GrabInt("Server.ReadTimeout")) * time.Millisecond, ReadTimeout: time.Duration(cfg.GrabInt("Server.ReadTimeout")) * time.Millisecond,
WriteTimeout: time.Duration(cfg.GrabInt("Server.WriteTimeout")) * time.Millisecond, WriteTimeout: time.Duration(cfg.GrabInt("Server.WriteTimeout")) * time.Millisecond,
@ -65,9 +75,9 @@ func NewServer(cfg gocfg.ICfg) (*Server, error) {
} }
return &Server{ return &Server{
server: srv, server: srv,
deps: deps, deps: deps,
cfg: cfg, cfg: cfg,
}, nil }, nil
} }
@ -77,10 +87,10 @@ func mkRoot(rootPath string) {
if os.IsNotExist(err) { if os.IsNotExist(err) {
err = os.MkdirAll(rootPath, 0760) err = os.MkdirAll(rootPath, 0760)
if err != nil { if err != nil {
panic(err) panic(fmt.Sprintf("mk root path error: %s", err))
} }
} else { } else {
panic(err) panic(fmt.Sprintf("stat root Path error: %s", err))
} }
} else if !info.IsDir() { } else if !info.IsDir() {
panic(fmt.Sprintf("can not create %s folder: there is a file with same name", rootPath)) panic(fmt.Sprintf("can not create %s folder: there is a file with same name", rootPath))
@ -143,7 +153,7 @@ func initHandlers(router *gin.Engine, cfg gocfg.ICfg, deps *depidx.Deps) (*gin.E
// handlers // handlers
userHdrs, err := multiusers.NewMultiUsersSvc(cfg, deps) userHdrs, err := multiusers.NewMultiUsersSvc(cfg, deps)
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("new users svc error: %w", err)
} }
if cfg.BoolOr("Users.EnableAuth", true) && !userHdrs.IsInited() { if cfg.BoolOr("Users.EnableAuth", true) && !userHdrs.IsInited() {
adminName, ok := cfg.String("ENV.DEFAULTADMIN") adminName, ok := cfg.String("ENV.DEFAULTADMIN")
@ -157,7 +167,7 @@ func initHandlers(router *gin.Engine, cfg gocfg.ICfg, deps *depidx.Deps) (*gin.E
if adminPwd == "" { if adminPwd == "" {
adminPwd, err = generatePwd() adminPwd, err = generatePwd()
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("generate pwd error: %w", err)
} }
// only write to stdout // only write to stdout
fmt.Printf("password is generated: %s, please update it after login\n", adminPwd) fmt.Printf("password is generated: %s, please update it after login\n", adminPwd)
@ -165,10 +175,10 @@ func initHandlers(router *gin.Engine, cfg gocfg.ICfg, deps *depidx.Deps) (*gin.E
pwdHash, err := bcrypt.GenerateFromPassword([]byte(adminPwd), 10) pwdHash, err := bcrypt.GenerateFromPassword([]byte(adminPwd), 10)
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("generate pwd error: %w", err)
} }
if _, err := userHdrs.Init(adminName, string(pwdHash)); err != nil { if _, err := userHdrs.Init(adminName, string(pwdHash)); err != nil {
return nil, err return nil, fmt.Errorf("init admin error: %w", err)
} }
deps.Log().Infof("user (%s) is created\n", adminName) deps.Log().Infof("user (%s) is created\n", adminName)
@ -176,12 +186,12 @@ func initHandlers(router *gin.Engine, cfg gocfg.ICfg, deps *depidx.Deps) (*gin.E
fileHdrs, err := fileshdr.NewFileHandlers(cfg, deps) fileHdrs, err := fileshdr.NewFileHandlers(cfg, deps)
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("new files service error: %w", err)
} }
settingsSvc, err := settings.NewSettingsSvc(cfg, deps) settingsSvc, err := settings.NewSettingsSvc(cfg, deps)
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("new setting service error: %w", err)
} }
publicPath, ok := cfg.String("Server.PublicPath") publicPath, ok := cfg.String("Server.PublicPath")
@ -295,7 +305,7 @@ func (s *Server) Start() error {
err := s.server.ListenAndServe() err := s.server.ListenAndServe()
if err != http.ErrServerClosed { if err != http.ErrServerClosed {
return err return fmt.Errorf("listen error: %w", err)
} }
return nil return nil
} }
@ -319,7 +329,7 @@ func makeRandToken() string {
b := make([]byte, 32) b := make([]byte, 32)
_, err := rand.Read(b) _, err := rand.Read(b)
if err != nil { if err != nil {
panic(err) panic(fmt.Sprintf("make rand token error: %s", err))
} }
return string(b) return string(b)
} }
@ -329,7 +339,7 @@ func generatePwd() (string, error) {
buf := make([]byte, size) buf := make([]byte, size)
size, err := rand.Read(buf) size, err := rand.Read(buf)
if err != nil { if err != nil {
return "", err return "", fmt.Errorf("generate pwd error: %w", err)
} }
return fmt.Sprintf("%x", sha1.Sum(buf[:size]))[:6], nil return fmt.Sprintf("%x", sha1.Sum(buf[:size]))[:6], nil