mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 08:02:26 -05:00
[chore] Update interactionPolicy sub-policy parsing in line with documented defaults (#4229)
# Description > If this is a code change, please include a summary of what you've coded, and link to the issue(s) it closes/implements. > > If this is a documentation change, please briefly describe what you've changed and why. Brings our parsing of unset sub-policies in line with the defaults documented here: https://docs.gotosocial.org/en/v0.19.1/federation/interaction_policy/#defaults-per-sub-policy Closes https://codeberg.org/superseriousbusiness/gotosocial/issues/4146 Part of https://codeberg.org/superseriousbusiness/gotosocial/issues/4026 ## Checklist Please put an x inside each checkbox to indicate that you've read and followed it: `[ ]` -> `[x]` If this is a documentation change, only the first checkbox must be filled (you can delete the others if you want). - [x] I/we have read the [GoToSocial contribution guidelines](https://codeberg.org/superseriousbusiness/gotosocial/src/branch/main/CONTRIBUTING.md). - [x] I/we have discussed the proposed changes already, either in an issue on the repository, or in the Matrix chat. - [x] I/we have not leveraged AI to create the proposed changes. - [x] I/we have performed a self-review of added code. - [x] I/we have written code that is legible and maintainable by others. - [x] I/we have commented the added code, particularly in hard-to-understand areas. - [ ] I/we have made any necessary changes to documentation. - [x] I/we have added tests that cover new code. - [x] I/we have run tests and they pass locally with the changes. - [x] I/we have run `go fmt ./...` and `golangci-lint run`. Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4229 Co-authored-by: tobi <tobi.smethurst@protonmail.com> Co-committed-by: tobi <tobi.smethurst@protonmail.com>
This commit is contained in:
parent
4ad17788cd
commit
1dc79c9586
10 changed files with 613 additions and 187 deletions
|
|
@ -227,15 +227,15 @@ func APIInteractionPolicyToInteractionPolicy(
|
|||
}
|
||||
|
||||
return >smodel.InteractionPolicy{
|
||||
CanLike: gtsmodel.PolicyRules{
|
||||
CanLike: >smodel.PolicyRules{
|
||||
AutomaticApproval: canLikeAlways,
|
||||
ManualApproval: canLikeWithApproval,
|
||||
},
|
||||
CanReply: gtsmodel.PolicyRules{
|
||||
CanReply: >smodel.PolicyRules{
|
||||
AutomaticApproval: canReplyAlways,
|
||||
ManualApproval: canReplyWithApproval,
|
||||
},
|
||||
CanAnnounce: gtsmodel.PolicyRules{
|
||||
CanAnnounce: >smodel.PolicyRules{
|
||||
AutomaticApproval: canAnnounceAlways,
|
||||
ManualApproval: canAnnounceWithApproval,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1938,6 +1938,19 @@ func (c *Converter) InteractionPolicyToASInteractionPolicy(
|
|||
) (vocab.GoToSocialInteractionPolicy, error) {
|
||||
policy := streams.NewGoToSocialInteractionPolicy()
|
||||
|
||||
/*
|
||||
Implementation note for the below:
|
||||
While it's possible for remote instances to set
|
||||
sub-policies like canLike, canReply, etc to null
|
||||
values, or omit them entirely, GtS always falls
|
||||
back to default non-nil sub-policies when storing
|
||||
policies created for local statuses. Therefore,
|
||||
since we only ever serialize our *own* statuses
|
||||
to AS format using this function, it's safe to
|
||||
assume that the values will always be set, rather
|
||||
than checking for nil ptrs.
|
||||
*/
|
||||
|
||||
/*
|
||||
CAN LIKE
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2782,7 +2782,10 @@ func (c *Converter) ThemesToAPIThemes(themes []*gtsmodel.Theme) []apimodel.Theme
|
|||
// into an apimodel interaction policy.
|
||||
//
|
||||
// Provided status can be nil to convert a
|
||||
// policy without a particular status in mind.
|
||||
// policy without a particular status in mind,
|
||||
// but ***if status is nil then sub-policies
|
||||
// CanLike, CanReply, and CanAnnounce on
|
||||
// the given policy must *not* be nil.***
|
||||
//
|
||||
// RequestingAccount can also be nil for
|
||||
// unauthorized requests (web, public api etc).
|
||||
|
|
@ -2792,19 +2795,54 @@ func (c *Converter) InteractionPolicyToAPIInteractionPolicy(
|
|||
status *gtsmodel.Status,
|
||||
requester *gtsmodel.Account,
|
||||
) (*apimodel.InteractionPolicy, error) {
|
||||
apiPolicy := &apimodel.InteractionPolicy{
|
||||
CanFavourite: apimodel.PolicyRules{
|
||||
apiPolicy := new(apimodel.InteractionPolicy)
|
||||
|
||||
// gtsmodel CanLike -> apimodel CanFavourite
|
||||
if policy.CanLike != nil {
|
||||
// Use the set CanLike value.
|
||||
apiPolicy.CanFavourite = apimodel.PolicyRules{
|
||||
AutomaticApproval: policyValsToAPIPolicyVals(policy.CanLike.AutomaticApproval),
|
||||
ManualApproval: policyValsToAPIPolicyVals(policy.CanLike.ManualApproval),
|
||||
},
|
||||
CanReply: apimodel.PolicyRules{
|
||||
}
|
||||
} else {
|
||||
// Use default CanLike value for this vis.
|
||||
pCanLike := gtsmodel.DefaultCanLikeFor(status.Visibility)
|
||||
apiPolicy.CanFavourite = apimodel.PolicyRules{
|
||||
AutomaticApproval: policyValsToAPIPolicyVals(pCanLike.AutomaticApproval),
|
||||
ManualApproval: policyValsToAPIPolicyVals(pCanLike.ManualApproval),
|
||||
}
|
||||
}
|
||||
|
||||
// gtsmodel CanReply -> apimodel CanReply
|
||||
if policy.CanReply != nil {
|
||||
// Use the set CanReply value.
|
||||
apiPolicy.CanReply = apimodel.PolicyRules{
|
||||
AutomaticApproval: policyValsToAPIPolicyVals(policy.CanReply.AutomaticApproval),
|
||||
ManualApproval: policyValsToAPIPolicyVals(policy.CanReply.ManualApproval),
|
||||
},
|
||||
CanReblog: apimodel.PolicyRules{
|
||||
}
|
||||
} else {
|
||||
// Use default CanReply value for this vis.
|
||||
pCanReply := gtsmodel.DefaultCanReplyFor(status.Visibility)
|
||||
apiPolicy.CanReply = apimodel.PolicyRules{
|
||||
AutomaticApproval: policyValsToAPIPolicyVals(pCanReply.AutomaticApproval),
|
||||
ManualApproval: policyValsToAPIPolicyVals(pCanReply.ManualApproval),
|
||||
}
|
||||
}
|
||||
|
||||
// gtsmodel CanAnnounce -> apimodel CanReblog
|
||||
if policy.CanAnnounce != nil {
|
||||
// Use the set CanAnnounce value.
|
||||
apiPolicy.CanReblog = apimodel.PolicyRules{
|
||||
AutomaticApproval: policyValsToAPIPolicyVals(policy.CanAnnounce.AutomaticApproval),
|
||||
ManualApproval: policyValsToAPIPolicyVals(policy.CanAnnounce.ManualApproval),
|
||||
},
|
||||
}
|
||||
} else {
|
||||
// Use default CanAnnounce value for this vis.
|
||||
pCanAnnounce := gtsmodel.DefaultCanAnnounceFor(status.Visibility)
|
||||
apiPolicy.CanReblog = apimodel.PolicyRules{
|
||||
AutomaticApproval: policyValsToAPIPolicyVals(pCanAnnounce.AutomaticApproval),
|
||||
ManualApproval: policyValsToAPIPolicyVals(pCanAnnounce.ManualApproval),
|
||||
}
|
||||
}
|
||||
|
||||
defer func() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue