zprox_bkup_1/app/main.go
Zeev Diukman 4e11d7f366 4
2024-08-24 05:11:39 +03:00

135 lines
2.9 KiB
Go

package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
const (
sslCert = "./certs/ssl.crt"
sslKey = "./certs/ssl.key"
)
func init() {
fmt.Println("ZPROX started")
}
// type Matcher struct {
// r *http.Request
// w http.ResponseWriter
// }
// func (m *Matcher) MatchHost(str string, f ...func(w http.ResponseWriter, r *http.Request)) {
// if m.r.Host == "test.gotest.com" || m.r.Host == "localhost" {
// m.w.Write([]byte("test"))
// } else {
// m.w.Write([]byte("404 page not found"))
// m.w.WriteHeader(http.StatusNotFound)
// }
// }
type HandlerFunc func(http.ResponseWriter, *http.Request)
// func (h *HandlerFunc) Handle(f func(w http.ResponseWriter, r *http.Request)) {
// h = h.HandlerFunc()
// // &h.f()
// // if r.Host == "test.gotest.com" {
// // w.Write([]byte("test"))
// // } else {
// // w.Write([]byte("404 page not found"))
// // w.WriteHeader(http.StatusNotFound)
// // }
// }
// func test(w http.ResponseWriter, r *http.Request) {
// if r.Host == "test.gotest.com" {
// w.Write([]byte("login"))
// } else {
// w.Write([]byte("404 page not found"))
// w.WriteHeader(http.StatusNotFound)
// }
// }
// func handle(f HandlerFunc) HandlerFunc {
// HandlerFunc{}.f[0]
// return func(w http.ResponseWriter, r *http.Request) {
// f
// }
// }
// type Mux struct {
// *Handlers
// *Router
// }
// type Handlers []struct{ http.Handler }
// type Router struct{ *http.ServeMux }
// func NewMux() *Mux {
// r := new(Router)
// h := new(Handlers)
// return &Mux{Handlers:h,Router:r}
// }
// func (m *Handlers) Add() {
// h := new(Handlers)
// m = &Mux{h, r}
// &Handlers{f}
// }
type Router struct{ http.ServeMux }
func (r Router) Host(string) {
// router.HandleFunc("")
}
func main() {
// var h HandlerFunc
// h:=func(a HandlerFunc)HandlerFunc{
router := http.NewServeMux()
router.H
// h := Handler.Add(func(w http.ResponseWriter, r *http.Request) {})
// http.Handler.ServeHTTP()
router.HandleFunc("test.gotest.com/", h)
// router.HandleFunc("login.gotest.com/", login)
srv := &http.Server{
Addr: ":8443",
Handler: router,
}
go func() {
if err := srv.ListenAndServeTLS(sslCert, sslKey); err != nil && err != http.ErrServerClosed {
log.Fatalf("Failed to initialize server: %v\n", err)
}
}()
log.Printf("Listening on port %v\n", srv.Addr)
// Wait for kill signal of channel
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
// This blocks until a signal is passed into the quit channel
<-quit
// The context is used to inform the server it has 5 seconds to finish
// the request it is currently handling
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// Shutdown server
log.Println("\nShutting down server...")
if err := srv.Shutdown(ctx); err != nil {
log.Fatalf("Server forced to shutdown: %v\n", err)
}
}