diff --git a/handler/routes.go b/handler/routes.go index 5b66f167..ea34b8a6 100644 --- a/handler/routes.go +++ b/handler/routes.go @@ -138,7 +138,15 @@ func GetClient(db store.IStore) echo.HandlerFunc { return func(c echo.Context) error { clientID := c.Param("id") - clientData, err := db.GetClientByID(clientID, true) + qrCodeIncludeFwMark := c.QueryParam("qrCodeIncludeFwMark") + qrCodeSettings := model.QRCodeSettings{ + Enabled: true, + IncludeDNS: true, + IncludeFwMark: qrCodeIncludeFwMark == "true", + IncludeMTU: true, + } + + clientData, err := db.GetClientByID(clientID, qrCodeSettings) if err != nil { return c.JSON(http.StatusNotFound, jsonHTTPResponse{false, "Client not found"}) } @@ -257,7 +265,13 @@ func EmailClient(db store.IStore, mailer emailer.Emailer, emailSubject, emailCon c.Bind(&payload) // TODO validate email - clientData, err := db.GetClientByID(payload.ID, true) + qrCodeSettings := model.QRCodeSettings{ + Enabled: true, + IncludeDNS: true, + IncludeFwMark: true, + IncludeMTU: true, + } + clientData, err := db.GetClientByID(payload.ID, qrCodeSettings) if err != nil { log.Errorf("Cannot generate client id %s config file for downloading: %v", payload.ID, err) return c.JSON(http.StatusNotFound, jsonHTTPResponse{false, "Client not found"}) @@ -304,7 +318,7 @@ func UpdateClient(db store.IStore) echo.HandlerFunc { c.Bind(&_client) // validate client existence - clientData, err := db.GetClientByID(_client.ID, false) + clientData, err := db.GetClientByID(_client.ID, model.QRCodeSettings{Enabled: false}) if err != nil { return c.JSON(http.StatusNotFound, jsonHTTPResponse{false, "Client not found"}) } @@ -368,7 +382,7 @@ func SetClientStatus(db store.IStore) echo.HandlerFunc { clientID := data["id"].(string) status := data["status"].(bool) - clientdata, err := db.GetClientByID(clientID, false) + clientdata, err := db.GetClientByID(clientID, model.QRCodeSettings{Enabled: false}) if err != nil { return c.JSON(http.StatusNotFound, jsonHTTPResponse{false, err.Error()}) } @@ -393,7 +407,7 @@ func DownloadClient(db store.IStore) echo.HandlerFunc { return c.JSON(http.StatusNotFound, jsonHTTPResponse{false, "Missing clientid parameter"}) } - clientData, err := db.GetClientByID(clientID, false) + clientData, err := db.GetClientByID(clientID, model.QRCodeSettings{Enabled: false}) if err != nil { log.Errorf("Cannot generate client id %s config file for downloading: %v", clientID, err) return c.JSON(http.StatusNotFound, jsonHTTPResponse{false, "Client not found"}) diff --git a/model/client.go b/model/client.go index c1c74878..7a4cb417 100644 --- a/model/client.go +++ b/model/client.go @@ -26,3 +26,10 @@ type ClientData struct { Client *Client QRCode string } + +type QRCodeSettings struct { + Enabled bool + IncludeDNS bool + IncludeFwMark bool + IncludeMTU bool +} diff --git a/store/jsondb/jsondb.go b/store/jsondb/jsondb.go index 9227ad8f..b0d39f5b 100644 --- a/store/jsondb/jsondb.go +++ b/store/jsondb/jsondb.go @@ -194,7 +194,7 @@ func (o *JsonDB) GetClients(hasQRCode bool) ([]model.ClientData, error) { return clients, nil } -func (o *JsonDB) GetClientByID(clientID string, hasQRCode bool) (model.ClientData, error) { +func (o *JsonDB) GetClientByID(clientID string, qrCodeSettings model.QRCodeSettings) (model.ClientData, error) { client := model.Client{} clientData := model.ClientData{} @@ -204,9 +204,17 @@ func (o *JsonDB) GetClientByID(clientID string, hasQRCode bool) (model.ClientDat } // generate client qrcode image in base64 - if hasQRCode && client.PrivateKey != "" { + if qrCodeSettings.Enabled && client.PrivateKey != "" { server, _ := o.GetServer() globalSettings, _ := o.GetGlobalSettings() + client := client + client.UseServerDNS = qrCodeSettings.IncludeDNS + if !qrCodeSettings.IncludeMTU { + globalSettings.MTU = 0 + } + if !qrCodeSettings.IncludeFwMark { + globalSettings.ForwardMark = "" + } png, err := qrcode.Encode(util.BuildClientConfig(client, server, globalSettings), qrcode.Medium, 256) if err == nil { diff --git a/store/store.go b/store/store.go index 98795b29..2dca8a77 100644 --- a/store/store.go +++ b/store/store.go @@ -10,7 +10,7 @@ type IStore interface { GetGlobalSettings() (model.GlobalSetting, error) GetServer() (model.Server, error) GetClients(hasQRCode bool) ([]model.ClientData, error) - GetClientByID(clientID string, hasQRCode bool) (model.ClientData, error) + GetClientByID(clientID string, qrCode model.QRCodeSettings) (model.ClientData, error) SaveClient(client model.Client) error DeleteClient(clientID string) error SaveServerInterface(serverInterface model.ServerInterface) error diff --git a/templates/clients.html b/templates/clients.html index f7f3a1aa..db6ddada 100644 --- a/templates/clients.html +++ b/templates/clients.html @@ -68,7 +68,18 @@