Plugins: add guard for check enable plugin-system from config

This commit is contained in:
TimofeyBoyko 2022-08-24 19:13:32 +03:00
parent 1192e149ad
commit a996f2ca9c
4 changed files with 53 additions and 2 deletions

View File

@ -1,5 +1,6 @@
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src"
"sourceRoot": "src",
"entryFile": "common/ASC.WebPlugins/src/main"
}

View File

@ -0,0 +1,39 @@
import { Injectable, CanActivate, ExecutionContext } from "@nestjs/common";
import { Observable } from "rxjs";
import * as config from "../../../../config/appsettings.json";
@Injectable()
export class PluginGuard implements CanActivate {
canActivate(
context: ExecutionContext
): boolean | Promise<boolean> | Observable<boolean> {
console.log(config);
return config?.plugins?.enabled === "true";
}
}
@Injectable()
export class PluginUploadGuard implements CanActivate {
canActivate(
context: ExecutionContext
): boolean | Promise<boolean> | Observable<boolean> {
return (
config?.plugins?.enabled === "true" &&
config?.plugins?.allow.includes("upload")
);
}
}
@Injectable()
export class PluginDeleteGuard implements CanActivate {
canActivate(
context: ExecutionContext
): boolean | Promise<boolean> | Observable<boolean> {
return (
config?.plugins?.enabled === "true" &&
config?.plugins?.allow.includes("delete")
);
}
}

View File

@ -8,6 +8,7 @@ import {
UseInterceptors,
Put,
Delete,
UseGuards,
} from "@nestjs/common";
import { AnyFilesInterceptor } from "@nestjs/platform-express";
@ -16,9 +17,16 @@ import { storage } from "src/utils";
import { Plugin } from "src/entities/plugin.entity";
import {
PluginGuard,
PluginUploadGuard,
PluginDeleteGuard,
} from "src/guards/plugin.guard";
import { PluginsService } from "./plugins.service";
@Controller("/api/2.0/plugins")
@UseGuards(PluginGuard)
export class PluginsController {
constructor(private pluginsService: PluginsService) {}
@ -34,6 +42,7 @@ export class PluginsController {
}
@Post("upload")
@UseGuards(PluginUploadGuard)
@UseInterceptors(
AnyFilesInterceptor({
storage: storage,
@ -44,6 +53,7 @@ export class PluginsController {
}
@Delete("delete/:id")
@UseGuards(PluginDeleteGuard)
delete(@Param("id") id: number) {
this.pluginsService.delete(id);
}

View File

@ -16,6 +16,7 @@
"noImplicitAny": false,
"strictBindCallApply": false,
"forceConsistentCasingInFileNames": false,
"noFallthroughCasesInSwitch": false
"noFallthroughCasesInSwitch": false,
"resolveJsonModule": true
}
}