Skip to content

Commit

Permalink
fix auth for file handler
Browse files Browse the repository at this point in the history
  • Loading branch information
ginuerzh committed Dec 16, 2023
1 parent b1390dd commit f847fa5
Show file tree
Hide file tree
Showing 17 changed files with 263 additions and 201 deletions.
164 changes: 164 additions & 0 deletions api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@ package api

import (
"embed"
"net"
"net/http"

"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
"github.com/go-gost/core/auth"
"github.com/go-gost/core/service"
)

var (
Expand All @@ -13,3 +20,160 @@ type Response struct {
Code int `json:"code,omitempty"`
Msg string `json:"msg,omitempty"`
}

type options struct {
accessLog bool
pathPrefix string
auther auth.Authenticator
}

type Option func(*options)

func PathPrefixOption(pathPrefix string) Option {
return func(o *options) {
o.pathPrefix = pathPrefix
}
}

func AccessLogOption(enable bool) Option {
return func(o *options) {
o.accessLog = enable
}
}

func AutherOption(auther auth.Authenticator) Option {
return func(o *options) {
o.auther = auther
}
}

type server struct {
s *http.Server
ln net.Listener
cclose chan struct{}
}

func NewService(addr string, opts ...Option) (service.Service, error) {
ln, err := net.Listen("tcp", addr)
if err != nil {
return nil, err
}

var options options
for _, opt := range opts {
opt(&options)
}

gin.SetMode(gin.ReleaseMode)

r := gin.New()
r.Use(
cors.New((cors.Config{
AllowAllOrigins: true,
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
AllowHeaders: []string{"*"},
AllowPrivateNetwork: true,
})),
gin.Recovery(),
)
if options.accessLog {
r.Use(mwLogger())
}

router := r.Group("")
if options.pathPrefix != "" {
router = router.Group(options.pathPrefix)
}

router.StaticFS("/docs", http.FS(swaggerDoc))

config := router.Group("/config")
config.Use(mwBasicAuth(options.auther))
registerConfig(config)

return &server{
s: &http.Server{
Handler: r,
},
ln: ln,
cclose: make(chan struct{}),
}, nil
}

func (s *server) Serve() error {
return s.s.Serve(s.ln)
}

func (s *server) Addr() net.Addr {
return s.ln.Addr()
}

func (s *server) Close() error {
return s.s.Close()
}

func (s *server) IsClosed() bool {
select {
case <-s.cclose:
return true
default:
return false
}
}

func registerConfig(config *gin.RouterGroup) {
config.GET("", getConfig)
config.POST("", saveConfig)

config.POST("/services", createService)
config.PUT("/services/:service", updateService)
config.DELETE("/services/:service", deleteService)

config.POST("/chains", createChain)
config.PUT("/chains/:chain", updateChain)
config.DELETE("/chains/:chain", deleteChain)

config.POST("/hops", createHop)
config.PUT("/hops/:hop", updateHop)
config.DELETE("/hops/:hop", deleteHop)

config.POST("/authers", createAuther)
config.PUT("/authers/:auther", updateAuther)
config.DELETE("/authers/:auther", deleteAuther)

config.POST("/admissions", createAdmission)
config.PUT("/admissions/:admission", updateAdmission)
config.DELETE("/admissions/:admission", deleteAdmission)

config.POST("/bypasses", createBypass)
config.PUT("/bypasses/:bypass", updateBypass)
config.DELETE("/bypasses/:bypass", deleteBypass)

config.POST("/resolvers", createResolver)
config.PUT("/resolvers/:resolver", updateResolver)
config.DELETE("/resolvers/:resolver", deleteResolver)

config.POST("/hosts", createHosts)
config.PUT("/hosts/:hosts", updateHosts)
config.DELETE("/hosts/:hosts", deleteHosts)

config.POST("/ingresses", createIngress)
config.PUT("/ingresses/:ingress", updateIngress)
config.DELETE("/ingresses/:ingress", deleteIngress)

config.POST("/routers", createRouter)
config.PUT("/routers/:router", updateRouter)
config.DELETE("/routers/:router", deleteRouter)

config.POST("/limiters", createLimiter)
config.PUT("/limiters/:limiter", updateLimiter)
config.DELETE("/limiters/:limiter", deleteLimiter)

config.POST("/climiters", createConnLimiter)
config.PUT("/climiters/:limiter", updateConnLimiter)
config.DELETE("/climiters/:limiter", deleteConnLimiter)

config.POST("/rlimiters", createRateLimiter)
config.PUT("/rlimiters/:limiter", updateRateLimiter)
config.DELETE("/rlimiters/:limiter", deleteRateLimiter)
}
5 changes: 3 additions & 2 deletions api/config_chain.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"net/http"

"github.com/gin-gonic/gin"
"github.com/go-gost/core/logger"
"github.com/go-gost/x/config"
parser "github.com/go-gost/x/config/parsing/chain"
"github.com/go-gost/x/registry"
Expand Down Expand Up @@ -40,7 +41,7 @@ func createChain(ctx *gin.Context) {
return
}

v, err := parser.ParseChain(&req.Data)
v, err := parser.ParseChain(&req.Data, logger.Default())
if err != nil {
writeError(ctx, ErrCreate)
return
Expand Down Expand Up @@ -99,7 +100,7 @@ func updateChain(ctx *gin.Context) {

req.Data.Name = req.Chain

v, err := parser.ParseChain(&req.Data)
v, err := parser.ParseChain(&req.Data, logger.Default())
if err != nil {
writeError(ctx, ErrCreate)
return
Expand Down
5 changes: 3 additions & 2 deletions api/config_hop.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"net/http"

"github.com/gin-gonic/gin"
"github.com/go-gost/core/logger"
"github.com/go-gost/x/config"
parser "github.com/go-gost/x/config/parsing/hop"
"github.com/go-gost/x/registry"
Expand Down Expand Up @@ -40,7 +41,7 @@ func createHop(ctx *gin.Context) {
return
}

v, err := parser.ParseHop(&req.Data)
v, err := parser.ParseHop(&req.Data, logger.Default())
if err != nil {
writeError(ctx, ErrCreate)
return
Expand Down Expand Up @@ -99,7 +100,7 @@ func updateHop(ctx *gin.Context) {

req.Data.Name = req.Hop

v, err := parser.ParseHop(&req.Data)
v, err := parser.ParseHop(&req.Data, logger.Default())
if err != nil {
writeError(ctx, ErrCreate)
return
Expand Down
157 changes: 0 additions & 157 deletions api/service.go

This file was deleted.

Loading

0 comments on commit f847fa5

Please sign in to comment.