| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | /* | 
					
						
							|  |  |  |    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 account | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	"context" | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/sirupsen/logrus" | 
					
						
							| 
									
										
										
										
											2021-08-31 15:59:12 +02:00
										 |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/ap" | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/db" | 
					
						
							|  |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel" | 
					
						
							| 
									
										
										
										
											2021-08-31 15:59:12 +02:00
										 |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/messages" | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Delete handles the complete deletion of an account. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // TODO in this function: | 
					
						
							|  |  |  | // 1. Delete account's application(s), clients, and oauth tokens | 
					
						
							|  |  |  | // 2. Delete account's blocks | 
					
						
							|  |  |  | // 3. Delete account's emoji | 
					
						
							|  |  |  | // 4. Delete account's follow requests | 
					
						
							|  |  |  | // 5. Delete account's follows | 
					
						
							|  |  |  | // 6. Delete account's statuses | 
					
						
							|  |  |  | // 7. Delete account's media attachments | 
					
						
							|  |  |  | // 8. Delete account's mentions | 
					
						
							|  |  |  | // 9. Delete account's polls | 
					
						
							|  |  |  | // 10. Delete account's notifications | 
					
						
							|  |  |  | // 11. Delete account's bookmarks | 
					
						
							|  |  |  | // 12. Delete account's faves | 
					
						
							|  |  |  | // 13. Delete account's mutes | 
					
						
							|  |  |  | // 14. Delete account's streams | 
					
						
							|  |  |  | // 15. Delete account's tags | 
					
						
							|  |  |  | // 16. Delete account's user | 
					
						
							|  |  |  | // 17. Delete account's timeline | 
					
						
							|  |  |  | // 18. Delete account itself | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | func (p *processor) Delete(ctx context.Context, account *gtsmodel.Account, origin string) error { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	l := p.log.WithFields(logrus.Fields{ | 
					
						
							|  |  |  | 		"func":     "Delete", | 
					
						
							|  |  |  | 		"username": account.Username, | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	l.Debugf("beginning account delete process for username %s", account.Username) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 1. Delete account's application(s), clients, and oauth tokens | 
					
						
							|  |  |  | 	// we only need to do this step for local account since remote ones won't have any tokens or applications on our server | 
					
						
							|  |  |  | 	if account.Domain == "" { | 
					
						
							|  |  |  | 		// see if we can get a user for this account | 
					
						
							|  |  |  | 		u := >smodel.User{} | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 		if err := p.db.GetWhere(ctx, []db.Where{{Key: "account_id", Value: account.ID}}, u); err == nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 			// we got one! select all tokens with the user's ID | 
					
						
							| 
									
										
										
										
											2021-09-01 11:45:01 +02:00
										 |  |  | 			tokens := []*gtsmodel.Token{} | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 			if err := p.db.GetWhere(ctx, []db.Where{{Key: "user_id", Value: u.ID}}, &tokens); err == nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 				// we have some tokens to delete | 
					
						
							|  |  |  | 				for _, t := range tokens { | 
					
						
							|  |  |  | 					// delete client(s) associated with this token | 
					
						
							| 
									
										
										
										
											2021-09-01 11:45:01 +02:00
										 |  |  | 					if err := p.db.DeleteByID(ctx, t.ClientID, >smodel.Client{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 						l.Errorf("error deleting oauth client: %s", err) | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					// delete application(s) associated with this token | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 					if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "client_id", Value: t.ClientID}}, >smodel.Application{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 						l.Errorf("error deleting application: %s", err) | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					// delete the token itself | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 					if err := p.db.DeleteByID(ctx, t.ID, t); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 						l.Errorf("error deleting oauth token: %s", err) | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 2. Delete account's blocks | 
					
						
							|  |  |  | 	l.Debug("deleting account blocks") | 
					
						
							|  |  |  | 	// first delete any blocks that this account created | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "account_id", Value: account.ID}}, &[]*gtsmodel.Block{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting blocks created by account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// now delete any blocks that target this account | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "target_account_id", Value: account.ID}}, &[]*gtsmodel.Block{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting blocks targeting account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 3. Delete account's emoji | 
					
						
							|  |  |  | 	// nothing to do here | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 4. Delete account's follow requests | 
					
						
							| 
									
										
										
										
											2021-07-06 13:29:11 +02:00
										 |  |  | 	// TODO: federate these if necessary | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	l.Debug("deleting account follow requests") | 
					
						
							|  |  |  | 	// first delete any follow requests that this account created | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "account_id", Value: account.ID}}, &[]*gtsmodel.FollowRequest{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting follow requests created by account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// now delete any follow requests that target this account | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "target_account_id", Value: account.ID}}, &[]*gtsmodel.FollowRequest{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting follow requests targeting account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 5. Delete account's follows | 
					
						
							| 
									
										
										
										
											2021-07-06 13:29:11 +02:00
										 |  |  | 	// TODO: federate these if necessary | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	l.Debug("deleting account follows") | 
					
						
							|  |  |  | 	// first delete any follows that this account created | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "account_id", Value: account.ID}}, &[]*gtsmodel.Follow{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting follows created by account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// now delete any follows that target this account | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "target_account_id", Value: account.ID}}, &[]*gtsmodel.Follow{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting follows targeting account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 6. Delete account's statuses | 
					
						
							|  |  |  | 	l.Debug("deleting account statuses") | 
					
						
							|  |  |  | 	// we'll select statuses 20 at a time so we don't wreck the db, and pass them through to the client api channel | 
					
						
							|  |  |  | 	// Deleting the statuses in this way also handles 7. Delete account's media attachments, 8. Delete account's mentions, and 9. Delete account's polls, | 
					
						
							|  |  |  | 	// since these are all attached to statuses. | 
					
						
							|  |  |  | 	var maxID string | 
					
						
							|  |  |  | selectStatusesLoop: | 
					
						
							|  |  |  | 	for { | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 		statuses, err := p.db.GetAccountStatuses(ctx, account.ID, 20, false, maxID, false, false) | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		if err != nil { | 
					
						
							| 
									
										
										
										
											2021-08-20 12:26:56 +02:00
										 |  |  | 			if err == db.ErrNoEntries { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 				// no statuses left for this instance so we're done | 
					
						
							|  |  |  | 				l.Infof("Delete: done iterating through statuses for account %s", account.Username) | 
					
						
							|  |  |  | 				break selectStatusesLoop | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			// an actual error has occurred | 
					
						
							|  |  |  | 			l.Errorf("Delete: db error selecting statuses for account %s: %s", account.Username, err) | 
					
						
							|  |  |  | 			break selectStatusesLoop | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for i, s := range statuses { | 
					
						
							|  |  |  | 			// pass the status delete through the client api channel for processing | 
					
						
							| 
									
										
										
										
											2021-08-20 12:26:56 +02:00
										 |  |  | 			s.Account = account | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 			l.Debug("putting status in the client api channel") | 
					
						
							| 
									
										
										
										
											2021-08-31 15:59:12 +02:00
										 |  |  | 			p.fromClientAPI <- messages.FromClientAPI{ | 
					
						
							|  |  |  | 				APObjectType:   ap.ObjectNote, | 
					
						
							|  |  |  | 				APActivityType: ap.ActivityDelete, | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 				GTSModel:       s, | 
					
						
							|  |  |  | 				OriginAccount:  account, | 
					
						
							|  |  |  | 				TargetAccount:  account, | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 			if err := p.db.DeleteByID(ctx, s.ID, s); err != nil { | 
					
						
							| 
									
										
										
										
											2021-08-20 12:26:56 +02:00
										 |  |  | 				if err != db.ErrNoEntries { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 					// actual error has occurred | 
					
						
							|  |  |  | 					l.Errorf("Delete: db error status %s for account %s: %s", s.ID, account.Username, err) | 
					
						
							|  |  |  | 					break selectStatusesLoop | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// if there are any boosts of this status, delete them as well | 
					
						
							|  |  |  | 			boosts := []*gtsmodel.Status{} | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 			if err := p.db.GetWhere(ctx, []db.Where{{Key: "boost_of_id", Value: s.ID}}, &boosts); err != nil { | 
					
						
							| 
									
										
										
										
											2021-08-20 12:26:56 +02:00
										 |  |  | 				if err != db.ErrNoEntries { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 					// an actual error has occurred | 
					
						
							|  |  |  | 					l.Errorf("Delete: db error selecting boosts of status %s for account %s: %s", s.ID, account.Username, err) | 
					
						
							|  |  |  | 					break selectStatusesLoop | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			for _, b := range boosts { | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 				if b.Account == nil { | 
					
						
							|  |  |  | 					bAccount, err := p.db.GetAccountByID(ctx, b.AccountID) | 
					
						
							|  |  |  | 					if err != nil { | 
					
						
							|  |  |  | 						continue | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 					b.Account = bAccount | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 				l.Debug("putting boost undo in the client api channel") | 
					
						
							| 
									
										
										
										
											2021-08-31 15:59:12 +02:00
										 |  |  | 				p.fromClientAPI <- messages.FromClientAPI{ | 
					
						
							|  |  |  | 					APObjectType:   ap.ActivityAnnounce, | 
					
						
							|  |  |  | 					APActivityType: ap.ActivityUndo, | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 					GTSModel:       s, | 
					
						
							|  |  |  | 					OriginAccount:  b.Account, | 
					
						
							|  |  |  | 					TargetAccount:  account, | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if err := p.db.DeleteByID(ctx, b.ID, b); err != nil { | 
					
						
							| 
									
										
										
										
											2021-08-20 12:26:56 +02:00
										 |  |  | 					if err != db.ErrNoEntries { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 						// actual error has occurred | 
					
						
							|  |  |  | 						l.Errorf("Delete: db error deleting boost with id %s: %s", b.ID, err) | 
					
						
							|  |  |  | 						break selectStatusesLoop | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// if this is the last status in the slice, set the maxID appropriately for the next query | 
					
						
							|  |  |  | 			if i == len(statuses)-1 { | 
					
						
							|  |  |  | 				maxID = s.ID | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	l.Debug("done deleting statuses") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 10. Delete account's notifications | 
					
						
							|  |  |  | 	l.Debug("deleting account notifications") | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "origin_account_id", Value: account.ID}}, &[]*gtsmodel.Notification{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting notifications created by account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 11. Delete account's bookmarks | 
					
						
							|  |  |  | 	l.Debug("deleting account bookmarks") | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "account_id", Value: account.ID}}, &[]*gtsmodel.StatusBookmark{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting bookmarks created by account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 12. Delete account's faves | 
					
						
							| 
									
										
										
										
											2021-07-06 13:29:11 +02:00
										 |  |  | 	// TODO: federate these if necessary | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 	l.Debug("deleting account faves") | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "account_id", Value: account.ID}}, &[]*gtsmodel.StatusFave{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting faves created by account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 13. Delete account's mutes | 
					
						
							|  |  |  | 	l.Debug("deleting account mutes") | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "account_id", Value: account.ID}}, &[]*gtsmodel.StatusMute{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		l.Errorf("error deleting status mutes created by account: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 14. Delete account's streams | 
					
						
							| 
									
										
										
										
											2021-07-06 13:29:11 +02:00
										 |  |  | 	// TODO | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// 15. Delete account's tags | 
					
						
							|  |  |  | 	// TODO | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 16. Delete account's user | 
					
						
							|  |  |  | 	l.Debug("deleting account user") | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	if err := p.db.DeleteWhere(ctx, []db.Where{{Key: "account_id", Value: account.ID}}, >smodel.User{}); err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 17. Delete account's timeline | 
					
						
							| 
									
										
										
										
											2021-07-06 13:29:11 +02:00
										 |  |  | 	// TODO | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// 18. Delete account itself | 
					
						
							|  |  |  | 	// to prevent the account being created again, set all these fields and update it in the db | 
					
						
							|  |  |  | 	// the account won't actually be *removed* from the database but it will be set to just a stub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	account.Note = "" | 
					
						
							|  |  |  | 	account.DisplayName = "" | 
					
						
							|  |  |  | 	account.AvatarMediaAttachmentID = "" | 
					
						
							|  |  |  | 	account.AvatarRemoteURL = "" | 
					
						
							|  |  |  | 	account.HeaderMediaAttachmentID = "" | 
					
						
							|  |  |  | 	account.HeaderRemoteURL = "" | 
					
						
							|  |  |  | 	account.Reason = "" | 
					
						
							|  |  |  | 	account.Fields = []gtsmodel.Field{} | 
					
						
							|  |  |  | 	account.HideCollections = true | 
					
						
							|  |  |  | 	account.Discoverable = false | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	account.UpdatedAt = time.Now() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	account.SuspendedAt = time.Now() | 
					
						
							| 
									
										
										
										
											2021-07-06 13:29:11 +02:00
										 |  |  | 	account.SuspensionOrigin = origin | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-25 15:34:33 +02:00
										 |  |  | 	account, err := p.db.UpdateAccount(ctx, account) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2021-07-05 13:23:03 +02:00
										 |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	l.Infof("deleted account with username %s from domain %s", account.Username, account.Domain) | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } |