delete works and with test
This commit is contained in:
119
main.go
119
main.go
@ -2,47 +2,110 @@ package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"html/template"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"inet.af/tcpproxy"
|
||||
)
|
||||
|
||||
//go:embed templates/*.html
|
||||
var templatesFS embed.FS
|
||||
//go:embed pub webfonts templates/*.html
|
||||
var content embed.FS
|
||||
|
||||
var dataFlag = flag.String("data", "./infinite.db", "Path to database.")
|
||||
var hostFlag = flag.String("host", "0.0.0.0", "Host to listen on.")
|
||||
var portFlag = flag.Int("port", 7878, "Port to listen on.")
|
||||
var runTest = flag.Bool("test", false, "Run data test")
|
||||
|
||||
var listenString string
|
||||
|
||||
func init() {
|
||||
flag.Parse()
|
||||
listenString = fmt.Sprintf("%s:%d", *hostFlag, *portFlag)
|
||||
}
|
||||
|
||||
func main() {
|
||||
//currentTime := time.Now()
|
||||
noodleChannel := make(chan Noodle)
|
||||
|
||||
go proxify()
|
||||
db := NewDatabase(*dataFlag)
|
||||
defer db.Close()
|
||||
|
||||
// Parse templates from the embedded file system
|
||||
tmpl, err := template.ParseFS(templatesFS, "templates/*.html")
|
||||
if err != nil {
|
||||
log.Fatalf("Error parsing templates: %v", err)
|
||||
if *runTest {
|
||||
runTestSequence(db)
|
||||
}
|
||||
|
||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
data := struct{ Name string }{Name: "Go Embed"}
|
||||
err := tmpl.ExecuteTemplate(w, "index.html", data)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
go systemCheck(db, noodleChannel)
|
||||
go tcpProxify(noodleChannel)
|
||||
|
||||
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.FS(content))))
|
||||
// TODO: CRYPTO hrefs
|
||||
http.HandleFunc("/", handleMain(db, &noodleChannel))
|
||||
http.HandleFunc("/delete", handleDelete(db, &noodleChannel))
|
||||
|
||||
log.Printf("Server starting on %s", listenString)
|
||||
log.Fatal(http.ListenAndServe(listenString, nil))
|
||||
|
||||
}
|
||||
|
||||
func systemCheck(db *Database, noodleChannel chan Noodle) {
|
||||
for {
|
||||
noodles := db.GetAll()
|
||||
for _, noodle := range noodles {
|
||||
noodleChannel <- noodle
|
||||
}
|
||||
})
|
||||
|
||||
log.Println("Server starting on :8080")
|
||||
log.Fatal(http.ListenAndServe(":8080", nil))
|
||||
|
||||
time.Sleep(60 * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
func proxify() {
|
||||
var p tcpproxy.Proxy
|
||||
p.AddRoute("127.0.0.1:5555", tcpproxy.To("127.0.0.1:6666"))
|
||||
//p.AddHTTPHostRoute(":80", "foo.com", tcpproxy.To("10.0.0.1:8081"))
|
||||
//p.AddHTTPHostRoute(":80", "bar.com", tcpproxy.To("10.0.0.2:8082"))
|
||||
//p.AddRoute(":80", tcpproxy.To("10.0.0.1:8081")) // fallback
|
||||
//p.AddSNIRoute(":443", "foo.com", tcpproxy.To("10.0.0.1:4431"))
|
||||
//p.AddSNIRoute(":443", "bar.com", tcpproxy.To("10.0.0.2:4432"))
|
||||
//p.AddRoute(":443", tcpproxy.To("10.0.0.1:4431")) // fallback
|
||||
log.Fatal(p.Run())
|
||||
func startProxy(proxy *tcpproxy.Proxy) {
|
||||
log.Print(proxy.Run())
|
||||
}
|
||||
|
||||
func tcpProxify(noodleChannel chan Noodle) {
|
||||
noodleMap := make(map[string]*tcpproxy.Proxy)
|
||||
for {
|
||||
noodle := <-noodleChannel
|
||||
_, running := noodleMap[noodle.Id]
|
||||
if noodle.IsUp && !running {
|
||||
var p tcpproxy.Proxy
|
||||
src := fmt.Sprintf("0.0.0.0:%d", noodle.ListenPort)
|
||||
dst := fmt.Sprintf("%s:%d", noodle.DestHost, noodle.DestPort)
|
||||
log.Printf("Starting a noodle from %s to %s", src, dst)
|
||||
p.AddRoute(src, tcpproxy.To(dst))
|
||||
//p.Start()
|
||||
noodleMap[noodle.Id] = &p
|
||||
go startProxy(&p)
|
||||
continue
|
||||
}
|
||||
|
||||
if !noodle.IsUp && running {
|
||||
log.Printf("Closing noodle=%v", noodle)
|
||||
err := noodleMap[noodle.Id].Close()
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
}
|
||||
}
|
||||
|
||||
//p.AddHTTPHostRoute(":80", "foo.com", tcpproxy.To("10.0.0.1:8081"))
|
||||
//p.AddHTTPHostRoute(":80", "bar.com", tcpproxy.To("10.0.0.2:8082"))
|
||||
//p.AddRoute(":80", tcpproxy.To("10.0.0.1:8081")) // fallback
|
||||
//p.AddSNIRoute(":443", "foo.com", tcpproxy.To("10.0.0.1:4431"))
|
||||
//p.AddSNIRoute(":443", "bar.com", tcpproxy.To("10.0.0.2:4432"))
|
||||
//p.AddRoute(":443", tcpproxy.To("10.0.0.1:4431")) // fallback
|
||||
//log.Fatal(p.Run())
|
||||
}
|
||||
}
|
||||
|
||||
func runTestSequence(db *Database) {
|
||||
for i := 0; i < 21; i++ {
|
||||
noodle := Noodle{db.MakeID(), "Name_Test", "Proto_Test", 1080+i, 22, "localhost", time.Now().Second(), true}
|
||||
log.Printf("Test noodle=%v", noodle)
|
||||
db.Add(noodle)
|
||||
log.Printf("Test id=%s exists=%s", noodle.Id, db.Handle.Has(noodle.Id))
|
||||
log.Printf("Test GetAllGeneric=%v", db.GetAllGeneric())
|
||||
//db.Delete(noodle.Id)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user