diff options
author | 2021-07-11 16:22:21 +0200 | |
---|---|---|
committer | 2021-07-11 16:22:21 +0200 | |
commit | 846057f0d696fded87d105dec1245e9ba32763ce (patch) | |
tree | 9a4914c07bcf189a3eea0a2c091567c56cdf4963 /internal/typeutils/internaltoas.go | |
parent | favourites GET implementation (#95) (diff) | |
download | gotosocial-846057f0d696fded87d105dec1245e9ba32763ce.tar.xz |
Block/unblock (#96)
* remote + local block logic, incl. federation
* improve blocking stuff
* fiddle with display of blocked profiles
* go fmt
Diffstat (limited to 'internal/typeutils/internaltoas.go')
-rw-r--r-- | internal/typeutils/internaltoas.go | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/internal/typeutils/internaltoas.go b/internal/typeutils/internaltoas.go index 1760b8731..809cedc45 100644 --- a/internal/typeutils/internaltoas.go +++ b/internal/typeutils/internaltoas.go @@ -780,3 +780,73 @@ func (c *converter) BoostToAS(boostWrapperStatus *gtsmodel.Status, boostingAccou return announce, nil } + +/* + we want to end up with something like this: + + { + "@context": "https://www.w3.org/ns/activitystreams", + "actor": "https://example.org/users/some_user", + "id":"https://example.org/users/some_user/blocks/SOME_ULID_OF_A_BLOCK", + "object":"https://some_other.instance/users/some_other_user", + "type":"Block" + } +*/ +func (c *converter) BlockToAS(b *gtsmodel.Block) (vocab.ActivityStreamsBlock, error) { + if b.Account == nil { + a := >smodel.Account{} + if err := c.db.GetByID(b.AccountID, a); err != nil { + return nil, fmt.Errorf("BlockToAS: error getting block account from database: %s", err) + } + b.Account = a + } + + if b.TargetAccount == nil { + a := >smodel.Account{} + if err := c.db.GetByID(b.TargetAccountID, a); err != nil { + return nil, fmt.Errorf("BlockToAS: error getting block target account from database: %s", err) + } + b.TargetAccount = a + } + + // create the block + block := streams.NewActivityStreamsBlock() + + // set the actor property to the block-ing account's URI + actorProp := streams.NewActivityStreamsActorProperty() + actorIRI, err := url.Parse(b.Account.URI) + if err != nil { + return nil, fmt.Errorf("BlockToAS: error parsing uri %s: %s", b.Account.URI, err) + } + actorProp.AppendIRI(actorIRI) + block.SetActivityStreamsActor(actorProp) + + // set the ID property to the blocks's URI + idProp := streams.NewJSONLDIdProperty() + idIRI, err := url.Parse(b.URI) + if err != nil { + return nil, fmt.Errorf("BlockToAS: error parsing uri %s: %s", b.URI, err) + } + idProp.Set(idIRI) + block.SetJSONLDId(idProp) + + // set the object property to the target account's URI + objectProp := streams.NewActivityStreamsObjectProperty() + targetIRI, err := url.Parse(b.TargetAccount.URI) + if err != nil { + return nil, fmt.Errorf("BlockToAS: error parsing uri %s: %s", b.TargetAccount.URI, err) + } + objectProp.AppendIRI(targetIRI) + block.SetActivityStreamsObject(objectProp) + + // set the TO property to the target account's IRI + toProp := streams.NewActivityStreamsToProperty() + toIRI, err := url.Parse(b.TargetAccount.URI) + if err != nil { + return nil, fmt.Errorf("BlockToAS: error parsing uri %s: %s", b.TargetAccount.URI, err) + } + toProp.AppendIRI(toIRI) + block.SetActivityStreamsTo(toProp) + + return block, nil +} |