summaryrefslogtreecommitdiffstats
path: root/model/client4.go
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2017-03-13 10:14:16 -0400
committerGitHub <noreply@github.com>2017-03-13 10:14:16 -0400
commit3ebfb369530e28ca3246c5cd2833e666edce9c90 (patch)
treea91ef74768301db727ca062354af9cac2b444001 /model/client4.go
parenta284cd8c1817bb5419cb9eae118c85cd7e99c039 (diff)
downloadchat-3ebfb369530e28ca3246c5cd2833e666edce9c90.tar.gz
chat-3ebfb369530e28ca3246c5cd2833e666edce9c90.tar.bz2
chat-3ebfb369530e28ca3246c5cd2833e666edce9c90.zip
Implement compliance endpoints for APIv4 (#5683)
* Implement compliance endpoints for APIv4 * Add paging to get reports endpoint
Diffstat (limited to 'model/client4.go')
-rw-r--r--model/client4.go65
1 files changed, 65 insertions, 0 deletions
diff --git a/model/client4.go b/model/client4.go
index 63f65ed48..94ac2c144 100644
--- a/model/client4.go
+++ b/model/client4.go
@@ -154,6 +154,14 @@ func (c *Client4) GetIncomingWebhookRoute(hookID string) string {
return fmt.Sprintf(c.GetIncomingWebhooksRoute()+"/%v", hookID)
}
+func (c *Client4) GetComplianceReportsRoute() string {
+ return fmt.Sprintf("/compliance/reports")
+}
+
+func (c *Client4) GetComplianceReportRoute(reportId string) string {
+ return fmt.Sprintf("/compliance/reports/%v", reportId)
+}
+
func (c *Client4) GetPreferencesRoute(userId string) string {
return fmt.Sprintf(c.GetUserRoute(userId) + "/preferences")
}
@@ -1276,3 +1284,60 @@ func (c *Client4) GetSamlCertificateStatus() (*SamlCertificateStatus, *Response)
return SamlCertificateStatusFromJson(r.Body), BuildResponse(r)
}
}
+
+// Compliance Section
+
+// CreateComplianceReport creates an incoming webhook for a channel.
+func (c *Client4) CreateComplianceReport(report *Compliance) (*Compliance, *Response) {
+ if r, err := c.DoApiPost(c.GetComplianceReportsRoute(), report.ToJson()); err != nil {
+ return nil, &Response{StatusCode: r.StatusCode, Error: err}
+ } else {
+ defer closeBody(r)
+ return ComplianceFromJson(r.Body), BuildResponse(r)
+ }
+}
+
+// GetComplianceReports returns list of compliance reports.
+func (c *Client4) GetComplianceReports(page, perPage int) (Compliances, *Response) {
+ query := fmt.Sprintf("?page=%v&per_page=%v", page, perPage)
+ if r, err := c.DoApiGet(c.GetComplianceReportsRoute()+query, ""); err != nil {
+ return nil, &Response{StatusCode: r.StatusCode, Error: err}
+ } else {
+ defer closeBody(r)
+ return CompliancesFromJson(r.Body), BuildResponse(r)
+ }
+}
+
+// GetComplianceReport returns a compliance report.
+func (c *Client4) GetComplianceReport(reportId string) (*Compliance, *Response) {
+ if r, err := c.DoApiGet(c.GetComplianceReportRoute(reportId), ""); err != nil {
+ return nil, &Response{StatusCode: r.StatusCode, Error: err}
+ } else {
+ defer closeBody(r)
+ return ComplianceFromJson(r.Body), BuildResponse(r)
+ }
+}
+
+// DownloadComplianceReport returns a full compliance report as a file.
+func (c *Client4) DownloadComplianceReport(reportId string) ([]byte, *Response) {
+ var rq *http.Request
+ rq, _ = http.NewRequest("GET", c.ApiUrl+c.GetComplianceReportRoute(reportId), nil)
+ rq.Close = true
+
+ if len(c.AuthToken) > 0 {
+ rq.Header.Set(HEADER_AUTH, "BEARER "+c.AuthToken)
+ }
+
+ if rp, err := c.HttpClient.Do(rq); err != nil {
+ return nil, &Response{Error: NewAppError("DownloadComplianceReport", "model.client.connecting.app_error", nil, err.Error(), http.StatusBadRequest)}
+ } else if rp.StatusCode >= 300 {
+ defer rp.Body.Close()
+ return nil, &Response{StatusCode: rp.StatusCode, Error: AppErrorFromJson(rp.Body)}
+ } else if data, err := ioutil.ReadAll(rp.Body); err != nil {
+ defer closeBody(rp)
+ return nil, &Response{StatusCode: rp.StatusCode, Error: NewAppError("DownloadComplianceReport", "model.client.read_file.app_error", nil, err.Error(), rp.StatusCode)}
+ } else {
+ defer closeBody(rp)
+ return data, BuildResponse(rp)
+ }
+}