go-zprox/internal/logic/logic.go
Zeev Diukman fbaf9393ea first
2025-03-02 16:14:03 +00:00

99 lines
2 KiB
Go

package logic
import (
"github.com/alexedwards/scs/v2"
conf "zeevdiukman.com/zprox/internal/config"
)
var config = conf.Get()
type App struct {
SessionManager *scs.SessionManager
}
func (app *App) Get() *App {
return app
}
func NewApp() *App {
app := &App{
SessionManager: scs.New(),
}
return app
}
type Groups map[string]*Group
type Group struct {
Port string
TLS bool
// ReverseProxies []string
ReverseProxies ReverseProxies
// Server string
// GroupRouter string
}
type ReverseProxies map[string]ReverseProxy
type ReverseProxy struct {
Certs string
}
func NewGroups() *Groups {
grps := &Groups{}
grps.initGroups()
return grps
}
func (grps Groups) ForEach(fn func(k string, g *Group)) {
for k, g := range grps {
fn(k, g)
}
}
func (rpxs ReverseProxies) Get() ReverseProxies {
n := make(ReverseProxies)
for k, v := range rpxs {
n[k] = v
}
return n
}
func (rpxs ReverseProxies) Set(key string, rp ReverseProxy) ReverseProxies {
newProxies := rpxs.Get()
newProxies[key] = rp
return newProxies
}
// func (rpxs ReverseProxy) Set(newRp *ReverseProxy) {
// rpxs = *newRp
// }
func (grps Groups) initGroups() {
config.EntryPoints.ForEach(func(epName string, epConfig *conf.EntryPoint) {
if _, ok := grps[epName]; !ok {
grps[epName] = &Group{}
}
grps[epName].TLS = epConfig.TLS
grps[epName].Port = epConfig.Port
})
config.ReverseProxies.ForEach(func(rpNameA string, rpConfigA *conf.ReverseProxy) {
rps := grps[rpConfigA.EntryPoint].ReverseProxies
certName := rpConfigA.TLS.Certs
// if _, ok := rps[rpNameA]; !ok {
// // grps[rpConfigA.EntryPoint] = &Group{}
// // rps[rpNameA]
// }
rp := ReverseProxy{Certs: certName}
a := insertValue(rps, rpNameA, rp)
grps[rpConfigA.EntryPoint].ReverseProxies = a
})
}
func insertValue[T any](mp map[string]T, key string, val T) map[string]T {
n := make(map[string]T)
for k, v := range mp {
n[k] = v
}
n[key] = val
mp = n
return mp
// grps[rpConfigA.EntryPoint].ReverseProxies = a
}