jam411 před 3 roky
rodič
revize
e4838d3822

+ 2 - 2
packages/app/src/components/Admin/PluginsExtension/PluginCard.tsx

@@ -31,7 +31,7 @@ export const PluginCard = (props: Props): JSX.Element => {
     const [isEnabled, setState] = useState<boolean>(data.data.isEnabled);
 
     const onChangeHandler = async() => {
-      const reqUrl = '/plugins-extension/switch-isenabled';
+      const reqUrl = '/plugins/switch-isenabled';
 
       try {
         const res = await apiv3Post(reqUrl, { _id: id });
@@ -68,7 +68,7 @@ export const PluginCard = (props: Props): JSX.Element => {
   const PluginDeleteButton = (): JSX.Element => {
 
     const onClickPluginDeleteBtnHandler = async() => {
-      const reqUrl = '/plugins-extension/deleted';
+      const reqUrl = '/plugins/deleted';
 
       try {
         await apiv3Post(reqUrl, { _id: id, name });

+ 1 - 1
packages/app/src/server/routes/apiv3/plugins.ts

@@ -72,7 +72,7 @@ module.exports = (crowi: Crowi) => {
     }
 
     try {
-      await pluginService.pluginDeleted(req.body._id, req.body.name);
+      await pluginService.pluginDeleted(req.body._id);
       return res.apiv3();
     }
     catch (err) {

+ 47 - 20
packages/app/src/server/service/plugin.ts

@@ -1,8 +1,10 @@
+
 import fs from 'fs';
 import path from 'path';
 
 // eslint-disable-next-line no-restricted-imports
 import axios from 'axios';
+import ObjectID from 'bson-objectid';
 import mongoose from 'mongoose';
 import streamToPromise from 'stream-to-promise';
 import unzipper from 'unzipper';
@@ -175,36 +177,61 @@ export class PluginService {
   /**
    * Get plugin isEnabled
    */
-  async getPluginIsEnabled(targetPluginId: string): Promise<any> {
-    const GrowiPlugin = await mongoose.model<GrowiPlugin>('GrowiPlugin');
-    const growiPlugins = await GrowiPlugin.find({ _id: targetPluginId });
-    return growiPlugins[0].isEnabled;
+  async getPluginIsEnabled(targetPluginId: string): Promise<boolean> {
+    const ObjectID = mongoose.Types.ObjectId;
+    const isValidObjectId = (id) => {
+      return ObjectID.isValid(id) && (new ObjectID(id).toString() === id);
+    };
+
+    if (isValidObjectId(targetPluginId)) {
+      const GrowiPlugin = mongoose.model<GrowiPlugin>('GrowiPlugin');
+      const growiPlugins = await GrowiPlugin.find({ _id: new ObjectID(targetPluginId).toString() });
+      return growiPlugins[0].isEnabled;
+    }
+
+    throw new Error('Invalid id');
   }
 
   /**
    * Switch plugin enabled
    */
-  async switchPluginIsEnabled(targetPluginId: string): Promise<any> {
-    const GrowiPlugin = mongoose.model<GrowiPlugin>('GrowiPlugin');
-    const growiPlugins = await GrowiPlugin.find({ _id: targetPluginId });
-    await growiPlugins[0].update(
-      { isEnabled: !growiPlugins[0].isEnabled },
-    );
-    return growiPlugins[0].isEnabled;
+  async switchPluginIsEnabled(targetPluginId: string): Promise<boolean> {
+    const ObjectID = mongoose.Types.ObjectId;
+    const isValidObjectId = (id) => {
+      return ObjectID.isValid(id) && (new ObjectID(id).toString() === id);
+    };
+
+    if (isValidObjectId(targetPluginId)) {
+      const GrowiPlugin = mongoose.model<GrowiPlugin>('GrowiPlugin');
+      const growiPlugins = await GrowiPlugin.find({ _id: new ObjectID(targetPluginId).toString() });
+      await growiPlugins[0].update(
+        { isEnabled: !growiPlugins[0].isEnabled },
+      );
+      return growiPlugins[0].isEnabled;
+    }
+
+    throw new Error('Invalid id');
   }
 
   /**
    * Delete plugin
    */
-  async pluginDeleted(targetPluginId: string, targetPluginName: string): Promise<any> {
-    const GrowiPlugin = mongoose.model<GrowiPlugin>('GrowiPlugin');
-    const growiPlugins = await GrowiPlugin.find({ _id: targetPluginId });
-    growiPlugins[0].remove();
-    // TODO: Check remove
-    const ghOrganizationName = 'weseek';
-    const unzipTargetPath = path.join(pluginStoringPath, ghOrganizationName);
-    // execSync(`rm -rf ${unzipTargetPath}/${targetPluginName}`);
-    return [];
+  async pluginDeleted(targetPluginId: string): Promise<void> {
+    const ObjectID = mongoose.Types.ObjectId;
+    const isValidObjectId = (id) => {
+      return ObjectID.isValid(id) && (new ObjectID(id).toString() === id);
+    };
+
+    if (isValidObjectId(targetPluginId)) {
+      const GrowiPlugin = mongoose.model<GrowiPlugin>('GrowiPlugin');
+      const growiPlugins = await GrowiPlugin.find({ _id: new ObjectID(targetPluginId).toString() });
+      growiPlugins[0].remove();
+      const deleteZipFile = (path: fs.PathLike) => fs.unlink(path, (err) => { return err });
+      deleteZipFile(growiPlugins[0].installedPath);
+      return;
+    }
+
+    throw new Error('Invalid id');
   }
 
 }

+ 2 - 2
packages/app/src/stores/plugin.tsx

@@ -6,7 +6,7 @@ import { apiv3Get, apiv3Post } from '~/client/util/apiv3-client';
 // TODO: Correct types
 const pluginsFetcher = () => {
   return async() => {
-    const reqUrl = '/plugins-extension';
+    const reqUrl = '/plugins';
     try {
       const data = await apiv3Get(reqUrl);
       return data;
@@ -24,7 +24,7 @@ export const useSWRxPlugins = (): SWRResponse<any | null, Error> => {
 
 const pluginFetcher = (id: string) => {
   return async() => {
-    const reqUrl = '/plugins-extension/get-isenabled';
+    const reqUrl = '/plugins/get-isenabled';
     try {
       const data = await apiv3Post(reqUrl, { _id: id });
       return data;