This commit is contained in:
tsmethurst 2021-06-11 19:40:14 +02:00
commit 6994859d03
4 changed files with 93 additions and 84 deletions

View file

@ -137,7 +137,7 @@ func (f *federatingDB) Create(ctx context.Context, asType vocab.Type) error {
return fmt.Errorf("could not convert Follow to follow request: %s", err) return fmt.Errorf("could not convert Follow to follow request: %s", err)
} }
newID, err := id.NewULIDFromTime(followRequest.CreatedAt) newID, err := id.NewULID()
if err != nil { if err != nil {
return err return err
} }

View file

@ -277,6 +277,14 @@ func (p *processor) dereferenceStatusFields(status *gtsmodel.Status, requestingU
// We should dereference any accounts mentioned here which we don't have in our db yet, by their URI. // We should dereference any accounts mentioned here which we don't have in our db yet, by their URI.
mentions := []string{} mentions := []string{}
for _, m := range status.GTSMentions { for _, m := range status.GTSMentions {
if m.ID == "" {
mID, err := id.NewRandomULID()
if err != nil {
return err
}
m.ID = mID
}
uri, err := url.Parse(m.MentionedAccountURI) uri, err := url.Parse(m.MentionedAccountURI)
if err != nil { if err != nil {
l.Debugf("error parsing mentioned account uri %s: %s", m.MentionedAccountURI, err) l.Debugf("error parsing mentioned account uri %s: %s", m.MentionedAccountURI, err)
@ -308,6 +316,12 @@ func (p *processor) dereferenceStatusFields(status *gtsmodel.Status, requestingU
continue continue
} }
targetAccountID, err := id.NewRandomULID()
if err != nil {
return err
}
targetAccount.ID = targetAccountID
if err := p.db.Put(targetAccount); err != nil { if err := p.db.Put(targetAccount); err != nil {
return fmt.Errorf("db error inserting account with uri %s", uri.String()) return fmt.Errorf("db error inserting account with uri %s", uri.String())
} }

View file

@ -54,16 +54,13 @@ func (p *processor) HomeTimelineGet(authed *oauth.Auth, maxID string, sinceID st
minIDMarker := minID minIDMarker := minID
l.Debugf("\n entering grabloop \n") l.Debugf("\n entering grabloop \n")
grabloop:
for len(apiStatuses) < limit {
l.Debugf("\n querying the db \n") l.Debugf("\n querying the db \n")
gtsStatuses, err := p.db.GetStatusesWhereFollowing(authed.Account.ID, maxIDMarker, sinceIDMarker, minIDMarker, limit, local) gtsStatuses, err := p.db.GetStatusesWhereFollowing(authed.Account.ID, maxIDMarker, sinceIDMarker, minIDMarker, limit, local)
if err != nil { if err != nil {
if _, ok := err.(db.ErrNoEntries); !ok { if _, ok := err.(db.ErrNoEntries); !ok {
return nil, gtserror.NewErrorInternalError(fmt.Errorf("HomeTimelineGet: error getting statuses from db: %s", err)) return nil, gtserror.NewErrorInternalError(fmt.Errorf("HomeTimelineGet: error getting statuses from db: %s", err))
} }
l.Debug("\n breaking from grabloop because no statuses were returned \n")
break grabloop // we just don't have enough statuses left in the db so index what we've got and then bail
} }
for _, gtsStatus := range gtsStatuses { for _, gtsStatus := range gtsStatuses {
@ -125,7 +122,7 @@ grabloop:
if len(apiStatuses) == limit { if len(apiStatuses) == limit {
l.Debugf("\n we have enough statuses, returning \n") l.Debugf("\n we have enough statuses, returning \n")
// we have enough // we have enough
break grabloop break
} }
} }
if len(apiStatuses) != 0 { if len(apiStatuses) != 0 {
@ -137,7 +134,6 @@ grabloop:
} }
} }
} }
}
resp.Statuses = apiStatuses resp.Statuses = apiStatuses

View file

@ -21,7 +21,6 @@ package util
import ( import (
"fmt" "fmt"
"net/url" "net/url"
"strings"
) )
const ( const (
@ -162,47 +161,47 @@ func GenerateURIsForAccount(username string, protocol string, host string) *User
// IsUserPath returns true if the given URL path corresponds to eg /users/example_username // IsUserPath returns true if the given URL path corresponds to eg /users/example_username
func IsUserPath(id *url.URL) bool { func IsUserPath(id *url.URL) bool {
return userPathRegex.MatchString(strings.ToLower(id.Path)) return userPathRegex.MatchString(id.Path)
} }
// IsInboxPath returns true if the given URL path corresponds to eg /users/example_username/inbox // IsInboxPath returns true if the given URL path corresponds to eg /users/example_username/inbox
func IsInboxPath(id *url.URL) bool { func IsInboxPath(id *url.URL) bool {
return inboxPathRegex.MatchString(strings.ToLower(id.Path)) return inboxPathRegex.MatchString(id.Path)
} }
// IsOutboxPath returns true if the given URL path corresponds to eg /users/example_username/outbox // IsOutboxPath returns true if the given URL path corresponds to eg /users/example_username/outbox
func IsOutboxPath(id *url.URL) bool { func IsOutboxPath(id *url.URL) bool {
return outboxPathRegex.MatchString(strings.ToLower(id.Path)) return outboxPathRegex.MatchString(id.Path)
} }
// IsInstanceActorPath returns true if the given URL path corresponds to eg /actors/example_username // IsInstanceActorPath returns true if the given URL path corresponds to eg /actors/example_username
func IsInstanceActorPath(id *url.URL) bool { func IsInstanceActorPath(id *url.URL) bool {
return actorPathRegex.MatchString(strings.ToLower(id.Path)) return actorPathRegex.MatchString(id.Path)
} }
// IsFollowersPath returns true if the given URL path corresponds to eg /users/example_username/followers // IsFollowersPath returns true if the given URL path corresponds to eg /users/example_username/followers
func IsFollowersPath(id *url.URL) bool { func IsFollowersPath(id *url.URL) bool {
return followersPathRegex.MatchString(strings.ToLower(id.Path)) return followersPathRegex.MatchString(id.Path)
} }
// IsFollowingPath returns true if the given URL path corresponds to eg /users/example_username/following // IsFollowingPath returns true if the given URL path corresponds to eg /users/example_username/following
func IsFollowingPath(id *url.URL) bool { func IsFollowingPath(id *url.URL) bool {
return followingPathRegex.MatchString(strings.ToLower(id.Path)) return followingPathRegex.MatchString(id.Path)
} }
// IsLikedPath returns true if the given URL path corresponds to eg /users/example_username/liked // IsLikedPath returns true if the given URL path corresponds to eg /users/example_username/liked
func IsLikedPath(id *url.URL) bool { func IsLikedPath(id *url.URL) bool {
return likedPathRegex.MatchString(strings.ToLower(id.Path)) return likedPathRegex.MatchString(id.Path)
} }
// IsLikePath returns true if the given URL path corresponds to eg /users/example_username/liked/SOME_ULID_OF_A_STATUS // IsLikePath returns true if the given URL path corresponds to eg /users/example_username/liked/SOME_ULID_OF_A_STATUS
func IsLikePath(id *url.URL) bool { func IsLikePath(id *url.URL) bool {
return likePathRegex.MatchString(strings.ToLower(id.Path)) return likePathRegex.MatchString(id.Path)
} }
// IsStatusesPath returns true if the given URL path corresponds to eg /users/example_username/statuses/SOME_ULID_OF_A_STATUS // IsStatusesPath returns true if the given URL path corresponds to eg /users/example_username/statuses/SOME_ULID_OF_A_STATUS
func IsStatusesPath(id *url.URL) bool { func IsStatusesPath(id *url.URL) bool {
return statusesPathRegex.MatchString(strings.ToLower(id.Path)) return statusesPathRegex.MatchString(id.Path)
} }
// ParseStatusesPath returns the username and ulid from a path such as /users/example_username/statuses/SOME_ULID_OF_A_STATUS // ParseStatusesPath returns the username and ulid from a path such as /users/example_username/statuses/SOME_ULID_OF_A_STATUS