This commit is contained in:
Zeev Diukman 2025-03-07 07:29:33 +00:00
parent f3e476a6c3
commit bd58a7f648
4 changed files with 16 additions and 152 deletions

View file

@ -1,43 +0,0 @@
package interpreter
import (
"strings"
"github.com/zeevdiukman/go-interpreter"
)
type Interp struct {
*interpreter.Interpreter
}
func New() *Interp {
interp := &Interp{interpreter.New()}
return interp
}
func (interp *Interp) PathAction(rules string, fn func(fn interpreter.Function)) {
name := "router_rules"
regx := interp.Regex(name, "\\(`(.*?)`\\)")
interp.Func(name, func(args ...any) string {
// argsStmntName := args[0].(string)
argsPathAction := args[0].(func(string))
interp.AddStatment(name, rules).SplitStatementByRegex(regx)
interp.Statments.ForEach(func(stmnt *interpreter.Statment) {
if stmnt.Name == name {
for idx, splitVal := range stmnt.RegexSplit {
splitVal, _ = strings.CutPrefix(splitVal, ".")
switch splitVal {
case "Path":
{
path := stmnt.RegexSplit[idx+1]
argsPathAction(path)
}
}
}
}
})
return ""
})
interp.Funcs[name].Function()
}

123
main.go
View file

@ -20,133 +20,38 @@ Example:
package main
import (
"context"
"strconv"
"strings"
"github.com/zeevdiukman/go-helper"
"github.com/zeevdiukman/go-reverseproxy"
"github.com/zeevdiukman/go-router"
"github.com/zeevdiukman/go-server"
"github.com/zeevdiukman/zprox/internal/config"
"github.com/zeevdiukman/go-zgate"
)
// type ReverseProxy struct {
// Proxy *http.Handler
// Domain string
// Router *router.HostRouter
// }
const CERTS_PATH string = "./assets/certs/"
type App struct {
// Routers struct {
// Maps map[string]*router.HostRouter
// }
// map[string]*router.HostRouter
// Rules map[string]map[string]string
// Services map[string]string
DomainRouters DomainRouters
EntryPoints EntryPoints
}
type DomainRouters map[string]*router.DomainRouter
type EntryPoints map[string]*EntryPoint
type EntryPoint struct {
*server.Server
*router.Router
HostRouters HostRouters
}
type HostRouters map[string]*router.DomainRouter
func New() *App {
return &App{}
}
func (ep EntryPoints) ForEach(f func(string, *EntryPoint)) {
forEach(ep, f)
}
func forEach[K comparable, V any](mp map[K]V, f func(K, V)) {
for k, v := range mp {
f(k, v)
}
}
// main is the entry point of the z application.
// It initializes and configures the application, sets up entry points,
// configures routers, and starts the servers. It also starts test HTTP servers
// for demonstration purposes.
func main() {
helper.AppRunner(true, func() {
helper.Clear()
ctx := context.Background()
app := New()
conf := config.NewConfig()
activeEntryPoints := make(map[string]bool)
conf.EntryPoints.ForEach(func(entryPointName string, entryPointConfig *config.EntryPoint) {
conf.HTTP.Routers.ForEach(func(rName string, rConfig *config.Router) {
if rConfig.EntryPoint == entryPointName {
activeEntryPoints[entryPointName] = true
}
})
})
conf.EntryPoints.ForEach(func(entryPointName string, entryPointConfig *config.EntryPoint) {
if isUsed, ok := activeEntryPoints[entryPointName]; ok && isUsed {
if _, ok := app.EntryPoints[entryPointName]; !ok {
app.EntryPoints = make(map[string]*EntryPoint)
}
r := router.NewRouter()
_, portStr, _ := strings.Cut(entryPointConfig.Address, ":")
port, _ := strconv.Atoi(portStr)
s := server.New().Name(entryPointName).Port(port)
s.Router(r)
app.EntryPoints[entryPointName] = &EntryPoint{
Server: s,
Router: r,
HostRouters: make(map[string]*router.DomainRouter),
}
}
})
conf.HTTP.Routers.ForEach(func(rName string, rConfig *config.Router) {
if isUsed, ok := activeEntryPoints[rConfig.EntryPoint]; ok && isUsed {
domain := rConfig.Rules.Map["Domain"].Value
serviceURL := conf.HTTP.Services[rConfig.Service].URL
if _, ok := app.EntryPoints[rConfig.EntryPoint]; ok {
entryPoint := app.EntryPoints[rConfig.EntryPoint]
if _, ok := entryPoint.HostRouters[domain]; !ok {
entryPoint.HostRouters = make(map[string]*router.DomainRouter)
}
rpHandler := reverseproxy.New(ctx, serviceURL)
r := app.EntryPoints[rConfig.EntryPoint].Router
hostRouter := r.NewDomainRouter(domain)
hostRouter.Handler(rpHandler)
app.EntryPoints[rConfig.EntryPoint].HostRouters[domain] = hostRouter
}
}
})
app.EntryPoints.ForEach(func(s string, ep *EntryPoint) {
conf.HTTP.Routers.ForEach(func(rName string, rConfig *config.Router) {
if s == rConfig.EntryPoint {
zGate := zgate.New()
zGate.BuildActiveEntryPoints()
zGate.BuildRouters()
zGate.ListenAndServe()
}
})
ep.CertKey(CERTS_PATH, "z.com.cert.pem", "z.com.key.pem")
go ep.ListenAndServeTLS()
})
helper.StartTestHTTPServer(3001, "app1")
helper.StartTestHTTPServer(3002, "app2")
})
}
// func main() {
// Test()
// }
/*
func main() {
Test()
}
func Test() {
ctx := context.Background()
conf := config.NewConfig()
conf := config.New()
rp1 := reverseproxy.New(ctx, conf.HTTP.Services["keycloak"].URL)
rp2 := reverseproxy.New(ctx, conf.HTTP.Services["app1"].URL)
rp3 := reverseproxy.New(ctx, conf.HTTP.Services["app2"].URL)
@ -157,9 +62,11 @@ func Test() {
r.NewDomainRouter(conf.HTTP.Routers["app2"].Rules.Map["Domain"].Value).Handler(rp3)
s := server.New().Name("proxy1").Port(443).Router(r)
s.CertKey(CERTS_PATH, "z.com.cert.pem", "z.com.key.pem")
s.CertKey(zgate.CERTS_PATH, "z.com.cert.pem", "z.com.key.pem")
go s.ListenAndServeTLS()
helper.StartTestHTTPServer(3001, "app1")
helper.StartTestHTTPServer(3002, "app2")
select {}
}
*/

View file

@ -1 +1 @@
exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1
exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1

BIN
tmp/main

Binary file not shown.