Skip to content

Commit

Permalink
Tidy + timeline embetterment (#38)
Browse files Browse the repository at this point in the history
* tidy up timelines a bit + stub out some endpoints

* who's faved and who's boosted, reblog notifs

* linting

* Update progress with new endpoints
  • Loading branch information
tsmethurst committed May 31, 2021
1 parent 3d77f81 commit 6ac6f8d
Show file tree
Hide file tree
Showing 23 changed files with 692 additions and 15 deletions.
4 changes: 2 additions & 2 deletions PROGRESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
* [x] /api/v1/statuses/:id GET (View an existing status)
* [x] /api/v1/statuses/:id DELETE (Delete a status)
* [ ] /api/v1/statuses/:id/context GET (View statuses above and below status ID)
* [ ] /api/v1/statuses/:id/reblogged_by GET (See who has reblogged a status)
* [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)
Expand All @@ -98,7 +98,7 @@
* [ ] /api/v1/scheduled_statuses/:id PUT (Schedule a status)
* [ ] /api/v1/scheduled_statuses/:id DELETE (Cancel a scheduled status)
* [ ] Timelines
* [ ] /api/v1/timelines/public GET (See the public/federated timeline)
* [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)
Expand Down
56 changes: 56 additions & 0 deletions internal/api/client/emoji/emoji.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
GoToSocial
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package emoji

import (
"net/http"

"github.com/sirupsen/logrus"
"github.com/superseriousbusiness/gotosocial/internal/api"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/processing"
"github.com/superseriousbusiness/gotosocial/internal/router"
)

const (
// BasePath is the base path for serving the emoji API
BasePath = "/api/v1/custom_emojis"
)

// Module implements the ClientAPIModule interface for everything related to emoji
type Module struct {
config *config.Config
processor processing.Processor
log *logrus.Logger
}

// New returns a new emoji module
func New(config *config.Config, processor processing.Processor, log *logrus.Logger) api.ClientModule {
return &Module{
config: config,
processor: processor,
log: log,
}
}

// Route attaches all routes from this module to the given router
func (m *Module) Route(r router.Router) error {
r.AttachHandler(http.MethodGet, BasePath, m.EmojisGETHandler)
return nil
}
8 changes: 8 additions & 0 deletions internal/api/client/emoji/emojisget.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package emoji

import "github.com/gin-gonic/gin"

// EmojisGETHandler returns a list of custom emojis enabled on the instance
func (m *Module) EmojisGETHandler(c *gin.Context) {

}
56 changes: 56 additions & 0 deletions internal/api/client/filter/filter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
GoToSocial
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package filter

import (
"net/http"

"github.com/sirupsen/logrus"
"github.com/superseriousbusiness/gotosocial/internal/api"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/processing"
"github.com/superseriousbusiness/gotosocial/internal/router"
)

const (
// BasePath is the base path for serving the filter API
BasePath = "/api/v1/filters"
)

// Module implements the ClientAPIModule interface for every related to filters
type Module struct {
config *config.Config
processor processing.Processor
log *logrus.Logger
}

// New returns a new filter module
func New(config *config.Config, processor processing.Processor, log *logrus.Logger) api.ClientModule {
return &Module{
config: config,
processor: processor,
log: log,
}
}

// Route attaches all routes from this module to the given router
func (m *Module) Route(r router.Router) error {
r.AttachHandler(http.MethodGet, BasePath, m.FiltersGETHandler)
return nil
}
8 changes: 8 additions & 0 deletions internal/api/client/filter/filtersget.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package filter

import "github.com/gin-gonic/gin"

// FiltersGETHandler returns a list of filters set by/for the authed account
func (m *Module) FiltersGETHandler(c *gin.Context) {

}
56 changes: 56 additions & 0 deletions internal/api/client/list/list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
GoToSocial
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package list

import (
"net/http"

"github.com/sirupsen/logrus"
"github.com/superseriousbusiness/gotosocial/internal/api"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/processing"
"github.com/superseriousbusiness/gotosocial/internal/router"
)

const (
// BasePath is the base path for serving the lists API
BasePath = "/api/v1/lists"
)

// Module implements the ClientAPIModule interface for everything related to lists
type Module struct {
config *config.Config
processor processing.Processor
log *logrus.Logger
}

// New returns a new list module
func New(config *config.Config, processor processing.Processor, log *logrus.Logger) api.ClientModule {
return &Module{
config: config,
processor: processor,
log: log,
}
}

// Route attaches all routes from this module to the given router
func (m *Module) Route(r router.Router) error {
r.AttachHandler(http.MethodGet, BasePath, m.ListsGETHandler)
return nil
}
8 changes: 8 additions & 0 deletions internal/api/client/list/listsgets.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package list

import "github.com/gin-gonic/gin"

// ListsGETHandler returns a list of lists created by/for the authed account
func (m *Module) ListsGETHandler(c *gin.Context) {

}
2 changes: 2 additions & 0 deletions internal/api/client/notification/notification.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ const (
MaxIDKey = "max_id"
// LimitKey is for specifying maximum number of notifications to return.
LimitKey = "limit"
// SinceIDKey is for specifying the minimum notification ID to return.
SinceIDKey = "since_id"
)

// Module implements the ClientAPIModule interface for every related to posting/deleting/interacting with notifications
Expand Down
8 changes: 7 additions & 1 deletion internal/api/client/notification/notificationsget.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,13 @@ func (m *Module) NotificationsGETHandler(c *gin.Context) {
maxID = maxIDString
}

notifs, errWithCode := m.processor.NotificationsGet(authed, limit, maxID)
sinceID := ""
sinceIDString := c.Query(SinceIDKey)
if sinceIDString != "" {
sinceID = sinceIDString
}

notifs, errWithCode := m.processor.NotificationsGet(authed, limit, maxID, sinceID)
if errWithCode != nil {
l.Debugf("error processing notifications get: %s", errWithCode.Error())
c.JSON(errWithCode.Code(), gin.H{"error": errWithCode.Safe()})
Expand Down
4 changes: 4 additions & 0 deletions internal/api/client/status/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,12 @@ func (m *Module) Route(r router.Router) error {

r.AttachHandler(http.MethodPost, FavouritePath, m.StatusFavePOSTHandler)
r.AttachHandler(http.MethodPost, UnfavouritePath, m.StatusUnfavePOSTHandler)
r.AttachHandler(http.MethodGet, FavouritedPath, m.StatusFavedByGETHandler)

r.AttachHandler(http.MethodPost, ReblogPath, m.StatusBoostPOSTHandler)
r.AttachHandler(http.MethodGet, RebloggedPath, m.StatusBoostedByGETHandler)

r.AttachHandler(http.MethodGet, ContextPath, m.StatusContextGETHandler)

r.AttachHandler(http.MethodGet, BasePathWithID, m.muxHandler)
return nil
Expand Down
60 changes: 60 additions & 0 deletions internal/api/client/status/statusboosted_by.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
GoToSocial
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package status

import (
"net/http"

"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"github.com/superseriousbusiness/gotosocial/internal/oauth"
)

// StatusBoostedByGETHandler is for serving a list of accounts that have boosted/reblogged a given status
func (m *Module) StatusBoostedByGETHandler(c *gin.Context) {
l := m.log.WithFields(logrus.Fields{
"func": "StatusBoostedByGETHandler",
"request_uri": c.Request.RequestURI,
"user_agent": c.Request.UserAgent(),
"origin_ip": c.ClientIP(),
})
l.Debugf("entering function")

authed, err := oauth.Authed(c, true, true, true, true) // we don't really need an app here but we want everything else
if err != nil {
l.Errorf("error authing status boosted by request: %s", err)
c.JSON(http.StatusBadRequest, gin.H{"error": "not authed"})
return
}

targetStatusID := c.Param(IDKey)
if targetStatusID == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "no status id provided"})
return
}

mastoAccounts, err := m.processor.StatusBoostedBy(authed, targetStatusID)
if err != nil {
l.Debugf("error processing status boosted by request: %s", err)
c.JSON(http.StatusBadRequest, gin.H{"error": "bad request"})
return
}

c.JSON(http.StatusOK, mastoAccounts)
}
60 changes: 60 additions & 0 deletions internal/api/client/status/statuscontext.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
GoToSocial
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package status

