diff options
Diffstat (limited to 'model')
-rw-r--r-- | model/client.go | 26 | ||||
-rw-r--r-- | model/preference.go | 60 | ||||
-rw-r--r-- | model/preference_test.go | 56 | ||||
-rw-r--r-- | model/preferences.go | 31 |
4 files changed, 173 insertions, 0 deletions
diff --git a/model/client.go b/model/client.go index 11beb9a87..77b0aaad2 100644 --- a/model/client.go +++ b/model/client.go @@ -844,6 +844,32 @@ func (c *Client) ListIncomingWebhooks() (*Result, *AppError) { } } +func (c *Client) SetPreferences(preferences *Preferences) (*Result, *AppError) { + if r, err := c.DoApiPost("/preferences/save", preferences.ToJson()); err != nil { + return nil, err + } else { + return &Result{r.Header.Get(HEADER_REQUEST_ID), + r.Header.Get(HEADER_ETAG_SERVER), preferences}, nil + } +} + +func (c *Client) GetPreference(category string, name string) (*Result, *AppError) { + if r, err := c.DoApiGet("/preferences/"+category+"/"+name, "", ""); err != nil { + return nil, err + } else { + return &Result{r.Header.Get(HEADER_REQUEST_ID), r.Header.Get(HEADER_ETAG_SERVER), PreferenceFromJson(r.Body)}, nil + } +} + +func (c *Client) GetPreferenceCategory(category string) (*Result, *AppError) { + if r, err := c.DoApiGet("/preferences/"+category, "", ""); err != nil { + return nil, err + } else { + preferences, _ := PreferencesFromJson(r.Body) + return &Result{r.Header.Get(HEADER_REQUEST_ID), r.Header.Get(HEADER_ETAG_SERVER), preferences}, nil + } +} + func (c *Client) MockSession(sessionToken string) { c.AuthToken = sessionToken c.AuthType = HEADER_BEARER diff --git a/model/preference.go b/model/preference.go new file mode 100644 index 000000000..44279f71a --- /dev/null +++ b/model/preference.go @@ -0,0 +1,60 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + +package model + +import ( + "encoding/json" + "io" +) + +const ( + PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW = "direct_channel_show" +) + +type Preference struct { + UserId string `json:"user_id"` + Category string `json:"category"` + Name string `json:"name"` + Value string `json:"value"` +} + +func (o *Preference) ToJson() string { + b, err := json.Marshal(o) + if err != nil { + return "" + } else { + return string(b) + } +} + +func PreferenceFromJson(data io.Reader) *Preference { + decoder := json.NewDecoder(data) + var o Preference + err := decoder.Decode(&o) + if err == nil { + return &o + } else { + return nil + } +} + +func (o *Preference) IsValid() *AppError { + if len(o.UserId) != 26 { + return NewAppError("Preference.IsValid", "Invalid user id", "user_id="+o.UserId) + } + + if len(o.Category) == 0 || len(o.Category) > 32 { + return NewAppError("Preference.IsValid", "Invalid category", "category="+o.Category) + } + + if len(o.Name) == 0 || len(o.Name) > 32 { + return NewAppError("Preference.IsValid", "Invalid name", "name="+o.Name) + } + + if len(o.Value) > 128 { + return NewAppError("Preference.IsValid", "Value is too long", "value="+o.Value) + } + + return nil +} diff --git a/model/preference_test.go b/model/preference_test.go new file mode 100644 index 000000000..66b7ac50b --- /dev/null +++ b/model/preference_test.go @@ -0,0 +1,56 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + +package model + +import ( + "strings" + "testing" +) + +func TestPreferenceIsValid(t *testing.T) { + preference := Preference{ + UserId: "1234garbage", + Category: PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW, + Name: NewId(), + } + + if err := preference.IsValid(); err == nil { + t.Fatal() + } + + preference.UserId = NewId() + if err := preference.IsValid(); err != nil { + t.Fatal(err) + } + + preference.Category = strings.Repeat("01234567890", 20) + if err := preference.IsValid(); err == nil { + t.Fatal() + } + + preference.Category = PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW + if err := preference.IsValid(); err != nil { + t.Fatal() + } + + preference.Name = strings.Repeat("01234567890", 20) + if err := preference.IsValid(); err == nil { + t.Fatal() + } + + preference.Name = NewId() + if err := preference.IsValid(); err != nil { + t.Fatal() + } + + preference.Value = strings.Repeat("01234567890", 20) + if err := preference.IsValid(); err == nil { + t.Fatal() + } + + preference.Value = "1234garbage" + if err := preference.IsValid(); err != nil { + t.Fatal() + } +} diff --git a/model/preferences.go b/model/preferences.go new file mode 100644 index 000000000..1ef16151f --- /dev/null +++ b/model/preferences.go @@ -0,0 +1,31 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + +package model + +import ( + "encoding/json" + "io" +) + +type Preferences []Preference + +func (o *Preferences) ToJson() string { + b, err := json.Marshal(o) + if err != nil { + return "" + } else { + return string(b) + } +} + +func PreferencesFromJson(data io.Reader) (Preferences, error) { + decoder := json.NewDecoder(data) + var o Preferences + err := decoder.Decode(&o) + if err == nil { + return o, nil + } else { + return nil, err + } +} |