mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-04 07:06:36 +08:00
fix(cloudflare): clean up pointing member when zone domain is deleted
This commit is contained in:
@@ -10,8 +10,10 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
cf "github.com/Rain-kl/Wavelet/internal/apps/openflare/cloudflare"
|
||||
"github.com/Rain-kl/Wavelet/internal/model"
|
||||
"github.com/Rain-kl/Wavelet/internal/repository"
|
||||
"github.com/Rain-kl/Wavelet/pkg/logger"
|
||||
"golang.org/x/net/publicsuffix"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
@@ -220,6 +222,19 @@ func DeleteDomain(ctx context.Context, zoneID, id uint) error {
|
||||
if item.ProxyRouteID != nil {
|
||||
return errors.New(errDomainBoundToRoute)
|
||||
}
|
||||
member, cfErr := repository.GetCFPointingMemberByZoneDomainID(ctx, item.ID)
|
||||
if cfErr != nil && !errors.Is(cfErr, gorm.ErrRecordNotFound) {
|
||||
return cfErr
|
||||
}
|
||||
if member != nil {
|
||||
if delErr := cf.DeleteManagedRecord(ctx, member.ID); delErr != nil {
|
||||
logger.WarnF(ctx, "[Zone] delete managed Cloudflare record failed for domain %s (member_id=%d): %v", item.Domain, member.ID, delErr)
|
||||
}
|
||||
if delMemberErr := repository.DeleteCFPointingMember(ctx, member); delMemberErr != nil {
|
||||
logger.ErrorF(ctx, "[Zone] delete Cloudflare pointing member failed: member_id=%d error=%v", member.ID, delMemberErr)
|
||||
return delMemberErr
|
||||
}
|
||||
}
|
||||
return repository.DeleteZoneDomain(ctx, item)
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ func setupZoneDB(t *testing.T) context.Context {
|
||||
t.Helper()
|
||||
conn, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{DisableForeignKeyConstraintWhenMigrating: true})
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, conn.AutoMigrate(&model.Zone{}, &model.ZoneDomain{}, &model.TLSCertificate{}))
|
||||
require.NoError(t, conn.AutoMigrate(&model.Zone{}, &model.ZoneDomain{}, &model.TLSCertificate{}, &model.CFPointingGroup{}, &model.CFPointingMember{}))
|
||||
db.SetDB(conn)
|
||||
t.Cleanup(func() { db.SetDB(nil) })
|
||||
return context.Background()
|
||||
@@ -54,6 +54,22 @@ func TestDeleteDomainRejectsBoundRoute(t *testing.T) {
|
||||
require.NoError(t, DeleteDomain(ctx, zone.ID, item.ID))
|
||||
}
|
||||
|
||||
func TestDeleteDomainCleansUpCloudflareMember(t *testing.T) {
|
||||
ctx := setupZoneDB(t)
|
||||
zone, err := Create(ctx, Input{Domain: "example.com"})
|
||||
require.NoError(t, err)
|
||||
domain, err := CreateDomain(ctx, zone.ID, DomainInput{Domain: "api.example.com"})
|
||||
require.NoError(t, err)
|
||||
|
||||
member := model.CFPointingMember{GroupID: 1, ZoneDomainID: domain.ID}
|
||||
require.NoError(t, repository.CreateCFPointingMember(ctx, &member))
|
||||
|
||||
require.NoError(t, DeleteDomain(ctx, zone.ID, domain.ID))
|
||||
|
||||
_, err = repository.GetCFPointingMemberByZoneDomainID(ctx, domain.ID)
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func TestLegacyImportUsesEffectiveTLDPlusOne(t *testing.T) {
|
||||
root, err := zoneRoot("api.example.co.uk")
|
||||
require.NoError(t, err)
|
||||
|
||||
Reference in New Issue
Block a user