From 60101e37b5c5b66beeff178ab4f2452ff5525bf8 Mon Sep 17 00:00:00 2001 From: Manoj Kurien Date: Thu, 20 Jul 2023 12:10:43 +0100 Subject: [PATCH] [Feat] Link branding validation --- docs/resources/link_branding_validation.md | 26 +++++ sendgrid/provider.go | 1 + ...ource_sendgrid_link_branding_validation.go | 99 +++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 docs/resources/link_branding_validation.md create mode 100644 sendgrid/resource_sendgrid_link_branding_validation.go diff --git a/docs/resources/link_branding_validation.md b/docs/resources/link_branding_validation.md new file mode 100644 index 0000000..a674e8f --- /dev/null +++ b/docs/resources/link_branding_validation.md @@ -0,0 +1,26 @@ +# sendgrid_link_branding_validation + +Provide a resource to manage a link branding validation. + +## Example Usage + +```hcl + + resource "sendgrid_link_branding_validation" "foo" { + link_branding_id = sendgrid_link_branding.foo.id + } + +``` + +## Argument Reference + +The following arguments are supported: + +* `link_branding_id` - (Required) Id of the link branding to validate. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `valid` - Indicates if this is a valid link branding or not. + diff --git a/sendgrid/provider.go b/sendgrid/provider.go index 8e00304..1fc6571 100644 --- a/sendgrid/provider.go +++ b/sendgrid/provider.go @@ -91,6 +91,7 @@ func Provider() *schema.Provider { "sendgrid_domain_authentication": resourceSendgridDomainAuthentication(), "sendgrid_domain_authentication_validation": resourceSendgridDomainAuthenticationValidation(), "sendgrid_link_branding": resourceSendgridLinkBranding(), + "sendgrid_link_branding_validation": resourceSendgridLinkBrandingValidation(), "sendgrid_sso_integration": resourceSendgridSSOIntegration(), "sendgrid_sso_certificate": resourceSendgridSSOCertificate(), "sendgrid_teammate": resourceSendgridTeammate(), diff --git a/sendgrid/resource_sendgrid_link_branding_validation.go b/sendgrid/resource_sendgrid_link_branding_validation.go new file mode 100644 index 0000000..b274029 --- /dev/null +++ b/sendgrid/resource_sendgrid_link_branding_validation.go @@ -0,0 +1,99 @@ +/* +Provide a resource to manage a link branding validation. +Example Usage +```hcl + + resource "sendgrid_link_branding_validation" "foo" { + link_branding_id = sendgrid_link_branding.foo.id + } + +``` +*/ +package sendgrid + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + sendgrid "github.com/octoenergy/terraform-provider-sendgrid/sdk" +) + +// https://docs.sendgrid.com/api-reference/link-branding/validate-a-branded-link +func resourceSendgridLinkBrandingValidation() *schema.Resource { //nolint:funlen + return &schema.Resource{ + CreateContext: resourceSendgridLinkBrandingValidationCreate, + ReadContext: resourceSendgridLinkBrandingValidationRead, + UpdateContext: resourceSendgridLinkBrandingValidationUpdate, + DeleteContext: resourceSendgridLinkBrandingValidationDelete, + Importer: &schema.ResourceImporter{ + StateContext: schema.ImportStatePassthroughContext, + }, + + Schema: map[string]*schema.Schema{ + "link_branding_id": { + Type: schema.TypeString, + Description: "Id of the link branding to validate.", + Required: true, + }, + + "valid": { + Type: schema.TypeBool, + Description: "Indicates if this is a valid link branding or not.", + Computed: true, + }, + }, + } +} + +func resourceSendgridLinkBrandingValidationCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { + return validateLinkBranding(ctx, d, m) +} + +func validateLinkBranding(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { + c := m.(*sendgrid.Client) + + if err := c.ValidateLinkBranding(ctx, d.Get("link_branding_id").(string)); err.Err != nil || err.StatusCode != 200 { + if err.Err != nil { + return diag.FromErr(err.Err) + } + return diag.Errorf("unable to validate domain DNS configuration") + } + + return resourceSendgridLinkBrandingValidationRead(ctx, d, m) +} + +func resourceSendgridLinkBrandingValidationRead( //nolint:funlen,cyclop + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { + c := m.(*sendgrid.Client) + + link, err := c.ReadLinkBranding(ctx, d.Get("link_branding_id").(string)) + if err.Err != nil { + return diag.FromErr(err.Err) + } + + //nolint:errcheck + d.Set("valid", link.Valid) + d.SetId(fmt.Sprint(link.ID)) + return nil +} + +func resourceSendgridLinkBrandingValidationUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { + return validateLinkBranding(ctx, d, m) +} + +func resourceSendgridLinkBrandingValidationDelete(context.Context, *schema.ResourceData, interface{}) diag.Diagnostics { + return nil +}