4
This commit is contained in:
parent
f3e476a6c3
commit
bd58a7f648
4 changed files with 16 additions and 152 deletions
|
|
@ -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
123
main.go
|
|
@ -20,133 +20,38 @@ Example:
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/zeevdiukman/go-helper"
|
"github.com/zeevdiukman/go-helper"
|
||||||
"github.com/zeevdiukman/go-reverseproxy"
|
"github.com/zeevdiukman/go-zgate"
|
||||||
"github.com/zeevdiukman/go-router"
|
|
||||||
"github.com/zeevdiukman/go-server"
|
|
||||||
"github.com/zeevdiukman/zprox/internal/config"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// 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.
|
// main is the entry point of the z application.
|
||||||
// It initializes and configures the application, sets up entry points,
|
// It initializes and configures the application, sets up entry points,
|
||||||
// configures routers, and starts the servers. It also starts test HTTP servers
|
// configures routers, and starts the servers. It also starts test HTTP servers
|
||||||
// for demonstration purposes.
|
// for demonstration purposes.
|
||||||
func main() {
|
func main() {
|
||||||
helper.AppRunner(true, func() {
|
helper.AppRunner(true, func() {
|
||||||
|
|
||||||
helper.Clear()
|
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
|
|
||||||
|
|
||||||
}
|
zGate := zgate.New()
|
||||||
})
|
zGate.BuildActiveEntryPoints()
|
||||||
})
|
zGate.BuildRouters()
|
||||||
conf.EntryPoints.ForEach(func(entryPointName string, entryPointConfig *config.EntryPoint) {
|
zGate.ListenAndServe()
|
||||||
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 {
|
|
||||||
|
|
||||||
}
|
|
||||||
})
|
|
||||||
ep.CertKey(CERTS_PATH, "z.com.cert.pem", "z.com.key.pem")
|
|
||||||
go ep.ListenAndServeTLS()
|
|
||||||
})
|
|
||||||
helper.StartTestHTTPServer(3001, "app1")
|
helper.StartTestHTTPServer(3001, "app1")
|
||||||
helper.StartTestHTTPServer(3002, "app2")
|
helper.StartTestHTTPServer(3002, "app2")
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// func main() {
|
/*
|
||||||
// Test()
|
|
||||||
// }
|
func main() {
|
||||||
|
Test()
|
||||||
|
}
|
||||||
func Test() {
|
func Test() {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
conf := config.NewConfig()
|
conf := config.New()
|
||||||
rp1 := reverseproxy.New(ctx, conf.HTTP.Services["keycloak"].URL)
|
rp1 := reverseproxy.New(ctx, conf.HTTP.Services["keycloak"].URL)
|
||||||
rp2 := reverseproxy.New(ctx, conf.HTTP.Services["app1"].URL)
|
rp2 := reverseproxy.New(ctx, conf.HTTP.Services["app1"].URL)
|
||||||
rp3 := reverseproxy.New(ctx, conf.HTTP.Services["app2"].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)
|
r.NewDomainRouter(conf.HTTP.Routers["app2"].Rules.Map["Domain"].Value).Handler(rp3)
|
||||||
|
|
||||||
s := server.New().Name("proxy1").Port(443).Router(r)
|
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()
|
go s.ListenAndServeTLS()
|
||||||
helper.StartTestHTTPServer(3001, "app1")
|
helper.StartTestHTTPServer(3001, "app1")
|
||||||
helper.StartTestHTTPServer(3002, "app2")
|
helper.StartTestHTTPServer(3002, "app2")
|
||||||
select {}
|
select {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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
BIN
tmp/main
Binary file not shown.
Loading…
Reference in a new issue