Преглед изворни кода

Adding audit request to filtered nodes

bodicsek пре 4 година
родитељ
комит
a8857dc6ce
5 измењених фајлова са 94 додато и 6 уклоњено
  1. 1 0
      .gitignore
  2. 1 0
      .npmignore
  3. 28 6
      dependency-tree.ts
  4. 62 0
      package-lock.json
  5. 2 0
      package.json

+ 1 - 0
.gitignore

@@ -1,2 +1,3 @@
 node_modules
 **/*.js
+**/*.csv

+ 1 - 0
.npmignore

@@ -2,3 +2,4 @@ tsconfig.json
 package-lock.json
 **/*.ts
 **/*.rest
+**/*.csv

+ 28 - 6
dependency-tree.ts

@@ -1,5 +1,6 @@
 import yargs from "yargs/yargs";
 import path from "path";
+import fetch from "node-fetch";
 
 import { hideBin } from "yargs/helpers";
 
@@ -48,7 +49,9 @@ const args = yargs(hideBin(process.argv))
         describe: "Open Source Compliance Service audit",
         default: false,
         coerce: (value: boolean): Audit =>
-            _ => Promise.resolve(AuditResult.NA)
+            value
+                ? node => auditTreeNode(node)
+                : _ => Promise.resolve(AuditResult.NA)
     })
     .help()
     .argv;
@@ -108,11 +111,7 @@ const constructDepTree = (packageName: string, context: PackageLockDependencies,
     };
 }
 
-const enum AuditResult {
-    OK = "registered",
-    NOK = "not registered",
-    NA = "n/a"
-}
+
 
 const displayDepTree = (format: Format) => {
     if (format.header) {
@@ -131,6 +130,29 @@ const displayDepTree = (format: Format) => {
     };
 }
 
+type AuditResponse = {
+    ltID: string,
+    baID: string;
+    status: string;
+    initialUseCase: string;
+    ltExpiryStatus: string;
+    baExpiryStatus: string;
+}[];
+
+const enum AuditResult {
+    OK = "registered",
+    NOK = "not registered",
+    NA = "n/a"
+}
+
+const auditTreeNode: Audit = node => fetch(`https://oscs.us.oracle.com/oscs/pls/isplsapproved?software=${node.value.name}&version=${node.value.version}`)
+    .then<AuditResponse>(res => res.json())
+    .then(auditResp =>
+        auditResp.some(_ => true) && auditResp.every(a => a.baExpiryStatus !== "Expired" && a.ltExpiryStatus !== "Expired")
+            ? AuditResult.OK
+            : AuditResult.NOK)
+    .catch(_ => AuditResult.NA)
+
 
 
 Promise.all<Package, PackageLock>([

+ 62 - 0
package-lock.json

@@ -10,6 +10,16 @@
       "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==",
       "dev": true
     },
+    "@types/node-fetch": {
+      "version": "2.5.10",
+      "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz",
+      "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "form-data": "^3.0.0"
+      }
+    },
     "@types/yargs": {
       "version": "16.0.1",
       "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.1.tgz",
@@ -44,6 +54,12 @@
       "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
       "dev": true
     },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
     "buffer-from": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -73,12 +89,27 @@
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
     },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
     "create-require": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
       "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
       "dev": true
     },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
+    },
     "diff": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
@@ -95,6 +126,17 @@
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
       "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
     },
+    "form-data": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+      "dev": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      }
+    },
     "get-caller-file": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -111,6 +153,26 @@
       "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
       "dev": true
     },
+    "mime-db": {
+      "version": "1.47.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
+      "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
+      "dev": true
+    },
+    "mime-types": {
+      "version": "2.1.30",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
+      "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
+      "dev": true,
+      "requires": {
+        "mime-db": "1.47.0"
+      }
+    },
+    "node-fetch": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+      "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+    },
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",

+ 2 - 0
package.json

@@ -14,10 +14,12 @@
   "author": "",
   "license": "ISC",
   "dependencies": {
+    "node-fetch": "^2.6.1",
     "yargs": "^16.2.0"
   },
   "devDependencies": {
     "@types/node": "^14.14.41",
+    "@types/node-fetch": "^2.5.10",
     "@types/yargs": "^16.0.1",
     "ts-node": "^9.1.1",
     "typescript": "^4.2.4"