versia-go/internal/entity/server_metadata.go

99 lines
2.3 KiB
Go
Raw Normal View History

2024-08-20 22:43:26 +02:00
package entity
import (
2024-08-28 00:25:25 +02:00
"github.com/versia-pub/versia-go/ent"
"github.com/versia-pub/versia-go/pkg/versia"
versiacrypto "github.com/versia-pub/versia-go/pkg/versia/crypto"
versiautils "github.com/versia-pub/versia-go/pkg/versia/utils"
2024-08-20 22:43:26 +02:00
)
type InstanceMetadata struct {
*ent.InstanceMetadata
Moderators []User
2024-08-22 23:03:38 +02:00
ModeratorsCollection *versiautils.URL
2024-08-20 22:43:26 +02:00
Admins []User
2024-08-22 23:03:38 +02:00
AdminsCollection *versiautils.URL
2024-08-20 22:43:26 +02:00
2024-08-22 23:03:38 +02:00
SharedInbox *versiautils.URL
2024-08-20 22:43:26 +02:00
2024-08-22 23:03:38 +02:00
PublicKey *versiacrypto.SPKIPublicKey
2024-08-20 22:43:26 +02:00
2024-08-28 00:25:25 +02:00
Logo *versiautils.ImageContentMap
Banner *versiautils.ImageContentMap
2024-08-20 22:43:26 +02:00
}
func NewInstanceMetadata(dbData *ent.InstanceMetadata) (*InstanceMetadata, error) {
n := &InstanceMetadata{
InstanceMetadata: dbData,
2024-08-22 23:03:38 +02:00
PublicKey: &versiacrypto.SPKIPublicKey{},
2024-08-20 22:43:26 +02:00
}
var err error
if n.PublicKey.Key, err = versiacrypto.ToTypedKey(dbData.PublicKeyAlgorithm, dbData.PublicKey); err != nil {
return nil, err
}
2024-08-22 23:03:38 +02:00
if n.SharedInbox, err = versiautils.ParseURL(dbData.SharedInboxURI); err != nil {
2024-08-20 22:43:26 +02:00
return nil, err
}
if dbData.ModeratorsURI != nil {
2024-08-22 23:03:38 +02:00
if n.ModeratorsCollection, err = versiautils.ParseURL(*dbData.ModeratorsURI); err != nil {
2024-08-20 22:43:26 +02:00
return nil, err
}
}
if dbData.AdminsURI != nil {
2024-08-22 23:03:38 +02:00
if n.AdminsCollection, err = versiautils.ParseURL(*dbData.AdminsURI); err != nil {
2024-08-20 22:43:26 +02:00
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) ToVersia() versia.InstanceMetadata {
2024-08-22 23:03:38 +02:00
return versia.InstanceMetadata{
CreatedAt: versiautils.TimeFromStd(m.CreatedAt),
2024-08-20 22:43:26 +02:00
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,
2024-08-22 23:03:38 +02:00
PublicKey: versia.InstancePublicKey{
2024-08-20 22:43:26 +02:00
Algorithm: m.PublicKeyAlgorithm,
Key: m.PublicKey,
},
2024-08-22 23:03:38 +02:00
Software: versia.InstanceSoftware{
2024-08-20 22:43:26 +02:00
Name: m.SoftwareName,
Version: m.SoftwareVersion,
},
2024-08-22 23:03:38 +02:00
Compatibility: versia.InstanceCompatibility{
2024-08-20 22:43:26 +02:00
Versions: m.SupportedVersions,
Extensions: m.SupportedExtensions,
},
}
}