summaryrefslogtreecommitdiff
path: root/PROGRESS.md
blob: 1b414ae3f73ee1abea4eb8ee9ab9158d8ef011fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
# Progress

Things are moving on the project! As of July 2021 you can now:

## Admin

* Build and deploy GoToSocial as a binary, with automatic LetsEncrypt certificate support built-in.
* Create, confirm, and promote users using self-documented CLI tool.

## User

* Connect to the running instance via Tusky or Pinafore, using email address and password (stored encrypted).
* Post/delete posts.
* Reply/delete replies.
* Fave/unfave posts.
* Post images and gifs.
* Boost stuff/unboost stuff.
* Set your profile info (including header and avatar).
* Follow people/unfollow people.
* Accept follow requests from people.
* Post followers only/direct/public/unlocked.
* Customize posts with further flags: federated (y/n), replyable (y/n), likeable (y/n), boostable (y/n) -- not supported through Pinafore/Tusky yet.
* Get notifications for mentions/replies/likes/boosts.
* View local timeline.
* View and scroll home timeline (with ~10ms latency hell yeah).
* Stream new posts, notifications and deletes through a websockets connection via Pinafore.

## Federation

* Federation support and interoperability with Mastodon and others.
* Domain blocking: create, update, delete, and export domain blocks.
* Domain blocking: import lists of domain blocks -- no more blocking domains one-by-one.

## To-do list

