Ver código fonte

fix(update): read setUpdateChannel body as form field, not JSON

The panel's axios layer posts application/x-www-form-urlencoded, so the dev-channel toggle sent dev=true and ShouldBindJSON failed with 'invalid character d'. Parse c.PostForm("dev") to match the codebase's form-encoded POST convention.
MHSanaei 17 horas atrás
pai
commit
1d1128cf94

+ 0 - 3
frontend/public/openapi.json

@@ -4253,9 +4253,6 @@
             "application/json": {
               "schema": {
                 "type": "object"
-              },
-              "example": {
-                "dev": true
               }
             }
           }

+ 4 - 1
frontend/src/pages/api-docs/endpoints.ts

@@ -404,7 +404,10 @@ export const sections: readonly Section[] = [
         method: 'POST',
         path: '/panel/api/server/setUpdateChannel',
         summary: 'Toggle the panel update channel between stable and the rolling per-commit dev release. Only effective on dev builds.',
-        body: '{\n  "dev": true\n}',
+        params: [
+          { name: 'dev', in: 'body (form)', type: 'boolean', desc: 'true = dev channel, false = stable.' },
+        ],
+        body: 'dev=true',
       },
       {
         method: 'POST',

+ 3 - 5
internal/web/controller/server.go

@@ -214,14 +214,12 @@ func (a *ServerController) updatePanel(c *gin.Context) {
 
 // setUpdateChannel toggles whether self-update tracks the rolling dev release.
 func (a *ServerController) setUpdateChannel(c *gin.Context) {
-	var req struct {
-		Dev bool `json:"dev"`
-	}
-	if err := c.ShouldBindJSON(&req); err != nil {
+	dev, err := strconv.ParseBool(c.PostForm("dev"))
+	if err != nil {
 		jsonMsg(c, "invalid data", err)
 		return
 	}
-	err := a.settingService.SetDevChannelEnable(req.Dev)
+	err = a.settingService.SetDevChannelEnable(dev)
 	jsonMsg(c, I18nWeb(c, "pages.index.updateChannelChanged"), err)
 }