diff options
Diffstat (limited to 'internal/api/model/interactionpolicy.go')
-rw-r--r-- | internal/api/model/interactionpolicy.go | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/internal/api/model/interactionpolicy.go b/internal/api/model/interactionpolicy.go new file mode 100644 index 000000000..7c5df09e8 --- /dev/null +++ b/internal/api/model/interactionpolicy.go @@ -0,0 +1,111 @@ +// 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 <http://www.gnu.org/licenses/>. + +package model + +// One interaction policy entry for a status. +// +// It can be EITHER one of the internal keywords listed below, OR a full-fledged ActivityPub URI of an Actor, like "https://example.org/users/some_user". +// +// Internal keywords: +// +// - public - Public, aka anyone who can see the status according to its visibility level. +// - followers - Followers of the status author. +// - following - People followed by the status author. +// - mutuals - Mutual follows of the status author (reserved, unused). +// - mentioned - Accounts mentioned in, or replied-to by, the status. +// - author - The status author themself. +// - me - If request was made with an authorized user, "me" represents the user who made the request and is now looking at this interaction policy. +// +// swagger:model interactionPolicyValue +type PolicyValue string + +const ( + PolicyValuePublic PolicyValue = "public" // Public, aka anyone who can see the status according to its visibility level. + PolicyValueFollowers PolicyValue = "followers" // Followers of the status author. + PolicyValueFollowing PolicyValue = "following" // People followed by the status author. + PolicyValueMutuals PolicyValue = "mutuals" // Mutual follows of the status author (reserved, unused). + PolicyValueMentioned PolicyValue = "mentioned" // Accounts mentioned in, or replied-to by, the status. + PolicyValueAuthor PolicyValue = "author" // The status author themself. + PolicyValueMe PolicyValue = "me" // If request was made with an authorized user, "me" represents the user who made the request and is now looking at this interaction policy. +) + +// Rules for one interaction type. +// +// swagger:model interactionPolicyRules +type PolicyRules struct { + // Policy entries for accounts that can always do this type of interaction. + Always []PolicyValue `form:"always" json:"always"` + // Policy entries for accounts that require approval to do this type of interaction. + WithApproval []PolicyValue `form:"with_approval" json:"with_approval"` +} + +// Interaction policy of a status. +// +// swagger:model interactionPolicy +type InteractionPolicy struct { + // Rules for who can favourite this status. + CanFavourite PolicyRules `form:"can_favourite" json:"can_favourite"` + // Rules for who can reply to this status. + CanReply PolicyRules `form:"can_reply" json:"can_reply"` + // Rules for who can reblog this status. + CanReblog PolicyRules `form:"can_reblog" json:"can_reblog"` +} + +// Default interaction policies to use for new statuses by requesting account. +// +// swagger:model defaultPolicies +type DefaultPolicies struct { + // TODO: Add mutuals only default. + + // Default policy for new direct visibility statuses. + Direct InteractionPolicy `json:"direct"` + // Default policy for new private/followers-only visibility statuses. + Private InteractionPolicy `json:"private"` + // Default policy for new unlisted/unlocked visibility statuses. + Unlisted InteractionPolicy `json:"unlisted"` + // Default policy for new public visibility statuses. + Public InteractionPolicy `json:"public"` +} + +// swagger:ignore +type UpdateInteractionPoliciesRequest struct { + // Default policy for new direct visibility statuses. + // Value `null` or omitted property resets policy to original default. + // + // in: formData + // nullable: true + Direct *InteractionPolicy `form:"direct" json:"direct"` + // Default policy for new private/followers-only visibility statuses. + // Value `null` or omitted property resets policy to original default. + // + // in: formData + // nullable: true + Private *InteractionPolicy `form:"private" json:"private"` + // Default policy for new unlisted/unlocked visibility statuses. + // Value `null` or omitted property resets policy to original default. + // + // in: formData + // nullable: true + Unlisted *InteractionPolicy `form:"unlisted" json:"unlisted"` + // Default policy for new public visibility statuses. + // Value `null` or omitted property resets policy to original default. + // + // in: formData + // nullable: true + Public *InteractionPolicy `form:"public" json:"public"` +} |