allinssl/backend/internal/cert/deploy/plugin/deploy.go

103 lines
2.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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), &paramsMap)
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
}