Skip to content

Commit

Permalink
Added auth0_grant resource type
Browse files Browse the repository at this point in the history
  • Loading branch information
dnna committed Aug 29, 2017
1 parent c5b7ac3 commit e762dfb
Show file tree
Hide file tree
Showing 3 changed files with 208 additions and 3 deletions.
1 change: 1 addition & 0 deletions provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ func Provider() *schema.Provider {

ResourcesMap: map[string]*schema.Resource{
"auth0_client": resourceClient(),
"auth0_grant": resourceGrant(),
},

ConfigureFunc: providerConfigure,
Expand Down
14 changes: 11 additions & 3 deletions resource_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ func resourceClient() *schema.Resource {
Delete: resourceClientDelete,

Schema: map[string]*schema.Schema{
"client_id": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"client_secret": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"name": &schema.Schema{
Type: schema.TypeString,
Required: true,
Expand Down Expand Up @@ -116,7 +124,7 @@ func resourceClientCreate(d *schema.ResourceData, m interface{}) error {
log.Println("Response JSON:" + string(data))

if(resp.StatusCode != 201) {
return errors.New("Error: Invalid status code during create")
return errors.New("Error: Invalid status code during create: "+ string(data))
}

var respClient Client
Expand Down Expand Up @@ -156,7 +164,7 @@ func resourceClientRead(d *schema.ResourceData, m interface{}) error {
d.SetId("")
return nil
} else {
return errors.New("Error: Invalid status code during read")
return errors.New("Error: Invalid status code during read: "+ string(data))
}
}

Expand Down Expand Up @@ -206,7 +214,7 @@ func resourceClientUpdate(d *schema.ResourceData, m interface{}) error {
log.Println("Response JSON:" + string(data))

if(resp.StatusCode != 200) {
return errors.New("Error: Invalid status code during update")
return errors.New("Error: Invalid status code during update: "+ string(data))
}

var respClient Client
Expand Down
196 changes: 196 additions & 0 deletions resource_grant.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
package main

import (
"encoding/json"
"io/ioutil"
"net/http"
"log"
"bytes"
"errors"

"github.com/hashicorp/terraform/helper/schema"
)

func resourceGrant() *schema.Resource {
return &schema.Resource{
Create: resourceGrantCreate,
Read: resourceGrantRead,
Update: resourceGrantUpdate,
Delete: resourceGrantDelete,

Schema: map[string]*schema.Schema{
"grant_id": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"client_id": &schema.Schema{
Type: schema.TypeString,
Required: true,
},
"audience": &schema.Schema{
Type: schema.TypeString,
Required: true,
},
"scope": &schema.Schema{
Type: schema.TypeList,
Elem: &schema.Schema{Type: schema.TypeString},
Required: true,
},
},
}
}

type Grant struct {
Id string `json:"id,omitempty"`
Client_id string `json:"client_id,omitempty"`
Audience string `json:"audience,omitempty"`
Scope []interface{} `json:"scope"`
}

func resourceGrantCreate(d *schema.ResourceData, m interface{}) error {
reqClient := Grant{
Client_id: d.Get("client_id").(string),
Audience: d.Get("audience").(string),
Scope: d.Get("scope").([]interface{}),
}

jsonValue, err := json.Marshal(reqClient)
if err != nil {
return err
}
log.Println("Request JSON: " + string(jsonValue))

config := m.(Config)
client := http.Client{}
req, err := http.NewRequest("POST", "https://" + config.domain + "/api/v2/client-grants", bytes.NewBuffer(jsonValue))
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer" + config.accessToken)
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
log.Println("Response JSON:" + string(data))

if(resp.StatusCode != 201) {
return errors.New("Error: Invalid status code during create: "+string(data))
}

var respClient Grant
err = json.Unmarshal(data, &respClient)
if err != nil {
return err
}

log.Println("New client_id:" + respClient.Id)
d.Set("grant_id", respClient.Id)
d.SetId(respClient.Id)
return nil
}

func resourceGrantRead(d *schema.ResourceData, m interface{}) error {
config := m.(Config)
client := http.Client{}
req, err := http.NewRequest("GET", "https://" + config.domain + "/api/v2/client-grants?client_id="+d.Get("client_id").(string)+"&audience="+d.Get("audience").(string), nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer" + config.accessToken)

resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
log.Println("Response JSON:" + string(data))

if(resp.StatusCode != 200) {
return errors.New("Error: Invalid status code during read: " + string(data))
}

var respClient[] Grant
err = json.Unmarshal(data, &respClient)
if err != nil {
return err
}

if(len(respClient) > 1) {
return errors.New("Error: Multiple grants found for the same client and audience: " + string(data))
}

if(len(respClient) <= 0) {
d.SetId("")
return nil
}

return nil
}

func resourceGrantUpdate(d *schema.ResourceData, m interface{}) error {
reqClient := Grant{
Client_id: d.Get("client_id").(string),
Audience: d.Get("audience").(string),
Scope: d.Get("scope").([]interface{}),
}

jsonValue, err := json.Marshal(reqClient)
if err != nil {
return err
}
log.Println("Request JSON: " + string(jsonValue))

config := m.(Config)
client := http.Client{}
req, err := http.NewRequest("PATCH", "https://" + config.domain + "/api/v2/client-grants/" + d.Id(), bytes.NewBuffer(jsonValue))
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer" + config.accessToken)
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
log.Println("Response JSON:" + string(data))

if(resp.StatusCode != 200) {
return errors.New("Error: Invalid status code during update: " + string(data))
}

var respClient Grant
err = json.Unmarshal(data, &respClient)
if err != nil {
return err
}

return nil
}

func resourceGrantDelete(d *schema.ResourceData, m interface{}) error {
config := m.(Config)
client := http.Client{}
req, err := http.NewRequest("DELETE", "https://" + config.domain + "/api/v2/client-grants/" + d.Id(), nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer" + config.accessToken)

resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
log.Println("Response Status Code:" + string(resp.StatusCode))

if(resp.StatusCode != 204) {
return errors.New("Error: Invalid status code during delete")
}

return nil
}

0 comments on commit e762dfb

Please sign in to comment.