소스 검색

file uploader vritual class

mizozobu 6 년 전
부모
커밋
8d9f5270c3

+ 11 - 0
src/server/crowi/index.js

@@ -42,6 +42,7 @@ function Crowi(rootdir) {
   this.xssService = null;
   this.aclService = null;
   this.appService = null;
+  this.fileUploadService = null;
   this.restQiitaAPIService = null;
   this.cdnResourcesService = new CdnResourcesService();
   this.interceptorManager = new InterceptorManager();
@@ -90,6 +91,7 @@ Crowi.prototype.init = async function() {
     this.setupCsrf(),
     this.setUpGlobalNotification(),
     this.setUpSlacklNotification(),
+    this.setUpFileUpload(),
     this.setUpAcl(),
     this.setUpCustomize(), // depends on AppService and XssService
     this.setUpRestQiitaAPI(),
@@ -496,6 +498,15 @@ Crowi.prototype.setUpApp = function() {
   }
 };
 
+/**
+ * setup FileUploadService
+ */
+Crowi.prototype.setUpFileUpload = function() {
+  if (this.fileUploadService == null) {
+    this.fileUploadService = require('../service/file-uploader')(this);
+  }
+};
+
 /**
  * setup RestQiitaAPIService
  */

+ 1 - 1
src/server/models/config.js

@@ -468,7 +468,7 @@ module.exports = function(crowi) {
         url: crowi.appService.getSiteUrl(),
       },
       upload: {
-        image: crowi.configManager.getIsUploadable(),
+        image: crowi.fileUploadService.getIsUploadable(),
         file: crowi.configManager.getConfig('crowi', 'app:fileUpload'),
       },
       behaviorType: crowi.configManager.getConfig('crowi', 'customize:behavior'),

+ 0 - 16
src/server/service/config-manager.js

@@ -130,22 +130,6 @@ class ConfigManager {
     return this.searchOnlyFromEnvVarConfigs(namespace, key);
   }
 
-  // CONF.RF refactor file-uploader
-  // create parent class and each uploader inherits from it.
-  getIsUploadable() {
-    const method = process.env.FILE_UPLOAD || 'aws';
-
-    if (method === 'aws' && (
-      !this.getConfig('crowi', 'aws:accessKeyId')
-        || !this.getConfig('crowi', 'aws:secretAccessKey')
-        || !this.getConfig('crowi', 'aws:region')
-        || !this.getConfig('crowi', 'aws:bucket'))) {
-      return false;
-    }
-
-    return method !== 'none';
-  }
-
   /**
    * update configs in the same namespace
    *

+ 3 - 1
src/server/service/file-uploader/aws.js

@@ -4,8 +4,10 @@ const axios = require('axios');
 const urljoin = require('url-join');
 const aws = require('aws-sdk');
 
+const Uploader = require('./uploader');
+
 module.exports = function(crowi) {
-  const lib = {};
+  const lib = new Uploader(crowi.configManager);
 
   function getAwsConfig() {
     const config = crowi.getConfig();

+ 3 - 1
src/server/service/file-uploader/gridfs.js

@@ -2,8 +2,10 @@ const logger = require('@alias/logger')('growi:service:fileUploaderGridfs');
 const mongoose = require('mongoose');
 const util = require('util');
 
+const Uploader = require('./uploader');
+
 module.exports = function(crowi) {
-  const lib = {};
+  const lib = new Uploader(crowi.configManager);
   const COLLECTION_NAME = 'attachmentFiles';
   const CHUNK_COLLECTION_NAME = `${COLLECTION_NAME}.chunks`;
 

+ 3 - 1
src/server/service/file-uploader/local.js

@@ -5,8 +5,10 @@ const path = require('path');
 const mkdir = require('mkdirp');
 const streamToPromise = require('stream-to-promise');
 
+const Uploader = require('./uploader');
+
 module.exports = function(crowi) {
-  const lib = {};
+  const lib = new Uploader(crowi.configManager);
   const basePath = path.posix.join(crowi.publicDir, 'uploads');
 
   function getFilePathOnStorage(attachment) {

+ 2 - 1
src/server/service/file-uploader/none.js

@@ -1,9 +1,10 @@
 // crowi-fileupload-none
+const Uploader = require('./uploader');
 
 module.exports = function(crowi) {
   const debug = require('debug')('growi:service:fileUploaderNone');
 
-  const lib = {};
+  const lib = new Uploader(crowi.configManager);
 
   lib.deleteFile = function(filePath) {
     debug(`File deletion: ${filePath}`);

+ 26 - 0
src/server/service/file-uploader/uploader.js

@@ -0,0 +1,26 @@
+// file uploader virtual class
+// 各アップローダーで共通のメソッドはここで定義する
+
+class Uploader {
+
+  constructor(configManager) {
+    this.configManager = configManager;
+  }
+
+  getIsUploadable() {
+    const method = process.env.FILE_UPLOAD || 'aws';
+
+    if (method === 'aws' && (
+      !this.configManager.getConfig('crowi', 'aws:accessKeyId')
+        || !this.configManager.getConfig('crowi', 'aws:secretAccessKey')
+        || !this.configManager.getConfig('crowi', 'aws:region')
+        || !this.configManager.getConfig('crowi', 'aws:bucket'))) {
+      return false;
+    }
+
+    return method !== 'none';
+  }
+
+}
+
+module.exports = Uploader;