import (
"net/http"

"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"github.com/superseriousbusiness/gotosocial/internal/oauth"
)

// StatusContextGETHandler returns the context around the given status ID.
func (m *Module) StatusContextGETHandler(c *gin.Context) {
l := m.log.WithFields(logrus.Fields{
"func": "StatusContextGETHandler",
"request_uri": c.Request.RequestURI,
"user_agent": c.Request.UserAgent(),
"origin_ip": c.ClientIP(),
})
l.Debugf("entering function")

authed, err := oauth.Authed(c, true, true, true, true)
if err != nil {
l.Errorf("error authing status context request: %s", err)
c.JSON(http.StatusBadRequest, gin.H{"error": "not authed"})
return
}

targetStatusID := c.Param(IDKey)
if targetStatusID == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "no status id provided"})
return
}

statusContext, errWithCode := m.processor.StatusGetContext(authed, targetStatusID)
if errWithCode != nil {
l.Debugf("error getting status context: %s", errWithCode.Error())
c.JSON(errWithCode.Code(), gin.H{"error": errWithCode.Safe()})
return
}

c.JSON(http.StatusOK, statusContext)
}
2 changes: 1 addition & 1 deletion internal/api/client/timeline/home.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import (
// limit -- show only limit number of statuses
// local -- Return only local statuses?
func (m *Module) HomeTimelineGETHandler(c *gin.Context) {
l := m.log.WithField("func", "AccountStatusesGETHandler")
l := m.log.WithField("func", "HomeTimelineGETHandler")

authed, err := oauth.Authed(c, true, true, true, true)
if err != nil {
Expand Down
Loading

0 comments on commit 6ac6f8d

Please sign in to comment.