From 984aae1ca6644247591be8d78a18dbf411062fbe Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Sun, 22 Dec 2024 20:10:04 +0800 Subject: [PATCH] chore: remove unused code --- internal/domains/deploy.go | 213 ----------- internal/domains/domains.go | 79 ---- internal/domains/event.go | 27 -- internal/domains/history.go | 122 ------- internal/utils/variables/variables.go | 29 -- internal/utils/variables/variables_test.go | 56 --- migrations/1734868882_updated_access.go | 57 +++ migrations/1734869127_updated_domains.go | 57 +++ migrations/1734869146_updated_deployments.go | 57 +++ migrations/1734869175_updated_domains.go | 57 +++ migrations/1734869180_deleted_domains.go | 337 ++++++++++++++++++ migrations/1734869185_deleted_deployments.go | 110 ++++++ .../1734869190_deleted_access_groups.go | 80 +++++ 13 files changed, 755 insertions(+), 526 deletions(-) delete mode 100644 internal/domains/deploy.go delete mode 100644 internal/domains/domains.go delete mode 100644 internal/domains/event.go delete mode 100644 internal/domains/history.go delete mode 100644 internal/utils/variables/variables.go delete mode 100644 internal/utils/variables/variables_test.go create mode 100644 migrations/1734868882_updated_access.go create mode 100644 migrations/1734869127_updated_domains.go create mode 100644 migrations/1734869146_updated_deployments.go create mode 100644 migrations/1734869175_updated_domains.go create mode 100644 migrations/1734869180_deleted_domains.go create mode 100644 migrations/1734869185_deleted_deployments.go create mode 100644 migrations/1734869190_deleted_access_groups.go diff --git a/internal/domains/deploy.go b/internal/domains/deploy.go deleted file mode 100644 index d664ecf3..00000000 --- a/internal/domains/deploy.go +++ /dev/null @@ -1,213 +0,0 @@ -package domains - -import ( - "context" - "crypto/ecdsa" - "crypto/rsa" - "fmt" - "strings" - "time" - - "github.com/pocketbase/pocketbase/models" - - "golang.org/x/exp/slices" - - "github.com/usual2970/certimate/internal/applicant" - "github.com/usual2970/certimate/internal/deployer" - "github.com/usual2970/certimate/internal/domain" - "github.com/usual2970/certimate/internal/utils/app" - - "github.com/usual2970/certimate/internal/pkg/utils/x509" -) - -type Phase string - -const ( - checkPhase Phase = "check" - applyPhase Phase = "apply" - deployPhase Phase = "deploy" -) - -const validityDuration = time.Hour * 24 * 10 - -func deploy(ctx context.Context, record *models.Record) error { - defer func() { - if r := recover(); r != nil { - app.GetApp().Logger().Error("部署失败", "err", r) - } - }() - var certificate *applicant.Certificate - - history := NewHistory(record) - defer history.commit() - - // ############1.检查域名配置 - history.record(checkPhase, "开始检查", nil) - - currRecord, err := app.GetApp().Dao().FindRecordById("domains", record.Id) - if err != nil { - app.GetApp().Logger().Error("获取记录失败", "err", err) - history.record(checkPhase, "获取域名配置失败", &RecordInfo{Err: err}) - return err - } - history.record(checkPhase, "获取记录成功", nil) - - cert := currRecord.GetString("certificate") - expiredAt := currRecord.GetDateTime("expiredAt").Time() - - // 检查证书是否包含设置的所有域名 - changed := isCertChanged(cert, currRecord) - - if cert != "" && time.Until(expiredAt) > validityDuration && currRecord.GetBool("deployed") && !changed { - app.GetApp().Logger().Info("证书在有效期内") - history.record(checkPhase, "证书在有效期内且已部署,跳过", &RecordInfo{ - Info: []string{fmt.Sprintf("证书有效期至 %s", expiredAt.Format("2006-01-02"))}, - }, true) - - // 跳过的情况也算成功 - history.setWholeSuccess(true) - return nil - } - history.record(checkPhase, "检查通过", nil, true) - - // ############2.申请证书 - history.record(applyPhase, "开始申请", nil) - - if cert != "" && time.Until(expiredAt) > validityDuration && !changed { - history.record(applyPhase, "证书在有效期内,跳过", &RecordInfo{ - Info: []string{fmt.Sprintf("证书有效期至 %s", expiredAt.Format("2006-01-02"))}, - }) - } else { - applicant, err := applicant.Get(currRecord) - if err != nil { - history.record(applyPhase, "获取applicant失败", &RecordInfo{Err: err}) - app.GetApp().Logger().Error("获取applicant失败", "err", err) - return err - } - certificate, err = applicant.Apply() - if err != nil { - history.record(applyPhase, "申请证书失败", &RecordInfo{Err: err}) - app.GetApp().Logger().Error("申请证书失败", "err", err) - return err - } - history.record(applyPhase, "申请证书成功", &RecordInfo{ - Info: []string{fmt.Sprintf("证书地址: %s", certificate.CertUrl)}, - }) - history.setCert(certificate) - } - - history.record(applyPhase, "保存证书成功", nil, true) - - // ############3.部署证书 - history.record(deployPhase, "开始部署", nil, false) - deployers, err := deployer.Gets(currRecord, certificate) - if err != nil { - history.record(deployPhase, "获取deployer失败", &RecordInfo{Err: err}) - app.GetApp().Logger().Error("获取deployer失败", "err", err) - return err - } - - // 没有部署配置,也算成功 - if len(deployers) == 0 { - history.record(deployPhase, "没有部署配置", &RecordInfo{Info: []string{"没有部署配置"}}) - history.setWholeSuccess(true) - return nil - } - - for _, deployer := range deployers { - if err = deployer.Deploy(ctx); err != nil { - - app.GetApp().Logger().Error("部署失败", "err", err) - history.record(deployPhase, "部署失败", &RecordInfo{Err: err, Info: deployer.GetInfos()}) - return err - } - history.record(deployPhase, fmt.Sprintf("[%s]-部署成功", deployer.GetID()), &RecordInfo{ - Info: deployer.GetInfos(), - }, false) - - } - - app.GetApp().Logger().Info("部署成功") - history.record(deployPhase, "部署成功", nil, true) - - history.setWholeSuccess(true) - - return nil -} - -func isCertChanged(certificate string, record *models.Record) bool { - // 如果证书为空,直接返回true - if certificate == "" { - return true - } - - // 解析证书 - cert, err := x509.ParseCertificateFromPEM(certificate) - if err != nil { - app.GetApp().Logger().Error("解析证书失败", "err", err) - return true - } - - // 遍历域名列表,检查是否都在证书中,找到第一个不存在证书中域名时提前返回true - for _, domain := range strings.Split(record.GetString("domain"), ";") { - if !slices.Contains(cert.DNSNames, domain) && !slices.Contains(cert.DNSNames, "*."+removeLastSubdomain(domain)) { - return true - } - } - - // 解析applyConfig - applyConfig := &domain.ApplyConfig{} - record.UnmarshalJSONField("applyConfig", applyConfig) - - // 检查证书加密算法是否变更 - switch pubkey := cert.PublicKey.(type) { - case *rsa.PublicKey: - bitSize := pubkey.N.BitLen() - switch bitSize { - case 2048: - // RSA2048 - if applyConfig.KeyAlgorithm != "" && applyConfig.KeyAlgorithm != "RSA2048" { - return true - } - case 3072: - // RSA3072 - if applyConfig.KeyAlgorithm != "RSA3072" { - return true - } - case 4096: - // RSA4096 - if applyConfig.KeyAlgorithm != "RSA4096" { - return true - } - case 8192: - // RSA8192 - if applyConfig.KeyAlgorithm != "RSA8192" { - return true - } - } - case *ecdsa.PublicKey: - bitSize := pubkey.Curve.Params().BitSize - switch bitSize { - case 256: - // EC256 - if applyConfig.KeyAlgorithm != "EC256" { - return true - } - case 384: - // EC384 - if applyConfig.KeyAlgorithm != "EC384" { - return true - } - } - } - - return false -} - -func removeLastSubdomain(domain string) string { - parts := strings.Split(domain, ".") - if len(parts) > 1 { - return strings.Join(parts[1:], ".") - } - return domain -} diff --git a/internal/domains/domains.go b/internal/domains/domains.go deleted file mode 100644 index dd65dff8..00000000 --- a/internal/domains/domains.go +++ /dev/null @@ -1,79 +0,0 @@ -package domains - -import ( - "context" - "fmt" - - "github.com/pocketbase/pocketbase/models" - - "github.com/usual2970/certimate/internal/utils/app" -) - -func create(ctx context.Context, record *models.Record) error { - if !record.GetBool("enabled") { - return nil - } - - if record.GetBool("rightnow") { - go func() { - if err := deploy(ctx, record); err != nil { - app.GetApp().Logger().Error("deploy failed", "err", err) - } - }() - } - - scheduler := app.GetScheduler() - - err := scheduler.Add(record.Id, record.GetString("crontab"), func() { - deploy(ctx, record) - }) - if err != nil { - app.GetApp().Logger().Error("add cron job failed", "err", err) - return fmt.Errorf("add cron job failed: %w", err) - } - app.GetApp().Logger().Error("add cron job failed", "domain", record.GetString("domain")) - - scheduler.Start() - return nil -} - -func update(ctx context.Context, record *models.Record) error { - scheduler := app.GetScheduler() - scheduler.Remove(record.Id) - if !record.GetBool("enabled") { - return nil - } - - if record.GetBool("rightnow") { - go func() { - if err := deploy(ctx, record); err != nil { - app.GetApp().Logger().Error("deploy failed", "err", err) - } - }() - } - - err := scheduler.Add(record.Id, record.GetString("crontab"), func() { - deploy(ctx, record) - }) - if err != nil { - app.GetApp().Logger().Error("update cron job failed", "err", err) - return fmt.Errorf("update cron job failed: %w", err) - } - app.GetApp().Logger().Info("update cron job success", "domain", record.GetString("domain")) - - scheduler.Start() - return nil -} - -func delete(_ context.Context, record *models.Record) error { - scheduler := app.GetScheduler() - - scheduler.Remove(record.Id) - scheduler.Start() - return nil -} - -func setRightnow(ctx context.Context, record *models.Record, ok bool) error { - record.Set("rightnow", ok) - return app.GetApp().Dao().SaveRecord(record) -} diff --git a/internal/domains/event.go b/internal/domains/event.go deleted file mode 100644 index 7acb31e9..00000000 --- a/internal/domains/event.go +++ /dev/null @@ -1,27 +0,0 @@ -package domains - -import ( - "github.com/pocketbase/pocketbase/core" - - "github.com/usual2970/certimate/internal/utils/app" -) - -const tableName = "domains" - -func AddEvent() error { - app := app.GetApp() - - app.OnRecordAfterCreateRequest(tableName).Add(func(e *core.RecordCreateEvent) error { - return create(e.HttpContext.Request().Context(), e.Record) - }) - - app.OnRecordAfterUpdateRequest(tableName).Add(func(e *core.RecordUpdateEvent) error { - return update(e.HttpContext.Request().Context(), e.Record) - }) - - app.OnRecordAfterDeleteRequest(tableName).Add(func(e *core.RecordDeleteEvent) error { - return delete(e.HttpContext.Request().Context(), e.Record) - }) - - return nil -} diff --git a/internal/domains/history.go b/internal/domains/history.go deleted file mode 100644 index 47ed5afa..00000000 --- a/internal/domains/history.go +++ /dev/null @@ -1,122 +0,0 @@ -package domains - -import ( - "time" - - "github.com/pocketbase/pocketbase/models" - - "github.com/usual2970/certimate/internal/applicant" - "github.com/usual2970/certimate/internal/utils/app" - "github.com/usual2970/certimate/internal/utils/xtime" -) - -type historyItem struct { - Time string `json:"time"` - Message string `json:"message"` - Error string `json:"error"` - Info []string `json:"info"` -} - -type RecordInfo struct { - Err error `json:"err"` - Info []string `json:"info"` -} - -type history struct { - Domain string `json:"domain"` - Log map[Phase][]historyItem `json:"log"` - Phase Phase `json:"phase"` - PhaseSuccess bool `json:"phaseSuccess"` - DeployedAt string `json:"deployedAt"` - Cert *applicant.Certificate `json:"cert"` - WholeSuccess bool `json:"wholeSuccess"` -} - -func NewHistory(record *models.Record) *history { - return &history{ - Domain: record.Id, - DeployedAt: time.Now().UTC().Format("2006-01-02T15:04:05Z"), - Log: make(map[Phase][]historyItem), - Phase: checkPhase, - PhaseSuccess: false, - } -} - -func (a *history) record(phase Phase, msg string, info *RecordInfo, pass ...bool) { - if info == nil { - info = &RecordInfo{} - } - a.Phase = phase - if len(pass) > 0 { - a.PhaseSuccess = pass[0] - } - - errMsg := "" - if info.Err != nil { - errMsg = info.Err.Error() - a.PhaseSuccess = false - } - - a.Log[phase] = append(a.Log[phase], historyItem{ - Message: msg, - Error: errMsg, - Info: info.Info, - Time: xtime.BeijingTimeStr(), - }) -} - -func (a *history) setCert(cert *applicant.Certificate) { - a.Cert = cert -} - -func (a *history) setWholeSuccess(success bool) { - a.WholeSuccess = success -} - -func (a *history) commit() error { - collection, err := app.GetApp().Dao().FindCollectionByNameOrId("deployments") - if err != nil { - return err - } - - record := models.NewRecord(collection) - - record.Set("domain", a.Domain) - record.Set("deployedAt", a.DeployedAt) - record.Set("log", a.Log) - record.Set("phase", string(a.Phase)) - record.Set("phaseSuccess", a.PhaseSuccess) - record.Set("wholeSuccess", a.WholeSuccess) - - if err := app.GetApp().Dao().SaveRecord(record); err != nil { - return err - } - - domainRecord, err := app.GetApp().Dao().FindRecordById("domains", a.Domain) - if err != nil { - return err - } - - domainRecord.Set("lastDeployedAt", a.DeployedAt) - domainRecord.Set("lastDeployment", record.Id) - domainRecord.Set("rightnow", false) - if a.Phase == deployPhase && a.PhaseSuccess { - domainRecord.Set("deployed", true) - } - cert := a.Cert - if cert != nil { - domainRecord.Set("certUrl", cert.CertUrl) - domainRecord.Set("certStableUrl", cert.CertStableUrl) - domainRecord.Set("privateKey", cert.PrivateKey) - domainRecord.Set("certificate", cert.Certificate) - domainRecord.Set("issuerCertificate", cert.IssuerCertificate) - domainRecord.Set("csr", cert.Csr) - domainRecord.Set("expiredAt", time.Now().Add(time.Hour*24*90)) - } - - if err := app.GetApp().Dao().SaveRecord(domainRecord); err != nil { - return err - } - - return nil -} diff --git a/internal/utils/variables/variables.go b/internal/utils/variables/variables.go deleted file mode 100644 index 74a7b22d..00000000 --- a/internal/utils/variables/variables.go +++ /dev/null @@ -1,29 +0,0 @@ -package variables - -import "strings" - -// Parse2Map 将变量赋值字符串解析为map -func Parse2Map(str string) map[string]string { - m := make(map[string]string) - - lines := strings.Split(str, ";") - - for _, line := range lines { - - line = strings.TrimSpace(line) - - if line == "" { - continue - } - - kv := strings.Split(line, "=") - - if len(kv) != 2 { - continue - } - - m[kv[0]] = kv[1] - } - - return m -} diff --git a/internal/utils/variables/variables_test.go b/internal/utils/variables/variables_test.go deleted file mode 100644 index c1c2764e..00000000 --- a/internal/utils/variables/variables_test.go +++ /dev/null @@ -1,56 +0,0 @@ -package variables - -import ( - "reflect" - "testing" -) - -func TestParse2Map(t *testing.T) { - type args struct { - str string - } - tests := []struct { - name string - args args - want map[string]string - }{ - { - name: "test1", - args: args{ - str: "a=1;b=2;c=3", - }, - want: map[string]string{ - "a": "1", - "b": "2", - "c": "3", - }, - }, - { - name: "test2", - args: args{ - str: `a=1; - b=2; - c=`, - }, - want: map[string]string{ - "a": "1", - "b": "2", - "c": "", - }, - }, - { - name: "test3", - args: args{ - str: "1", - }, - want: map[string]string{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := Parse2Map(tt.args.str); !reflect.DeepEqual(got, tt.want) { - t.Errorf("Parse2Map() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/migrations/1734868882_updated_access.go b/migrations/1734868882_updated_access.go new file mode 100644 index 00000000..75dedc10 --- /dev/null +++ b/migrations/1734868882_updated_access.go @@ -0,0 +1,57 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models/schema" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("4yzbv8urny5ja1e") + if err != nil { + return err + } + + // remove + collection.Schema.RemoveField("c8egzzwj") + + return dao.SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("4yzbv8urny5ja1e") + if err != nil { + return err + } + + // add + del_group := &schema.SchemaField{} + if err := json.Unmarshal([]byte(`{ + "system": false, + "id": "c8egzzwj", + "name": "group", + "type": "relation", + "required": false, + "presentable": false, + "unique": false, + "options": { + "collectionId": "teolp9pl72dxlxq", + "cascadeDelete": false, + "minSelect": null, + "maxSelect": 1, + "displayFields": null + } + }`), del_group); err != nil { + return err + } + collection.Schema.AddField(del_group) + + return dao.SaveCollection(collection) + }) +} diff --git a/migrations/1734869127_updated_domains.go b/migrations/1734869127_updated_domains.go new file mode 100644 index 00000000..f9575fa0 --- /dev/null +++ b/migrations/1734869127_updated_domains.go @@ -0,0 +1,57 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models/schema" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("z3p974ainxjqlvs") + if err != nil { + return err + } + + // remove + collection.Schema.RemoveField("1bspzuku") + + return dao.SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("z3p974ainxjqlvs") + if err != nil { + return err + } + + // add + del_group := &schema.SchemaField{} + if err := json.Unmarshal([]byte(`{ + "system": false, + "id": "1bspzuku", + "name": "group", + "type": "relation", + "required": false, + "presentable": false, + "unique": false, + "options": { + "collectionId": "teolp9pl72dxlxq", + "cascadeDelete": false, + "minSelect": null, + "maxSelect": 1, + "displayFields": null + } + }`), del_group); err != nil { + return err + } + collection.Schema.AddField(del_group) + + return dao.SaveCollection(collection) + }) +} diff --git a/migrations/1734869146_updated_deployments.go b/migrations/1734869146_updated_deployments.go new file mode 100644 index 00000000..a1b31228 --- /dev/null +++ b/migrations/1734869146_updated_deployments.go @@ -0,0 +1,57 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models/schema" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("0a1o4e6sstp694f") + if err != nil { + return err + } + + // remove + collection.Schema.RemoveField("farvlzk7") + + return dao.SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("0a1o4e6sstp694f") + if err != nil { + return err + } + + // add + del_domain := &schema.SchemaField{} + if err := json.Unmarshal([]byte(`{ + "system": false, + "id": "farvlzk7", + "name": "domain", + "type": "relation", + "required": false, + "presentable": false, + "unique": false, + "options": { + "collectionId": "z3p974ainxjqlvs", + "cascadeDelete": false, + "minSelect": null, + "maxSelect": 1, + "displayFields": null + } + }`), del_domain); err != nil { + return err + } + collection.Schema.AddField(del_domain) + + return dao.SaveCollection(collection) + }) +} diff --git a/migrations/1734869175_updated_domains.go b/migrations/1734869175_updated_domains.go new file mode 100644 index 00000000..1c89f58a --- /dev/null +++ b/migrations/1734869175_updated_domains.go @@ -0,0 +1,57 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models/schema" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("z3p974ainxjqlvs") + if err != nil { + return err + } + + // remove + collection.Schema.RemoveField("ghtlkn5j") + + return dao.SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("z3p974ainxjqlvs") + if err != nil { + return err + } + + // add + del_lastDeployment := &schema.SchemaField{} + if err := json.Unmarshal([]byte(`{ + "system": false, + "id": "ghtlkn5j", + "name": "lastDeployment", + "type": "relation", + "required": false, + "presentable": false, + "unique": false, + "options": { + "collectionId": "0a1o4e6sstp694f", + "cascadeDelete": false, + "minSelect": null, + "maxSelect": 1, + "displayFields": null + } + }`), del_lastDeployment); err != nil { + return err + } + collection.Schema.AddField(del_lastDeployment) + + return dao.SaveCollection(collection) + }) +} diff --git a/migrations/1734869180_deleted_domains.go b/migrations/1734869180_deleted_domains.go new file mode 100644 index 00000000..af224651 --- /dev/null +++ b/migrations/1734869180_deleted_domains.go @@ -0,0 +1,337 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("z3p974ainxjqlvs") + if err != nil { + return err + } + + return dao.DeleteCollection(collection) + }, func(db dbx.Builder) error { + jsonData := `{ + "id": "z3p974ainxjqlvs", + "created": "2024-07-29 10:02:48.334Z", + "updated": "2024-12-22 12:06:15.156Z", + "name": "domains", + "type": "base", + "system": false, + "schema": [ + { + "system": false, + "id": "iuaerpl2", + "name": "domain", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "ukkhuw85", + "name": "email", + "type": "email", + "required": false, + "presentable": false, + "unique": false, + "options": { + "exceptDomains": null, + "onlyDomains": null + } + }, + { + "system": false, + "id": "v98eebqq", + "name": "crontab", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "alc8e9ow", + "name": "access", + "type": "relation", + "required": false, + "presentable": false, + "unique": false, + "options": { + "collectionId": "4yzbv8urny5ja1e", + "cascadeDelete": false, + "minSelect": null, + "maxSelect": 1, + "displayFields": null + } + }, + { + "system": false, + "id": "topsc9bj", + "name": "certUrl", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "vixgq072", + "name": "certStableUrl", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "g3a3sza5", + "name": "privateKey", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "gr6iouny", + "name": "certificate", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "tk6vnrmn", + "name": "issuerCertificate", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "sjo6ibse", + "name": "csr", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "x03n1bkj", + "name": "expiredAt", + "type": "date", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": "", + "max": "" + } + }, + { + "system": false, + "id": "srybpixz", + "name": "targetType", + "type": "select", + "required": false, + "presentable": false, + "unique": false, + "options": { + "maxSelect": 1, + "values": [ + "aliyun-oss", + "aliyun-cdn", + "aliyun-dcdn", + "ssh", + "webhook", + "tencent-cdn", + "qiniu-cdn", + "local" + ] + } + }, + { + "system": false, + "id": "xy7yk0mb", + "name": "targetAccess", + "type": "relation", + "required": false, + "presentable": false, + "unique": false, + "options": { + "collectionId": "4yzbv8urny5ja1e", + "cascadeDelete": false, + "minSelect": null, + "maxSelect": 1, + "displayFields": null + } + }, + { + "system": false, + "id": "6jqeyggw", + "name": "enabled", + "type": "bool", + "required": false, + "presentable": false, + "unique": false, + "options": {} + }, + { + "system": false, + "id": "hdsjcchf", + "name": "deployed", + "type": "bool", + "required": false, + "presentable": false, + "unique": false, + "options": {} + }, + { + "system": false, + "id": "aiya3rev", + "name": "rightnow", + "type": "bool", + "required": false, + "presentable": false, + "unique": false, + "options": {} + }, + { + "system": false, + "id": "ixznmhzc", + "name": "lastDeployedAt", + "type": "date", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": "", + "max": "" + } + }, + { + "system": false, + "id": "zfnyj9he", + "name": "variables", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "g65gfh7a", + "name": "nameservers", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "wwrzc3jo", + "name": "applyConfig", + "type": "json", + "required": false, + "presentable": false, + "unique": false, + "options": { + "maxSize": 2000000 + } + }, + { + "system": false, + "id": "474iwy8r", + "name": "deployConfig", + "type": "json", + "required": false, + "presentable": false, + "unique": false, + "options": { + "maxSize": 2000000 + } + } + ], + "indexes": [ + "CREATE UNIQUE INDEX ` + "`" + `idx_4ABO6EQ` + "`" + ` ON ` + "`" + `domains` + "`" + ` (` + "`" + `domain` + "`" + `)" + ], + "listRule": null, + "viewRule": null, + "createRule": null, + "updateRule": null, + "deleteRule": null, + "options": {} + }` + + collection := &models.Collection{} + if err := json.Unmarshal([]byte(jsonData), &collection); err != nil { + return err + } + + return daos.New(db).SaveCollection(collection) + }) +} diff --git a/migrations/1734869185_deleted_deployments.go b/migrations/1734869185_deleted_deployments.go new file mode 100644 index 00000000..5b7ab42a --- /dev/null +++ b/migrations/1734869185_deleted_deployments.go @@ -0,0 +1,110 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("0a1o4e6sstp694f") + if err != nil { + return err + } + + return dao.DeleteCollection(collection) + }, func(db dbx.Builder) error { + jsonData := `{ + "id": "0a1o4e6sstp694f", + "created": "2024-07-30 06:30:27.801Z", + "updated": "2024-12-22 12:05:46.060Z", + "name": "deployments", + "type": "base", + "system": false, + "schema": [ + { + "system": false, + "id": "jx5f69i3", + "name": "log", + "type": "json", + "required": false, + "presentable": false, + "unique": false, + "options": { + "maxSize": 2000000 + } + }, + { + "system": false, + "id": "qbxdtg9q", + "name": "phase", + "type": "select", + "required": false, + "presentable": false, + "unique": false, + "options": { + "maxSelect": 1, + "values": [ + "check", + "apply", + "deploy" + ] + } + }, + { + "system": false, + "id": "rglrp1hz", + "name": "phaseSuccess", + "type": "bool", + "required": false, + "presentable": false, + "unique": false, + "options": {} + }, + { + "system": false, + "id": "lt1g1blu", + "name": "deployedAt", + "type": "date", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": "", + "max": "" + } + }, + { + "system": false, + "id": "wledpzgb", + "name": "wholeSuccess", + "type": "bool", + "required": false, + "presentable": false, + "unique": false, + "options": {} + } + ], + "indexes": [], + "listRule": null, + "viewRule": null, + "createRule": null, + "updateRule": null, + "deleteRule": null, + "options": {} + }` + + collection := &models.Collection{} + if err := json.Unmarshal([]byte(jsonData), &collection); err != nil { + return err + } + + return daos.New(db).SaveCollection(collection) + }) +} diff --git a/migrations/1734869190_deleted_access_groups.go b/migrations/1734869190_deleted_access_groups.go new file mode 100644 index 00000000..6e423d88 --- /dev/null +++ b/migrations/1734869190_deleted_access_groups.go @@ -0,0 +1,80 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("teolp9pl72dxlxq") + if err != nil { + return err + } + + return dao.DeleteCollection(collection) + }, func(db dbx.Builder) error { + jsonData := `{ + "id": "teolp9pl72dxlxq", + "created": "2024-09-13 12:51:05.611Z", + "updated": "2024-11-25 07:41:10.235Z", + "name": "access_groups", + "type": "base", + "system": false, + "schema": [ + { + "system": false, + "id": "7sajiv6i", + "name": "name", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + }, + { + "system": false, + "id": "xp8admif", + "name": "access", + "type": "relation", + "required": false, + "presentable": false, + "unique": false, + "options": { + "collectionId": "4yzbv8urny5ja1e", + "cascadeDelete": false, + "minSelect": null, + "maxSelect": null, + "displayFields": null + } + } + ], + "indexes": [ + "CREATE UNIQUE INDEX ` + "`" + `idx_RgRXp0R` + "`" + ` ON ` + "`" + `access_groups` + "`" + ` (` + "`" + `name` + "`" + `)" + ], + "listRule": null, + "viewRule": null, + "createRule": null, + "updateRule": null, + "deleteRule": null, + "options": {} + }` + + collection := &models.Collection{} + if err := json.Unmarshal([]byte(jsonData), &collection); err != nil { + return err + } + + return daos.New(db).SaveCollection(collection) + }) +}