waflogcontroller.go 1000 Bytes
Newer Older
1 2 3 4 5 6 7 8 9
package controller

import (
	"net/http"
	"net/http/httputil"
	"net/url"
	"strings"

	"github.com/gin-gonic/gin"
10
	"github.com/rs/zerolog/log"
11 12 13 14 15 16 17 18 19 20 21 22 23 24
)

type WafLogController struct {
	remote       string
	regionUrlMap map[string]string
}

func NewWafLogController(regionUrlMap map[string]string) *WafLogController {
	return &WafLogController{
		regionUrlMap: regionUrlMap,
	}
}

func (c *WafLogController) WafLogProxy(ctx *gin.Context) {
25
	region := ctx.Query("region_code")
26 27 28 29 30
	remoteUrl, err := url.Parse(c.regionUrlMap[region])
	if err != nil {
		ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
31
	log.Info().Msgf("remoteUrl: %s", remoteUrl.String())
32 33 34

	proxy := httputil.NewSingleHostReverseProxy(remoteUrl)
	proxy.Director = func(req *http.Request) {
35
		req.URL.Scheme = remoteUrl.Scheme
36 37 38 39 40 41 42
		req.URL.Path = strings.Replace(req.URL.Path, "/api/v2/containerSec/waf", "/api/v2/waf", 1)
		req.URL.RawQuery = ctx.Request.URL.RawQuery
	}

	proxy.ServeHTTP(ctx.Writer, ctx.Request)

}