account.go (2328B)
1 // GoToSocial 2 // Copyright (C) GoToSocial Authors admin@gotosocial.org 3 // SPDX-License-Identifier: AGPL-3.0-or-later 4 // 5 // This program is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Affero General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU Affero General Public License for more details. 14 // 15 // You should have received a copy of the GNU Affero General Public License 16 // along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 package admin 19 20 import ( 21 "context" 22 "fmt" 23 24 "github.com/superseriousbusiness/gotosocial/internal/ap" 25 apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" 26 "github.com/superseriousbusiness/gotosocial/internal/gtserror" 27 "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" 28 "github.com/superseriousbusiness/gotosocial/internal/id" 29 "github.com/superseriousbusiness/gotosocial/internal/messages" 30 ) 31 32 func (p *Processor) AccountAction(ctx context.Context, account *gtsmodel.Account, form *apimodel.AdminAccountActionRequest) gtserror.WithCode { 33 targetAccount, err := p.state.DB.GetAccountByID(ctx, form.TargetAccountID) 34 if err != nil { 35 return gtserror.NewErrorInternalError(err) 36 } 37 38 adminAction := >smodel.AdminAccountAction{ 39 ID: id.NewULID(), 40 AccountID: account.ID, 41 TargetAccountID: targetAccount.ID, 42 Text: form.Text, 43 } 44 45 switch form.Type { 46 case string(gtsmodel.AdminActionSuspend): 47 adminAction.Type = gtsmodel.AdminActionSuspend 48 // pass the account delete through the client api channel for processing 49 p.state.Workers.EnqueueClientAPI(ctx, messages.FromClientAPI{ 50 APObjectType: ap.ActorPerson, 51 APActivityType: ap.ActivityDelete, 52 OriginAccount: account, 53 TargetAccount: targetAccount, 54 }) 55 default: 56 return gtserror.NewErrorBadRequest(fmt.Errorf("admin action type %s is not supported for this endpoint", form.Type)) 57 } 58 59 if err := p.state.DB.Put(ctx, adminAction); err != nil { 60 return gtserror.NewErrorInternalError(err) 61 } 62 63 return nil 64 }