diff options
author | 2024-07-17 16:46:52 +0200 | |
---|---|---|
committer | 2024-07-17 16:46:52 +0200 | |
commit | 0aadc2db2a42fc99538fbbb096b84b209b9ccd68 (patch) | |
tree | 38c58d163004d43da80d33477a6e9f22547bdb15 /docs/api | |
parent | give read-only access to /dev for ffmpeg to access /dev/urandom (#3109) (diff) | |
download | gotosocial-0aadc2db2a42fc99538fbbb096b84b209b9ccd68.tar.xz |
[feature] Allow users to set default interaction policies per status visibility (#3108)
* [feature] Allow users to set default interaction policies
* use vars for default policies
* avoid some code repetition
* unfuck form binding
* avoid bonkers loop
* beep boop
* put policyValsToAPIPolicyVals in separate function
* don't bother with slices.Grow
* oops
Diffstat (limited to 'docs/api')
-rw-r--r-- | docs/api/swagger.yaml | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/docs/api/swagger.yaml b/docs/api/swagger.yaml index b91b4f4b0..66f7e53a5 100644 --- a/docs/api/swagger.yaml +++ b/docs/api/swagger.yaml @@ -895,6 +895,20 @@ definitions: type: object x-go-name: DebugAPUrlResponse x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model + defaultPolicies: + properties: + direct: + $ref: '#/definitions/interactionPolicy' + private: + $ref: '#/definitions/interactionPolicy' + public: + $ref: '#/definitions/interactionPolicy' + unlisted: + $ref: '#/definitions/interactionPolicy' + title: Default interaction policies to use for new statuses by requesting account. + type: object + x-go-name: DefaultPolicies + x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model domain: description: Domain represents a remote domain properties: @@ -1821,6 +1835,53 @@ definitions: type: object x-go-name: InstanceV2Users x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model + interactionPolicy: + properties: + can_favourite: + $ref: '#/definitions/interactionPolicyRules' + can_reblog: + $ref: '#/definitions/interactionPolicyRules' + can_reply: + $ref: '#/definitions/interactionPolicyRules' + title: Interaction policy of a status. + type: object + x-go-name: InteractionPolicy + x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model + interactionPolicyRules: + properties: + always: + description: Policy entries for accounts that can always do this type of interaction. + items: + $ref: '#/definitions/interactionPolicyValue' + type: array + x-go-name: Always + with_approval: + description: Policy entries for accounts that require approval to do this type of interaction. + items: + $ref: '#/definitions/interactionPolicyValue' + type: array + x-go-name: WithApproval + title: Rules for one interaction type. + type: object + x-go-name: PolicyRules + x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model + interactionPolicyValue: + description: |- + 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. + title: One interaction policy entry for a status. + type: string + x-go-name: PolicyValue + x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model list: properties: id: @@ -2429,6 +2490,8 @@ definitions: example: 01FBVD42CQ3ZEEVMW180SBX03B type: string x-go-name: InReplyToID + interaction_policy: + $ref: '#/definitions/interactionPolicy' language: description: |- Primary language of this status (ISO 639 Part 1 two-letter language code). @@ -2620,6 +2683,8 @@ definitions: example: 01FBVD42CQ3ZEEVMW180SBX03B type: string x-go-name: InReplyToID + interaction_policy: + $ref: '#/definitions/interactionPolicy' language: description: |- Primary language of this status (ISO 639 Part 1 two-letter language code). @@ -6850,6 +6915,174 @@ paths: summary: View instance rules (public). tags: - instance + /api/v1/interaction_policies/defaults: + get: + operationId: policiesDefaultsGet + produces: + - application/json + responses: + "200": + description: A default policies object containing a policy for each status visibility. + schema: + $ref: '#/definitions/defaultPolicies' + "401": + description: unauthorized + "406": + description: not acceptable + "500": + description: internal server error + security: + - OAuth2 Bearer: + - read:accounts + summary: Get default interaction policies for new statuses created by you. + tags: + - interaction_policies + patch: + consumes: + - multipart/form-data + - application/x-www-form-urlencoded + - application/json + description: |- + If submitting using form data, use the following pattern: + + `VISIBILITY[INTERACTION_TYPE][CONDITION][INDEX]=Value` + + For example: `public[can_reply][always][0]=author` + + Using `curl` this might look something like: + + `curl -F 'public[can_reply][always][0]=author' -F 'public[can_reply][always][1]=followers'` + + The JSON equivalent would be: + + `curl -H 'Content-Type: application/json' -d '{"public":{"can_reply":{"always":["author","followers"]}}}'` + + Any visibility level left unspecified in the request body will be returned to the default. + + Ie., in the example above, "public" would be updated, but "unlisted", "private", and "direct" would be reset to defaults. + + The server will perform some normalization on submitted policies so that you can't submit totally invalid policies. + operationId: policiesDefaultsUpdate + parameters: + - description: Nth entry for public.can_favourite.always. + in: formData + name: public[can_favourite][always][0] + type: string + - description: Nth entry for public.can_favourite.with_approval. + in: formData + name: public[can_favourite][with_approval][0] + type: string + - description: Nth entry for public.can_reply.always. + in: formData + name: public[can_reply][always][0] + type: string + - description: Nth entry for public.can_reply.with_approval. + in: formData + name: public[can_reply][with_approval][0] + type: string + - description: Nth entry for public.can_reblog.always. + in: formData + name: public[can_reblog][always][0] + type: string + - description: Nth entry for public.can_reblog.with_approval. + in: formData + name: public[can_reblog][with_approval][0] + type: string + - description: Nth entry for unlisted.can_favourite.always. + in: formData + name: unlisted[can_favourite][always][0] + type: string + - description: Nth entry for unlisted.can_favourite.with_approval. + in: formData + name: unlisted[can_favourite][with_approval][0] + type: string + - description: Nth entry for unlisted.can_reply.always. + in: formData + name: unlisted[can_reply][always][0] + type: string + - description: Nth entry for unlisted.can_reply.with_approval. + in: formData + name: unlisted[can_reply][with_approval][0] + type: string + - description: Nth entry for unlisted.can_reblog.always. + in: formData + name: unlisted[can_reblog][always][0] + type: string + - description: Nth entry for unlisted.can_reblog.with_approval. + in: formData + name: unlisted[can_reblog][with_approval][0] + type: string + - description: Nth entry for private.can_favourite.always. + in: formData + name: private[can_favourite][always][0] + type: string + - description: Nth entry for private.can_favourite.with_approval. + in: formData + name: private[can_favourite][with_approval][0] + type: string + - description: Nth entry for private.can_reply.always. + in: formData + name: private[can_reply][always][0] + type: string + - description: Nth entry for private.can_reply.with_approval. + in: formData + name: private[can_reply][with_approval][0] + type: string + - description: Nth entry for private.can_reblog.always. + in: formData + name: private[can_reblog][always][0] + type: string + - description: Nth entry for private.can_reblog.with_approval. + in: formData + name: private[can_reblog][with_approval][0] + type: string + - description: Nth entry for direct.can_favourite.always. + in: formData + name: direct[can_favourite][always][0] + type: string + - description: Nth entry for direct.can_favourite.with_approval. + in: formData + name: direct[can_favourite][with_approval][0] + type: string + - description: Nth entry for direct.can_reply.always. + in: formData + name: direct[can_reply][always][0] + type: string + - description: Nth entry for direct.can_reply.with_approval. + in: formData + name: direct[can_reply][with_approval][0] + type: string + - description: Nth entry for direct.can_reblog.always. + in: formData + name: direct[can_reblog][always][0] + type: string + - description: Nth entry for direct.can_reblog.with_approval. + in: formData + name: direct[can_reblog][with_approval][0] + type: string + produces: + - application/json + responses: + "200": + description: Updated default policies object containing a policy for each status visibility. + schema: + $ref: '#/definitions/defaultPolicies' + "400": + description: bad request + "401": + description: unauthorized + "406": + description: not acceptable + "422": + description: unprocessable + "500": + description: internal server error + security: + - OAuth2 Bearer: + - write:accounts + summary: Update default interaction policies per visibility level for new statuses created by you. + tags: + - interaction_policies /api/v1/lists: get: operationId: lists |