Merge branch 'master' into advanced-permissions-phase-1
Этот коммит содержится в:
@@ -198,6 +198,10 @@ func (c *Client4) GetTestEmailRoute() string {
|
||||
return fmt.Sprintf("/email/test")
|
||||
}
|
||||
|
||||
func (c *Client4) GetTestS3Route() string {
|
||||
return fmt.Sprintf("/file/s3_test")
|
||||
}
|
||||
|
||||
func (c *Client4) GetDatabaseRoute() string {
|
||||
return fmt.Sprintf("/database")
|
||||
}
|
||||
@@ -1919,7 +1923,8 @@ func (c *Client4) DoPostAction(postId, actionId string) (bool, *Response) {
|
||||
|
||||
// File Section
|
||||
|
||||
// UploadFile will upload a file to a channel, to be later attached to a post.
|
||||
// UploadFile will upload a file to a channel using a multipart request, to be later attached to a post.
|
||||
// This method is functionally equivalent to Client4.UploadFileAsRequestBody.
|
||||
func (c *Client4) UploadFile(data []byte, channelId string, filename string) (*FileUploadResponse, *Response) {
|
||||
body := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(body)
|
||||
@@ -1943,6 +1948,12 @@ func (c *Client4) UploadFile(data []byte, channelId string, filename string) (*F
|
||||
return c.DoUploadFile(c.GetFilesRoute(), body.Bytes(), writer.FormDataContentType())
|
||||
}
|
||||
|
||||
// UploadFileAsRequestBody will upload a file to a channel as the body of a request, to be later attached
|
||||
// to a post. This method is functionally equivalent to Client4.UploadFile.
|
||||
func (c *Client4) UploadFileAsRequestBody(data []byte, channelId string, filename string) (*FileUploadResponse, *Response) {
|
||||
return c.DoUploadFile(c.GetFilesRoute()+fmt.Sprintf("?channel_id=%v&filename=%v", url.QueryEscape(channelId), url.QueryEscape(filename)), data, http.DetectContentType(data))
|
||||
}
|
||||
|
||||
// GetFile gets the bytes for a file by id.
|
||||
func (c *Client4) GetFile(fileId string) ([]byte, *Response) {
|
||||
if r, err := c.DoApiGet(c.GetFileRoute(fileId), ""); err != nil {
|
||||
@@ -2089,6 +2100,16 @@ func (c *Client4) TestEmail() (bool, *Response) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestS3Connection will attempt to connect to the AWS S3.
|
||||
func (c *Client4) TestS3Connection(config *Config) (bool, *Response) {
|
||||
if r, err := c.DoApiPost(c.GetTestS3Route(), config.ToJson()); err != nil {
|
||||
return false, BuildErrorResponse(r, err)
|
||||
} else {
|
||||
defer closeBody(r)
|
||||
return CheckStatusOK(r), BuildResponse(r)
|
||||
}
|
||||
}
|
||||
|
||||
// GetConfig will retrieve the server config with some sanitized items.
|
||||
func (c *Client4) GetConfig() (*Config, *Response) {
|
||||
if r, err := c.DoApiGet(c.GetConfigRoute(), ""); err != nil {
|
||||
@@ -3343,3 +3364,56 @@ func (c *Client4) DeactivatePlugin(id string) (bool, *Response) {
|
||||
return CheckStatusOK(r), BuildResponse(r)
|
||||
}
|
||||
}
|
||||
|
||||
// SetTeamIcon sets team icon of the team
|
||||
func (c *Client4) SetTeamIcon(teamId string, data []byte) (bool, *Response) {
|
||||
|
||||
body := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(body)
|
||||
|
||||
if part, err := writer.CreateFormFile("image", "teamIcon.png"); err != nil {
|
||||
return false, &Response{Error: NewAppError("SetTeamIcon", "model.client.set_team_icon.no_file.app_error", nil, err.Error(), http.StatusBadRequest)}
|
||||
} else if _, err = io.Copy(part, bytes.NewBuffer(data)); err != nil {
|
||||
return false, &Response{Error: NewAppError("SetTeamIcon", "model.client.set_team_icon.no_file.app_error", nil, err.Error(), http.StatusBadRequest)}
|
||||
}
|
||||
|
||||
if err := writer.Close(); err != nil {
|
||||
return false, &Response{Error: NewAppError("SetTeamIcon", "model.client.set_team_icon.writer.app_error", nil, err.Error(), http.StatusBadRequest)}
|
||||
}
|
||||
|
||||
rq, _ := http.NewRequest("POST", c.ApiUrl+c.GetTeamRoute(teamId)+"/image", bytes.NewReader(body.Bytes()))
|
||||
rq.Header.Set("Content-Type", writer.FormDataContentType())
|
||||
rq.Close = true
|
||||
|
||||
if len(c.AuthToken) > 0 {
|
||||
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
|
||||
}
|
||||
|
||||
if rp, err := c.HttpClient.Do(rq); err != nil || rp == nil {
|
||||
// set to http.StatusForbidden(403)
|
||||
return false, &Response{StatusCode: http.StatusForbidden, Error: NewAppError(c.GetTeamRoute(teamId)+"/image", "model.client.connecting.app_error", nil, err.Error(), 403)}
|
||||
} else {
|
||||
defer closeBody(rp)
|
||||
|
||||
if rp.StatusCode >= 300 {
|
||||
return false, BuildErrorResponse(rp, AppErrorFromJson(rp.Body))
|
||||
} else {
|
||||
return CheckStatusOK(rp), BuildResponse(rp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetTeamIcon gets the team icon of the team
|
||||
func (c *Client4) GetTeamIcon(teamId, etag string) ([]byte, *Response) {
|
||||
if r, err := c.DoApiGet(c.GetTeamRoute(teamId)+"/image", etag); err != nil {
|
||||
return nil, BuildErrorResponse(r, err)
|
||||
} else {
|
||||
defer closeBody(r)
|
||||
|
||||
if data, err := ioutil.ReadAll(r.Body); err != nil {
|
||||
return nil, BuildErrorResponse(r, NewAppError("GetTeamIcon", "model.client.get_team_icon.app_error", nil, err.Error(), r.StatusCode))
|
||||
} else {
|
||||
return data, BuildResponse(r)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user