|
|
package main
import ( "encoding/json" "fmt" "io/ioutil" "log" "net/http" "time"
"github.com/gorilla/mux" )
type Route struct { Name string Method string Pattern string HandlerFunc http.HandlerFunc }
//server config
type ServerConfig struct { ServerIP string `json:"serverIP"` ServerPort string `json:"serverPort"` AllowedIPs []string `json:"allowedIPs"` BlockedIPs []string `json:"blockedIPs"` }
var serverConfig ServerConfig
func readServerConfig(path string) { file, err := ioutil.ReadFile(path) if err != nil { fmt.Println("error: ", err) } content := string(file) json.Unmarshal([]byte(content), &serverConfig) }
func Logger(inner http.Handler, name string) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now()
inner.ServeHTTP(w, r)
log.Printf( "%s\t%s\t%s\t%s", r.Method, r.RequestURI, name, time.Since(start), ) }) } func NewRouter() *mux.Router { router := mux.NewRouter().StrictSlash(true) for _, route := range routes { var handler http.Handler handler = route.HandlerFunc handler = Logger(handler, route.Name)
router. Methods(route.Method). Path(route.Pattern). Name(route.Name). Handler(handler) } return router }
|