mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[feature] Federate interaction policies + Accepts; enforce policies (#3138)
* [feature] Federate interaction policies + Accepts; enforce policies * use Acceptable type * fix index * remove appendIRIStrs * add GetAccept federatingdb function * lock on object IRI
This commit is contained in:
@ -124,6 +124,24 @@ func ToPollOptionable(t vocab.Type) (PollOptionable, bool) {
|
||||
return note, true
|
||||
}
|
||||
|
||||
// IsAccept returns whether AS vocab type name
|
||||
// is something that can be cast to Accept.
|
||||
func IsAcceptable(typeName string) bool {
|
||||
return typeName == ActivityAccept
|
||||
}
|
||||
|
||||
// ToAcceptable safely tries to cast vocab.Type as vocab.ActivityStreamsAccept.
|
||||
//
|
||||
// TODO: Add additional "Accept" types here, eg., "ApproveReply" from
|
||||
// https://codeberg.org/fediverse/fep/src/branch/main/fep/5624/fep-5624.md
|
||||
func ToAcceptable(t vocab.Type) (vocab.ActivityStreamsAccept, bool) {
|
||||
acceptable, ok := t.(vocab.ActivityStreamsAccept)
|
||||
if !ok || !IsAcceptable(t.GetTypeName()) {
|
||||
return nil, false
|
||||
}
|
||||
return acceptable, true
|
||||
}
|
||||
|
||||
// Activityable represents the minimum activitypub interface for representing an 'activity'.
|
||||
// (see: IsActivityable() for types implementing this, though you MUST make sure to check
|
||||
// the typeName as this bare interface may be implementable by non-Activityable types).
|
||||
@ -188,6 +206,8 @@ type Statusable interface {
|
||||
WithAttachment
|
||||
WithTag
|
||||
WithReplies
|
||||
WithInteractionPolicy
|
||||
WithApprovedBy
|
||||
}
|
||||
|
||||
// Pollable represents the minimum activitypub interface for representing a 'poll' (it's a subset of a status).
|
||||
@ -217,6 +237,12 @@ type PollOptionable interface {
|
||||
WithAttributedTo
|
||||
}
|
||||
|
||||
// Acceptable represents the minimum activitypub
|
||||
// interface for representing an Accept.
|
||||
type Acceptable interface {
|
||||
Activityable
|
||||
}
|
||||
|
||||
// Attachmentable represents the minimum activitypub interface for representing a 'mediaAttachment'. (see: IsAttachmentable).
|
||||
// This interface is fulfilled by: Audio, Document, Image, Video
|
||||
type Attachmentable interface {
|
||||
@ -657,3 +683,21 @@ type WithVotersCount interface {
|
||||
GetTootVotersCount() vocab.TootVotersCountProperty
|
||||
SetTootVotersCount(vocab.TootVotersCountProperty)
|
||||
}
|
||||
|
||||
// WithReplies represents an object with GoToSocialInteractionPolicy.
|
||||
type WithInteractionPolicy interface {
|
||||
GetGoToSocialInteractionPolicy() vocab.GoToSocialInteractionPolicyProperty
|
||||
SetGoToSocialInteractionPolicy(vocab.GoToSocialInteractionPolicyProperty)
|
||||
}
|
||||
|
||||
// WithPolicyRules represents an activity with always and approvalRequired properties.
|
||||
type WithPolicyRules interface {
|
||||
GetGoToSocialAlways() vocab.GoToSocialAlwaysProperty
|
||||
GetGoToSocialApprovalRequired() vocab.GoToSocialApprovalRequiredProperty
|
||||
}
|
||||
|
||||
// WithApprovedBy represents a Statusable with the approvedBy property.
|
||||
type WithApprovedBy interface {
|
||||
GetGoToSocialApprovedBy() vocab.GoToSocialApprovedByProperty
|
||||
SetGoToSocialApprovedBy(vocab.GoToSocialApprovedByProperty)
|
||||
}
|
||||
|
Reference in New Issue
Block a user