Modify web plugin service for test API
This commit is contained in:
parent
43987a5196
commit
805d0160a3
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user