From 3203150fd3e1a423e99a7ea965794788ae2d02f6 Mon Sep 17 00:00:00 2001 From: till Date: Sun, 18 Dec 2022 14:44:28 +0100 Subject: [PATCH] Update: support configuration This exposes settings for clients, so it's nice to be able to access it directly. --- instance.go | 16 ++++++++++++++++ instance_test.go | 13 +++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/instance.go b/instance.go index 672120c..a2aa7f4 100644 --- a/instance.go +++ b/instance.go @@ -17,6 +17,17 @@ type Instance struct { Stats *InstanceStats `json:"stats,omitempty"` Languages []string `json:"languages"` ContactAccount *Account `json:"contact_account"` + Configuration *InstanceConfig `json:"configuration"` +} + +type InstanceConfigMap map[string]int + +// InstanceConfig holds configuration accessible for clients. +type InstanceConfig struct { + Accounts *InstanceConfigMap `json:"accounts"` + Statuses *InstanceConfigMap `json:"statuses"` + MediaAttachments map[string]interface{} `json:"media_attachments"` + Polls *InstanceConfigMap `json:"polls"` } // InstanceStats holds information for mastodon instance stats. @@ -36,6 +47,11 @@ func (c *Client) GetInstance(ctx context.Context) (*Instance, error) { return &instance, nil } +// GetConfig returns InstanceConfig. +func (c *Instance) GetConfig() *InstanceConfig { + return c.Configuration +} + // WeeklyActivity holds information for mastodon weekly activity. type WeeklyActivity struct { Week Unixtime `json:"week"` diff --git a/instance_test.go b/instance_test.go index 42f1e69..fb73c0d 100644 --- a/instance_test.go +++ b/instance_test.go @@ -60,7 +60,7 @@ func TestGetInstanceMore(t *testing.T) { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } - fmt.Fprintln(w, `{"title": "mastodon", "uri": "http://mstdn.example.com", "description": "test mastodon", "email": "mstdn@mstdn.example.com", "version": "0.0.1", "urls":{"foo":"http://stream1.example.com", "bar": "http://stream2.example.com"}, "thumbnail": "http://mstdn.example.com/logo.png", "stats":{"user_count":1, "status_count":2, "domain_count":3}}}`) + fmt.Fprintln(w, `{"title": "mastodon", "uri": "http://mstdn.example.com", "description": "test mastodon", "email": "mstdn@mstdn.example.com", "version": "0.0.1", "urls":{"foo":"http://stream1.example.com", "bar": "http://stream2.example.com"}, "thumbnail": "http://mstdn.example.com/logo.png", "configuration":{"accounts": {"max_featured_tags": 10}, "statuses": {"max_characters": 500}}, "stats":{"user_count":1, "status_count":2, "domain_count":3}}}`) })) defer ts.Close() @@ -103,7 +103,7 @@ func TestGetInstanceMore(t *testing.T) { t.Fatalf("want %q but %q", "http://mstdn.example.com/logo.png", ins.Thumbnail) } if ins.Stats == nil { - t.Fatal("status should be nil") + t.Fatal("stats should not be nil") } if ins.Stats.UserCount != 1 { t.Fatalf("want %v but %v", 1, ins.Stats.UserCount) @@ -114,6 +114,15 @@ func TestGetInstanceMore(t *testing.T) { if ins.Stats.DomainCount != 3 { t.Fatalf("want %v but %v", 3, ins.Stats.DomainCount) } + + cfg := ins.GetConfig() + if cfg.Accounts == nil { + t.Error("expected accounts to be non nil") + } + if cfg.Statuses == nil { + t.Error("expected statuses to be non nil") + } + } func TestGetInstanceActivity(t *testing.T) {