summaryrefslogtreecommitdiffstats
path: root/model
diff options
context:
space:
mode:
Diffstat (limited to 'model')
-rw-r--r--model/client.go26
-rw-r--r--model/preference.go60
-rw-r--r--model/preference_test.go56
-rw-r--r--model/preferences.go31
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
+ }
+}