mirror of
https://github.com/certd/certd.git
synced 2025-11-25 09:10:11 +08:00
chore:
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
import { Inject, Provide, Scope, ScopeEnum } from '@midwayjs/core';
|
||||
import { BaseService, PageReq } from '@certd/lib-server';
|
||||
import { PluginEntity } from '../entity/plugin.js';
|
||||
import { InjectEntityModel } from '@midwayjs/typeorm';
|
||||
import { Repository } from 'typeorm';
|
||||
import { isComm } from '@certd/plus-core';
|
||||
import { BuiltInPluginService } from '../../pipeline/service/builtin-plugin-service.js';
|
||||
import { merge } from 'lodash-es';
|
||||
import { Inject, Provide, Scope, ScopeEnum } from "@midwayjs/core";
|
||||
import { BaseService, PageReq } from "@certd/lib-server";
|
||||
import { PluginEntity } from "../entity/plugin.js";
|
||||
import { InjectEntityModel } from "@midwayjs/typeorm";
|
||||
import { Repository } from "typeorm";
|
||||
import { isComm } from "@certd/plus-core";
|
||||
import { BuiltInPluginService } from "../../pipeline/service/builtin-plugin-service.js";
|
||||
import { merge } from "lodash-es";
|
||||
import { accessRegistry, pluginRegistry } from "@certd/pipeline";
|
||||
import { dnsProviderRegistry } from "@certd/plugin-cert";
|
||||
import { logger } from "@certd/basic";
|
||||
|
||||
@Provide()
|
||||
@Scope(ScopeEnum.Request, { allowDowngrade: true })
|
||||
@@ -28,7 +31,7 @@ export class PluginService extends BaseService<PluginEntity> {
|
||||
records: builtInList,
|
||||
total: builtInList.length,
|
||||
offset: 0,
|
||||
limit: 99999,
|
||||
limit: 99999
|
||||
};
|
||||
}
|
||||
|
||||
@@ -46,9 +49,9 @@ export class PluginService extends BaseService<PluginEntity> {
|
||||
}
|
||||
const list = await this.list({
|
||||
query: {
|
||||
type: 'builtIn',
|
||||
disabled: true,
|
||||
},
|
||||
type: "builtIn",
|
||||
disabled: true
|
||||
}
|
||||
});
|
||||
const disabledNames = list.map(it => it.name);
|
||||
for (const key in groups) {
|
||||
@@ -60,6 +63,7 @@ export class PluginService extends BaseService<PluginEntity> {
|
||||
}
|
||||
return groups;
|
||||
}
|
||||
|
||||
async getEnabledBuiltInList(): Promise<any> {
|
||||
const builtInList = this.builtInPluginService.getList();
|
||||
if (!isComm()) {
|
||||
@@ -68,9 +72,9 @@ export class PluginService extends BaseService<PluginEntity> {
|
||||
|
||||
const list = await this.list({
|
||||
query: {
|
||||
type: 'builtIn',
|
||||
disabled: true,
|
||||
},
|
||||
type: "builtIn",
|
||||
disabled: true
|
||||
}
|
||||
});
|
||||
const disabledNames = list.map(it => it.name);
|
||||
|
||||
@@ -81,8 +85,8 @@ export class PluginService extends BaseService<PluginEntity> {
|
||||
const builtInList = this.builtInPluginService.getList();
|
||||
const list = await this.list({
|
||||
query: {
|
||||
type: 'builtIn',
|
||||
},
|
||||
type: "builtIn"
|
||||
}
|
||||
});
|
||||
|
||||
const records: PluginEntity[] = [];
|
||||
@@ -96,10 +100,10 @@ export class PluginService extends BaseService<PluginEntity> {
|
||||
merge(record, {
|
||||
name: item.name,
|
||||
title: item.title,
|
||||
type: 'builtIn',
|
||||
type: "builtIn",
|
||||
icon: item.icon,
|
||||
desc: item.desc,
|
||||
group: item.group,
|
||||
group: item.group
|
||||
});
|
||||
records.push(record);
|
||||
}
|
||||
@@ -109,7 +113,7 @@ export class PluginService extends BaseService<PluginEntity> {
|
||||
async setDisabled(opts: { id?: number; name?: string; type: string; disabled: boolean }) {
|
||||
const { id, name, type, disabled } = opts;
|
||||
if (!type) {
|
||||
throw new Error('参数错误: type 不能为空');
|
||||
throw new Error("参数错误: type 不能为空");
|
||||
}
|
||||
if (id > 0) {
|
||||
//update
|
||||
@@ -117,7 +121,7 @@ export class PluginService extends BaseService<PluginEntity> {
|
||||
return;
|
||||
}
|
||||
|
||||
if (name && type === 'builtIn') {
|
||||
if (name && type === "builtIn") {
|
||||
const pluginEntity = new PluginEntity();
|
||||
pluginEntity.name = name;
|
||||
pluginEntity.type = type;
|
||||
@@ -125,10 +129,71 @@ export class PluginService extends BaseService<PluginEntity> {
|
||||
await this.repository.save(pluginEntity);
|
||||
return;
|
||||
}
|
||||
throw new Error('参数错误: id 和 name 必须有一个');
|
||||
throw new Error("参数错误: id 和 name 必须有一个");
|
||||
}
|
||||
|
||||
async getDefineByType(type: string) {
|
||||
return this.builtInPluginService.getByType(type);
|
||||
}
|
||||
|
||||
async getPluginTarget(pluginName: string){
|
||||
//获取插件类实例对象
|
||||
let author = undefined;
|
||||
let name = '';
|
||||
if(pluginName.includes('/')){
|
||||
const arr = pluginName.split('/');
|
||||
author = arr[0];
|
||||
name = arr[1];
|
||||
}else {
|
||||
name = pluginName;
|
||||
}
|
||||
const info = await this.find({
|
||||
where: {
|
||||
name: name,
|
||||
author: author
|
||||
}
|
||||
});
|
||||
if (info.length > 0) {
|
||||
const plugin = info[0];
|
||||
const AsyncFunction = Object.getPrototypeOf(async () => {}).constructor;
|
||||
const getPluginClass = new AsyncFunction(plugin.content);
|
||||
return await getPluginClass();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 从数据库加载插件
|
||||
*/
|
||||
async registerFromDb() {
|
||||
const res = await this.list({
|
||||
buildQuery: ((bq) => {
|
||||
bq.andWhere( "type != :type", {
|
||||
type: 'builtIn'
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
|
||||
for (const item of res) {
|
||||
const pluginName = item.author ? item.author +"/"+ item.name : item.name;
|
||||
let registry = null
|
||||
if(item.pluginType === 'access'){
|
||||
registry = accessRegistry;
|
||||
}else if (item.pluginType === 'plugin'){
|
||||
registry = pluginRegistry;
|
||||
}else if (item.pluginType === 'dnsProvider'){
|
||||
registry = dnsProviderRegistry
|
||||
}else {
|
||||
logger.warn(`插件${pluginName}类型错误:${item.pluginType}`)
|
||||
continue
|
||||
}
|
||||
|
||||
registry.register(pluginName, {
|
||||
define:item,
|
||||
target: ()=>{
|
||||
return this.getPluginTarget(pluginName);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user