mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-04-27 11:34:43 +00:00
[bugfix] Fix set obfuscate = null error in adoptPerm (#3922)
* [chore] More tests for domain allow + block subscriptions * [bugfix] Fix set `obfuscate = null` error in adoptPerm * fmt
This commit is contained in:
parent
f94da1a33c
commit
b6e56feeda
3 changed files with 175 additions and 1 deletions
|
@ -19,6 +19,7 @@ package subscriptions
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"cmp"
|
||||
"context"
|
||||
"encoding/csv"
|
||||
"encoding/json"
|
||||
|
@ -869,10 +870,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) {
|
||||
|
|
|
@ -24,6 +24,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/stretchr/testify/suite"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/db"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/subscriptions"
|
||||
|
@ -814,6 +815,141 @@ func (suite *SubscriptionsTestSuite) TestAdoption() {
|
|||
suite.Equal(testSubscription.ID, existingBlock3.SubscriptionID)
|
||||
}
|
||||
|
||||
func (suite *SubscriptionsTestSuite) TestDomainAllowsAndBlocks() {
|
||||
var (
|
||||
ctx = context.Background()
|
||||
testStructs = testrig.SetupTestStructs(rMediaPath, rTemplatePath)
|
||||
testAccount = suite.testAccounts["admin_account"]
|
||||
subscriptions = subscriptions.New(
|
||||
testStructs.State,
|
||||
testStructs.TransportController,
|
||||
testStructs.TypeConverter,
|
||||
)
|
||||
|
||||
// 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(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,
|
||||
Title: "baddies!",
|
||||
PermissionType: gtsmodel.DomainPermissionBlock,
|
||||
AsDraft: util.Ptr(false),
|
||||
AdoptOrphans: util.Ptr(false),
|
||||
CreatedByAccountID: testAccount.ID,
|
||||
CreatedByAccount: testAccount,
|
||||
URI: "https://lists.example.org/baddies.csv",
|
||||
ContentType: gtsmodel.DomainPermSubContentTypeCSV,
|
||||
}
|
||||
)
|
||||
defer testrig.TearDownTestStructs(testStructs)
|
||||
|
||||
// Store test subscriptions.
|
||||
if err := testStructs.State.DB.PutDomainPermissionSubscription(
|
||||
ctx, testAllowSubscription,
|
||||
); err != nil {
|
||||
suite.FailNow(err.Error())
|
||||
}
|
||||
if err := testStructs.State.DB.PutDomainPermissionSubscription(
|
||||
ctx, testBlockSubscription,
|
||||
); err != nil {
|
||||
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 {
|
||||
order = [2]gtsmodel.DomainPermissionType{
|
||||
gtsmodel.DomainPermissionAllow,
|
||||
gtsmodel.DomainPermissionBlock,
|
||||
}
|
||||
} else {
|
||||
order = [2]gtsmodel.DomainPermissionType{
|
||||
gtsmodel.DomainPermissionBlock,
|
||||
gtsmodel.DomainPermissionAllow,
|
||||
}
|
||||
}
|
||||
for _, permType := range order {
|
||||
subscriptions.ProcessDomainPermissionSubscriptions(ctx, permType)
|
||||
}
|
||||
|
||||
// We should now have allows for each
|
||||
// domain on the subscribed allow list.
|
||||
for _, domain := range []string{
|
||||
"people.we.like.com",
|
||||
"goodeggs.org",
|
||||
"allowthesefolks.church",
|
||||
} {
|
||||
var (
|
||||
perm gtsmodel.DomainPermission
|
||||
err error
|
||||
)
|
||||
if !testrig.WaitFor(func() bool {
|
||||
perm, err = testStructs.State.DB.GetDomainAllow(ctx, domain)
|
||||
return err == nil
|
||||
}) {
|
||||
suite.FailNowf("", "timed out waiting for domain %s", domain)
|
||||
}
|
||||
|
||||
suite.Equal(testAllowSubscription.ID, perm.GetSubscriptionID())
|
||||
}
|
||||
|
||||
// And blocks for for each domain
|
||||
// on the subscribed block list.
|
||||
for _, domain := range []string{
|
||||
"bumfaces.net",
|
||||
"peepee.poopoo",
|
||||
"nothanks.com",
|
||||
} {
|
||||
var (
|
||||
perm gtsmodel.DomainPermission
|
||||
err error
|
||||
)
|
||||
if !testrig.WaitFor(func() bool {
|
||||
perm, err = testStructs.State.DB.GetDomainBlock(ctx, domain)
|
||||
return err == nil
|
||||
}) {
|
||||
suite.FailNowf("", "timed out waiting for domain %s", domain)
|
||||
}
|
||||
|
||||
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) {
|
||||
suite.Run(t, new(SubscriptionsTestSuite))
|
||||
}
|
||||
|
|
|
@ -640,6 +640,10 @@ nothanks.com`
|
|||
}
|
||||
]`
|
||||
jsonRespETag = "\"don't modify me daddy\""
|
||||
allowsResp = `people.we.like.com
|
||||
goodeggs.org
|
||||
allowthesefolks.church`
|
||||
allowsRespETag = "\"never change\""
|
||||
)
|
||||
|
||||
switch req.URL.String() {
|
||||
|
@ -720,6 +724,36 @@ nothanks.com`
|
|||
}
|
||||
responseContentLength = len(responseBytes)
|
||||
|
||||
case "https://lists.example.org/goodies.csv":
|
||||
extraHeaders = map[string]string{
|
||||
"Last-Modified": lastModified,
|
||||
"ETag": allowsRespETag,
|
||||
}
|
||||
if req.Header.Get("If-None-Match") == allowsRespETag {
|
||||
// Cached.
|
||||
responseCode = http.StatusNotModified
|
||||
} else {
|
||||
responseBytes = []byte(allowsResp)
|
||||
responseContentType = textCSV
|
||||
responseCode = http.StatusOK
|
||||
}
|
||||
responseContentLength = len(responseBytes)
|
||||
|
||||
case "https://lists.example.org/goodies":
|
||||
extraHeaders = map[string]string{
|
||||
"Last-Modified": lastModified,
|
||||
"ETag": allowsRespETag,
|
||||
}
|
||||
if req.Header.Get("If-None-Match") == allowsRespETag {
|
||||
// Cached.
|
||||
responseCode = http.StatusNotModified
|
||||
} else {
|
||||
responseBytes = []byte(allowsResp)
|
||||
responseContentType = textPlain
|
||||
responseCode = http.StatusOK
|
||||
}
|
||||
responseContentLength = len(responseBytes)
|
||||
|
||||
default:
|
||||
responseCode = http.StatusNotFound
|
||||
responseBytes = []byte(`{"error":"not found"}`)
|
||||
|
|
Loading…
Reference in a new issue