summaryrefslogtreecommitdiffstats
path: root/model
diff options
context:
space:
mode:
author=Corey Hulen <corey@hulen.com>2015-09-22 13:18:42 -0700
committer=Corey Hulen <corey@hulen.com>2015-09-22 13:18:42 -0700
commit6e60768abe6f0caa639febf068d718d62881ce62 (patch)
tree0600c72a7a9a3f7c1df167b3f870b38863e9a564 /model
parente22e7b8b7b66f342c2df693bbfc06a85980d253e (diff)
parentac7918c5540900ab0dbe43d61b8c1155e4279b55 (diff)
downloadchat-6e60768abe6f0caa639febf068d718d62881ce62.tar.gz
chat-6e60768abe6f0caa639febf068d718d62881ce62.tar.bz2
chat-6e60768abe6f0caa639febf068d718d62881ce62.zip
Fixing merge conflict
Diffstat (limited to 'model')
-rw-r--r--model/channel.go8
-rw-r--r--model/client.go38
-rw-r--r--model/config.go1
-rw-r--r--model/webhook.go101
-rw-r--r--model/webhook_test.go82
5 files changed, 229 insertions, 1 deletions
diff --git a/model/channel.go b/model/channel.go
index 7d8edeee7..a7f007960 100644
--- a/model/channel.go
+++ b/model/channel.go
@@ -120,3 +120,11 @@ func (o *Channel) ExtraUpdated() {
func (o *Channel) PreExport() {
}
+
+func GetDMNameFromIds(userId1, userId2 string) string {
+ if userId1 > userId2 {
+ return userId2 + "__" + userId1
+ } else {
+ return userId1 + "__" + userId2
+ }
+}
diff --git a/model/client.go b/model/client.go
index d13ffa6cb..cc75ce370 100644
--- a/model/client.go
+++ b/model/client.go
@@ -49,7 +49,7 @@ func NewClient(url string) *Client {
return &Client{url, url + API_URL_SUFFIX, &http.Client{}, "", ""}
}
-func (c *Client) DoPost(url string, data, contentType string) (*http.Response, *AppError) {
+func (c *Client) DoPost(url, data, contentType string) (*http.Response, *AppError) {
rq, _ := http.NewRequest("POST", c.Url+url, strings.NewReader(data))
rq.Header.Set("Content-Type", contentType)
@@ -816,6 +816,42 @@ func (c *Client) GetAccessToken(data url.Values) (*Result, *AppError) {
}
}
+func (c *Client) CreateIncomingWebhook(hook *IncomingWebhook) (*Result, *AppError) {
+ if r, err := c.DoApiPost("/hooks/incoming/create", hook.ToJson()); err != nil {
+ return nil, err
+ } else {
+ return &Result{r.Header.Get(HEADER_REQUEST_ID),
+ r.Header.Get(HEADER_ETAG_SERVER), IncomingWebhookFromJson(r.Body)}, nil
+ }
+}
+
+func (c *Client) PostToWebhook(id, payload string) (*Result, *AppError) {
+ if r, err := c.DoPost("/hooks/"+id, payload, "application/x-www-form-urlencoded"); err != nil {
+ return nil, err
+ } else {
+ return &Result{r.Header.Get(HEADER_REQUEST_ID),
+ r.Header.Get(HEADER_ETAG_SERVER), nil}, nil
+ }
+}
+
+func (c *Client) DeleteIncomingWebhook(data map[string]string) (*Result, *AppError) {
+ if r, err := c.DoApiPost("/hooks/incoming/delete", MapToJson(data)); err != nil {
+ return nil, err
+ } else {
+ return &Result{r.Header.Get(HEADER_REQUEST_ID),
+ r.Header.Get(HEADER_ETAG_SERVER), MapFromJson(r.Body)}, nil
+ }
+}
+
+func (c *Client) ListIncomingWebhooks() (*Result, *AppError) {
+ if r, err := c.DoApiGet("/hooks/incoming/list", "", ""); err != nil {
+ return nil, err
+ } else {
+ return &Result{r.Header.Get(HEADER_REQUEST_ID),
+ r.Header.Get(HEADER_ETAG_SERVER), IncomingWebhookListFromJson(r.Body)}, nil
+ }
+}
+
func (c *Client) MockSession(sessionToken string) {
c.AuthToken = sessionToken
c.AuthType = HEADER_BEARER
diff --git a/model/config.go b/model/config.go
index 7791c4021..76d449904 100644
--- a/model/config.go
+++ b/model/config.go
@@ -26,6 +26,7 @@ type ServiceSettings struct {
GoogleDeveloperKey string
EnableOAuthServiceProvider bool
EnableTesting bool
+ EnableIncomingWebhooks bool
}
type SSOSettings struct {
diff --git a/model/webhook.go b/model/webhook.go
new file mode 100644
index 000000000..9b4db3246
--- /dev/null
+++ b/model/webhook.go
@@ -0,0 +1,101 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+package model
+
+import (
+ "encoding/json"
+ "io"
+)
+
+type IncomingWebhook struct {
+ Id string `json:"id"`
+ CreateAt int64 `json:"create_at"`
+ UpdateAt int64 `json:"update_at"`
+ DeleteAt int64 `json:"delete_at"`
+ UserId string `json:"user_id"`
+ ChannelId string `json:"channel_id"`
+ TeamId string `json:"team_id"`
+}
+
+func (o *IncomingWebhook) ToJson() string {
+ b, err := json.Marshal(o)
+ if err != nil {
+ return ""
+ } else {
+ return string(b)
+ }
+}
+
+func IncomingWebhookFromJson(data io.Reader) *IncomingWebhook {
+ decoder := json.NewDecoder(data)
+ var o IncomingWebhook
+ err := decoder.Decode(&o)
+ if err == nil {
+ return &o
+ } else {
+ return nil
+ }
+}
+
+func IncomingWebhookListToJson(l []*IncomingWebhook) string {
+ b, err := json.Marshal(l)
+ if err != nil {
+ return ""
+ } else {
+ return string(b)
+ }
+}
+
+func IncomingWebhookListFromJson(data io.Reader) []*IncomingWebhook {
+ decoder := json.NewDecoder(data)
+ var o []*IncomingWebhook
+ err := decoder.Decode(&o)
+ if err == nil {
+ return o
+ } else {
+ return nil
+ }
+}
+
+func (o *IncomingWebhook) IsValid() *AppError {
+
+ if len(o.Id) != 26 {
+ return NewAppError("IncomingWebhook.IsValid", "Invalid Id", "")
+ }
+
+ if o.CreateAt == 0 {
+ return NewAppError("IncomingWebhook.IsValid", "Create at must be a valid time", "id="+o.Id)
+ }
+
+ if o.UpdateAt == 0 {
+ return NewAppError("IncomingWebhook.IsValid", "Update at must be a valid time", "id="+o.Id)
+ }
+
+ if len(o.UserId) != 26 {
+ return NewAppError("IncomingWebhook.IsValid", "Invalid user id", "")
+ }
+
+ if len(o.ChannelId) != 26 {
+ return NewAppError("IncomingWebhook.IsValid", "Invalid channel id", "")
+ }
+
+ if len(o.TeamId) != 26 {
+ return NewAppError("IncomingWebhook.IsValid", "Invalid channel id", "")
+ }
+
+ return nil
+}
+
+func (o *IncomingWebhook) PreSave() {
+ if o.Id == "" {
+ o.Id = NewId()
+ }
+
+ o.CreateAt = GetMillis()
+ o.UpdateAt = o.CreateAt
+}
+
+func (o *IncomingWebhook) PreUpdate() {
+ o.UpdateAt = GetMillis()
+}
diff --git a/model/webhook_test.go b/model/webhook_test.go
new file mode 100644
index 000000000..ddbe18cd3
--- /dev/null
+++ b/model/webhook_test.go
@@ -0,0 +1,82 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+package model
+
+import (
+ "strings"
+ "testing"
+)
+
+func TestIncomingWebhookJson(t *testing.T) {
+ o := IncomingWebhook{Id: NewId()}
+ json := o.ToJson()
+ ro := IncomingWebhookFromJson(strings.NewReader(json))
+
+ if o.Id != ro.Id {
+ t.Fatal("Ids do not match")
+ }
+}
+
+func TestIncomingWebhookIsValid(t *testing.T) {
+ o := IncomingWebhook{}
+
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.Id = NewId()
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.CreateAt = GetMillis()
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.UpdateAt = GetMillis()
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.UserId = "123"
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.UserId = NewId()
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.ChannelId = "123"
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.ChannelId = NewId()
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.TeamId = "123"
+ if err := o.IsValid(); err == nil {
+ t.Fatal("should be invalid")
+ }
+
+ o.TeamId = NewId()
+ if err := o.IsValid(); err != nil {
+ t.Fatal(err)
+ }
+}
+
+func TestIncomingWebhookPreSave(t *testing.T) {
+ o := IncomingWebhook{}
+ o.PreSave()
+}
+
+func TestIncomingWebhookPreUpdate(t *testing.T) {
+ o := IncomingWebhook{}
+ o.PreUpdate()
+}