go-dev-zprox-0.01/main.go
2025-03-22 08:57:23 +00:00

67 lines
1.9 KiB
Go

package main
import (
"context"
"crypto/rsa"
"encoding/gob"
"net/http"
"net/http/httputil"
"github.com/gorilla/mux"
"github.com/zeevdiukman/go-helper"
"github.com/zeevdiukman/zprox/internal/config"
"github.com/zeevdiukman/zprox/internal/proxy"
"golang.org/x/oauth2"
)
func init() {
gob.RegisterName("oauth2_token_pointer", &oauth2.Token{})
gob.RegisterName("rsa_public_key_pointer", &rsa.PublicKey{})
}
func Init() {
config.Data.InitContext(context.Background())
}
func main() {
Init()
helper.AppRunner(true, func() {
rp := &httputil.ReverseProxy{}
handlers := make(map[string]func(string, string) http.HandlerFunc)
entryPointsMuxRouters := make(map[string]*mux.Router)
activeEntryPoints := make(map[string]bool)
config.Data.EntryPoints.ForEach(func(epName string, epData *config.EntryPoint) {
activeEntryPoints[epName] = false
config.Data.Routers.ForEach(func(name string, data *config.Router) string {
if data.EntryPoint == epName {
entryPointsMuxRouters[epName] = mux.NewRouter()
activeEntryPoints[epName] = true
}
return "continue"
})
})
config.Data.Routers.ForEachByPriority(func(routerName string, routerData *config.Router) {
isActiveEntryPoint := activeEntryPoints[routerData.EntryPoint]
if isActiveEntryPoint {
epr := entryPointsMuxRouters[routerData.EntryPoint]
// buildAuthRoutes(epr, routerData)
handlers[routerData.EntryPoint] = proxy.ReverseProxypHandler(epr, rp, routerData)
buildAuthRoutes(epr, routerData) //Must be be built before the routes
BuildRoutes(routerData, handlers, epr)
}
})
config.Data.EntryPoints.ForEach(func(epName string, epData *config.EntryPoint) {
if activeEntryPoints[epName] {
if _, ok := entryPointsMuxRouters[epName]; ok {
router := entryPointsMuxRouters[epName]
BuildEntryPoint(epData, router)
}
}
})
helper.StartTestHTTPServer(3001, "albert")
})
}