Browse Source

Merge pull request #594 from benphelps/fix-591

Fix: Add token expiration, tweak error handling for npm
shamoon 2 years ago
parent
commit
df5ff48000
1 changed files with 13 additions and 7 deletions
  1. 13 7
      src/widgets/npm/proxy.js

+ 13 - 7
src/widgets/npm/proxy.js

@@ -20,12 +20,18 @@ async function login(loginUrl, username, password) {
   });
 
   const status = authResponse[0];
-  const data = JSON.parse(Buffer.from(authResponse[2]).toString());
-
-  if (status === 200) {
-    cache.put(tokenCacheKey, data.token);
+  let data = authResponse[2];
+
+  try {
+    data = JSON.parse(Buffer.from(authResponse[2]).toString());
+    
+    if (status === 200) {
+      const expiration = new Date(data.expires) - Date.now();
+      cache.put(tokenCacheKey, data.token, expiration - (5 * 60 * 1000)); // expiration -5 minutes
+    }
+  } catch (e) {
+    logger.error(`Error ${status} logging into npm`, authResponse[2]);
   }
-
   return [status, data.token ?? data];
 }
 
@@ -51,8 +57,8 @@ export default async function npmProxyHandler(req, res) {
       if (!token) {
         [status, token] = await login(loginUrl, widget.username, widget.password);
         if (status !== 200) {
-          logger.debug(`HTTTP ${status} logging into npm api: ${data}`);
-          return res.status(status).send(data);
+          logger.debug(`HTTTP ${status} logging into npm api: ${token}`);
+          return res.status(status).send(token);
         }
       }