diff --git a/src/utils/proxy/handlers/synology.js b/src/utils/proxy/handlers/synology.js index 3c4a06d57fb..030e53bad53 100644 --- a/src/utils/proxy/handlers/synology.js +++ b/src/utils/proxy/handlers/synology.js @@ -8,14 +8,13 @@ import widgets from "widgets/widgets"; const INFO_ENDPOINT = "{url}/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query"; const AUTH_ENDPOINT = - "{url}/webapi/{path}?api=SYNO.API.Auth&version={maxVersion}&session=DownloadStation&format=cookie&method=login&{authParams}"; + "{url}/webapi/{path}?api=SYNO.API.Auth&version={maxVersion}&method=login&account={username}&passwd={password}&session=DownloadStation&format=cookie"; const AUTH_API_NAME = "SYNO.API.Auth"; const proxyName = "synologyProxyHandler"; const logger = createLogger(proxyName); async function login(loginUrl) { - logger.debug("Attempting login via %s", loginUrl); const [status, contentType, data] = await httpProxy(loginUrl); if (status !== 200) { return [status, contentType, data]; @@ -33,8 +32,8 @@ async function login(loginUrl) { 404 Failed to authenticate 2-step verification code */ let message = "Authentication failed."; - if (json?.error?.code && parseInt(json?.error?.code, 10) >= 403) message += " 2FA enabled."; - logger.error("Unable to login. Code: %d", json?.error?.code); + if (json?.error?.code >= 403) message += " 2FA enabled."; + logger.warn("Unable to login. Code: %d", json?.error?.code); return [401, "application/json", JSON.stringify({ code: json?.error?.code, message })]; } @@ -51,7 +50,6 @@ async function getApiInfo(serviceWidget, apiName, serviceName) { const infoUrl = formatApiCall(INFO_ENDPOINT, serviceWidget); // eslint-disable-next-line no-unused-vars const [status, contentType, data] = await httpProxy(infoUrl); - logger.debug("Received %d from Info endpoint %s", status, infoUrl); if (status === 200) { try { @@ -74,16 +72,12 @@ async function getApiInfo(serviceWidget, apiName, serviceName) { } async function handleUnsuccessfulResponse(serviceWidget, url, serviceName) { + logger.debug(`Attempting login to ${serviceWidget.type}`); + // eslint-disable-next-line no-unused-vars const [apiPath, maxVersion] = await getApiInfo(serviceWidget, AUTH_API_NAME, serviceName); - const authParams = new URLSearchParams({ account: serviceWidget.username, passwd: serviceWidget.password }); - const authArgs = { - path: apiPath ?? "entry.cgi", - maxVersion: maxVersion ?? 7, - url: serviceWidget.url, - authParams: authParams.toString(), - }; + const authArgs = { path: apiPath ?? "entry.cgi", maxVersion: maxVersion ?? 7, ...serviceWidget }; const loginUrl = formatApiCall(AUTH_ENDPOINT, authArgs); const [status, contentType, data] = await login(loginUrl); @@ -132,7 +126,7 @@ function toError(url, synologyError) { error.error = synologyError.message ?? "Unknown error."; break; } - logger.error(`Unable to call ${url}. code: ${code}, error: ${error.error}.`); + logger.warn(`Unable to call ${url}. code: ${code}, error: ${error.error}.`); return error; } @@ -160,7 +154,7 @@ export default async function synologyProxyHandler(req, res) { apiMethod: mapping.apiMethod, cgiPath, maxVersion, - url: serviceWidget.url, + ...serviceWidget, }); let [status, contentType, data] = await httpProxy(url); if (status !== 200) { @@ -170,7 +164,7 @@ export default async function synologyProxyHandler(req, res) { let json = asJson(data); if (json?.success !== true) { - logger.debug(`Request failed. Attempting login to ${serviceWidget.type}`); + logger.debug(`Attempting login to ${serviceWidget.type}`); [status, contentType, data] = await handleUnsuccessfulResponse(serviceWidget, url, service); json = asJson(data); }