mirror of https://github.com/allinssl/allinssl
103 lines
2.4 KiB
Go
103 lines
2.4 KiB
Go
package plugin
|
||
|
||
import (
|
||
"ALLinSSL/backend/internal/access"
|
||
"ALLinSSL/backend/public"
|
||
"encoding/json"
|
||
"fmt"
|
||
"strconv"
|
||
)
|
||
|
||
type CertDeployPlugin struct {
|
||
Config map[string]any
|
||
Key string
|
||
Cert string
|
||
}
|
||
|
||
func Deploy(cfg map[string]any, logger *public.Logger) error {
|
||
cert, ok := cfg["certificate"].(map[string]any)
|
||
if !ok {
|
||
return fmt.Errorf("证书不存在")
|
||
}
|
||
action, ok := cfg["action"].(string)
|
||
if !ok {
|
||
return fmt.Errorf("操作类型错误:action")
|
||
}
|
||
var providerID string
|
||
switch v := cfg["provider_id"].(type) {
|
||
case float64:
|
||
providerID = strconv.Itoa(int(v))
|
||
case string:
|
||
providerID = v
|
||
default:
|
||
return fmt.Errorf("参数错误:provider_id")
|
||
}
|
||
providerData, err := access.GetAccess(providerID)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
providerConfigStr, ok := providerData["config"].(string)
|
||
if !ok {
|
||
return fmt.Errorf("api配置错误")
|
||
}
|
||
var providerConfig map[string]any
|
||
err = json.Unmarshal([]byte(providerConfigStr), &providerConfig)
|
||
if err != nil {
|
||
return fmt.Errorf("api配置解析错误:%v", err)
|
||
}
|
||
pluginName, ok := providerConfig["name"].(string)
|
||
if !ok {
|
||
return fmt.Errorf("插件名称错误")
|
||
}
|
||
var pluginConfig map[string]any
|
||
switch v := providerConfig["config"].(type) {
|
||
case map[string]any:
|
||
pluginConfig = v
|
||
case string:
|
||
err = json.Unmarshal([]byte(v), &pluginConfig)
|
||
if err != nil {
|
||
fmt.Println(v)
|
||
return fmt.Errorf("插件配置解析错误:%v", err)
|
||
}
|
||
default:
|
||
fmt.Println(v)
|
||
return fmt.Errorf("插件配置格式错误")
|
||
}
|
||
pluginParams, ok := cfg["params"].(string)
|
||
if !ok {
|
||
return fmt.Errorf("插件参数错误:params")
|
||
}
|
||
var paramsMap map[string]any
|
||
err = json.Unmarshal([]byte(pluginParams), ¶msMap)
|
||
if err != nil {
|
||
return fmt.Errorf("插件参数解析错误:%v", err)
|
||
}
|
||
// 合并插件配置和参数
|
||
for k, v := range paramsMap {
|
||
pluginConfig[k] = v
|
||
}
|
||
|
||
// 设置证书
|
||
keyPem, ok := cert["key"].(string)
|
||
if !ok {
|
||
return fmt.Errorf("证书错误:key")
|
||
}
|
||
certPem, ok := cert["cert"].(string)
|
||
if !ok {
|
||
return fmt.Errorf("证书错误:cert")
|
||
}
|
||
|
||
pluginConfig["key"] = keyPem
|
||
pluginConfig["cert"] = certPem
|
||
|
||
// 调用插件
|
||
logger.Debug(fmt.Sprintf("调用插件%s:%s", pluginName, action))
|
||
|
||
_, err = CallPlugin(pluginName, action, pluginConfig, logger)
|
||
if err != nil {
|
||
return fmt.Errorf("调用插件失败:%v", err)
|
||
}
|
||
//fmt.Println(rep)
|
||
return err
|
||
}
|