From e99a5ba92bf18ef8b054569fff0ad85bda703086 Mon Sep 17 00:00:00 2001 From: Khanh Ngo Date: Mon, 20 Apr 2020 09:54:41 +0700 Subject: [PATCH] Add global setting form --- handler/routes.go | 50 +++++++++++ main.go | 2 + model/setting.go | 14 +++ router/router.go | 1 + templates/base.html | 2 +- templates/global_settings.html | 154 +++++++++++++++++++++++++++++++++ util/util.go | 18 ++++ 7 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 model/setting.go create mode 100644 templates/global_settings.html diff --git a/handler/routes.go b/handler/routes.go index abedaf7..24711d8 100644 --- a/handler/routes.go +++ b/handler/routes.go @@ -209,3 +209,53 @@ func WireGuardServerKeyPair() echo.HandlerFunc { return c.JSON(http.StatusOK, serverKeyPair) } } + +// GlobalSettings handler +func GlobalSettings() echo.HandlerFunc { + return func(c echo.Context) error { + // initialize database directory + dir := "./db" + db, err := scribble.New(dir, nil) + if err != nil { + log.Error("Cannot initialize the database: ", err) + } + + globalSettings := model.GlobalSetting{} + if err := db.Read("server", "global_settings", &globalSettings); err != nil { + log.Error("Cannot fetch global settings from database: ", err) + } + + return c.Render(http.StatusOK, "global_settings.html", map[string]interface{}{ + "name": "Khanh", + "globalSettings": globalSettings, + }) + } +} + +// GlobalSettingSubmit handler to update the global settings +func GlobalSettingSubmit() echo.HandlerFunc { + return func(c echo.Context) error { + globalSettings := new(model.GlobalSetting) + c.Bind(globalSettings) + + // validate the input dns server list + if util.ValidateIPAddressList(globalSettings.DNSServers) == false { + log.Warnf("Invalid DNS server list input from user: %v", globalSettings.DNSServers) + return c.JSON(http.StatusBadRequest, jsonHTTPResponse{false, "Invalid DNS server address"}) + } + + globalSettings.UpdatedAt = time.Now().UTC() + + // write config to the database + dir := "./db" + db, err := scribble.New(dir, nil) + if err != nil { + log.Error("Cannot initialize the database: ", err) + return c.JSON(http.StatusInternalServerError, jsonHTTPResponse{false, "Cannot access database"}) + } + db.Write("server", "global_settings", globalSettings) + log.Infof("Updated global settings: %v", globalSettings) + + return c.JSON(http.StatusOK, jsonHTTPResponse{true, "Updated global settings successfully"}) + } +} diff --git a/main.go b/main.go index 7a6c3c1..aa85b5d 100644 --- a/main.go +++ b/main.go @@ -14,5 +14,7 @@ func main() { app.GET("/wg-server", handler.WireGuardServer()) app.POST("wg-server/interfaces", handler.WireGuardServerInterfaces()) app.POST("wg-server/keypair", handler.WireGuardServerKeyPair()) + app.GET("/global-settings", handler.GlobalSettings()) + app.POST("/global-settings", handler.GlobalSettingSubmit()) app.Logger.Fatal(app.Start("127.0.0.1:5000")) } diff --git a/model/setting.go b/model/setting.go new file mode 100644 index 0000000..4d8791b --- /dev/null +++ b/model/setting.go @@ -0,0 +1,14 @@ +package model + +import ( + "time" +) + +// GlobalSetting model +type GlobalSetting struct { + EndpointAddress string `json:"endpoint_address"` + DNSServers []string `json:"dns_servers"` + MTU int `json:"mtu,string"` + PersistentKeepalive int `json:"persistent_keepalive,string"` + UpdatedAt time.Time `json:"updated_at"` +} diff --git a/router/router.go b/router/router.go index c2d6bcc..1260c3d 100644 --- a/router/router.go +++ b/router/router.go @@ -31,6 +31,7 @@ func New() *echo.Echo { templates := make(map[string]*template.Template) templates["clients.html"] = template.Must(template.ParseFiles("templates/clients.html", "templates/base.html")) templates["server.html"] = template.Must(template.ParseFiles("templates/server.html", "templates/base.html")) + templates["global_settings.html"] = template.Must(template.ParseFiles("templates/global_settings.html", "templates/base.html")) e.Logger.SetLevel(log.DEBUG) e.Pre(middleware.RemoveTrailingSlash()) diff --git a/templates/base.html b/templates/base.html index 14ef39c..a010845 100644 --- a/templates/base.html +++ b/templates/base.html @@ -102,7 +102,7 @@