فهرست منبع

pyload widget compatibility with pyload-ng

Closes https://github.com/benphelps/homepage/issues/517
Michael Shamoon 2 سال پیش
والد
کامیت
3c0b18570e
1فایلهای تغییر یافته به همراه20 افزوده شده و 4 حذف شده
  1. 20 4
      src/widgets/pyload/proxy.js

+ 20 - 4
src/widgets/pyload/proxy.js

@@ -9,6 +9,7 @@ import { httpProxy } from 'utils/proxy/http';
 const proxyName = 'pyloadProxyHandler';
 const logger = createLogger(proxyName);
 const sessionCacheKey = `${proxyName}__sessionId`;
+const isNgCacheKey = `${proxyName}__isNg`;
 
 async function fetchFromPyloadAPI(url, sessionId, params) {
   const options = {
@@ -23,17 +24,32 @@ async function fetchFromPyloadAPI(url, sessionId, params) {
     },
   };
 
+  // see https://github.com/benphelps/homepage/issues/517
+  const isNg = cache.get(isNgCacheKey);
+  if (isNg && !params) {
+    delete options.body;
+    options.headers.Cookie = cache.get(sessionCacheKey);
+  }
+
   // eslint-disable-next-line no-unused-vars
-  const [status, contentType, data] = await httpProxy(url, options);
-  return [status, JSON.parse(Buffer.from(data).toString())];
+  const [status, contentType, data, responseHeaders] = await httpProxy(url, options);
+  return [status, JSON.parse(Buffer.from(data).toString()), responseHeaders];
 }
 
 async function login(loginUrl, username, password = '') {
-  const [status, sessionId] = await fetchFromPyloadAPI(loginUrl, null, { username, password });
+  const [status, sessionId, responseHeaders] = await fetchFromPyloadAPI(loginUrl, null, { username, password });
   if (status !== 200) {
     throw new Error(`HTTP error ${status} logging into Pyload API, returned: ${sessionId}`);
   } else {
-    cache.put(sessionCacheKey, sessionId);
+    // Support pyload-ng, see https://github.com/benphelps/homepage/issues/517
+    if (responseHeaders['set-cookie']?.join().includes('pyload_session')) {
+      cache.put(isNgCacheKey, true);
+      const sessionCookie = responseHeaders['set-cookie'][0];
+      cache.put(sessionCacheKey, sessionCookie);
+    } else {
+      cache.put(sessionCacheKey, sessionId);
+    }
+
     return sessionId;
   }
 }