Skip to content

Commit

Permalink
[bugfix] Ensure pending_approval set on statuses + status faves (#3415
Browse files Browse the repository at this point in the history
)

* [bugfix] Ensure pending_approval set on statuses + status faves

* set PendingApproval on boosts

* assume not pending approval
  • Loading branch information
tsmethurst authored Oct 11, 2024
1 parent a504d8a commit cb9008f
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 13 deletions.
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

0 comments on commit cb9008f

Please sign in to comment.