Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bugfix] Ensure pending_approval set on statuses + status faves #3415

Merged
merged 3 commits into from
Oct 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions internal/db/bundb/migrations/20240620074530_interaction_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,41 +40,41 @@ func init() {
table string
column string
columnType string
defaultVal string
extra string
}
for _, spec := range []spec{
// Statuses.
{
table: "statuses",
column: "interaction_policy",
columnType: "JSONB",
defaultVal: "",
extra: "",
},
{
table: "statuses",
column: "pending_approval",
columnType: "BOOLEAN",
defaultVal: "DEFAULT false",
extra: "NOT NULL DEFAULT false",
},
{
table: "statuses",
column: "approved_by_uri",
columnType: "varchar",
defaultVal: "",
extra: "",
},

// Status faves.
{
table: "status_faves",
column: "pending_approval",
columnType: "BOOLEAN",
defaultVal: "DEFAULT false",
extra: "NOT NULL DEFAULT false",
},
{
table: "status_faves",
column: "approved_by_uri",
columnType: "varchar",
defaultVal: "",
extra: "",
},

// Columns that must be added to the
Expand All @@ -85,31 +85,31 @@ func init() {
table: "account_settings",
column: "interaction_policy_direct",
columnType: "JSONB",
defaultVal: "",
extra: "",
},
{
table: "account_settings",
column: "interaction_policy_mutuals_only",
columnType: "JSONB",
defaultVal: "",
extra: "",
},
{
table: "account_settings",
column: "interaction_policy_followers_only",
columnType: "JSONB",
defaultVal: "",
extra: "",
},
{
table: "account_settings",
column: "interaction_policy_unlocked",
columnType: "JSONB",
defaultVal: "",
extra: "",
},
{
table: "account_settings",
column: "interaction_policy_public",
columnType: "JSONB",
defaultVal: "",
extra: "",
},
} {
exists, err := doesColumnExist(ctx, tx,
Expand All @@ -130,9 +130,9 @@ func init() {
}

qStr := "ALTER TABLE ? ADD COLUMN ? ?"
if spec.defaultVal != "" {
if spec.extra != "" {
qStr += " ?"
args = append(args, bun.Safe(spec.defaultVal))
args = append(args, bun.Safe(spec.extra))
}

log.Infof(ctx, "adding column '%s' to '%s'...", spec.column, spec.table)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// GoToSocial
// Copyright (C) GoToSocial Authors [email protected]
// SPDX-License-Identifier: AGPL-3.0-or-later
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

package migrations

import (
"context"

"github.com/superseriousbusiness/gotosocial/internal/log"
"github.com/uptrace/bun"
)

func init() {
up := func(ctx context.Context, db *bun.DB) error {
return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
// Previous versions of 20240620074530_interaction_policy.go
// didn't set NOT NULL on gtsmodel.Status.PendingApproval and
// gtsmodel.StatusFave.PendingApproval, resulting in NULL being
// set for that column for some statuses. Correct for this.

log.Info(ctx, "correcting pending_approval on statuses table...")
res, err := tx.
NewUpdate().
Table("statuses").
Set("? = ?", bun.Ident("pending_approval"), false).
Where("? IS NULL", bun.Ident("pending_approval")).
Exec(ctx)
if err != nil {
return err
}

rows, err := res.RowsAffected()
if err == nil {
log.Infof(ctx, "corrected %d entries", rows)
}

log.Info(ctx, "correcting pending_approval on status_faves table...")
res, err = tx.
NewUpdate().
Table("status_faves").
Set("? = ?", bun.Ident("pending_approval"), false).
Where("? IS NULL", bun.Ident("pending_approval")).
Exec(ctx)
if err != nil {
return err
}

rows, err = res.RowsAffected()
if err == nil {
log.Infof(ctx, "corrected %d entries", rows)
}

return nil
})
}

down := func(ctx context.Context, db *bun.DB) error {
return db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
return nil
})
}

if err := Migrations.Register(up, down); err != nil {
panic(err)
}
}
4 changes: 4 additions & 0 deletions internal/processing/status/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ func (p *Processor) Create(
Sensitive: &form.Sensitive,
CreatedWithApplicationID: application.ID,
Text: form.Status,

// Assume not pending approval; this may
// change when permissivity is checked.
PendingApproval: util.Ptr(false),
}

if form.Poll != nil {
Expand Down
12 changes: 12 additions & 0 deletions internal/typeutils/astointernal.go
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,10 @@ func (c *Converter) ASStatusToStatus(ctx context.Context, statusable ap.Statusab
status.ApprovedByURI = approvedByURI.String()
}

// Assume not pending approval; this may
// change when permissivity is checked.
status.PendingApproval = util.Ptr(false)

// status.Sensitive
sensitive := ap.ExtractSensitive(statusable)
status.Sensitive = &sensitive
Expand Down Expand Up @@ -531,6 +535,10 @@ func (c *Converter) ASLikeToFave(ctx context.Context, likeable ap.Likeable) (*gt
StatusID: target.ID,
Status: target,
URI: uri,

// Assume not pending approval; this may
// change when permissivity is checked.
PendingApproval: util.Ptr(false),
}, nil
}

Expand Down Expand Up @@ -656,6 +664,10 @@ func (c *Converter) ASAnnounceToStatus(
boost.MentionIDs = make([]string, 0)
boost.EmojiIDs = make([]string, 0)

// Assume not pending approval; this may
// change when permissivity is checked.
boost.PendingApproval = util.Ptr(false)

// Remaining fields on the boost will be
// taken from the target status; it's not
// our job to do all that dereferencing here.
Expand Down