mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[chore] reformat GetAccount() functionality, support updating accounts based on last_fetch (#1411)
* reformat GetAccount() functionality, and add UpdateAccount() function. * use fetched_at instead of last_webfingered_at * catch local "not found" errors. small formatting / error string changes * remove now unused error type * return nil when wrapping nil error * update expected error messages * return correct url for foss satan webfinger * add AP model for Some_User * normalize local domain * return notretrievable where appropriate * expose NewErrNotRetrievable * ensure webfinger for new accounts searched by uri * update local account short circuit * allow enrich to fail for already-known accounts * remove unused LastWebfingeredAt * expose test maps on mock http client * update Update test * reformat GetAccount() functionality, and add UpdateAccount() function. * use fetched_at instead of last_webfingered_at * catch local "not found" errors. small formatting / error string changes * remove nil error checks (we shouldn't be passing nil errors to newError() initializers) * remove mutex unlock on transport init fail (it hasn't yet been locked!) * woops add back the error wrapping to use ErrNotRetrievable * caches were never being started... 🙈 --------- Signed-off-by: kim <grufwub@gmail.com> Co-authored-by: tsmethurst <tobi.smethurst@protonmail.com>
This commit is contained in:
@@ -34,7 +34,7 @@ func InitTestConfig() {
|
||||
}
|
||||
|
||||
var testDefaults = config.Configuration{
|
||||
LogLevel: "trace",
|
||||
LogLevel: "info",
|
||||
LogDbQueries: true,
|
||||
ApplicationName: "gotosocial",
|
||||
LandingPageUser: "",
|
||||
|
@@ -335,7 +335,7 @@ func NewTestAccounts() map[string]*gtsmodel.Account {
|
||||
URI: "http://localhost:8080/users/localhost:8080",
|
||||
URL: "http://localhost:8080/@localhost:8080",
|
||||
PublicKeyURI: "http://localhost:8080/users/localhost:8080#main-key",
|
||||
LastWebfingeredAt: time.Time{},
|
||||
FetchedAt: time.Time{},
|
||||
InboxURI: "http://localhost:8080/users/localhost:8080/inbox",
|
||||
OutboxURI: "http://localhost:8080/users/localhost:8080/outbox",
|
||||
FollowersURI: "http://localhost:8080/users/localhost:8080/followers",
|
||||
@@ -373,7 +373,7 @@ func NewTestAccounts() map[string]*gtsmodel.Account {
|
||||
Language: "en",
|
||||
URI: "http://localhost:8080/users/weed_lord420",
|
||||
URL: "http://localhost:8080/@weed_lord420",
|
||||
LastWebfingeredAt: time.Time{},
|
||||
FetchedAt: time.Time{},
|
||||
InboxURI: "http://localhost:8080/users/weed_lord420/inbox",
|
||||
OutboxURI: "http://localhost:8080/users/weed_lord420/outbox",
|
||||
FollowersURI: "http://localhost:8080/users/weed_lord420/followers",
|
||||
@@ -413,7 +413,7 @@ func NewTestAccounts() map[string]*gtsmodel.Account {
|
||||
URI: "http://localhost:8080/users/admin",
|
||||
URL: "http://localhost:8080/@admin",
|
||||
PublicKeyURI: "http://localhost:8080/users/admin#main-key",
|
||||
LastWebfingeredAt: time.Time{},
|
||||
FetchedAt: time.Time{},
|
||||
InboxURI: "http://localhost:8080/users/admin/inbox",
|
||||
OutboxURI: "http://localhost:8080/users/admin/outbox",
|
||||
FollowersURI: "http://localhost:8080/users/admin/followers",
|
||||
@@ -452,7 +452,7 @@ func NewTestAccounts() map[string]*gtsmodel.Account {
|
||||
Language: "en",
|
||||
URI: "http://localhost:8080/users/the_mighty_zork",
|
||||
URL: "http://localhost:8080/@the_mighty_zork",
|
||||
LastWebfingeredAt: time.Time{},
|
||||
FetchedAt: time.Time{},
|
||||
InboxURI: "http://localhost:8080/users/the_mighty_zork/inbox",
|
||||
OutboxURI: "http://localhost:8080/users/the_mighty_zork/outbox",
|
||||
FollowersURI: "http://localhost:8080/users/the_mighty_zork/followers",
|
||||
@@ -492,7 +492,7 @@ func NewTestAccounts() map[string]*gtsmodel.Account {
|
||||
Language: "en",
|
||||
URI: "http://localhost:8080/users/1happyturtle",
|
||||
URL: "http://localhost:8080/@1happyturtle",
|
||||
LastWebfingeredAt: time.Time{},
|
||||
FetchedAt: time.Time{},
|
||||
InboxURI: "http://localhost:8080/users/1happyturtle/inbox",
|
||||
OutboxURI: "http://localhost:8080/users/1happyturtle/outbox",
|
||||
FollowersURI: "http://localhost:8080/users/1happyturtle/followers",
|
||||
@@ -527,7 +527,7 @@ func NewTestAccounts() map[string]*gtsmodel.Account {
|
||||
Language: "en",
|
||||
URI: "http://fossbros-anonymous.io/users/foss_satan",
|
||||
URL: "http://fossbros-anonymous.io/@foss_satan",
|
||||
LastWebfingeredAt: time.Time{},
|
||||
FetchedAt: time.Time{},
|
||||
InboxURI: "http://fossbros-anonymous.io/users/foss_satan/inbox",
|
||||
SharedInboxURI: StringPtr("http://fossbros-anonymous.io/inbox"),
|
||||
OutboxURI: "http://fossbros-anonymous.io/users/foss_satan/outbox",
|
||||
@@ -563,7 +563,7 @@ func NewTestAccounts() map[string]*gtsmodel.Account {
|
||||
Language: "en",
|
||||
URI: "http://example.org/users/Some_User",
|
||||
URL: "http://example.org/@Some_User",
|
||||
LastWebfingeredAt: time.Time{},
|
||||
FetchedAt: time.Time{},
|
||||
InboxURI: "http://example.org/users/Some_User/inbox",
|
||||
SharedInboxURI: StringPtr(""),
|
||||
OutboxURI: "http://example.org/users/Some_User/outbox",
|
||||
@@ -599,7 +599,7 @@ func NewTestAccounts() map[string]*gtsmodel.Account {
|
||||
Language: "en",
|
||||
URI: "http://thequeenisstillalive.technology/users/her_fuckin_maj",
|
||||
URL: "http://thequeenisstillalive.technology/@her_fuckin_maj",
|
||||
LastWebfingeredAt: time.Time{},
|
||||
FetchedAt: time.Time{},
|
||||
InboxURI: "http://thequeenisstillalive.technology/users/her_fuckin_maj/inbox",
|
||||
SharedInboxURI: StringPtr(""),
|
||||
OutboxURI: "http://thequeenisstillalive.technology/users/her_fuckin_maj/outbox",
|
||||
@@ -2137,6 +2137,12 @@ func NewTestFediPeople() map[string]vocab.ActivityStreamsPerson {
|
||||
}
|
||||
turnipLover6969Pub := &turnipLover6969Priv.PublicKey
|
||||
|
||||
someUserPriv, err := rsa.GenerateKey(rand.Reader, 2048)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
someUserPub := &someUserPriv.PublicKey
|
||||
|
||||
return map[string]vocab.ActivityStreamsPerson{
|
||||
"https://unknown-instance.com/users/brand_new_person": newAPPerson(
|
||||
URLMustParse("https://unknown-instance.com/users/brand_new_person"),
|
||||
@@ -2180,6 +2186,27 @@ func NewTestFediPeople() map[string]vocab.ActivityStreamsPerson {
|
||||
"image/png",
|
||||
false,
|
||||
),
|
||||
"https://example.org/users/Some_User": newAPPerson(
|
||||
URLMustParse("https://example.org/users/Some_User"),
|
||||
URLMustParse("https://example.org/users/Some_User/following"),
|
||||
URLMustParse("https://example.org/users/Some_User/followers"),
|
||||
URLMustParse("https://example.org/users/Some_User/inbox"),
|
||||
URLMustParse("https://example.org/sharedInbox"),
|
||||
URLMustParse("https://example.org/users/Some_User/outbox"),
|
||||
URLMustParse("https://example.org/users/Some_User/collections/featured"),
|
||||
"Some_User",
|
||||
"just some user, don't mind me",
|
||||
"Peepee poo poo",
|
||||
URLMustParse("https://example.org/@Some_User"),
|
||||
true,
|
||||
URLMustParse("https://example.org/users/Some_User#main-key"),
|
||||
someUserPub,
|
||||
nil,
|
||||
"image/jpeg",
|
||||
nil,
|
||||
"image/png",
|
||||
false,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -60,13 +60,13 @@ func NewTestTransportController(client pub.HttpClient, db db.DB, fedWorker *conc
|
||||
type MockHTTPClient struct {
|
||||
do func(req *http.Request) (*http.Response, error)
|
||||
|
||||
testRemoteStatuses map[string]vocab.ActivityStreamsNote
|
||||
testRemotePeople map[string]vocab.ActivityStreamsPerson
|
||||
testRemoteGroups map[string]vocab.ActivityStreamsGroup
|
||||
testRemoteServices map[string]vocab.ActivityStreamsService
|
||||
testRemoteAttachments map[string]RemoteAttachmentFile
|
||||
testRemoteEmojis map[string]vocab.TootEmoji
|
||||
testTombstones map[string]*gtsmodel.Tombstone
|
||||
TestRemoteStatuses map[string]vocab.ActivityStreamsNote
|
||||
TestRemotePeople map[string]vocab.ActivityStreamsPerson
|
||||
TestRemoteGroups map[string]vocab.ActivityStreamsGroup
|
||||
TestRemoteServices map[string]vocab.ActivityStreamsService
|
||||
TestRemoteAttachments map[string]RemoteAttachmentFile
|
||||
TestRemoteEmojis map[string]vocab.TootEmoji
|
||||
TestTombstones map[string]*gtsmodel.Tombstone
|
||||
|
||||
SentMessages sync.Map
|
||||
}
|
||||
@@ -88,13 +88,13 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
|
||||
return mockHTTPClient
|
||||
}
|
||||
|
||||
mockHTTPClient.testRemoteStatuses = NewTestFediStatuses()
|
||||
mockHTTPClient.testRemotePeople = NewTestFediPeople()
|
||||
mockHTTPClient.testRemoteGroups = NewTestFediGroups()
|
||||
mockHTTPClient.testRemoteServices = NewTestFediServices()
|
||||
mockHTTPClient.testRemoteAttachments = NewTestFediAttachments(relativeMediaPath)
|
||||
mockHTTPClient.testRemoteEmojis = NewTestFediEmojis()
|
||||
mockHTTPClient.testTombstones = NewTestTombstones()
|
||||
mockHTTPClient.TestRemoteStatuses = NewTestFediStatuses()
|
||||
mockHTTPClient.TestRemotePeople = NewTestFediPeople()
|
||||
mockHTTPClient.TestRemoteGroups = NewTestFediGroups()
|
||||
mockHTTPClient.TestRemoteServices = NewTestFediServices()
|
||||
mockHTTPClient.TestRemoteAttachments = NewTestFediAttachments(relativeMediaPath)
|
||||
mockHTTPClient.TestRemoteEmojis = NewTestFediEmojis()
|
||||
mockHTTPClient.TestTombstones = NewTestTombstones()
|
||||
|
||||
mockHTTPClient.do = func(req *http.Request) (*http.Response, error) {
|
||||
responseCode := http.StatusNotFound
|
||||
@@ -123,7 +123,7 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
|
||||
responseContentLength = len(responseBytes)
|
||||
} else if strings.Contains(req.URL.String(), ".well-known/webfinger") {
|
||||
responseCode, responseBytes, responseContentType, responseContentLength = WebfingerResponse(req)
|
||||
} else if note, ok := mockHTTPClient.testRemoteStatuses[req.URL.String()]; ok {
|
||||
} else if note, ok := mockHTTPClient.TestRemoteStatuses[req.URL.String()]; ok {
|
||||
// the request is for a note that we have stored
|
||||
noteI, err := streams.Serialize(note)
|
||||
if err != nil {
|
||||
@@ -137,7 +137,7 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
|
||||
responseBytes = noteJSON
|
||||
responseContentType = applicationActivityJSON
|
||||
responseContentLength = len(noteJSON)
|
||||
} else if person, ok := mockHTTPClient.testRemotePeople[req.URL.String()]; ok {
|
||||
} else if person, ok := mockHTTPClient.TestRemotePeople[req.URL.String()]; ok {
|
||||
// the request is for a person that we have stored
|
||||
personI, err := streams.Serialize(person)
|
||||
if err != nil {
|
||||
@@ -151,7 +151,7 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
|
||||
responseBytes = personJSON
|
||||
responseContentType = applicationActivityJSON
|
||||
responseContentLength = len(personJSON)
|
||||
} else if group, ok := mockHTTPClient.testRemoteGroups[req.URL.String()]; ok {
|
||||
} else if group, ok := mockHTTPClient.TestRemoteGroups[req.URL.String()]; ok {
|
||||
// the request is for a person that we have stored
|
||||
groupI, err := streams.Serialize(group)
|
||||
if err != nil {
|
||||
@@ -165,7 +165,7 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
|
||||
responseBytes = groupJSON
|
||||
responseContentType = applicationActivityJSON
|
||||
responseContentLength = len(groupJSON)
|
||||
} else if service, ok := mockHTTPClient.testRemoteServices[req.URL.String()]; ok {
|
||||
} else if service, ok := mockHTTPClient.TestRemoteServices[req.URL.String()]; ok {
|
||||
serviceI, err := streams.Serialize(service)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@@ -178,7 +178,7 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
|
||||
responseBytes = serviceJSON
|
||||
responseContentType = applicationActivityJSON
|
||||
responseContentLength = len(serviceJSON)
|
||||
} else if emoji, ok := mockHTTPClient.testRemoteEmojis[req.URL.String()]; ok {
|
||||
} else if emoji, ok := mockHTTPClient.TestRemoteEmojis[req.URL.String()]; ok {
|
||||
emojiI, err := streams.Serialize(emoji)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@@ -191,12 +191,12 @@ func NewMockHTTPClient(do func(req *http.Request) (*http.Response, error), relat
|
||||
responseBytes = emojiJSON
|
||||
responseContentType = applicationActivityJSON
|
||||
responseContentLength = len(emojiJSON)
|
||||
} else if attachment, ok := mockHTTPClient.testRemoteAttachments[req.URL.String()]; ok {
|
||||
} else if attachment, ok := mockHTTPClient.TestRemoteAttachments[req.URL.String()]; ok {
|
||||
responseCode = http.StatusOK
|
||||
responseBytes = attachment.Data
|
||||
responseContentType = attachment.ContentType
|
||||
responseContentLength = len(attachment.Data)
|
||||
} else if _, ok := mockHTTPClient.testTombstones[req.URL.String()]; ok {
|
||||
} else if _, ok := mockHTTPClient.TestTombstones[req.URL.String()]; ok {
|
||||
responseCode = http.StatusGone
|
||||
responseBytes = []byte{}
|
||||
responseContentType = "text/html"
|
||||
@@ -278,7 +278,7 @@ func WebfingerResponse(req *http.Request) (responseCode int, responseBytes []byt
|
||||
{
|
||||
Rel: "self",
|
||||
Type: applicationActivityJSON,
|
||||
Href: "https://fossbros-anonymous.io/users/foss_satan",
|
||||
Href: "http://fossbros-anonymous.io/users/foss_satan",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
Reference in New Issue
Block a user