mirror of
https://github.com/versia-pub/versia-go.git
synced 2026-03-13 04:29:15 +01:00
refactor!: working WD-4 user discovery
This commit is contained in:
parent
cf0053312d
commit
61891d891a
91 changed files with 12768 additions and 5562 deletions
96
internal/entity/server_metadata.go
Normal file
96
internal/entity/server_metadata.go
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
package entity
|
||||
|
||||
import (
|
||||
"github.com/lysand-org/versia-go/ent"
|
||||
"github.com/lysand-org/versia-go/pkg/lysand"
|
||||
versiacrypto "github.com/lysand-org/versia-go/pkg/lysand/crypto"
|
||||
)
|
||||
|
||||
type InstanceMetadata struct {
|
||||
*ent.InstanceMetadata
|
||||
|
||||
Moderators []User
|
||||
ModeratorsCollection *lysand.URL
|
||||
|
||||
Admins []User
|
||||
AdminsCollection *lysand.URL
|
||||
|
||||
SharedInbox *lysand.URL
|
||||
|
||||
PublicKey *lysand.SPKIPublicKey
|
||||
|
||||
Logo *lysand.ImageContentTypeMap
|
||||
Banner *lysand.ImageContentTypeMap
|
||||
}
|
||||
|
||||
func NewInstanceMetadata(dbData *ent.InstanceMetadata) (*InstanceMetadata, error) {
|
||||
n := &InstanceMetadata{
|
||||
InstanceMetadata: dbData,
|
||||
PublicKey: &lysand.SPKIPublicKey{},
|
||||
}
|
||||
|
||||
var err error
|
||||
if n.PublicKey.Key, err = versiacrypto.ToTypedKey(dbData.PublicKeyAlgorithm, dbData.PublicKey); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if n.SharedInbox, err = lysand.ParseURL(dbData.SharedInboxURI); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if dbData.ModeratorsURI != nil {
|
||||
if n.ModeratorsCollection, err = lysand.ParseURL(*dbData.ModeratorsURI); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if dbData.AdminsURI != nil {
|
||||
if n.AdminsCollection, err = lysand.ParseURL(*dbData.AdminsURI); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
for _, r := range dbData.Edges.Moderators {
|
||||
u, err := NewUser(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
n.Moderators = append(n.Moderators, *u)
|
||||
}
|
||||
|
||||
for _, r := range dbData.Edges.Admins {
|
||||
u, err := NewUser(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
n.Admins = append(n.Admins, *u)
|
||||
}
|
||||
|
||||
return n, nil
|
||||
}
|
||||
|
||||
func (m InstanceMetadata) ToLysand() lysand.InstanceMetadata {
|
||||
return lysand.InstanceMetadata{
|
||||
Extensions: m.Extensions,
|
||||
Name: m.Name,
|
||||
Description: m.Description,
|
||||
Host: m.Host,
|
||||
SharedInbox: m.SharedInbox,
|
||||
Moderators: m.ModeratorsCollection,
|
||||
Admins: m.AdminsCollection,
|
||||
Logo: m.Logo,
|
||||
Banner: m.Banner,
|
||||
PublicKey: lysand.InstancePublicKey{
|
||||
Algorithm: m.PublicKeyAlgorithm,
|
||||
Key: m.PublicKey,
|
||||
},
|
||||
Software: lysand.InstanceSoftware{
|
||||
Name: m.SoftwareName,
|
||||
Version: m.SoftwareVersion,
|
||||
},
|
||||
Compatibility: lysand.InstanceCompatibility{
|
||||
Versions: m.SupportedVersions,
|
||||
Extensions: m.SupportedExtensions,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package entity
|
|||
|
||||
import (
|
||||
"github.com/lysand-org/versia-go/internal/helpers"
|
||||
versiacrypto "github.com/lysand-org/versia-go/pkg/lysand/crypto"
|
||||
"net/url"
|
||||
|
||||
"github.com/lysand-org/versia-go/ent"
|
||||
|
|
@ -12,12 +13,14 @@ import (
|
|||
type User struct {
|
||||
*ent.User
|
||||
|
||||
URI *lysand.URL
|
||||
Inbox *lysand.URL
|
||||
Outbox *lysand.URL
|
||||
Featured *lysand.URL
|
||||
Followers *lysand.URL
|
||||
Following *lysand.URL
|
||||
URI *lysand.URL
|
||||
PKActorURI *lysand.URL
|
||||
PublicKey *lysand.SPKIPublicKey
|
||||
Inbox *lysand.URL
|
||||
Outbox *lysand.URL
|
||||
Featured *lysand.URL
|
||||
Followers *lysand.URL
|
||||
Following *lysand.URL
|
||||
|
||||
DisplayName string
|
||||
LysandAvatar lysand.ImageContentTypeMap
|
||||
|
|
@ -25,38 +28,52 @@ type User struct {
|
|||
Signer lysand.Signer
|
||||
}
|
||||
|
||||
func NewUser(dbUser *ent.User) (*User, error) {
|
||||
u := &User{User: dbUser}
|
||||
func NewUser(dbData *ent.User) (*User, error) {
|
||||
u := &User{
|
||||
User: dbData,
|
||||
PublicKey: &lysand.SPKIPublicKey{
|
||||
Key: nil,
|
||||
Algorithm: dbData.PublicKeyAlgorithm,
|
||||
},
|
||||
DisplayName: dbData.Username,
|
||||
|
||||
u.DisplayName = u.Username
|
||||
if dbUser.DisplayName != nil {
|
||||
u.DisplayName = *dbUser.DisplayName
|
||||
LysandAvatar: lysandAvatar(dbData),
|
||||
LysandBiography: lysandBiography(dbData),
|
||||
}
|
||||
|
||||
if dbData.DisplayName != nil {
|
||||
u.DisplayName = *dbData.DisplayName
|
||||
}
|
||||
|
||||
var err error
|
||||
if u.URI, err = lysand.ParseURL(dbUser.URI); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Inbox, err = lysand.ParseURL(dbUser.Inbox); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Outbox, err = lysand.ParseURL(dbUser.Outbox); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Featured, err = lysand.ParseURL(dbUser.Featured); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Followers, err = lysand.ParseURL(dbUser.Followers); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Following, err = lysand.ParseURL(dbUser.Following); err != nil {
|
||||
if u.PublicKey.Key, err = versiacrypto.ToTypedKey(dbData.PublicKeyAlgorithm, dbData.PublicKey); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if u.URI, err = lysand.ParseURL(dbData.URI); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.PKActorURI, err = lysand.ParseURL(dbData.PublicKeyActor); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Inbox, err = lysand.ParseURL(dbData.Inbox); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Outbox, err = lysand.ParseURL(dbData.Outbox); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Featured, err = lysand.ParseURL(dbData.Featured); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Followers, err = lysand.ParseURL(dbData.Followers); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Following, err = lysand.ParseURL(dbData.Following); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
u.LysandAvatar = lysandAvatar(dbUser)
|
||||
u.LysandBiography = lysandBiography(dbUser)
|
||||
u.Signer = lysand.Signer{
|
||||
PrivateKey: dbUser.PrivateKey,
|
||||
PrivateKey: dbData.PrivateKey,
|
||||
UserURL: u.URI.ToStd(),
|
||||
}
|
||||
|
||||
|
|
@ -76,9 +93,10 @@ func (u User) ToLysand() *lysand.User {
|
|||
Avatar: u.LysandAvatar,
|
||||
Header: imageMap(u.Edges.HeaderImage),
|
||||
Indexable: u.Indexable,
|
||||
PublicKey: lysand.PublicKey{
|
||||
Actor: utils.UserAPIURL(u.ID),
|
||||
PublicKey: lysand.SPKIPublicKey(u.PublicKey),
|
||||
PublicKey: lysand.UserPublicKey{
|
||||
Actor: u.PKActorURI,
|
||||
Algorithm: u.PublicKeyAlgorithm,
|
||||
Key: u.PublicKey,
|
||||
},
|
||||
Bio: u.LysandBiography,
|
||||
Fields: u.Fields,
|
||||
|
|
@ -88,10 +106,6 @@ func (u User) ToLysand() *lysand.User {
|
|||
Featured: u.Featured,
|
||||
Followers: u.Followers,
|
||||
Following: u.Following,
|
||||
|
||||
// TODO: Remove these, they got deprecated and moved into an extension
|
||||
Likes: utils.UserLikesAPIURL(u.ID),
|
||||
Dislikes: utils.UserDislikesAPIURL(u.ID),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue