From d8113c11e4d84a6d04d56b58d337c235154a535b Mon Sep 17 00:00:00 2001
From: tobi <31960611+tsmethurst@users.noreply.github.com>
Date: Fri, 7 Mar 2025 15:04:34 +0100
Subject: [feature] Parse content warning to HTML, serialize via client API as
plaintext (#3876)
* [feature] Parse content warning as HTML, serialize via API to plaintext
* tidy up some cruft
* whoops
* oops
* i'm da joker baybee
* clemency muy lorde
* rename some of the text functions for clarity
* jiggle the opts
* fiddle de deee
* hopefully the last test fix i ever have to do in my beautiful life
---
.../20250305205820_content_warning_fixes.go | 61 +++++++++++++++++++++
.../interactionpolicy.go | 32 +++++++++++
.../20250305205820_content_warning_fixes/status.go | 62 ++++++++++++++++++++++
3 files changed, 155 insertions(+)
create mode 100644 internal/db/bundb/migrations/20250305205820_content_warning_fixes.go
create mode 100644 internal/db/bundb/migrations/20250305205820_content_warning_fixes/interactionpolicy.go
create mode 100644 internal/db/bundb/migrations/20250305205820_content_warning_fixes/status.go
(limited to 'internal/db')
diff --git a/internal/db/bundb/migrations/20250305205820_content_warning_fixes.go b/internal/db/bundb/migrations/20250305205820_content_warning_fixes.go
new file mode 100644
index 000000000..cf4de834c
--- /dev/null
+++ b/internal/db/bundb/migrations/20250305205820_content_warning_fixes.go
@@ -0,0 +1,61 @@
+// GoToSocial
+// Copyright (C) GoToSocial Authors admin@gotosocial.org
+// 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 .
+
+package migrations
+
+import (
+ "context"
+ "fmt"
+ "reflect"
+
+ newmodel "github.com/superseriousbusiness/gotosocial/internal/db/bundb/migrations/20250305205820_content_warning_fixes"
+ "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 {
+ var newStatus *newmodel.Status
+ newStatusType := reflect.TypeOf(newStatus)
+
+ // Generate new Status.ContentWarningText column definition from bun.
+ colDef, err := getBunColumnDef(tx, newStatusType, "ContentWarningText")
+ if err != nil {
+ return fmt.Errorf("error making column def: %w", err)
+ }
+
+ log.Info(ctx, "adding statuses.content_warning_text column...")
+ _, err = tx.NewAddColumn().Model(newStatus).
+ ColumnExpr(colDef).
+ Exec(ctx)
+ if err != nil {
+ return fmt.Errorf("error adding column: %w", err)
+ }
+
+ return nil
+ })
+ }
+
+ down := func(ctx context.Context, db *bun.DB) error {
+ return nil
+ }
+
+ if err := Migrations.Register(up, down); err != nil {
+ panic(err)
+ }
+}
diff --git a/internal/db/bundb/migrations/20250305205820_content_warning_fixes/interactionpolicy.go b/internal/db/bundb/migrations/20250305205820_content_warning_fixes/interactionpolicy.go
new file mode 100644
index 000000000..fd0c60a72
--- /dev/null
+++ b/internal/db/bundb/migrations/20250305205820_content_warning_fixes/interactionpolicy.go
@@ -0,0 +1,32 @@
+// GoToSocial
+// Copyright (C) GoToSocial Authors admin@gotosocial.org
+// 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 .
+
+package gtsmodel
+
+type PolicyValue string
+type PolicyValues []PolicyValue
+
+type InteractionPolicy struct {
+ CanLike PolicyRules
+ CanReply PolicyRules
+ CanAnnounce PolicyRules
+}
+
+type PolicyRules struct {
+ Always PolicyValues
+ WithApproval PolicyValues
+}
diff --git a/internal/db/bundb/migrations/20250305205820_content_warning_fixes/status.go b/internal/db/bundb/migrations/20250305205820_content_warning_fixes/status.go
new file mode 100644
index 000000000..b48591937
--- /dev/null
+++ b/internal/db/bundb/migrations/20250305205820_content_warning_fixes/status.go
@@ -0,0 +1,62 @@
+// GoToSocial
+// Copyright (C) GoToSocial Authors admin@gotosocial.org
+// 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 .
+
+package gtsmodel
+
+import (
+ "time"
+)
+
+type Status struct {
+ ID string `bun:"type:CHAR(26),pk,nullzero,notnull,unique"`
+ CreatedAt time.Time `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"`
+ EditedAt time.Time `bun:"type:timestamptz,nullzero"`
+ FetchedAt time.Time `bun:"type:timestamptz,nullzero"`
+ PinnedAt time.Time `bun:"type:timestamptz,nullzero"`
+ URI string `bun:",unique,nullzero,notnull"`
+ URL string `bun:",nullzero"`
+ Content string `bun:""`
+ AttachmentIDs []string `bun:"attachments,array"`
+ TagIDs []string `bun:"tags,array"`
+ MentionIDs []string `bun:"mentions,array"`
+ EmojiIDs []string `bun:"emojis,array"`
+ Local *bool `bun:",nullzero,notnull,default:false"`
+ AccountID string `bun:"type:CHAR(26),nullzero,notnull"`
+ AccountURI string `bun:",nullzero,notnull"`
+ InReplyToID string `bun:"type:CHAR(26),nullzero"`
+ InReplyToURI string `bun:",nullzero"`
+ InReplyToAccountID string `bun:"type:CHAR(26),nullzero"`
+ BoostOfID string `bun:"type:CHAR(26),nullzero"`
+ BoostOfAccountID string `bun:"type:CHAR(26),nullzero"`
+ ThreadID string `bun:"type:CHAR(26),nullzero"`
+ EditIDs []string `bun:"edits,array"`
+ PollID string `bun:"type:CHAR(26),nullzero"`
+ ContentWarning string `bun:",nullzero"`
+ ContentWarningText string `bun:""`
+ Visibility Visibility `bun:",nullzero,notnull"`
+ Sensitive *bool `bun:",nullzero,notnull,default:false"`
+ Language string `bun:",nullzero"`
+ CreatedWithApplicationID string `bun:"type:CHAR(26),nullzero"`
+ ActivityStreamsType string `bun:",nullzero,notnull"`
+ Text string `bun:""`
+ Federated *bool `bun:",notnull"`
+ InteractionPolicy *InteractionPolicy `bun:""`
+ PendingApproval *bool `bun:",nullzero,notnull,default:false"`
+ ApprovedByURI string `bun:",nullzero"`
+}
+
+type Visibility int16
--
cgit v1.2.3