Этот коммит содержится в:
=Corey Hulen
2015-09-22 13:18:42 -07:00
родитель e22e7b8b7b ac7918c554
Коммит 6e60768abe
31 изменённых файлов: 1285 добавлений и 102 удалений

Просмотреть файл

@@ -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
}
}

Просмотреть файл

@@ -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

Просмотреть файл

@@ -26,6 +26,7 @@ type ServiceSettings struct {
GoogleDeveloperKey string
EnableOAuthServiceProvider bool
EnableTesting bool
EnableIncomingWebhooks bool
}
type SSOSettings struct {

101
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()
}

82
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()
}