From 6db9d73325c7d1ee41899a24f4328b26ff3034f7 Mon Sep 17 00:00:00 2001 From: Conrad Wood Date: Wed, 10 Jan 2018 22:19:15 +0000 Subject: [PATCH 1/6] initial commit --- README.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README.txt diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..e69de29 From 466731217ad9d5a9c86f9a1cc0707773514f63e4 Mon Sep 17 00:00:00 2001 From: Conrad Wood Date: Wed, 10 Jan 2018 22:24:27 +0000 Subject: [PATCH 2/6] added tag set/delete --- tags.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tags.go diff --git a/tags.go b/tags.go new file mode 100644 index 0000000..04ddac0 --- /dev/null +++ b/tags.go @@ -0,0 +1,49 @@ +package teamwork + +import ( + "encoding/json" + "fmt" +) + +type ModTag struct { + Content string `json:"content"` +} + +func (conn *Connection) AddTag(taskId int, tag string) error { + method := "PUT" + url := fmt.Sprintf("%stasks/%d/tags.json", conn.Account.Url, taskId) + fmt.Printf("adding tag %s to URL: %s\n", tag, url) + m := &ModTag{Content: tag} + mp := make(map[string]*ModTag) + mp["tags"] = m + data_s, _ := json.Marshal(mp) + //fmt.Printf("JSON:\n%s\n", data_s) + data := []byte(data_s) + _, _, err := postrequest(conn.ApiToken, method, url, data) + if err != nil { + return fmt.Errorf("Cannot set tag %s on %d", tag, taskId) + } + return nil +} + +type omg struct { + Tags map[string]string `json:"tags"` + RemoveProvidedTags string `json:"removeProvidedTags"` +} + +func (conn *Connection) RemoveTag(taskId int, tag string) error { + method := "PUT" + url := fmt.Sprintf("%stasks/%d/tags.json", conn.Account.Url, taskId) + fmt.Printf("removing tag %s to URL: %s\n", tag, url) + o := &omg{Tags: make(map[string]string)} + o.Tags["content"] = tag + o.RemoveProvidedTags = "true" + data_s, _ := json.Marshal(o) + //fmt.Printf("JSON:\n%s\n", data_s) + data := []byte(data_s) + _, _, err := postrequest(conn.ApiToken, method, url, data) + if err != nil { + return fmt.Errorf("Cannot set tag %s on %d", tag, taskId) + } + return nil +} From 64b8bb27b5c9ed2d922b52b021b35b559536f2c1 Mon Sep 17 00:00:00 2001 From: Conrad Wood Date: Wed, 10 Jan 2018 22:29:21 +0000 Subject: [PATCH 3/6] added post method requests --- teamwork.go | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/teamwork.go b/teamwork.go index 49e790e..eb3e770 100644 --- a/teamwork.go +++ b/teamwork.go @@ -1,6 +1,7 @@ package teamwork import ( + "bytes" "encoding/json" "fmt" "io" @@ -74,23 +75,7 @@ func Connect(ApiToken string) (*Connection, error) { // request is the base level function for calling the TeamWork API. func request(token, method, url string) (io.ReadCloser, http.Header, error) { - client := &http.Client{} - req, err := http.NewRequest(method, url, nil) // TODO: Add payload to support POST - if err != nil { - log.Printf("NewRequest: ", err) - return nil, nil, err - } - req.Header.Set("Accept", "application/json") - req.Header.Set("Content-Type", "application/json") - req.SetBasicAuth(token, "notused") - - resp, err := client.Do(req) - if err != nil { - log.Printf("Do: ", err) - return nil, nil, err - } - - return resp.Body, resp.Header, nil + return postrequest(token, method, url, nil) } // build_params takes a struct and builds query params based @@ -203,3 +188,30 @@ func get_headers(headers http.Header, obj interface{}) { } } } + +// request is the base level function for calling the TeamWork API. +func postrequest(token, method, url string, data []byte) (io.ReadCloser, http.Header, error) { + var err error + var req *http.Request + client := &http.Client{} + if data != nil { + req, err = http.NewRequest(method, url, bytes.NewBuffer(data)) + } else { + req, err = http.NewRequest(method, url, nil) + } + if err != nil { + log.Printf("NewRequest: ", err) + return nil, nil, err + } + req.Header.Set("Accept", "application/json") + req.Header.Set("Content-Type", "application/json") + req.SetBasicAuth(token, "notused") + + resp, err := client.Do(req) + if err != nil { + log.Printf("Do: ", err) + return nil, nil, err + } + + return resp.Body, resp.Header, nil +} From de1c335cbe346858909a6f3bf8ec90cf5ce5b185 Mon Sep 17 00:00:00 2001 From: Conrad Wood Date: Wed, 10 Jan 2018 22:33:08 +0000 Subject: [PATCH 4/6] . --- README.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/README.txt b/README.txt index e69de29..8b13789 100644 --- a/README.txt +++ b/README.txt @@ -0,0 +1 @@ + From 29c0b0dcfdeb5ccf86789e7bd846948d6a62f3e4 Mon Sep 17 00:00:00 2001 From: Conrad Wood Date: Wed, 10 Jan 2018 22:34:21 +0000 Subject: [PATCH 5/6] . --- README.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/README.txt b/README.txt index 8b13789..139597f 100644 --- a/README.txt +++ b/README.txt @@ -1 +1,2 @@ + From 3bd6e0a5f70456f7ed576f7e518b90468bc517f0 Mon Sep 17 00:00:00 2001 From: Conrad Wood Date: Wed, 10 Jan 2018 22:36:26 +0000 Subject: [PATCH 6/6] . --- README.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/README.txt b/README.txt index 139597f..b28b04f 100644 --- a/README.txt +++ b/README.txt @@ -1,2 +1,3 @@ +