Kaynağa Gözat

Merge branch 'hotfix/0.3.2'

Book Pauk 6 yıl önce
ebeveyn
işleme
aea8a254bf
3 değiştirilmiş dosya ile 59 ekleme ve 4 silme
  1. 25 1
      package-lock.json
  2. 3 1
      package.json
  3. 31 2
      server/core/FileDecompressor.js

+ 25 - 1
package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "Liberama",
-  "version": "0.2.0",
+  "version": "0.3.2",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -3095,6 +3095,30 @@
         "strip-dirs": "^2.0.0"
       }
     },
+    "decompress-bzip2": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/decompress-bzip2/-/decompress-bzip2-4.0.0.tgz",
+      "integrity": "sha1-0SVMlJ4F6vYol1QoawY/3Hz/AT8=",
+      "requires": {
+        "file-type": "^4.3.0",
+        "seek-bzip": "^1.0.5"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "4.4.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
+          "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU="
+        }
+      }
+    },
+    "decompress-gz": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/decompress-gz/-/decompress-gz-0.0.1.tgz",
+      "integrity": "sha512-YMdCWdxHvPplsTbV1tvr2oFJOtAFNxqVMFnKWEmePBXl+LKG5z5bFrowzc12Jzd7O29nnzI/D1M95Asx0Qa1fg==",
+      "requires": {
+        "file-type": "^5.2.0"
+      }
+    },
     "decompress-response": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",

+ 3 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "Liberama",
-  "version": "0.3.1",
+  "version": "0.3.2",
   "engines": {
     "node": ">=10.0.0"
   },
@@ -60,6 +60,8 @@
     "chardet": "^0.7.0",
     "compression": "^1.7.3",
     "decompress": "^4.2.0",
+    "decompress-bzip2": "^4.0.0",
+    "decompress-gz": "0.0.1",
     "detect-file-type": "^0.2.0",
     "element-ui": "^2.4.11",
     "express": "^4.16.4",

+ 31 - 2
server/core/FileDecompressor.js

@@ -1,8 +1,12 @@
 const fs = require('fs-extra');
 const zlib = require('zlib');
 const crypto = require('crypto');
+const path = require('path');
 const utils = require('./utils');
 const decompress = require('decompress');
+const decompressGz = require('decompress-gz');
+const decompressBzip2 = require('decompress-bzip2');
+
 const FileDetector = require('./FileDetector');
 
 class FileDecompressor {
@@ -13,11 +17,33 @@ class FileDecompressor {
     async decompressFile(filename, outputDir) {
         const fileType = await this.detector.detectFile(filename);
 
-        if (!fileType || !(fileType.ext == 'zip' || fileType.ext == 'bz2'))
+        if (!fileType || !(fileType.ext == 'zip' || fileType.ext == 'bz2' || fileType.ext == 'gz'))
             return filename;
 
-        const files = await decompress(filename, outputDir);
+        //дурной decompress, поэтому в 2 этапа
+        //этап 1
+        let files = [];
+        try {
+            files = await decompress(filename, outputDir);
+        } catch (e) {
+            //
+        }
 
+        //этап 2
+        if (files.length == 0) {
+            try {
+                files = await decompress(filename, outputDir, {
+                    inputFile: filename,
+                    plugins: [
+                        decompressGz(),
+                        decompressBzip2({path: path.basename(filename)}),
+                    ]
+                });
+            } catch (e) {
+                //
+            }
+        }
+        
         let result = filename;
         let max = 0;
         if (files.length) {
@@ -29,6 +55,9 @@ class FileDecompressor {
                 }
             }
         }
+        //дурной decompress
+        if (result != filename)
+            await fs.chmod(result, 0o664);
 
         return result;
     }