diff --git a/internal/processing/account/delete.go b/internal/processing/account/delete.go index fffc92750..b33923090 100644 --- a/internal/processing/account/delete.go +++ b/internal/processing/account/delete.go @@ -21,5 +21,25 @@ package account import "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" func (p *processor) Delete(account *gtsmodel.Account) error { + // 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 follow requests + // 7. Delete account's media attachments + // 8. Delete account's mentions + // 9. Delete account's notifications + // 10. Delete account's polls + // 11. Delete account's statuses + // 12. Delete account's bookmarks + // 13. Delete account's faves + // 14. Delete account's mutes + // 15. Delete account's streams + // 16. Delete account's tags + // 17. Delete account's user + // 18. Delete account's timeline + return nil } diff --git a/internal/processing/fromclientapi.go b/internal/processing/fromclientapi.go index 180af04fe..64b7f296b 100644 --- a/internal/processing/fromclientapi.go +++ b/internal/processing/fromclientapi.go @@ -165,13 +165,36 @@ func (p *processor) processFromClientAPI(clientMsg gtsmodel.FromClientAPI) error return err } - return p.federateStatusDelete(statusToDelete, clientMsg.OriginAccount) + return p.federateStatusDelete(statusToDelete) + case gtsmodel.ActivityStreamsProfile, gtsmodel.ActivityStreamsPerson: + // DELETE ACCOUNT/PROFILE + accountToDelete, ok := clientMsg.GTSModel.(*gtsmodel.Account) + if !ok { + return errors.New("account was not parseable as *gtsmodel.Account") + } + + return p.accountProcessor.Delete(accountToDelete) } } return nil } +// TODO: move all the below functions into federation.Federator + func (p *processor) federateStatus(status *gtsmodel.Status) error { + if status.GTSAuthorAccount == nil { + a := >smodel.Account{} + if err := p.db.GetByID(status.AccountID, a); err != nil { + return fmt.Errorf("federateStatus: error fetching status author account: %s", err) + } + status.GTSAuthorAccount = a + } + + // do nothing if this isn't our status + if status.GTSAuthorAccount.Domain != "" { + return nil + } + asStatus, err := p.tc.StatusToAS(status) if err != nil { return fmt.Errorf("federateStatus: error converting status to as format: %s", err) @@ -186,20 +209,33 @@ func (p *processor) federateStatus(status *gtsmodel.Status) error { return err } -func (p *processor) federateStatusDelete(status *gtsmodel.Status, originAccount *gtsmodel.Account) error { +func (p *processor) federateStatusDelete(status *gtsmodel.Status) error { + if status.GTSAuthorAccount == nil { + a := >smodel.Account{} + if err := p.db.GetByID(status.AccountID, a); err != nil { + return fmt.Errorf("federateStatus: error fetching status author account: %s", err) + } + status.GTSAuthorAccount = a + } + + // do nothing if this isn't our status + if status.GTSAuthorAccount.Domain != "" { + return nil + } + asStatus, err := p.tc.StatusToAS(status) if err != nil { return fmt.Errorf("federateStatusDelete: error converting status to as format: %s", err) } - outboxIRI, err := url.Parse(originAccount.OutboxURI) + outboxIRI, err := url.Parse(status.GTSAuthorAccount.OutboxURI) if err != nil { - return fmt.Errorf("federateStatusDelete: error parsing outboxURI %s: %s", originAccount.OutboxURI, err) + return fmt.Errorf("federateStatusDelete: error parsing outboxURI %s: %s", status.GTSAuthorAccount.OutboxURI, err) } - actorIRI, err := url.Parse(originAccount.URI) + actorIRI, err := url.Parse(status.GTSAuthorAccount.URI) if err != nil { - return fmt.Errorf("federateStatusDelete: error parsing actorIRI %s: %s", originAccount.URI, err) + return fmt.Errorf("federateStatusDelete: error parsing actorIRI %s: %s", status.GTSAuthorAccount.URI, err) } // create a delete and set the appropriate actor on it diff --git a/internal/processing/processor.go b/internal/processing/processor.go index 40f456d75..ffc3ed156 100644 --- a/internal/processing/processor.go +++ b/internal/processing/processor.go @@ -261,14 +261,18 @@ func (p *processor) Start() error { select { case clientMsg := <-p.fromClientAPI: p.log.Infof("received message FROM client API: %+v", clientMsg) - if err := p.processFromClientAPI(clientMsg); err != nil { - p.log.Error(err) - } + go func() { + if err := p.processFromClientAPI(clientMsg); err != nil { + p.log.Error(err) + } + }() case federatorMsg := <-p.fromFederator: p.log.Infof("received message FROM federator: %+v", federatorMsg) - if err := p.processFromFederator(federatorMsg); err != nil { - p.log.Error(err) - } + go func() { + if err := p.processFromFederator(federatorMsg); err != nil { + p.log.Error(err) + } + }() case <-p.stop: break DistLoop }