Plugins: add validation for uploading file

This commit is contained in:
TimofeyBoyko 2022-08-26 16:49:41 +03:00
parent 30906a305f
commit 4c4fa75af9
2 changed files with 33 additions and 2 deletions

View File

@ -53,13 +53,14 @@ export class PluginsController {
)
async upload(
@UploadedFiles() files: Express.Multer.File[]
): Promise<{ response: Plugin } | { response: { error: string } }> {
): Promise<{ response: Plugin | { error: string } }> {
try {
if (files[0]) {
const plugin = await this.pluginsService.upload(
files[0].originalname,
files[0].filename
);
return { response: plugin };
} else {
return {

View File

@ -39,11 +39,36 @@ export class PluginsService {
return plugin;
}
async upload(originalname: string, filename: string): Promise<Plugin> {
async upload(
originalname: string,
filename: string
): Promise<Plugin | { error: string }> {
const plugin: Plugin = new Plugin();
const dir = path.join(__dirname, pathToPlugins, `${filename}`);
const name = originalname.split(".")[0];
const contents = fs.readFileSync(dir, "utf8");
let isPlugin = true;
isPlugin = contents.includes(`"dependencies":{"docspace-plugin"`);
const splitName = name.split("");
splitName[0].toUpperCase();
isPlugin = contents.includes(`window.Plugins.${splitName.join("")}`);
isPlugin = contents.includes(".prototype.getPluginName=function()");
isPlugin = contents.includes(".prototype.getPluginVersion=function()");
isPlugin = contents.includes(".prototype.activate=function()");
isPlugin = contents.includes(".prototype.deactivate=function()");
plugin.name = name;
plugin.filename = filename;
@ -51,6 +76,11 @@ export class PluginsService {
await this.pluginsRepository.save(plugin);
if (!isPlugin) {
this.delete(plugin.id);
return { error: "It is not a plugin" };
}
return plugin;
}