mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[chore/bugfix] Refactor ap/extract.go
functions, return URIs more reliably (#1897)
This commit is contained in:
@ -1,13 +1,30 @@
|
||||
// GoToSocial
|
||||
// Copyright (C) GoToSocial Authors admin@gotosocial.org
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
//
|
||||
// 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 typeutils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
|
||||
"github.com/superseriousbusiness/activity/pub"
|
||||
"github.com/superseriousbusiness/activity/streams"
|
||||
"github.com/superseriousbusiness/activity/streams/vocab"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/ap"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/id"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/uris"
|
||||
@ -19,7 +36,7 @@ func (c *converter) WrapPersonInUpdate(person vocab.ActivityStreamsPerson, origi
|
||||
// set the actor
|
||||
actorURI, err := url.Parse(originAccount.URI)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("WrapPersonInUpdate: error parsing url %s: %s", originAccount.URI, err)
|
||||
return nil, gtserror.Newf("error parsing url %s: %w", originAccount.URI, err)
|
||||
}
|
||||
actorProp := streams.NewActivityStreamsActorProperty()
|
||||
actorProp.AppendIRI(actorURI)
|
||||
@ -35,7 +52,7 @@ func (c *converter) WrapPersonInUpdate(person vocab.ActivityStreamsPerson, origi
|
||||
idString := uris.GenerateURIForUpdate(originAccount.Username, newID)
|
||||
idURI, err := url.Parse(idString)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("WrapPersonInUpdate: error parsing url %s: %s", idString, err)
|
||||
return nil, gtserror.Newf("error parsing url %s: %w", idString, err)
|
||||
}
|
||||
idProp := streams.NewJSONLDIdProperty()
|
||||
idProp.SetIRI(idURI)
|
||||
@ -49,7 +66,7 @@ func (c *converter) WrapPersonInUpdate(person vocab.ActivityStreamsPerson, origi
|
||||
// to should be public
|
||||
toURI, err := url.Parse(pub.PublicActivityPubIRI)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("WrapPersonInUpdate: error parsing url %s: %s", pub.PublicActivityPubIRI, err)
|
||||
return nil, gtserror.Newf("error parsing url %s: %w", pub.PublicActivityPubIRI, err)
|
||||
}
|
||||
toProp := streams.NewActivityStreamsToProperty()
|
||||
toProp.AppendIRI(toURI)
|
||||
@ -58,7 +75,7 @@ func (c *converter) WrapPersonInUpdate(person vocab.ActivityStreamsPerson, origi
|
||||
// bcc followers
|
||||
followersURI, err := url.Parse(originAccount.FollowersURI)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("WrapPersonInUpdate: error parsing url %s: %s", originAccount.FollowersURI, err)
|
||||
return nil, gtserror.Newf("error parsing url %s: %w", originAccount.FollowersURI, err)
|
||||
}
|
||||
bccProp := streams.NewActivityStreamsBccProperty()
|
||||
bccProp.AppendIRI(followersURI)
|
||||
@ -81,7 +98,7 @@ func (c *converter) WrapNoteInCreate(note vocab.ActivityStreamsNote, objectIRIOn
|
||||
|
||||
// ID property
|
||||
idProp := streams.NewJSONLDIdProperty()
|
||||
createID := fmt.Sprintf("%s/activity", note.GetJSONLDId().GetIRI().String())
|
||||
createID := note.GetJSONLDId().GetIRI().String() + "/activity"
|
||||
createIDIRI, err := url.Parse(createID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -91,9 +108,9 @@ func (c *converter) WrapNoteInCreate(note vocab.ActivityStreamsNote, objectIRIOn
|
||||
|
||||
// Actor Property
|
||||
actorProp := streams.NewActivityStreamsActorProperty()
|
||||
actorIRI, err := ap.ExtractAttributedTo(note)
|
||||
actorIRI, err := ap.ExtractAttributedToURI(note)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("WrapNoteInCreate: couldn't extract AttributedTo: %s", err)
|
||||
return nil, gtserror.Newf("couldn't extract AttributedTo: %w", err)
|
||||
}
|
||||
actorProp.AppendIRI(actorIRI)
|
||||
create.SetActivityStreamsActor(actorProp)
|
||||
@ -102,27 +119,25 @@ func (c *converter) WrapNoteInCreate(note vocab.ActivityStreamsNote, objectIRIOn
|
||||
publishedProp := streams.NewActivityStreamsPublishedProperty()
|
||||
published, err := ap.ExtractPublished(note)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("WrapNoteInCreate: couldn't extract Published: %s", err)
|
||||
return nil, gtserror.Newf("couldn't extract Published: %w", err)
|
||||
}
|
||||
publishedProp.Set(published)
|
||||
create.SetActivityStreamsPublished(publishedProp)
|
||||
|
||||
// To Property
|
||||
toProp := streams.NewActivityStreamsToProperty()
|
||||
tos, err := ap.ExtractTos(note)
|
||||
if err == nil {
|
||||
for _, to := range tos {
|
||||
toProp.AppendIRI(to)
|
||||
if toURIs := ap.ExtractToURIs(note); len(toURIs) != 0 {
|
||||
for _, toURI := range toURIs {
|
||||
toProp.AppendIRI(toURI)
|
||||
}
|
||||
create.SetActivityStreamsTo(toProp)
|
||||
}
|
||||
|
||||
// Cc Property
|
||||
ccProp := streams.NewActivityStreamsCcProperty()
|
||||
ccs, err := ap.ExtractCCs(note)
|
||||
if err == nil {
|
||||
for _, cc := range ccs {
|
||||
ccProp.AppendIRI(cc)
|
||||
if ccURIs := ap.ExtractCcURIs(note); len(ccURIs) != 0 {
|
||||
for _, ccURI := range ccURIs {
|
||||
ccProp.AppendIRI(ccURI)
|
||||
}
|
||||
create.SetActivityStreamsCc(ccProp)
|
||||
}
|
||||
|
Reference in New Issue
Block a user