Skip to content

Commit

Permalink
Merge pull request #6233 from marcoreni/feature/4990_pinpoint_apns_sa…
Browse files Browse the repository at this point in the history
…ndbox_channel

New resource: aws_pinpoint_apns_sandbox_channel
  • Loading branch information
bflad authored Oct 25, 2018
2 parents 0e83bcf + 37df2f1 commit 43922f9
Show file tree
Hide file tree
Showing 5 changed files with 479 additions and 0 deletions.
1 change: 1 addition & 0 deletions aws/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -683,6 +683,7 @@ func Provider() terraform.ResourceProvider {
"aws_pinpoint_app": resourceAwsPinpointApp(),
"aws_pinpoint_adm_channel": resourceAwsPinpointADMChannel(),
"aws_pinpoint_apns_channel": resourceAwsPinpointAPNSChannel(),
"aws_pinpoint_apns_sandbox_channel": resourceAwsPinpointAPNSSandboxChannel(),
"aws_pinpoint_baidu_channel": resourceAwsPinpointBaiduChannel(),
"aws_pinpoint_email_channel": resourceAwsPinpointEmailChannel(),
"aws_pinpoint_event_stream": resourceAwsPinpointEventStream(),
Expand Down
159 changes: 159 additions & 0 deletions aws/resource_aws_pinpoint_apns_sandbox_channel.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
package aws

import (
"errors"
"fmt"
"log"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/pinpoint"
"github.com/hashicorp/terraform/helper/schema"
)

func resourceAwsPinpointAPNSSandboxChannel() *schema.Resource {
return &schema.Resource{
Create: resourceAwsPinpointAPNSSandboxChannelUpsert,
Read: resourceAwsPinpointAPNSSandboxChannelRead,
Update: resourceAwsPinpointAPNSSandboxChannelUpsert,
Delete: resourceAwsPinpointAPNSSandboxChannelDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},

Schema: map[string]*schema.Schema{
"application_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"bundle_id": {
Type: schema.TypeString,
Optional: true,
Sensitive: true,
},
"certificate": {
Type: schema.TypeString,
Optional: true,
Sensitive: true,
},
"default_authentication_method": {
Type: schema.TypeString,
Optional: true,
},
"enabled": {
Type: schema.TypeBool,
Optional: true,
Default: true,
},
"private_key": {
Type: schema.TypeString,
Optional: true,
Sensitive: true,
},
"team_id": {
Type: schema.TypeString,
Optional: true,
Sensitive: true,
},
"token_key": {
Type: schema.TypeString,
Optional: true,
Sensitive: true,
},
"token_key_id": {
Type: schema.TypeString,
Optional: true,
Sensitive: true,
},
},
}
}

func resourceAwsPinpointAPNSSandboxChannelUpsert(d *schema.ResourceData, meta interface{}) error {
certificate, certificateOk := d.GetOk("certificate")
privateKey, privateKeyOk := d.GetOk("private_key")

bundleId, bundleIdOk := d.GetOk("bundle_id")
teamId, teamIdOk := d.GetOk("team_id")
tokenKey, tokenKeyOk := d.GetOk("token_key")
tokenKeyId, tokenKeyIdOk := d.GetOk("token_key_id")

if !(certificateOk && privateKeyOk) && !(bundleIdOk && teamIdOk && tokenKeyOk && tokenKeyIdOk) {
return errors.New("At least one set of credentials is required; either [certificate, private_key] or [bundle_id, team_id, token_key, token_key_id]")
}

conn := meta.(*AWSClient).pinpointconn

applicationId := d.Get("application_id").(string)

params := &pinpoint.APNSSandboxChannelRequest{}

params.DefaultAuthenticationMethod = aws.String(d.Get("default_authentication_method").(string))
params.Enabled = aws.Bool(d.Get("enabled").(bool))

params.Certificate = aws.String(certificate.(string))
params.PrivateKey = aws.String(privateKey.(string))

params.BundleId = aws.String(bundleId.(string))
params.TeamId = aws.String(teamId.(string))
params.TokenKey = aws.String(tokenKey.(string))
params.TokenKeyId = aws.String(tokenKeyId.(string))

req := pinpoint.UpdateApnsSandboxChannelInput{
ApplicationId: aws.String(applicationId),
APNSSandboxChannelRequest: params,
}

_, err := conn.UpdateApnsSandboxChannel(&req)
if err != nil {
return fmt.Errorf("error updating Pinpoint APNs Sandbox Channel for Application %s: %s", applicationId, err)
}

d.SetId(applicationId)

return resourceAwsPinpointAPNSSandboxChannelRead(d, meta)
}

func resourceAwsPinpointAPNSSandboxChannelRead(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).pinpointconn

log.Printf("[INFO] Reading Pinpoint APNs Channel for Application %s", d.Id())

output, err := conn.GetApnsSandboxChannel(&pinpoint.GetApnsSandboxChannelInput{
ApplicationId: aws.String(d.Id()),
})
if err != nil {
if isAWSErr(err, pinpoint.ErrCodeNotFoundException, "") {
log.Printf("[WARN] Pinpoint APNs Sandbox Channel for application %s not found, error code (404)", d.Id())
d.SetId("")
return nil
}

return fmt.Errorf("error getting Pinpoint APNs Sandbox Channel for application %s: %s", d.Id(), err)
}

d.Set("application_id", output.APNSSandboxChannelResponse.ApplicationId)
d.Set("default_authentication_method", output.APNSSandboxChannelResponse.DefaultAuthenticationMethod)
d.Set("enabled", output.APNSSandboxChannelResponse.Enabled)
// Sensitive params are not returned

return nil
}

func resourceAwsPinpointAPNSSandboxChannelDelete(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).pinpointconn

log.Printf("[DEBUG] Deleting Pinpoint APNs Sandbox Channel: %s", d.Id())
_, err := conn.DeleteApnsSandboxChannel(&pinpoint.DeleteApnsSandboxChannelInput{
ApplicationId: aws.String(d.Id()),
})

if isAWSErr(err, pinpoint.ErrCodeNotFoundException, "") {
return nil
}

if err != nil {
return fmt.Errorf("error deleting Pinpoint APNs Sandbox Channel for Application %s: %s", d.Id(), err)
}
return nil
}
Loading

0 comments on commit 43922f9

Please sign in to comment.