diff options
Diffstat (limited to 'internal/typeutils')
-rw-r--r-- | internal/typeutils/converter.go | 3 | ||||
-rw-r--r-- | internal/typeutils/internaltofrontend.go | 30 |
2 files changed, 33 insertions, 0 deletions
diff --git a/internal/typeutils/converter.go b/internal/typeutils/converter.go index 5118386a9..f269fa182 100644 --- a/internal/typeutils/converter.go +++ b/internal/typeutils/converter.go @@ -74,6 +74,9 @@ type TypeConverter interface { // VisToMasto converts a gts visibility into its mastodon equivalent VisToMasto(m gtsmodel.Visibility) model.Visibility + // InstanceToMasto converts a gts instance into its mastodon equivalent for serving at /api/v1/instance + InstanceToMasto(i *gtsmodel.Instance) (*model.Instance, error) + /* FRONTEND (mastodon) MODEL TO INTERNAL (gts) MODEL */ diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 66c21b98a..6b0c743ff 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -551,3 +551,33 @@ func (c *converter) VisToMasto(m gtsmodel.Visibility) model.Visibility { } return "" } + +func (c *converter) InstanceToMasto(i *gtsmodel.Instance) (*model.Instance, error) { + mi := &model.Instance{ + URI: i.URI, + Title: i.Title, + Description: i.Description, + ShortDescription: i.ShortDescription, + Email: i.ContactEmail, + } + + if i.Domain == c.config.Host { + mi.Registrations = c.config.AccountsConfig.OpenRegistration + mi.ApprovalRequired = c.config.AccountsConfig.RequireApproval + mi.InvitesEnabled = false // TODO + mi.MaxTootChars = uint(c.config.StatusesConfig.MaxChars) + } + + // contact account is optional but let's try to get it + if i.ContactAccountID != "" { + ia := >smodel.Account{} + if err := c.db.GetByID(i.ContactAccountID, ia); err == nil { + ma, err := c.AccountToMastoPublic(ia) + if err == nil { + mi.ContactAccount = ma + } + } + } + + return mi, nil +} |