feat: manage ca authorizations

This commit is contained in:
Fu Diwei
2025-03-30 10:36:05 +08:00
parent 7503d52857
commit deb3b2f412
22 changed files with 592 additions and 160 deletions

View File

@@ -7,8 +7,6 @@ import (
"github.com/pocketbase/pocketbase/core"
m "github.com/pocketbase/pocketbase/migrations"
"github.com/usual2970/certimate/internal/domain"
)
func init() {
@@ -179,20 +177,20 @@ func init() {
}
for _, workflowRun := range workflowRuns {
type oldWorkflowRunLogRecord struct {
type dWorkflowRunLogRecord struct {
Time string `json:"time"`
Level string `json:"level"`
Content string `json:"content"`
Error string `json:"error"`
}
type oldWorkflowRunLog struct {
NodeId string `json:"nodeId"`
NodeName string `json:"nodeName"`
Records []oldWorkflowRunLogRecord `json:"records"`
Error string `json:"error"`
type dWorkflowRunLog struct {
NodeId string `json:"nodeId"`
NodeName string `json:"nodeName"`
Records []dWorkflowRunLogRecord `json:"records"`
Error string `json:"error"`
}
logs := make([]oldWorkflowRunLog, 0)
logs := make([]dWorkflowRunLog, 0)
if err := workflowRun.UnmarshalJSONField("logs", &logs); err != nil {
continue
}
@@ -259,8 +257,20 @@ func init() {
return err
}
type dWorkflowNode struct {
Id string `json:"id"`
Type string `json:"type"`
Name string `json:"name"`
Config map[string]any `json:"config"`
Inputs map[string]any `json:"inputs"`
Outputs map[string]any `json:"outputs"`
Next *dWorkflowNode `json:"next,omitempty"`
Branches []dWorkflowNode `json:"branches,omitempty"`
Validated bool `json:"validated"`
}
for _, workflowRun := range workflowRuns {
node := &domain.WorkflowNode{}
node := &dWorkflowNode{}
for _, workflowOutput := range workflowOutputs {
if workflowOutput.GetString("runId") != workflowRun.Get("id") {
continue
@@ -270,8 +280,8 @@ func init() {
continue
}
if node.Type != domain.WorkflowNodeTypeApply {
node = &domain.WorkflowNode{}
if node.Type != "apply" {
node = &dWorkflowNode{}
continue
}
}
@@ -286,7 +296,7 @@ func init() {
} else {
workflow, _ := app.FindRecordById("workflow", workflowRun.GetString("workflowId"))
if workflow != nil {
rootNode := &domain.WorkflowNode{}
rootNode := &dWorkflowNode{}
if err := workflow.UnmarshalJSONField("content", rootNode); err != nil {
return err
}
@@ -294,9 +304,9 @@ func init() {
rootNode.Next = node
workflowRun.Set("detail", rootNode)
} else {
rootNode := &domain.WorkflowNode{
rootNode := &dWorkflowNode{
Id: core.GenerateDefaultRandomId(),
Type: domain.WorkflowNodeTypeStart,
Type: "start",
Name: "开始",
Config: map[string]any{
"trigger": "manual",

View File

@@ -0,0 +1,171 @@
package migrations
import (
"github.com/pocketbase/pocketbase/core"
m "github.com/pocketbase/pocketbase/migrations"
)
func init() {
m.Register(func(app core.App) error {
// update collection `settings`
{
collection, err := app.FindCollectionByNameOrId("dy6ccjb60spfy6p")
if err != nil {
return err
}
records, err := app.FindRecordsByFilter(collection, "name='sslProvider'", "-created", 1, 0)
if err != nil {
return err
}
if len(records) == 1 {
record := records[0]
content := make(map[string]any)
if err := record.UnmarshalJSONField("content", &content); err != nil {
return err
}
if provider, ok := content["provider"]; ok {
if providerStr, ok := provider.(string); ok {
if providerStr == "letsencrypt_staging" {
content["provider"] = "letsencryptstaging"
}
}
}
if config, ok := content["config"]; ok {
if configMap, ok := config.(map[string]any); ok {
if _, ok := configMap["letsencrypt_staging"]; ok {
configMap["letsencryptstaging"] = configMap["letsencrypt_staging"]
delete(configMap, "letsencrypt_staging")
}
if _, ok := configMap["gts"]; ok {
configMap["googletrustservices"] = configMap["gts"]
delete(configMap, "gts")
}
}
}
record.Set("content", content)
if err := app.Save(record); err != nil {
return err
}
}
}
// update collection `access`
{
collection, err := app.FindCollectionByNameOrId("4yzbv8urny5ja1e")
if err != nil {
return err
}
// update field
if err := collection.Fields.AddMarshaledJSONAt(2, []byte(`{
"hidden": false,
"id": "hwy7m03o",
"maxSelect": 1,
"name": "provider",
"presentable": false,
"required": false,
"system": false,
"type": "select",
"values": [
"1panel",
"acmehttpreq",
"akamai",
"aliyun",
"aws",
"azure",
"baiducloud",
"baishan",
"baotapanel",
"byteplus",
"cachefly",
"cdnfly",
"cloudflare",
"cloudns",
"cmcccloud",
"ctcccloud",
"cucccloud",
"desec",
"dnsla",
"dogecloud",
"dynv6",
"edgio",
"fastly",
"gname",
"gcore",
"godaddy",
"goedge",
"googletrustservices",
"huaweicloud",
"jdcloud",
"k8s",
"letsencrypt",
"letsencryptstaging",
"local",
"namecheap",
"namedotcom",
"namesilo",
"ns1",
"porkbun",
"powerdns",
"qiniu",
"qingcloud",
"rainyun",
"safeline",
"ssh",
"tencentcloud",
"ucloud",
"upyun",
"vercel",
"volcengine",
"webhook",
"westcn",
"zerossl"
]
}`)); err != nil {
return err
}
if err := app.Save(collection); err != nil {
return err
}
}
// update collection `acme_accounts`
{
collection, err := app.FindCollectionByNameOrId("012d7abbod1hwvr")
if err != nil {
return err
}
records, err := app.FindRecordsByFilter(collection, "ca='letsencrypt_staging' || ca='gts'", "-created", 0, 0)
if err != nil {
return err
}
for _, record := range records {
ca := record.GetString("ca")
if ca == "letsencrypt_staging" {
record.Set("ca", "letsencryptstaging")
} else if ca == "gts" {
record.Set("ca", "googletrustservices")
} else {
continue
}
if err := app.Save(record); err != nil {
return err
}
}
}
return nil
}, func(app core.App) error {
return nil
})
}