120 lines
4.4 KiB
Go
120 lines
4.4 KiB
Go
package jsonapis
|
|
|
|
import "time"
|
|
|
|
// thank fuck for https://mholt.github.io/json-to-go/ otherwise
|
|
// this would have been a giant pain in the dick
|
|
|
|
// MastodonIndexResponse is the json api shape from the mastodon instance
|
|
// indexer
|
|
type MastodonIndexResponse struct {
|
|
Instances []struct {
|
|
ID string `json:"_id"`
|
|
AddedAt time.Time `json:"addedAt"`
|
|
Name string `json:"name"`
|
|
Downchecks int `json:"downchecks"`
|
|
Upchecks int `json:"upchecks"`
|
|
HTTPSRank interface{} `json:"https_rank"`
|
|
HTTPSScore int `json:"https_score"`
|
|
ObsRank string `json:"obs_rank"`
|
|
ObsScore int `json:"obs_score"`
|
|
Ipv6 bool `json:"ipv6"`
|
|
Up bool `json:"up"`
|
|
Users int `json:"users"`
|
|
Statuses string `json:"statuses"`
|
|
Connections int `json:"connections"`
|
|
OpenRegistrations bool `json:"openRegistrations"`
|
|
Uptime float64 `json:"uptime"`
|
|
Version string `json:"version"`
|
|
VersionScore int `json:"version_score"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
CheckedAt time.Time `json:"checkedAt"`
|
|
Dead bool `json:"dead"`
|
|
ObsDate time.Time `json:"obs_date"`
|
|
Second60 int `json:"second60"`
|
|
Second int `json:"second"`
|
|
ActiveUserCount interface{} `json:"active_user_count,omitempty"`
|
|
FirstUserCreatedAt interface{} `json:"first_user_created_at,omitempty"`
|
|
Thumbnail string `json:"thumbnail"`
|
|
ApUpdatedAt time.Time `json:"apUpdatedAt"`
|
|
Second5 int `json:"second5"`
|
|
RawVersion string `json:"raw_version"`
|
|
ActivityPrevw struct {
|
|
Statuses int `json:"statuses"`
|
|
Logins int `json:"logins"`
|
|
Registrations int `json:"registrations"`
|
|
} `json:"activity_prevw,omitempty"`
|
|
Mastodon bool `json:"mastodon"`
|
|
UptimeStr string `json:"uptime_str"`
|
|
Score int `json:"score"`
|
|
ScoreStr string `json:"score_str"`
|
|
} `json:"instances"`
|
|
}
|
|
|
|
// PleromaIndexResponse is the json api shape from the pleroma instance
|
|
// indexer
|
|
type PleromaIndexResponse []struct {
|
|
Domain string `json:"domain"`
|
|
Title string `json:"title"`
|
|
Thumbnail string `json:"thumbnail"`
|
|
Registration bool `json:"registration"`
|
|
Chat bool `json:"chat"`
|
|
Gopher bool `json:"gopher"`
|
|
WhoToFollow bool `json:"who_to_follow"`
|
|
MediaProxy bool `json:"media_proxy"`
|
|
ScopeOptions bool `json:"scope_options"`
|
|
AccountActivationRequired bool `json:"account_activation_required"`
|
|
TextLimit int `json:"text_limit"`
|
|
}
|
|
|
|
// NodeInfoVersionTwoSchema is the json format of nodeinfo 2.0
|
|
type NodeInfoVersionTwoSchema struct {
|
|
Version string `json:"version"`
|
|
Software struct {
|
|
Name string `json:"name"`
|
|
Version string `json:"version"`
|
|
} `json:"software"`
|
|
Protocols []string `json:"protocols"`
|
|
Usage struct {
|
|
Users struct {
|
|
Total int `json:"total"`
|
|
ActiveMonth int `json:"activeMonth"`
|
|
ActiveHalfyear int `json:"activeHalfyear"`
|
|
} `json:"users"`
|
|
LocalPosts int `json:"localPosts"`
|
|
} `json:"usage"`
|
|
OpenRegistrations bool `json:"openRegistrations"`
|
|
}
|
|
|
|
// NodeInfoWellKnownResponse is the json format of the nodeinfo schema
|
|
type NodeInfoWellKnownResponse struct {
|
|
Links []struct {
|
|
Rel string `json:"rel"`
|
|
Href string `json:"href"`
|
|
} `json:"links"`
|
|
}
|
|
|
|
// APISerializedToot is a partial shape of the json serialized form of a
|
|
// toot from the mastodon api (also used by pleroma). We save the original
|
|
// json from the server though so this is just a minimal subset that we need
|
|
// to deserialize for purposes of this indexer app.
|
|
type APISerializedToot struct {
|
|
Account struct {
|
|
Acct string `json:"acct"`
|
|
ID string `json:"id"`
|
|
URL string `json:"url"`
|
|
Username string `json:"username"`
|
|
} `json:"account"`
|
|
Content string `json:"content"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
ID string `json:"id"`
|
|
Mentions []struct {
|
|
Acct string `json:"acct"`
|
|
ID string `json:"id"`
|
|
URL string `json:"url"`
|
|
Username string `json:"username"`
|
|
} `json:"mentions"`
|
|
URI string `json:"uri"`
|
|
URL string `json:"url"`
|
|
}
|