diff options
| -rw-r--r-- | docs/api/swagger.yaml | 37 | ||||
| -rw-r--r-- | internal/api/client.go | 4 | ||||
| -rw-r--r-- | internal/api/client/featuredtags/featuredtags.go | 44 | ||||
| -rw-r--r-- | internal/api/client/featuredtags/get.go | 76 | 
4 files changed, 157 insertions, 4 deletions
| diff --git a/docs/api/swagger.yaml b/docs/api/swagger.yaml index d2d2a08cb..05681733b 100644 --- a/docs/api/swagger.yaml +++ b/docs/api/swagger.yaml @@ -1373,14 +1373,14 @@ definitions:          x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model      instanceV1URLs:          properties: -            streaming_api: +            streaming:                  description: Websockets address for status and notification streaming.                  example: wss://example.org                  type: string -                x-go-name: StreamingAPI -        title: InstanceV1URLs models instance-relevant URLs for client application consumption. +                x-go-name: Streaming +        title: InstanceV2URLs models instance-relevant URLs for client application consumption.          type: object -        x-go-name: InstanceV1URLs +        x-go-name: InstanceV2URLs          x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model      instanceV2:          properties: @@ -4039,6 +4039,35 @@ paths:              summary: Get an array of statuses that the requesting account has favourited.              tags:                  - favourites +    /api/v1/featured_tags: +        get: +            description: 'THIS ENDPOINT IS CURRENTLY NOT FULLY IMPLEMENTED: it will always return an empty array.' +            operationId: getFeaturedTags +            produces: +                - application/json +            responses: +                "200": +                    description: "" +                    schema: +                        items: +                            type: object +                        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:accounts +            summary: Get an array of all hashtags that you currently have featured on your profile. +            tags: +                - featured_tags      /api/v1/follow_requests:          get:              description: Accounts will be sorted in order of follow request date descending (newest first). diff --git a/internal/api/client.go b/internal/api/client.go index 0ee46bba9..2ce3cdc97 100644 --- a/internal/api/client.go +++ b/internal/api/client.go @@ -29,6 +29,7 @@ import (  	"github.com/superseriousbusiness/gotosocial/internal/api/client/bookmarks"  	"github.com/superseriousbusiness/gotosocial/internal/api/client/customemojis"  	"github.com/superseriousbusiness/gotosocial/internal/api/client/favourites" +	"github.com/superseriousbusiness/gotosocial/internal/api/client/featuredtags"  	filter "github.com/superseriousbusiness/gotosocial/internal/api/client/filters"  	"github.com/superseriousbusiness/gotosocial/internal/api/client/followrequests"  	"github.com/superseriousbusiness/gotosocial/internal/api/client/instance" @@ -58,6 +59,7 @@ type Client struct {  	bookmarks      *bookmarks.Module      // api/v1/bookmarks  	customEmojis   *customemojis.Module   // api/v1/custom_emojis  	favourites     *favourites.Module     // api/v1/favourites +	featuredTags   *featuredtags.Module   // api/v1/featured_tags  	filters        *filter.Module         // api/v1/filters  	followRequests *followrequests.Module // api/v1/follow_requests  	instance       *instance.Module       // api/v1/instance @@ -93,6 +95,7 @@ func (c *Client) Route(r router.Router, m ...gin.HandlerFunc) {  	c.bookmarks.Route(h)  	c.customEmojis.Route(h)  	c.favourites.Route(h) +	c.featuredTags.Route(h)  	c.filters.Route(h)  	c.followRequests.Route(h)  	c.instance.Route(h) @@ -119,6 +122,7 @@ func NewClient(db db.DB, p processing.Processor) *Client {  		bookmarks:      bookmarks.New(p),  		customEmojis:   customemojis.New(p),  		favourites:     favourites.New(p), +		featuredTags:   featuredtags.New(p),  		filters:        filter.New(p),  		followRequests: followrequests.New(p),  		instance:       instance.New(p), diff --git a/internal/api/client/featuredtags/featuredtags.go b/internal/api/client/featuredtags/featuredtags.go new file mode 100644 index 000000000..7cd61837c --- /dev/null +++ b/internal/api/client/featuredtags/featuredtags.go @@ -0,0 +1,44 @@ +/* +   GoToSocial +   Copyright (C) 2021-2023 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 featuredtags + +import ( +	"net/http" + +	"github.com/gin-gonic/gin" +	"github.com/superseriousbusiness/gotosocial/internal/processing" +) + +const ( +	BasePath = "/v1/featured_tags" +) + +type Module struct { +	processor processing.Processor +} + +func New(processor processing.Processor) *Module { +	return &Module{ +		processor: processor, +	} +} + +func (m *Module) Route(attachHandler func(method string, path string, f ...gin.HandlerFunc) gin.IRoutes) { +	attachHandler(http.MethodGet, BasePath, m.FeaturedTagsGETHandler) +} diff --git a/internal/api/client/featuredtags/get.go b/internal/api/client/featuredtags/get.go new file mode 100644 index 000000000..d5e949eaf --- /dev/null +++ b/internal/api/client/featuredtags/get.go @@ -0,0 +1,76 @@ +/* +   GoToSocial +   Copyright (C) 2021-2023 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 featuredtags + +import ( +	"net/http" + +	"github.com/gin-gonic/gin" +	apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" +	"github.com/superseriousbusiness/gotosocial/internal/gtserror" +	"github.com/superseriousbusiness/gotosocial/internal/oauth" +) + +// FeaturedTagsGETHandler swagger:operation GET /api/v1/featured_tags getFeaturedTags +// +// Get an array of all hashtags that you currently have featured on your profile. +// +// THIS ENDPOINT IS CURRENTLY NOT FULLY IMPLEMENTED: it will always return an empty array. +// +//	--- +//	tags: +//	- featured_tags +// +//	produces: +//	- application/json +// +//	security: +//	- OAuth2 Bearer: +//		- read:accounts +// +//	responses: +//		'200': +//			schema: +//				type: array +//				items: +//					type: object +//		'400': +//			description: bad request +//		'401': +//			description: unauthorized +//		'404': +//			description: not found +//		'406': +//			description: not acceptable +//		'500': +//			description: internal server error +func (m *Module) FeaturedTagsGETHandler(c *gin.Context) { +	_, err := oauth.Authed(c, true, true, true, true) +	if err != nil { +		apiutil.ErrorHandler(c, gtserror.NewErrorUnauthorized(err, err.Error()), m.processor.InstanceGetV1) +		return +	} + +	if _, err := apiutil.NegotiateAccept(c, apiutil.JSONAcceptHeaders...); err != nil { +		apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) +		return +	} + +	c.JSON(http.StatusOK, []interface{}{}) +} | 
