jam411 3 лет назад
Родитель
Сommit
1303abbc62
1 измененных файлов с 7 добавлено и 83 удалено
  1. 7 83
      packages/app/src/server/service/plugin.ts

+ 7 - 83
packages/app/src/server/service/plugin.ts

@@ -1,25 +1,18 @@
 
 import { execSync } from 'child_process';
-import fs from 'fs';
 import path from 'path';
 
-import streamToPromise from 'stream-to-promise';
-import unzipper from 'unzipper';
-
 import { GrowiPlugin, GrowiPluginOrigin } from '~/interfaces/plugin';
 import loggerFactory from '~/utils/logger';
 import { resolveFromRoot } from '~/utils/project-dir-utils';
 
-
 // eslint-disable-next-line import/no-cycle
 import Crowi from '../crowi';
 
-
 const logger = loggerFactory('growi:plugins:plugin-utils');
 
 const pluginStoringPath = resolveFromRoot('tmp/plugins');
 
-
 export class PluginService {
 
   crowi: any;
@@ -40,12 +33,13 @@ export class PluginService {
   async install(crowi: Crowi, origin: GrowiPluginOrigin): Promise<void> {
     // download
     const ghUrl = origin.url;
+    const ghBranch = origin.url;
     const downloadDir = path.join(process.cwd(), 'tmp/plugins/');
     try {
-      await this.downloadZipFile(`${ghUrl}/archive/refs/heads/master.zip`, downloadDir);
+      await this.downloadZipFile(`${ghUrl}/archive/refs/heads/${ghBranch}.zip`, downloadDir, ghBranch);
     }
     catch (err) {
-      // TODO: error handling
+      console.log('downloadZipFile error', err);
     }
 
     // TODO: detect plugins
@@ -100,87 +94,17 @@ export class PluginService {
     return [plugin];
   }
 
-
   async listPlugins(): Promise<GrowiPlugin[]> {
     return [];
   }
 
-  sleep(waitMsec) {
-    const startMsec = new Date();
-
-    while (new Date() - startMsec < waitMsec);
-  }
+  async downloadZipFile(ghUrl: string, filePath:string, ghBranch: string): Promise<void> {
 
-  async downloadZipFile(ghUrl: string, filePath:string): Promise<void> {
+    const stdout1 = execSync(`wget ${ghUrl} -O ${filePath}${ghBranch}.zip`);
+    const stdout2 = execSync(`unzip ${filePath}${ghBranch}.zip -d ${filePath}`);
+    const stdout3 = execSync(`rm ${filePath}${ghBranch}.zip`);
 
-    console.log(`rm ${filePath}master.zip`);
-
-    const stdout1 = execSync(`wget ${ghUrl} -O ${filePath}master.zip`);
-    console.log(`wget ${ghUrl} -O ${filePath}master.zip`);
-    console.log(`unzip ${filePath}master.zip -d ${filePath}`);
-    this.sleep(5000);
-    const stdout2 = execSync(`unzip ${filePath}master.zip -d ${filePath}`);
-    console.log(`unzip ${filePath}master.zip -d ${filePath}`);
-    const stdout3 = execSync(`rm ${filePath}master.zip`);
-
-    // try {
-    //   const zipFile = await this.getFile('master.zip');
-
-    //   // await this.unzip('/workspace/growi/packages/app/tmp/plugins/master.zip');
-
-    // }
-    // catch (err) {
-    //   console.log(err);
-    // }
     return;
   }
 
-  /**
-   * extract a zip file
-   *
-   * @memberOf ImportService
-   * @param {string} zipFile absolute path to zip file
-   * @return {Array.<string>} array of absolute paths to extracted files
-   */
-  async unzip(zipFile) {
-    // const stream = fs.createReadStream(zipFile).pipe(unzipper.Extract({ path: '/workspace/growi/packages/app/tmp/plugins/master' }));
-    // try {
-    //   await streamToPromise(stream);
-    // }
-    // catch (err) {
-    //   console.log('err', err);
-    // }
-    const readStream = fs.createReadStream(zipFile);
-    const unzipStream = readStream.pipe(unzipper.Parse());
-    const files: any = [];
-
-
-    unzipStream.on('entry', async(entry) => {
-      const fileName = entry.path;
-      // https://regex101.com/r/mD4eZs/6
-      // prevent from unexpecting attack doing unzip file (path traversal attack)
-      // FOR EXAMPLE
-      // ../../src/server/views/admin/markdown.html
-      if (fileName.match(/(\.\.\/|\.\.\\)/)) {
-        logger.error('File path is not appropriate.', fileName);
-        return;
-      }
-
-      if (fileName === this.growiBridgeService.getMetaFileName()) {
-        // skip meta.json
-        entry.autodrain();
-      }
-      else {
-        const jsonFile = path.join(this.baseDir, fileName);
-        const writeStream = fs.createWriteStream(jsonFile, { encoding: this.growiBridgeService.getEncoding() });
-        entry.pipe(writeStream);
-        files.push(jsonFile);
-      }
-    });
-
-    await streamToPromise(unzipStream);
-
-    return files;
-  }
-
 }