From bc3adf1f2a5dfdde6c87b8f72341acb5afe7f514 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:45:52 -0800 Subject: [PATCH] Fix synology param encoding --- src/utils/proxy/handlers/synology.js | 22 ++++++++++++++-------- src/widgets/diskstation/widget.js | 2 +- src/widgets/downloadstation/widget.js | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/utils/proxy/handlers/synology.js b/src/utils/proxy/handlers/synology.js index d43b6b71a..5d207878a 100644 --- a/src/utils/proxy/handlers/synology.js +++ b/src/utils/proxy/handlers/synology.js @@ -6,9 +6,9 @@ import { httpProxy } from "utils/proxy/http"; import createLogger from "utils/logger"; import widgets from "widgets/widgets"; -const INFO_ENDPOINT = "{url}/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&{widgetParams}"; +const INFO_ENDPOINT = "{url}/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&{authParams}"; const AUTH_ENDPOINT = - "{url}/webapi/{path}?api=SYNO.API.Auth&version={maxVersion}&session=DownloadStation&format=cookie&method=login&{widgetParams}"; + "{url}/webapi/{path}?api=SYNO.API.Auth&version={maxVersion}&session=DownloadStation&format=cookie&method=login&{authParams}"; const AUTH_API_NAME = "SYNO.API.Auth"; const proxyName = "synologyProxyHandler"; @@ -47,8 +47,8 @@ async function getApiInfo(serviceWidget, apiName, serviceName) { return [cgiPath, maxVersion]; } - const widgetParams = new URLSearchParams(serviceWidget); - const infoUrl = formatApiCall(INFO_ENDPOINT, { widgetParams: widgetParams.toString() }); + const authParams = new URLSearchParams({ username: serviceWidget.username, password: serviceWidget.password }); + const infoUrl = formatApiCall(INFO_ENDPOINT, { url: serviceWidget.url, authParams: authParams.toString() }); // eslint-disable-next-line no-unused-vars const [status, contentType, data] = await httpProxy(infoUrl); @@ -78,8 +78,13 @@ async function handleUnsuccessfulResponse(serviceWidget, url, serviceName) { // eslint-disable-next-line no-unused-vars const [apiPath, maxVersion] = await getApiInfo(serviceWidget, AUTH_API_NAME, serviceName); - const widgetParams = new URLSearchParams(serviceWidget); - const authArgs = { path: apiPath ?? "entry.cgi", maxVersion: maxVersion ?? 7, widgetParams: widgetParams.toString() }; + const authParams = new URLSearchParams({ username: serviceWidget.username, password: serviceWidget.password }); + const authArgs = { + path: apiPath ?? "entry.cgi", + maxVersion: maxVersion ?? 7, + url: serviceWidget.url, + authParams: authParams.toString(), + }; const loginUrl = formatApiCall(AUTH_ENDPOINT, authArgs); const [status, contentType, data] = await login(loginUrl); @@ -151,13 +156,14 @@ export default async function synologyProxyHandler(req, res) { return res.status(400).json({ error: `Unrecognized API name: ${mapping.apiName}` }); } - const widgetParams = new URLSearchParams(serviceWidget); + const authParams = new URLSearchParams({ username: serviceWidget.username, password: serviceWidget.password }); const url = formatApiCall(widget.api, { apiName: mapping.apiName, apiMethod: mapping.apiMethod, cgiPath, maxVersion, - widgetParams: widgetParams.toString(), + url: serviceWidget.url, + authParams: authParams.toString(), }); let [status, contentType, data] = await httpProxy(url); if (status !== 200) { diff --git a/src/widgets/diskstation/widget.js b/src/widgets/diskstation/widget.js index 03aa7d232..97902ddaf 100644 --- a/src/widgets/diskstation/widget.js +++ b/src/widgets/diskstation/widget.js @@ -2,7 +2,7 @@ import synologyProxyHandler from "../../utils/proxy/handlers/synology"; const widget = { // cgiPath and maxVersion are discovered at runtime, don't supply - api: "{url}/webapi/{cgiPath}?api={apiName}&version={maxVersion}&method={apiMethod}", + api: "{url}/webapi/{cgiPath}?api={apiName}&version={maxVersion}&method={apiMethod}&{authParams}", proxyHandler: synologyProxyHandler, mappings: { diff --git a/src/widgets/downloadstation/widget.js b/src/widgets/downloadstation/widget.js index cbd697345..c7088d823 100644 --- a/src/widgets/downloadstation/widget.js +++ b/src/widgets/downloadstation/widget.js @@ -2,7 +2,7 @@ import synologyProxyHandler from "../../utils/proxy/handlers/synology"; const widget = { // cgiPath and maxVersion are discovered at runtime, don't supply - api: "{url}/webapi/{cgiPath}?api={apiName}&version={maxVersion}&method={apiMethod}", + api: "{url}/webapi/{cgiPath}?api={apiName}&version={maxVersion}&method={apiMethod}&{authParams}", proxyHandler: synologyProxyHandler, mappings: {