package migrations import ( x509 "crypto/x509" "log/slog" "strings" "github.com/pocketbase/pocketbase/core" m "github.com/pocketbase/pocketbase/migrations" "github.com/usual2970/certimate/internal/pkg/utils/certutil" ) func init() { m.Register(func(app core.App) error { slog.Info("[CERTIMATE] migration: ready ...") // backup collection records collectionRecords := make([]*core.Record, 0) collections, err := app.FindAllCollections(core.CollectionTypeBase) if err != nil { return err } else { for _, collection := range collections { switch collection.Name { case "acme_accounts", "access", "certificate", "workflow", "settings": { records, err := app.FindAllRecords(collection) if err != nil { return err } collectionRecords = append(collectionRecords, records...) slog.Info("[CERTIMATE] migration: collection '" + collection.Name + "' backed up") if collection.Name == "access" { collection.Fields.RemoveByName("usage") for i, field := range collection.Fields { if field.GetName() == "provider" { collection.Fields.AddMarshaledJSONAt(i+1, []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", "dnsla", "dogecloud", "edgio", "fastly", "gname", "gcore", "godaddy", "goedge", "huaweicloud", "jdcloud", "k8s", "local", "namecheap", "namedotcom", "namesilo", "ns1", "powerdns", "qiniu", "qingcloud", "rainyun", "safeline", "ssh", "tencentcloud", "ucloud", "volcengine", "webhook", "westcn" ] }`)) } } err := app.Save(collection) if err != nil { return err } } } case "domains", "deployments", "access_groups": { app.Delete(collection) slog.Info("[CERTIMATE] migration: collection '" + collection.Name + "' truncated") } } } } // migrate jsonData := `[ { "createRule": null, "deleteRule": null, "fields": [ { "autogeneratePattern": "[a-z0-9]{15}", "hidden": false, "id": "text3208210256", "max": 15, "min": 15, "name": "id", "pattern": "^[a-z0-9]+$", "presentable": false, "primaryKey": true, "required": true, "system": true, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "geeur58v", "max": 0, "min": 0, "name": "name", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "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", "dnsla", "dogecloud", "edgio", "fastly", "gname", "gcore", "godaddy", "goedge", "huaweicloud", "jdcloud", "k8s", "local", "namecheap", "namedotcom", "namesilo", "ns1", "powerdns", "qiniu", "qingcloud", "rainyun", "safeline", "ssh", "tencentcloud", "ucloud", "volcengine", "webhook", "westcn" ] }, { "hidden": false, "id": "iql7jpwx", "maxSize": 2000000, "name": "config", "presentable": false, "required": false, "system": false, "type": "json" }, { "hidden": false, "id": "lr33hiwg", "max": "", "min": "", "name": "deleted", "presentable": false, "required": false, "system": false, "type": "date" }, { "hidden": false, "id": "autodate2990389176", "name": "created", "onCreate": true, "onUpdate": false, "presentable": false, "system": false, "type": "autodate" }, { "hidden": false, "id": "autodate3332085495", "name": "updated", "onCreate": true, "onUpdate": true, "presentable": false, "system": false, "type": "autodate" } ], "id": "4yzbv8urny5ja1e", "indexes": [ "CREATE INDEX ` + "`" + `idx_wkoST0j` + "`" + ` ON ` + "`" + `access` + "`" + ` (` + "`" + `name` + "`" + `)", "CREATE INDEX ` + "`" + `idx_frh0JT1Aqx` + "`" + ` ON ` + "`" + `access` + "`" + ` (` + "`" + `provider` + "`" + `)" ], "listRule": null, "name": "access", "system": false, "type": "base", "updateRule": null, "viewRule": null }, { "createRule": null, "deleteRule": null, "fields": [ { "autogeneratePattern": "[a-z0-9]{15}", "hidden": false, "id": "text3208210256", "max": 15, "min": 15, "name": "id", "pattern": "^[a-z0-9]+$", "presentable": false, "primaryKey": true, "required": true, "system": true, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "1tcmdsdf", "max": 0, "min": 0, "name": "name", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "hidden": false, "id": "f9wyhypi", "maxSize": 2000000, "name": "content", "presentable": false, "required": false, "system": false, "type": "json" }, { "hidden": false, "id": "autodate2990389176", "name": "created", "onCreate": true, "onUpdate": false, "presentable": false, "system": false, "type": "autodate" }, { "hidden": false, "id": "autodate3332085495", "name": "updated", "onCreate": true, "onUpdate": true, "presentable": false, "system": false, "type": "autodate" } ], "id": "dy6ccjb60spfy6p", "indexes": [ "CREATE UNIQUE INDEX ` + "`" + `idx_RO7X9Vw` + "`" + ` ON ` + "`" + `settings` + "`" + ` (` + "`" + `name` + "`" + `)" ], "listRule": null, "name": "settings", "system": false, "type": "base", "updateRule": null, "viewRule": null }, { "createRule": null, "deleteRule": null, "fields": [ { "autogeneratePattern": "[a-z0-9]{15}", "hidden": false, "id": "text3208210256", "max": 15, "min": 15, "name": "id", "pattern": "^[a-z0-9]+$", "presentable": false, "primaryKey": true, "required": true, "system": true, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "fmjfn0yw", "max": 0, "min": 0, "name": "ca", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "exceptDomains": null, "hidden": false, "id": "qqwijqzt", "name": "email", "onlyDomains": null, "presentable": false, "required": false, "system": false, "type": "email" }, { "autogeneratePattern": "", "hidden": false, "id": "genxqtii", "max": 0, "min": 0, "name": "key", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "hidden": false, "id": "1aoia909", "maxSize": 2000000, "name": "resource", "presentable": false, "required": false, "system": false, "type": "json" }, { "hidden": false, "id": "autodate2990389176", "name": "created", "onCreate": true, "onUpdate": false, "presentable": false, "system": false, "type": "autodate" }, { "hidden": false, "id": "autodate3332085495", "name": "updated", "onCreate": true, "onUpdate": true, "presentable": false, "system": false, "type": "autodate" } ], "id": "012d7abbod1hwvr", "indexes": [], "listRule": null, "name": "acme_accounts", "system": false, "type": "base", "updateRule": null, "viewRule": null }, { "createRule": null, "deleteRule": null, "fields": [ { "autogeneratePattern": "[a-z0-9]{15}", "hidden": false, "id": "text3208210256", "max": 15, "min": 15, "name": "id", "pattern": "^[a-z0-9]+$", "presentable": false, "primaryKey": true, "required": true, "system": true, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "8yydhv1h", "max": 0, "min": 0, "name": "name", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "1buzebwz", "max": 0, "min": 0, "name": "description", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "hidden": false, "id": "vqoajwjq", "maxSelect": 1, "name": "trigger", "presentable": false, "required": false, "system": false, "type": "select", "values": [ "auto", "manual" ] }, { "autogeneratePattern": "", "hidden": false, "id": "8ho247wh", "max": 0, "min": 0, "name": "triggerCron", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "hidden": false, "id": "nq7kfdzi", "name": "enabled", "presentable": false, "required": false, "system": false, "type": "bool" }, { "hidden": false, "id": "awlphkfe", "maxSize": 2000000, "name": "content", "presentable": false, "required": false, "system": false, "type": "json" }, { "hidden": false, "id": "g9ohkk5o", "maxSize": 2000000, "name": "draft", "presentable": false, "required": false, "system": false, "type": "json" }, { "hidden": false, "id": "2rpfz9t3", "name": "hasDraft", "presentable": false, "required": false, "system": false, "type": "bool" }, { "cascadeDelete": false, "collectionId": "qjp8lygssgwyqyz", "hidden": false, "id": "a23wkj9x", "maxSelect": 1, "minSelect": 0, "name": "lastRunId", "presentable": false, "required": false, "system": false, "type": "relation" }, { "hidden": false, "id": "zivdxh23", "maxSelect": 1, "name": "lastRunStatus", "presentable": false, "required": false, "system": false, "type": "select", "values": [ "pending", "running", "succeeded", "failed", "canceled" ] }, { "hidden": false, "id": "u9bosu36", "max": "", "min": "", "name": "lastRunTime", "presentable": false, "required": false, "system": false, "type": "date" }, { "hidden": false, "id": "autodate2990389176", "name": "created", "onCreate": true, "onUpdate": false, "presentable": false, "system": false, "type": "autodate" }, { "hidden": false, "id": "autodate3332085495", "name": "updated", "onCreate": true, "onUpdate": true, "presentable": false, "system": false, "type": "autodate" } ], "id": "tovyif5ax6j62ur", "indexes": [], "listRule": null, "name": "workflow", "system": false, "type": "base", "updateRule": null, "viewRule": null }, { "createRule": null, "deleteRule": null, "fields": [ { "autogeneratePattern": "[a-z0-9]{15}", "hidden": false, "id": "text3208210256", "max": 15, "min": 15, "name": "id", "pattern": "^[a-z0-9]+$", "presentable": false, "primaryKey": true, "required": true, "system": true, "type": "text" }, { "cascadeDelete": true, "collectionId": "tovyif5ax6j62ur", "hidden": false, "id": "jka88auc", "maxSelect": 1, "minSelect": 0, "name": "workflowId", "presentable": false, "required": false, "system": false, "type": "relation" }, { "cascadeDelete": true, "collectionId": "qjp8lygssgwyqyz", "hidden": false, "id": "relation821863227", "maxSelect": 1, "minSelect": 0, "name": "runId", "presentable": false, "required": false, "system": false, "type": "relation" }, { "autogeneratePattern": "", "hidden": false, "id": "z9fgvqkz", "max": 0, "min": 0, "name": "nodeId", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "hidden": false, "id": "c2rm9omj", "maxSize": 2000000, "name": "node", "presentable": false, "required": false, "system": false, "type": "json" }, { "hidden": false, "id": "he4cceqb", "maxSize": 2000000, "name": "outputs", "presentable": false, "required": false, "system": false, "type": "json" }, { "hidden": false, "id": "2yfxbxuf", "name": "succeeded", "presentable": false, "required": false, "system": false, "type": "bool" }, { "hidden": false, "id": "autodate2990389176", "name": "created", "onCreate": true, "onUpdate": false, "presentable": false, "system": false, "type": "autodate" }, { "hidden": false, "id": "autodate3332085495", "name": "updated", "onCreate": true, "onUpdate": true, "presentable": false, "system": false, "type": "autodate" } ], "id": "bqnxb95f2cooowp", "indexes": [ "CREATE INDEX ` + "`" + `idx_BYoQPsz4my` + "`" + ` ON ` + "`" + `workflow_output` + "`" + ` (` + "`" + `workflowId` + "`" + `)", "CREATE INDEX ` + "`" + `idx_O9zxLETuxJ` + "`" + ` ON ` + "`" + `workflow_output` + "`" + ` (` + "`" + `runId` + "`" + `)" ], "listRule": null, "name": "workflow_output", "system": false, "type": "base", "updateRule": null, "viewRule": null }, { "createRule": null, "deleteRule": null, "fields": [ { "autogeneratePattern": "[a-z0-9]{15}", "hidden": false, "id": "text3208210256", "max": 15, "min": 15, "name": "id", "pattern": "^[a-z0-9]+$", "presentable": false, "primaryKey": true, "required": true, "system": true, "type": "text" }, { "hidden": false, "id": "by9hetqi", "maxSelect": 1, "name": "source", "presentable": false, "required": false, "system": false, "type": "select", "values": [ "workflow", "upload" ] }, { "autogeneratePattern": "", "hidden": false, "id": "fugxf58p", "max": 0, "min": 0, "name": "subjectAltNames", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "text2069360702", "max": 0, "min": 0, "name": "serialNumber", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "plmambpz", "max": 0, "min": 0, "name": "certificate", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "49qvwxcg", "max": 0, "min": 0, "name": "privateKey", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "text2910474005", "max": 0, "min": 0, "name": "issuer", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "agt7n5bb", "max": 0, "min": 0, "name": "issuerCertificate", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "autogeneratePattern": "", "hidden": false, "id": "text4164403445", "max": 0, "min": 0, "name": "keyAlgorithm", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "hidden": false, "id": "v40aqzpd", "max": "", "min": "", "name": "effectAt", "presentable": false, "required": false, "system": false, "type": "date" }, { "hidden": false, "id": "zgpdby2k", "max": "", "min": "", "name": "expireAt", "presentable": false, "required": false, "system": false, "type": "date" }, { "autogeneratePattern": "", "hidden": false, "id": "text2045248758", "max": 0, "min": 0, "name": "acmeAccountUrl", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "exceptDomains": null, "hidden": false, "id": "ayyjy5ve", "name": "acmeCertUrl", "onlyDomains": null, "presentable": false, "required": false, "system": false, "type": "url" }, { "exceptDomains": null, "hidden": false, "id": "3x5heo8e", "name": "acmeCertStableUrl", "onlyDomains": null, "presentable": false, "required": false, "system": false, "type": "url" }, { "cascadeDelete": false, "collectionId": "tovyif5ax6j62ur", "hidden": false, "id": "uvqfamb1", "maxSelect": 1, "minSelect": 0, "name": "workflowId", "presentable": false, "required": false, "system": false, "type": "relation" }, { "cascadeDelete": false, "collectionId": "qjp8lygssgwyqyz", "hidden": false, "id": "relation3917999135", "maxSelect": 1, "minSelect": 0, "name": "workflowRunId", "presentable": false, "required": false, "system": false, "type": "relation" }, { "autogeneratePattern": "", "hidden": false, "id": "uqldzldw", "max": 0, "min": 0, "name": "workflowNodeId", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "cascadeDelete": false, "collectionId": "bqnxb95f2cooowp", "hidden": false, "id": "2ohlr0yd", "maxSelect": 1, "minSelect": 0, "name": "workflowOutputId", "presentable": false, "required": false, "system": false, "type": "relation" }, { "hidden": false, "id": "klyf4nlq", "max": "", "min": "", "name": "deleted", "presentable": false, "required": false, "system": false, "type": "date" }, { "hidden": false, "id": "autodate2990389176", "name": "created", "onCreate": true, "onUpdate": false, "presentable": false, "system": false, "type": "autodate" }, { "hidden": false, "id": "autodate3332085495", "name": "updated", "onCreate": true, "onUpdate": true, "presentable": false, "system": false, "type": "autodate" } ], "id": "4szxr9x43tpj6np", "indexes": [ "CREATE INDEX ` + "`" + `idx_Jx8TXzDCmw` + "`" + ` ON ` + "`" + `certificate` + "`" + ` (` + "`" + `workflowId` + "`" + `)", "CREATE INDEX ` + "`" + `idx_kcKpgAZapk` + "`" + ` ON ` + "`" + `certificate` + "`" + ` (` + "`" + `workflowNodeId` + "`" + `)", "CREATE INDEX ` + "`" + `idx_2cRXqNDyyp` + "`" + ` ON ` + "`" + `certificate` + "`" + ` (` + "`" + `workflowRunId` + "`" + `)" ], "listRule": null, "name": "certificate", "system": false, "type": "base", "updateRule": null, "viewRule": null }, { "createRule": null, "deleteRule": null, "fields": [ { "autogeneratePattern": "[a-z0-9]{15}", "hidden": false, "id": "text3208210256", "max": 15, "min": 15, "name": "id", "pattern": "^[a-z0-9]+$", "presentable": false, "primaryKey": true, "required": true, "system": true, "type": "text" }, { "cascadeDelete": true, "collectionId": "tovyif5ax6j62ur", "hidden": false, "id": "m8xfsyyy", "maxSelect": 1, "minSelect": 0, "name": "workflowId", "presentable": false, "required": false, "system": false, "type": "relation" }, { "hidden": false, "id": "qldmh0tw", "maxSelect": 1, "name": "status", "presentable": false, "required": false, "system": false, "type": "select", "values": [ "pending", "running", "succeeded", "failed", "canceled" ] }, { "hidden": false, "id": "jlroa3fk", "maxSelect": 1, "name": "trigger", "presentable": false, "required": false, "system": false, "type": "select", "values": [ "auto", "manual" ] }, { "hidden": false, "id": "k9xvtf89", "max": "", "min": "", "name": "startedAt", "presentable": false, "required": false, "system": false, "type": "date" }, { "hidden": false, "id": "3ikum7mk", "max": "", "min": "", "name": "endedAt", "presentable": false, "required": false, "system": false, "type": "date" }, { "hidden": false, "id": "2m9byaa9", "maxSize": 2000000, "name": "logs", "presentable": false, "required": false, "system": false, "type": "json" }, { "autogeneratePattern": "", "hidden": false, "id": "hvebkuxw", "max": 0, "min": 0, "name": "error", "pattern": "", "presentable": false, "primaryKey": false, "required": false, "system": false, "type": "text" }, { "hidden": false, "id": "autodate2990389176", "name": "created", "onCreate": true, "onUpdate": false, "presentable": false, "system": false, "type": "autodate" }, { "hidden": false, "id": "autodate3332085495", "name": "updated", "onCreate": true, "onUpdate": true, "presentable": false, "system": false, "type": "autodate" } ], "id": "qjp8lygssgwyqyz", "indexes": [], "listRule": null, "name": "workflow_run", "system": false, "type": "base", "updateRule": null, "viewRule": null }, { "authAlert": { "emailTemplate": { "body": "
Hello,
\nWe noticed a login to your {APP_NAME} account from a new location.
\nIf this was you, you may disregard this email.
\nIf this wasn't you, you should immediately change your {APP_NAME} account password to revoke access from all other locations.
\n\n Thanks,
\n {APP_NAME} team\n
Hello,
\nClick on the button below to confirm your new email address.
\n\n Confirm new email\n
\nIf you didn't ask to change your email address, you can ignore this email.
\n\n Thanks,
\n {APP_NAME} team\n
Hello,
\nYour one-time password is: {OTP}
\nIf you didn't ask for the one-time password, you can ignore this email.
\n\n Thanks,
\n {APP_NAME} team\n
Hello,
\nClick on the button below to reset your password.
\n\n Reset password\n
\nIf you didn't ask to reset your password, you can ignore this email.
\n\n Thanks,
\n {APP_NAME} team\n
Hello,
\nThank you for joining us at {APP_NAME}.
\nClick on the button below to verify your email address.
\n\n Verify\n
\n\n Thanks,
\n {APP_NAME} team\n