Modify web plugin service for test API

This commit is contained in:
Timofey Boyko 2023-07-10 09:32:52 +03:00
parent 43987a5196
commit 805d0160a3
5 changed files with 92 additions and 78 deletions

View File

@ -9,7 +9,37 @@ export class Plugin {
name: string;
@Column()
filename: string;
version: string;
@Column()
author: string;
@Column()
uploader: string;
@Column()
description: string;
@Column()
image: string;
@Column()
plugin: string;
@Column()
apiScope: boolean;
@Column()
settingsScope: boolean;
@Column()
contextMenuScope: boolean;
@Column()
mainButtonScope: boolean;
@Column()
profileMenuScope: boolean;
@Column({ default: true })
isActive: boolean;

View File

@ -8,7 +8,6 @@ import {
UseInterceptors,
Put,
Delete,
UseGuards,
} from "@nestjs/common";
import { AnyFilesInterceptor } from "@nestjs/platform-express";
@ -17,17 +16,9 @@ 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";
import fileFilter from "src/utils/file-filter";
@Controller("/api/2.0/plugins")
// @UseGuards(PluginGuard)
export class PluginsController {
constructor(private pluginsService: PluginsService) {}
@ -43,40 +34,52 @@ export class PluginsController {
return { response: plugin };
}
@Post("upload")
// @UseGuards(PluginUploadGuard)
@Post("add")
async add(@Body() dto: Plugin): Promise<{ response: Plugin }> {
const plugin: Plugin = await this.pluginsService.add(dto);
return { response: plugin };
}
@Put("upload/image/:id")
@UseInterceptors(
AnyFilesInterceptor({
storage: storage,
fileFilter: fileFilter,
})
)
async upload(
@UploadedFiles() files: Express.Multer.File[]
): Promise<{ response: Plugin | { error: string } }> {
async uploadImage(
@UploadedFiles() file: Express.Multer.File,
@Param("id") id: number
) {
try {
if (files[0]) {
const plugin = await this.pluginsService.upload(
files[0].originalname,
files[0].filename
);
return { response: plugin };
} else {
return {
response: { error: "Invalid file format or file already exists" },
};
if (file[0]) {
await this.pluginsService.uploadImg(id, file[0].filename);
}
} catch (e) {
console.log(e);
}
}
@Put("upload/plugin/:id")
@UseInterceptors(
AnyFilesInterceptor({
storage: storage,
})
)
async upload(
@UploadedFiles() file: Express.Multer.File,
@Param("id") id: number
) {
try {
if (file[0]) {
await this.pluginsService.upload(id, file[0].filename);
}
} catch (e) {
console.log(e);
return {
response: { error: "Invalid file format or file already exists" },
};
}
}
@Delete("delete/:id")
// @UseGuards(PluginDeleteGuard)
async delete(@Param("id") id: number) {
await this.pluginsService.delete(id);
}

View File

@ -25,6 +25,10 @@ export class PluginsService {
return this.pluginsRepository.findOneBy({ id });
}
async add(dto: Plugin): Promise<Plugin> {
return this.pluginsRepository.save(dto);
}
async remove(id: string): Promise<void> {
await this.pluginsRepository.delete(id);
}
@ -39,64 +43,41 @@ export class PluginsService {
return plugin;
}
async upload(
originalname: string,
filename: string
): Promise<Plugin | { error: string }> {
const plugin: Plugin = new Plugin();
async uploadImg(id: number, filename: string) {
const plugin = await this.pluginsRepository.findOneBy({ id });
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;
plugin.isActive = true;
if (!isPlugin) {
fs.unlink(dir, (err) => {
err && console.log(err);
});
return { error: "It is not a plugin" };
}
plugin.image = filename;
await this.pluginsRepository.save(plugin);
}
return plugin;
async upload(id: number, filename: string) {
const plugin = await this.pluginsRepository.findOneBy({ id });
plugin.plugin = filename;
await this.pluginsRepository.save(plugin);
}
async delete(id: number) {
const plugin: Plugin = await this.pluginsRepository.findOneBy({ id });
const fileName = plugin.filename;
const fileName = plugin.plugin;
const dir = path.join(__dirname, pathToPlugins, `${fileName}`);
const imageName = plugin.image;
const imageDir = path.join(__dirname, pathToPlugins, `${fileName}`);
fs.unlink(dir, (err) => {
err && console.log(err);
});
fs.unlink(imageDir, (err) => {
err && console.log(err);
});
await this.pluginsRepository.delete(id);
}
}

View File

@ -17,7 +17,7 @@ const fileFilter = (req, file, cb) => {
isUniqName = !files?.includes(file.originalname);
}
if (file.mimetype === "text/javascript" && isUniqName) return cb(null, true);
// if (file.mimetype === "text/javascript" && isUniqName) return cb(null, true);
return cb(null, false);
};

View File

@ -4632,7 +4632,7 @@ __metadata:
"fsevents@patch:fsevents@^2.3.2#~builtin<compat/fsevents>, fsevents@patch:fsevents@~2.3.2#~builtin<compat/fsevents>":
version: 2.3.2
resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=df0bf1"
resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=18f3a7"
dependencies:
node-gyp: latest
conditions: os=darwin
@ -7398,7 +7398,7 @@ __metadata:
"resolve@patch:resolve@^1.1.6#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>":
version: 1.22.3
resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin<compat/resolve>::version=1.22.3&hash=c3c19d"
resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin<compat/resolve>::version=1.22.3&hash=07638b"
dependencies:
is-core-module: ^2.12.0
path-parse: ^1.0.7
@ -8481,11 +8481,11 @@ __metadata:
"typescript@patch:typescript@4.9.5#~builtin<compat/typescript>, typescript@patch:typescript@^4.3.5#~builtin<compat/typescript>":
version: 4.9.5
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=ad5954"
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=701156"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 8f6260acc86b56bfdda6004bc53f32ea548f543e8baef7071c8e34d29d292f3e375c8416556c8de10b24deef6933cd1c16a8233dc84a3dd43a13a13265d0faab
checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20
languageName: node
linkType: hard