diff --git a/internal/subscriptions/domainperms.go b/internal/subscriptions/domainperms.go index b94f284bf..fe761d928 100644 --- a/internal/subscriptions/domainperms.go +++ b/internal/subscriptions/domainperms.go @@ -19,10 +19,12 @@ package subscriptions import ( "bufio" + "cmp" "context" "encoding/csv" "encoding/json" "errors" + "fmt" "io" "slices" "strconv" @@ -869,10 +871,13 @@ func (s *Subscriptions) adoptPerm( perm.SetCreatedByAccount(permSub.CreatedByAccount) // Set new metadata on the perm. - perm.SetObfuscate(obfuscate) perm.SetPrivateComment(privateComment) perm.SetPublicComment(publicComment) + // Avoid trying to blat nil into the db directly by + // defaulting to false if not set on wanted perm. + perm.SetObfuscate(cmp.Or(obfuscate, util.Ptr(false))) + // Update the perm in the db. var err error switch p := perm.(type) { diff --git a/internal/subscriptions/subscriptions_test.go b/internal/subscriptions/subscriptions_test.go index 2014835ae..133db4b7c 100644 --- a/internal/subscriptions/subscriptions_test.go +++ b/internal/subscriptions/subscriptions_test.go @@ -827,19 +827,27 @@ func (suite *SubscriptionsTestSuite) TestDomainAllowsAndBlocks() { ) // Create a subscription for a CSV list of goodies. + // This one adopts orphans. testAllowSubscription = >smodel.DomainPermissionSubscription{ ID: "01JGE681TQSBPAV59GZXPKE62H", Priority: 255, Title: "goodies!", PermissionType: gtsmodel.DomainPermissionAllow, AsDraft: util.Ptr(false), - AdoptOrphans: util.Ptr(false), + AdoptOrphans: util.Ptr(true), CreatedByAccountID: testAccount.ID, CreatedByAccount: testAccount, URI: "https://lists.example.org/goodies", ContentType: gtsmodel.DomainPermSubContentTypePlain, } + existingAllow = >smodel.DomainAllow{ + ID: "01JHX2V5WN250TKB6FQ1M3QE1H", + Domain: "people.we.like.com", + CreatedByAccount: testAccount, + CreatedByAccountID: testAccount.ID, + } + testBlockSubscription = >smodel.DomainPermissionSubscription{ ID: "01JPMVY19TKZND838Z7Y6S4EG8", Priority: 255, @@ -852,7 +860,6 @@ func (suite *SubscriptionsTestSuite) TestDomainAllowsAndBlocks() { URI: "https://lists.example.org/baddies.csv", ContentType: gtsmodel.DomainPermSubContentTypeCSV, } - ) defer testrig.TearDownTestStructs(testStructs) @@ -868,9 +875,14 @@ func (suite *SubscriptionsTestSuite) TestDomainAllowsAndBlocks() { suite.FailNow(err.Error()) } + // Store existing allow. + if err := testStructs.State.DB.CreateDomainAllow(ctx, existingAllow); err != nil { + suite.FailNow(err.Error()) + } + // Put the instance in allowlist mode. config.SetInstanceFederationMode("allowlist") - + // Fetch + process subscribed perms in order. var order [2]gtsmodel.DomainPermissionType if config.GetInstanceFederationMode() == config.InstanceFederationModeBlocklist { @@ -929,6 +941,13 @@ func (suite *SubscriptionsTestSuite) TestDomainAllowsAndBlocks() { suite.Equal(testBlockSubscription.ID, perm.GetSubscriptionID()) } + + var err error + existingAllow, err = testStructs.State.DB.GetDomainAllow(ctx, "people.we.like.com") + if err != nil { + suite.FailNow(err.Error()) + } + suite.Equal(existingAllow.SubscriptionID, testAllowSubscription.ID) } func TestSubscriptionTestSuite(t *testing.T) {