58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
|
package web
|
||
|
|
||
|
import (
|
||
|
"net"
|
||
|
"strconv"
|
||
|
|
||
|
"github.com/Neur0toxine/sshpoke/internal/api/web/handler"
|
||
|
"github.com/Neur0toxine/sshpoke/internal/api/web/middleware"
|
||
|
"github.com/Neur0toxine/sshpoke/internal/logger"
|
||
|
"github.com/gin-contrib/secure"
|
||
|
"github.com/gin-gonic/gin"
|
||
|
cors "github.com/rs/cors/wrapper/gin"
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
DefaultPort = 25680
|
||
|
httpProto = "http://"
|
||
|
)
|
||
|
|
||
|
func StartServer(token string, port int, log *zap.SugaredLogger, debug bool) {
|
||
|
if !debug {
|
||
|
gin.SetMode(gin.ReleaseMode)
|
||
|
}
|
||
|
logMiddleware := middleware.SetupLogger(log)
|
||
|
g := gin.New()
|
||
|
g.Use(logMiddleware)
|
||
|
g.Use(cors.New(cors.Options{
|
||
|
AllowedOrigins: []string{
|
||
|
httpProto + net.JoinHostPort("localhost", strconv.Itoa(port)),
|
||
|
httpProto + net.JoinHostPort("127.0.0.1", strconv.Itoa(port)),
|
||
|
},
|
||
|
AllowedMethods: []string{"HEAD", "GET", "POST", "PUT", "DELETE"},
|
||
|
MaxAge: 60 * 10,
|
||
|
AllowCredentials: true,
|
||
|
}))
|
||
|
g.Use(secure.New(secureConfig()))
|
||
|
router(g, token)
|
||
|
err := g.Run(net.JoinHostPort("127.0.0.1", strconv.Itoa(port)))
|
||
|
if err != nil {
|
||
|
logger.Sugar.Errorf("cannot start Web API server on port %d: %s", port, err)
|
||
|
}
|
||
|
}
|
||
|
func router(g *gin.Engine, token string) {
|
||
|
api := g.Group("/api/v1")
|
||
|
{
|
||
|
api.Use(middleware.Auth(token))
|
||
|
api.GET("/config", handler.Config)
|
||
|
api.GET("/status", handler.Status)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func secureConfig() secure.Config {
|
||
|
cfg := secure.DefaultConfig()
|
||
|
cfg.SSLRedirect = false
|
||
|
return cfg
|
||
|
}
|