friend/profile.go

71 lines
1.8 KiB
Go
Raw Permalink Normal View History

2022-11-11 07:07:50 +00:00
package main
import "fmt"
type Actor struct {
ID string `json:"id"`
Type string `json:"type"`
URL string `json:"url"`
Name string `json:"name"`
PreferredUsername string `json:"preferredUsername,omitempty"`
Summary string `json:"summary,omitempty"`
PublicKey PublicKey `json:"publicKey,omitempty"`
Inbox string `json:"inbox,omitempty"`
2022-11-12 05:06:12 +00:00
Outbox string `json:"outbox,omitempty"`
2022-11-11 07:07:50 +00:00
Followers string `json:"followers,omitempty"`
Following string `json:"following,omitempty"`
Icon *Link `json:"icon,omitempty"`
Image *Link `json:"image,omitempty"`
Endpoints map[string]string `json:"endpoints,omitempty"`
}
type Link struct {
Type string `json:"type"`
MediaType string `json:"mediaType"`
URL string `json:"url"`
}
type PublicKey struct {
ID string `json:"id"`
Owner string `json:"owner"`
PublicKeyPem string `json:"publicKeyPem"`
}
type ProfileProvider struct {
2022-11-12 05:06:12 +00:00
username string
domain string
2022-11-11 07:07:50 +00:00
}
2022-11-12 05:06:12 +00:00
func NewProfileProvider(username, domain string) (*ProfileProvider, error) {
2022-11-11 07:07:50 +00:00
return &ProfileProvider{
2022-11-12 05:06:12 +00:00
username: username,
domain: domain,
2022-11-11 07:07:50 +00:00
}, nil
}
2022-11-12 05:06:12 +00:00
func (pp *ProfileProvider) Get() (*Actor, error) {
userRoot := fmt.Sprintf("https://%s/users/%s", pp.domain, pp.username)
2022-11-11 07:07:50 +00:00
return &Actor{
ID: userRoot,
Type: "Person",
2022-11-12 05:06:12 +00:00
URL: fmt.Sprintf("https://%s/@%s", pp.domain, pp.username),
Name: pp.username,
2022-11-11 07:07:50 +00:00
Inbox: userRoot + "/inbox",
Outbox: userRoot + "/outbox",
Followers: userRoot + "/followers",
Following: userRoot + "/following",
Endpoints: map[string]string{
"sharedInbox": fmt.Sprintf("https://%s/inbox", pp.domain),
},
PublicKey: PublicKey{
ID: userRoot + "#main-key",
Owner: userRoot,
PublicKeyPem: "-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----",
},
}, nil
}