Skip to content

Commit

Permalink
[feature] Implement /api/v1/reports endpoints on client API (#1330)
Browse files Browse the repository at this point in the history
* start adding report client api

* route + test reports get

* start report create endpoint

* you can create reports now babyy

* stub account report processor

* add single reportGet endpoint

* fix test

* add more filtering params to /api/v1/reports GET

* update swagger

* use marshalIndent in tests

* add + test missing Link info
  • Loading branch information
tsmethurst authored Jan 23, 2023
1 parent 605dfca commit e974724
Show file tree
Hide file tree
Showing 26 changed files with 2,184 additions and 20 deletions.
256 changes: 256 additions & 0 deletions docs/api/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1510,6 +1510,83 @@ definitions:
type: object
x-go-name: PollOptions
x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model
report:
properties:
action_taken:
description: Whether an action has been taken by an admin in response to this report.
example: false
type: boolean
x-go-name: ActionTaken
action_taken_at:
description: |-
If an action was taken, at what time was this done? (ISO 8601 Datetime)
Will be null if not set / no action yet taken.
example: "2021-07-30T09:20:25+00:00"
type: string
x-go-name: ActionTakenAt
action_taken_comment:
description: |-
If an action was taken, what comment was made by the admin on the taken action?
Will be null if not set / no action yet taken.
example: Account was suspended.
type: string
x-go-name: ActionComment
category:
description: Under what category was this report created?
example: spam
type: string
x-go-name: Category
comment:
description: |-
Comment submitted when the report was created.
Will be empty if no comment was submitted.
example: This person has been harassing me.
type: string
x-go-name: Comment
created_at:
description: The date when this report was created (ISO 8601 Datetime).
example: "2021-07-30T09:20:25+00:00"
type: string
x-go-name: CreatedAt
forwarded:
description: Bool to indicate that report should be federated to remote instance.
example: true
type: boolean
x-go-name: Forwarded
id:
description: ID of the report.
example: 01FBVD42CQ3ZEEVMW180SBX03B
type: string
x-go-name: ID
rule_ids:
description: |-
Array of rule IDs that were submitted along with this report.
Will be empty if no rule IDs were submitted.
example:
- 1
- 2
items:
format: int64
type: integer
type: array
x-go-name: RuleIDs
status_ids:
description: |-
Array of IDs of statuses that were submitted along with this report.
Will be empty if no status IDs were submitted.
example:
- 01GPBN5YDY6JKBWE44H7YQBDCQ
- 01GPBN65PDWSBPWVDD0SQCFFY3
items:
type: string
type: array
x-go-name: StatusIDs
target_account:
$ref: '#/definitions/account'
title: Report models a moderation report submitted to the instance, either via the client API or via the federated API.
type: object
x-go-name: Report
x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model
searchResult:
properties:
accounts:
Expand Down Expand Up @@ -3897,6 +3974,185 @@ paths:
summary: Clear/delete all notifications for currently authorized user.
tags:
- notifications
/api/v1/reports:
get:
description: |-
The reports will be returned in descending chronological order (newest first), with sequential IDs (bigger = newer).
The next and previous queries can be parsed from the returned Link header.
Example:
```
<https://example.org/api/v1/reports?limit=20&max_id=01FC0SKA48HNSVR6YKZCQGS2V8>; rel="next", <https://example.org/api/v1/reports?limit=20&min_id=01FC0SKW5JK2Q4EVAV2B462YY0>; rel="prev"
````
operationId: reports
parameters:
- description: If set to true, only resolved reports will be returned. If false, only unresolved reports will be returned. If unset, reports will not be filtered on their resolved status.
in: query
name: resolved
type: boolean
- description: Return only reports that target the given account id.
in: query
name: target_account_id
type: string
- description: Return only reports *OLDER* than the given max ID. The report with the specified ID will not be included in the response.
in: query
name: max_id
type: string
- description: Return only reports *NEWER* than the given since ID. The report with the specified ID will not be included in the response. This parameter is functionally equivalent to min_id.
in: query
name: since_id
type: string
- description: Return only reports *NEWER* than the given min ID. The report with the specified ID will not be included in the response. This parameter is functionally equivalent to since_id.
in: query
name: min_id
type: string
- default: 20
description: Number of reports to return. If less than 1, will be clamped to 1. If more than 100, will be clamped to 100.
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: Array of reports.
schema:
items:
$ref: '#/definitions/report'
type: array
"400":
description: bad request
"401":
description: unauthorized
"404":
description: not found
"406":
description: not acceptable
"500":
description: internal server error
security:
- OAuth2 Bearer:
- read:reports
summary: See reports created by the requesting account.
tags:
- reports
post:
consumes:
- application/json
- application/xml
- application/x-www-form-urlencoded
operationId: reportCreate
parameters:
- description: ID of the account to report.
example: 01GPE75FXSH2EGFBF85NXPH3KP
in: formData
name: account_id
required: true
type: string
x-go-name: AccountID
- description: IDs of statuses to attach to the report to provide additional context.
example:
- 01GPE76N4SBVRZ8K24TW51ZZQ4
- 01GPE76WN9JZE62EPT3Q9FRRD4
in: formData
items:
type: string
name: status_ids
type: array
x-go-name: StatusIDs
- description: The reason for the report. Default maximum of 1000 characters.
example: Anti-Blackness, transphobia.
in: formData
name: comment
type: string
x-go-name: Comment
- default: false
description: If the account is remote, should the report be forwarded to the remote admin?
example: true
in: formData
name: forward
type: boolean
x-go-name: Forward
- default: other
description: |-
Specify if the report is due to spam, violation of enumerated instance rules, or some other reason.
Currently only 'other' is supported.
example: other
in: formData
name: category
type: string
x-go-name: Category
- description: |-
IDs of rules on this instance which have been broken according to the reporter.
This is currently not supported, provided only for API compatibility.
example:
- 1
- 2
- 3
in: formData
items:
format: int64
type: integer
name: rule_ids
type: array
x-go-name: RuleIDs
produces:
- application/json
responses:
"200":
description: The created report.
schema:
$ref: '#/definitions/report'
"400":
description: bad request
"401":
description: unauthorized
"404":
description: not found
"406":
description: not acceptable
"500":
description: internal server error
security:
- OAuth2 Bearer:
- write:reports
summary: Create a new user report with the given parameters.
tags:
- reports
/api/v1/reports/{id}:
get:
operationId: reportGet
parameters:
- description: ID of the report
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: The requested report.
schema:
$ref: '#/definitions/report'
"400":
description: bad request
"401":
description: unauthorized
"404":
description: not found
"406":
description: not acceptable
"500":
description: internal server error
security:
- OAuth2 Bearer:
- read:reports
summary: Get one report with the given id.
tags:
- reports
/api/v1/search:
get:
description: If statuses are in the result, they will be returned in descending chronological order (newest first), with sequential IDs (bigger = newer).
Expand Down
4 changes: 4 additions & 0 deletions internal/api/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/api/client/lists"
"github.com/superseriousbusiness/gotosocial/internal/api/client/media"
"github.com/superseriousbusiness/gotosocial/internal/api/client/notifications"
"github.com/superseriousbusiness/gotosocial/internal/api/client/reports"
"github.com/superseriousbusiness/gotosocial/internal/api/client/search"
"github.com/superseriousbusiness/gotosocial/internal/api/client/statuses"
"github.com/superseriousbusiness/gotosocial/internal/api/client/streaming"
Expand Down Expand Up @@ -63,6 +64,7 @@ type Client struct {
lists *lists.Module // api/v1/lists
media *media.Module // api/v1/media, api/v2/media
notifications *notifications.Module // api/v1/notifications
reports *reports.Module // api/v1/reports
search *search.Module // api/v1/search, api/v2/search
statuses *statuses.Module // api/v1/statuses
streaming *streaming.Module // api/v1/streaming
Expand Down Expand Up @@ -97,6 +99,7 @@ func (c *Client) Route(r router.Router, m ...gin.HandlerFunc) {
c.lists.Route(h)
c.media.Route(h)
c.notifications.Route(h)
c.reports.Route(h)
c.search.Route(h)
c.statuses.Route(h)
c.streaming.Route(h)
Expand All @@ -122,6 +125,7 @@ func NewClient(db db.DB, p processing.Processor) *Client {
lists: lists.New(p),
media: media.New(p),
notifications: notifications.New(p),
reports: reports.New(p),
search: search.New(p),
statuses: statuses.New(p),
streaming: streaming.New(p, time.Second*30, 4096),
Expand Down
Loading

0 comments on commit e974724

Please sign in to comment.