* [ ] Client-To-Server (Client REST API)
  * [ ] Token and sign-in
    * [x] /api/v1/apps POST                                 (Create an application)
    * [ ] /api/v1/apps/verify_credentials GET               (Verify an application works)
    * [x] /oauth/authorize GET                              (Show authorize page to user)
    * [x] /oauth/authorize POST                             (Get an oauth access code for an app/user)
    * [x] /oauth/token POST                                 (Obtain a user-level access token)
    * [ ] /oauth/revoke POST                                (Revoke a user-level access token)
    * [x] /auth/sign_in GET                                 (Show form for user signin)
    * [x] /auth/sign_in POST                                (Validate username and password and sign user in)
  * [ ] Accounts
    * [x] /api/v1/accounts POST                             (Register a new account)
    * [x] /api/v1/accounts/verify_credentials GET           (Verify account credentials with a user token)
    * [x] /api/v1/accounts/update_credentials PATCH         (Update user's display name/preferences)
    * [x] /api/v1/accounts/:id GET                          (Get account information)
    * [x] /api/v1/accounts/:id/statuses GET                 (Get an account's statuses)
    * [x] /api/v1/accounts/:id/followers GET                (Get an account's followers)
    * [x] /api/v1/accounts/:id/following GET                (Get an account's following)
    * [ ] /api/v1/accounts/:id/featured_tags GET            (Get an account's featured tags)
    * [ ] /api/v1/accounts/:id/lists GET                    (Get lists containing this account)
    * [ ] /api/v1/accounts/:id/identity_proofs GET          (Get identity proofs for this account)
    * [x] /api/v1/accounts/:id/follow POST                  (Follow this account)
    * [x] /api/v1/accounts/:id/unfollow POST                (Unfollow this account)
    * [x] /api/v1/accounts/:id/block POST                   (Block this account)
    * [x] /api/v1/accounts/:id/unblock POST                 (Unblock this account)
    * [ ] /api/v1/accounts/:id/mute POST                    (Mute this account)
    * [ ] /api/v1/accounts/:id/unmute POST                  (Unmute this account)
    * [ ] /api/v1/accounts/:id/pin POST                     (Feature this account on profile)
    * [ ] /api/v1/accounts/:id/unpin POST                   (Remove this account from profile)
    * [ ] /api/v1/accounts/:id/note POST                    (Make a personal note about this account)
    * [x] /api/v1/accounts/relationships GET                (Check relationships with accounts)
    * [ ] /api/v1/accounts/search GET                       (Search for an account)
  * [ ] Bookmarks
    * [ ] /api/v1/bookmarks GET                             (See bookmarked statuses)
  * [x] Favourites
    * [x] /api/v1/favourites GET                            (See faved statuses)
  * [ ] Mutes
    * [ ] /api/v1/mutes GET                                 (See list of muted accounts)
  * [x] Blocks
    * [x] /api/v1/blocks GET                                (See list of blocked accounts)
  * [ ] Domain Blocks
    * [x] /api/v1/domain_blocks GET                         (See list of domain blocks)
    * [x] /api/v1/domain_blocks POST                        (Create a domain block)
    * [x] /api/v1/domain_blocks DELETE                      (Remove a domain block)
  * [ ] Filters
    * [ ] /api/v1/filters GET                               (Get list of filters)
    * [ ] /api/v1/filters/:id GET                           (View a filter)
    * [ ] /api/v1/filters POST                              (Create a filter)
    * [ ] /api/v1/filters/:id PUT                           (Update a filter)
    * [ ] /api/v1/filters/:id DELETE                        (Remove a filter)
  * [ ] Reports
    * [ ] /api/v1/reports POST                              (File a report)
  * [ ] Follow Requests
    * [x] /api/v1/follow_requests GET                       (View pending follow requests)
    * [x] /api/v1/follow_requests/:id/authorize POST        (Accept a follow request)
    * [ ] /api/v1/follow_requests/:id/reject POST           (Reject a follow request)
  * [ ] Endorsements
    * [ ] /api/v1/endorsements GET                          (View existing endorsements)
  * [ ] Featured Tags
    * [ ] /api/v1/featured_tags GET                         (View featured tags)
    * [ ] /api/v1/featured_tags POST                        (Feature a tag)
    * [ ] /api/v1/featured_tags/:id DELETE                  (Unfeature a tag)
    * [ ] /api/v1/featured_tags/suggestions GET             (See most used tags)
  * [ ] Preferences
    * [ ] /api/v1/preferences GET                           (Get user preferences)
  * [ ] Suggestions
    * [ ] /api/v1/suggestions GET                           (Get suggested accounts to follow)
    * [ ] /api/v1/suggestions/:account_id DELETE            (Delete a suggestion)
  * [ ] Statuses
    * [x] /api/v1/statuses POST                             (Create a new status)
    * [x] /api/v1/statuses/:id GET                          (View an existing status)
    * [x] /api/v1/statuses/:id DELETE                       (Delete a status)
    * [x] /api/v1/statuses/:id/context GET                  (View statuses above and below status ID)
    * [x] /api/v1/statuses/:id/reblogged_by GET             (See who has reblogged a status)
    * [x] /api/v1/statuses/:id/favourited_by GET            (See who has faved a status)
    * [x] /api/v1/statuses/:id/favourite POST               (Fave a status)
    * [x] /api/v1/statuses/:id/unfavourite POST             (Unfave a status)
    * [x] /api/v1/statuses/:id/reblog POST                  (Reblog a status)
    * [x] /api/v1/statuses/:id/unreblog POST                (Undo a reblog)
    * [ ] /api/v1/statuses/:id/bookmark POST                (Bookmark a status)
    * [ ] /api/v1/statuses/:id/unbookmark POST              (Undo a bookmark)
    * [ ] /api/v1/statuses/:id/mute POST                    (Mute notifications on a status)
    * [ ] /api/v1/statuses/:id/unmute POST                  (Unmute notifications on a status)
    * [ ] /api/v1/statuses/:id/pin POST                     (Pin a status to profile)
    * [ ] /api/v1/statuses/:id/unpin POST                   (Unpin a status from profile)
  * [x] Media
    * [x] /api/v1/media POST                                (Upload a media attachment)
    * [x] /api/v1/media/:id GET                             (Get a media attachment)
    * [x] /api/v1/media/:id PUT                             (Update an attachment)
  * [ ] Polls
    * [ ] /api/v1/polls/:id GET                             (Show a poll)
    * [ ] /api/v1/polls/:id/votes POST                      (Vote on a poll)
  * [ ] Scheduled Statuses
    * [ ] /api/v1/scheduled_statuses GET                    (View scheduled statuses)
    * [ ] /api/v1/scheduled_statuses/:id GET                (View a scheduled status)
    * [ ] /api/v1/scheduled_statuses/:id PUT                (Schedule a status)
    * [ ] /api/v1/scheduled_statuses/:id DELETE             (Cancel a scheduled status)
  * [ ] Timelines
    * [x] /api/v1/timelines/public GET                      (See the public/federated timeline)
    * [ ] /api/v1/timelines/tag/:hashtag GET                (Get public statuses that use hashtag)
    * [x] /api/v1/timelines/home GET                        (View statuses from followed users)
    * [ ] /api/v1/timelines/list/:list_id GET               (Get statuses in given list)
  * [ ] Conversations
    * [ ] /api/v1/conversations GET                         (Get a list of direct message convos)
    * [ ] /api/v1/conversations/:id DELETE                  (Delete a direct message convo)
    * [ ] /api/v1/conversations/:id POST                    (Mark a conversation as read)
  * [ ] Lists
    * [ ] /api/v1/lists GET                                 (Show a list of lists)
    * [ ] /api/v1/lists/:id GET                             (Show a single list)
    * [ ] /api/v1/lists POST                                (Create a new list)
    * [ ] /api/v1/lists/:id PUT                             (Update a list)
    * [ ] /api/v1/lists/:id DELETE                          (Delete a list)
    * [ ] /api/v1/lists/:id/accounts GET                    (View which accounts are in a list)
    * [ ] /api/v1/lists/:id/accounts POST                   (Add accounts to a list)
    * [ ] /api/v1/lists/:id/accounts DELETE                 (Remove accounts from a list)
  * [ ] Markers
    * [ ] /api/v1/markers GET                               (Get saved timeline position)
    * [ ] /api/v1/markers POST                              (Save timeline position)
  * [x] Streaming
    * [x] /api/v1/streaming WEBSOCKETS                      (Stream live events to user via websockets)
  * [ ] Notifications
    * [x] /api/v1/notifications GET                         (Get list of notifications)
    * [x] /api/v1/notifications/:id GET                     (Get a single notification)
    * [ ] /api/v1/notifications/clear POST                  (Clear all notifications)
    * [ ] /api/v1/notifications/:id POST                    (Clear a single notification)
  * [ ] Push
    * [ ] /api/v1/push/subscription POST                    (Subscribe to push notifications)
    * [ ] /api/v1/push/subscription GET                     (Get current subscription)
    * [ ] /api/v1/push/subscription PUT                     (Change notification types)
    * [ ] /api/v1/push/subscription DELETE                  (Delete current subscription)
  * [x] Search
    * [x] /api/v2/search GET                                (Get search query results)
  * [ ] Instance
    * [x] /api/v1/instance GET                              (Get instance information)
    * [x] /api/v1/instance PATCH                            (Update instance information)
    * [ ] /api/v1/instance/peers GET                        (Get list of federated servers)
    * [ ] /api/v1/instance/activity GET                     (Instance activity over the last 3 months, binned weekly.)
  * [ ] Trends
    * [ ] /api/v1/trends GET                                (Get a list of trending tags for the last week)
  * [ ] Directory
    * [ ] /api/v1/directory GET                             (Show profiles this server is aware of.)
  * [ ] Custom Emojis
    * [ ] /api/v1/custom_emojis GET                         (Show this server's custom emoji)
  * [ ] Admin
    * [x] /api/v1/admin/custom_emojis POST                  (Upload a custom emoji for instance-wide usage)
    * [ ] /api/v1/admin/accounts GET                        (View accounts filtered by criteria)
    * [ ] /api/v1/admin/accounts/:id GET                    (View admin level info about an account)
    * [ ] /api/v1/admin/accounts/:id/action POST            (Perform an admin action on account)
    * [ ] /api/v1/admin/accounts/:id/approve POST           (Approve pending account)
    * [ ] /api/v1/admin/accounts/:id/reject POST            (Deny pending account)
    * [ ] /api/v1/admin/accounts/:id/enable POST            (Reenable a disabled account)
    * [ ] /api/v1/admin/accounts/:id/unsilence POST         (Unsilence a silenced account)
    * [ ] /api/v1/admin/accounts/:id/unsuspend POST         (Unsuspend a suspended account)
    * [ ] /api/v1/admin/reports GET                         (View all reports)
    * [ ] /api/v1/admin/reports/:id GET                     (View a single report)
    * [ ] /api/v1/admin/reports/:id/assign_to_self POST     (Assign a report to the current admin account)
    * [ ] /api/v1/admin/reports/:id/unassign POST           (Unassign a report)
    * [ ] /api/v1/admin/reports/:id/resolve POST            (Mark a report as resolved)
    * [ ] /api/v1/admin/reports/:id/reopen POST             (Reopen a closed report)
  * [ ] Announcements
    * [ ] /api/v1/announcements GET                         (Show all current announcements)
    * [ ] /api/v1/announcements/:id/dismiss POST            (Mark an announcement as read)
    * [ ] /api/v1/announcements/:id/reactions/:name PUT     (Add a reaction to an announcement)
    * [ ] /api/v1/announcements/:id/reactions/:name DELETE  (Remove a reaction from an announcement)
  * [ ] Proofs
    * [ ] /api/proofs GET                                   (View identity proofs)
  * [ ] Oembed
    * [ ] /api/oembed GET                                   (Get oembed metadata for a status URL)
* [ ] Server-To-Server (Federation protocol)
  * [x] Mechanism to trigger side effects from client AP
  * [x] Webfinger account lookups
  * [ ] Federation modes
    * [ ] 'Slow' federation
      * [ ] Reputation scoring system for instances
    * [x] 'Greedy' federation
    * [ ] No federation (insulate this instance from the Fediverse)
      * [ ] Allowlist
  * [x] Secure HTTP signatures (creation and validation)
* [ ] Storage
  * [x] Internal/statuses/preferences etc
    * [x] Postgres interface
  * [x] Media storage
    * [x] Local storage interface
    * [ ] S3 storage interface
* [ ] Cache
  * [ ] In-memory cache
* [ ] Security features
  * [x] Authorization middleware
  * [ ] Rate limiting middleware
  * [ ] Scope middleware
  * [ ] Permissions/acl middleware for admins+moderators
* [ ] Documentation
  * [x] Swagger API documentation
  * [ ] ReadTheDocs.io documentation
  * [ ] Deployment documentation
  * [ ] App creation guide
* [ ] Tooling
  * [ ] Database migration tool
  * [x] Admin CLI tool
* [ ] Build
  * [x] Docker containerization
    * [x] Dockerfile
    * [ ] docker-compose.yml
* [ ] Tests
  * [ ] Unit/integration
    * [ ] 25% coverage
    * [ ] 50% coverage
    * [ ] 90%+ coverage
  * [ ] Benchmarking