Skip to content

Commit

Permalink
refactor HTTP API calls to common func
Browse files Browse the repository at this point in the history
  • Loading branch information
gypsydiver committed Dec 18, 2018
1 parent f56589b commit c3bbb32
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 80 deletions.
48 changes: 23 additions & 25 deletions jumpcloud/resource_user_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"net/http"

jcapiv2 "github.com/TheJumpCloud/jcapi-go/v2"
"github.com/cognotektgmbh/terraform-provider-jumpcloud/util"
"github.com/hashicorp/terraform/helper/schema"
)

Expand Down Expand Up @@ -65,7 +66,8 @@ func resourceUserGroupCreate(d *schema.ResourceData, m interface{}) error {

body := jcapiv2.UserGroupPost{Name: d.Get("name").(string)}

// For Attributes.PosixGroups, only the first member of the slice is considered by the JCAPI
// For Attributes.PosixGroups, only the first member of the slice
// is considered by the JCAPI
if attr, ok := expandAttributes(d.Get("attributes")); ok {
body.Attributes = attr
}
Expand All @@ -74,10 +76,12 @@ func resourceUserGroupCreate(d *schema.ResourceData, m interface{}) error {
"body": body,
"xOrgId": d.Get("xorgid").(string),
}
group, res, err := client.UserGroupsApi.GroupsUserPost(context.TODO(), "", Accept, req)
group, res, err := client.UserGroupsApi.GroupsUserPost(context.TODO(),
"", headerAccept, req)
if err != nil {
// TODO: sort out error essentials
return fmt.Errorf("error creating user group %s: %s - response = %+v", (req["body"].(jcapiv2.UserGroupPost)).Name, err, res)
return fmt.Errorf("error creating user group %s: %s - response = %+v",
(req["body"].(jcapiv2.UserGroupPost)).Name, err, res)
}

d.SetId(group.Id)
Expand All @@ -87,7 +91,7 @@ func resourceUserGroupCreate(d *schema.ResourceData, m interface{}) error {
func resourceUserGroupRead(d *schema.ResourceData, m interface{}) error {
config := m.(*jcapiv2.Configuration)

group, ok, err := trueUserGroupRead(config, d.Id())
group, ok, err := userGroupReadHelper(config, d.Id())
if err != nil {
return err
}
Expand All @@ -109,17 +113,13 @@ func resourceUserGroupRead(d *schema.ResourceData, m interface{}) error {
return nil
}

func trueUserGroupRead(config *jcapiv2.Configuration, id string) (ug *UserGroup, ok bool, err error) {
req, err := http.NewRequest(http.MethodGet, config.BasePath+"/usergroups/"+id, nil)
if err != nil {
return
}

req.Header.Add("x-api-key", config.DefaultHeader["x-api-key"])
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
func userGroupReadHelper(config *jcapiv2.Configuration, id string) (ug *UserGroup,
ok bool, err error) {

res, err := http.DefaultClient.Do(req)
res, err := util.RequestHTTP(http.MethodGet,
config.DefaultHeader,
config.BasePath+"/usergroups/"+id,
nil)
if err != nil {
return
}
Expand All @@ -143,33 +143,31 @@ func resourceUserGroupUpdate(d *schema.ResourceData, m interface{}) error {
} else {
return errors.New("unable to update, attributes not expandable")
}
b, _ := json.Marshal(body)

req, err := http.NewRequest(http.MethodPut, config.BasePath+"/usergroups/"+d.Id(), bytes.NewBuffer(b))
b, err := json.Marshal(body)
if err != nil {
return err
}

req.Header.Add("x-api-key", config.DefaultHeader["x-api-key"])
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")

_, err = http.DefaultClient.Do(req)
_, err = util.RequestHTTP(http.MethodPatch,
config.DefaultHeader,
config.BasePath+"/usergroups/"+d.Id(),
bytes.NewBuffer(b))
if err != nil {
return err
}
// TODO: HTTP errors, generic request func?

return resourceUserGroupRead(d, m)
}

func resourceUserGroupDelete(d *schema.ResourceData, m interface{}) error {
config := m.(*jcapiv2.Configuration)
client := jcapiv2.NewAPIClient(config)

res, err := client.UserGroupsApi.GroupsUserDelete(context.TODO(), d.Id(), "", Accept, nil)
res, err := client.UserGroupsApi.GroupsUserDelete(context.TODO(),
d.Id(), "", headerAccept, nil)
if err != nil {
// TODO: sort out error essentials
return fmt.Errorf("error deleting user group: %s - response = %+v", err, res)
return fmt.Errorf("error deleting user group: %s-response = %+v", err, res)
}
d.SetId("")
return nil
Expand Down
55 changes: 0 additions & 55 deletions jumpcloud/resource_user_group_test.go

This file was deleted.

25 changes: 25 additions & 0 deletions util/http.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package util

import (
"io"
"net/http"
)

// RequestHTTP encapsulates boilerplate related to making an HTTP request
func RequestHTTP(method string, headers map[string]string,
URL string, requestBody io.Reader) (res *http.Response, err error) {

req, err := http.NewRequest(method, URL, requestBody)
if err != nil {
return
}

for k, v := range headers {
req.Header.Add(k, v)
}

req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")

return http.DefaultClient.Do(req)
}

0 comments on commit c3bbb32

Please sign in to comment.