diff options
| author | 2022-10-13 16:37:55 +0200 | |
|---|---|---|
| committer | 2022-10-13 16:37:55 +0200 | |
| commit | 6a95f5fa67ad27937198e0c9e25e3d8fe1f2bd2c (patch) | |
| tree | e5abbdc2cdc2d4662ac3d22ebbf8503f1ad61b7f /internal/processing | |
| parent | [feature] Refetch emojis when they change on remote instances (#905) (diff) | |
| download | gotosocial-6a95f5fa67ad27937198e0c9e25e3d8fe1f2bd2c.tar.xz | |
[feature] Add `/api/v1/admin/custom_emojis/{id}` endpoint for single emoji GET (#910)
* fix error in prev swagger docs
* add GET for single admin emoji
Diffstat (limited to 'internal/processing')
| -rw-r--r-- | internal/processing/admin.go | 4 | ||||
| -rw-r--r-- | internal/processing/admin/admin.go | 1 | ||||
| -rw-r--r-- | internal/processing/admin/getemoji.go | 54 | ||||
| -rw-r--r-- | internal/processing/processor.go | 2 | 
4 files changed, 61 insertions, 0 deletions
diff --git a/internal/processing/admin.go b/internal/processing/admin.go index 59a4f8f1b..0ebce4d4e 100644 --- a/internal/processing/admin.go +++ b/internal/processing/admin.go @@ -38,6 +38,10 @@ func (p *processor) AdminEmojisGet(ctx context.Context, authed *oauth.Auth, doma  	return p.adminProcessor.EmojisGet(ctx, authed.Account, authed.User, domain, includeDisabled, includeEnabled, shortcode, maxShortcodeDomain, minShortcodeDomain, limit)  } +func (p *processor) AdminEmojiGet(ctx context.Context, authed *oauth.Auth, id string) (*apimodel.AdminEmoji, gtserror.WithCode) { +	return p.adminProcessor.EmojiGet(ctx, authed.Account, authed.User, id) +} +  func (p *processor) AdminDomainBlockCreate(ctx context.Context, authed *oauth.Auth, form *apimodel.DomainBlockCreateRequest) (*apimodel.DomainBlock, gtserror.WithCode) {  	return p.adminProcessor.DomainBlockCreate(ctx, authed.Account, form.Domain, form.Obfuscate, form.PublicComment, form.PrivateComment, "")  } diff --git a/internal/processing/admin/admin.go b/internal/processing/admin/admin.go index 0de165fb9..49c02d3db 100644 --- a/internal/processing/admin/admin.go +++ b/internal/processing/admin/admin.go @@ -42,6 +42,7 @@ type Processor interface {  	AccountAction(ctx context.Context, account *gtsmodel.Account, form *apimodel.AdminAccountActionRequest) gtserror.WithCode  	EmojiCreate(ctx context.Context, account *gtsmodel.Account, user *gtsmodel.User, form *apimodel.EmojiCreateRequest) (*apimodel.Emoji, gtserror.WithCode)  	EmojisGet(ctx context.Context, account *gtsmodel.Account, user *gtsmodel.User, domain string, includeDisabled bool, includeEnabled bool, shortcode string, maxShortcodeDomain string, minShortcodeDomain string, limit int) (*apimodel.PageableResponse, gtserror.WithCode) +	EmojiGet(ctx context.Context, account *gtsmodel.Account, user *gtsmodel.User, id string) (*apimodel.AdminEmoji, gtserror.WithCode)  	MediaPrune(ctx context.Context, mediaRemoteCacheDays int) gtserror.WithCode  } diff --git a/internal/processing/admin/getemoji.go b/internal/processing/admin/getemoji.go new file mode 100644 index 000000000..ee3f997de --- /dev/null +++ b/internal/processing/admin/getemoji.go @@ -0,0 +1,54 @@ +/* +   GoToSocial +   Copyright (C) 2021-2022 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 admin + +import ( +	"context" +	"errors" +	"fmt" + +	apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" +	"github.com/superseriousbusiness/gotosocial/internal/db" +	"github.com/superseriousbusiness/gotosocial/internal/gtserror" +	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel" +) + +func (p *processor) EmojiGet(ctx context.Context, account *gtsmodel.Account, user *gtsmodel.User, id string) (*apimodel.AdminEmoji, gtserror.WithCode) { +	if !*user.Admin { +		return nil, gtserror.NewErrorUnauthorized(fmt.Errorf("user %s not an admin", user.ID), "user is not an admin") +	} + +	emoji, err := p.db.GetEmojiByID(ctx, id) +	if err != nil { +		if errors.Is(err, db.ErrNoEntries) { +			err = fmt.Errorf("EmojiGet: no emoji with id %s found in the db", id) +			return nil, gtserror.NewErrorNotFound(err) +		} +		err := fmt.Errorf("EmojiGet: db error: %s", err) +		return nil, gtserror.NewErrorInternalError(err) +	} + +	adminEmoji, err := p.tc.EmojiToAdminAPIEmoji(ctx, emoji) +	if err != nil { +		err = fmt.Errorf("EmojiGet: error converting emoji to admin api emoji: %s", err) +		return nil, gtserror.NewErrorInternalError(err) +	} + +	return adminEmoji, nil +} diff --git a/internal/processing/processor.go b/internal/processing/processor.go index b616511ea..ff465c926 100644 --- a/internal/processing/processor.go +++ b/internal/processing/processor.go @@ -114,6 +114,8 @@ type Processor interface {  	AdminEmojiCreate(ctx context.Context, authed *oauth.Auth, form *apimodel.EmojiCreateRequest) (*apimodel.Emoji, gtserror.WithCode)  	// AdminEmojisGet allows admins to view emojis based on various filters.  	AdminEmojisGet(ctx context.Context, authed *oauth.Auth, domain string, includeDisabled bool, includeEnabled bool, shortcode string, maxShortcodeDomain string, minShortcodeDomain string, limit int) (*apimodel.PageableResponse, gtserror.WithCode) +	// AdminEmojiGet returns the admin view of an emoji with the given ID +	AdminEmojiGet(ctx context.Context, authed *oauth.Auth, id string) (*apimodel.AdminEmoji, gtserror.WithCode)  	// AdminDomainBlockCreate handles the creation of a new domain block by an admin, using the given form.  	AdminDomainBlockCreate(ctx context.Context, authed *oauth.Auth, form *apimodel.DomainBlockCreateRequest) (*apimodel.DomainBlock, gtserror.WithCode)  	// AdminDomainBlocksImport handles the import of multiple domain blocks by an admin, using the given form.  | 
