github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/networklists/network_list_subscription.go (about)

     1  package networklists
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  )
     8  
     9  type (
    10  	// The NetworkListSubscription interface supports creating, modifying and removing network list subscriptions.
    11  	//
    12  	// https://developer.akamai.com/api/cloud_security/network_lists/v2.html#networklist
    13  	NetworkListSubscription interface {
    14  		// https://developer.akamai.com/api/cloud_security/network_lists/v2.html#postsubscribe
    15  		GetNetworkListSubscription(ctx context.Context, params GetNetworkListSubscriptionRequest) (*GetNetworkListSubscriptionResponse, error)
    16  
    17  		// https://developer.akamai.com/api/cloud_security/network_lists/v2.html#postsubscribe
    18  		UpdateNetworkListSubscription(ctx context.Context, params UpdateNetworkListSubscriptionRequest) (*UpdateNetworkListSubscriptionResponse, error)
    19  
    20  		// https://developer.akamai.com/api/cloud_security/network_lists/v2.html#postunsubscribe
    21  		RemoveNetworkListSubscription(ctx context.Context, params RemoveNetworkListSubscriptionRequest) (*RemoveNetworkListSubscriptionResponse, error)
    22  	}
    23  
    24  	// GetNetworkListSubscriptionRequest contains request parameters for GetNetworkListSubscription
    25  	GetNetworkListSubscriptionRequest struct {
    26  		Recipients []string `json:"-"`
    27  		UniqueIds  []string `json:"-"`
    28  	}
    29  
    30  	// GetNetworkListSubscriptionResponse contains response from GetNetworkListSubscription
    31  	GetNetworkListSubscriptionResponse struct {
    32  		Links struct {
    33  			Create struct {
    34  				Href   string `json:"href"`
    35  				Method string `json:"method"`
    36  			} `json:"create"`
    37  		} `json:"links"`
    38  		NetworkLists []struct {
    39  			ElementCount int `json:"elementCount"`
    40  			Links        struct {
    41  				ActivateInProduction struct {
    42  					Href   string `json:"href"`
    43  					Method string `json:"method"`
    44  				} `json:"activateInProduction"`
    45  				ActivateInStaging struct {
    46  					Href   string `json:"href"`
    47  					Method string `json:"method"`
    48  				} `json:"activateInStaging"`
    49  				AppendItems struct {
    50  					Href   string `json:"href"`
    51  					Method string `json:"method"`
    52  				} `json:"appendItems"`
    53  				Retrieve struct {
    54  					Href string `json:"href"`
    55  				} `json:"retrieve"`
    56  				StatusInProduction struct {
    57  					Href string `json:"href"`
    58  				} `json:"statusInProduction"`
    59  				StatusInStaging struct {
    60  					Href string `json:"href"`
    61  				} `json:"statusInStaging"`
    62  				Update struct {
    63  					Href   string `json:"href"`
    64  					Method string `json:"method"`
    65  				} `json:"update"`
    66  			} `json:"links"`
    67  			Name               string `json:"name"`
    68  			NetworkListType    string `json:"networkListType"`
    69  			ReadOnly           bool   `json:"readOnly"`
    70  			Shared             bool   `json:"shared"`
    71  			SyncPoint          int    `json:"syncPoint"`
    72  			Type               string `json:"type"`
    73  			UniqueID           string `json:"uniqueId"`
    74  			AccessControlGroup string `json:"accessControlGroup,omitempty"`
    75  			Description        string `json:"description,omitempty"`
    76  		} `json:"networkLists"`
    77  	}
    78  
    79  	// UpdateNetworkListSubscriptionRequest contains request parameters for UpdateNetworkListSubscription method
    80  	UpdateNetworkListSubscriptionRequest struct {
    81  		Recipients []string `json:"recipients"`
    82  		UniqueIds  []string `json:"uniqueIds"`
    83  	}
    84  
    85  	// UpdateNetworkListSubscriptionResponse contains response from UpdateNetworkListSubscription method
    86  	UpdateNetworkListSubscriptionResponse struct {
    87  		Empty string `json:"-"`
    88  	}
    89  
    90  	// RemoveNetworkListSubscriptionResponse contains response from RemoveNetworkListSubscription method
    91  	RemoveNetworkListSubscriptionResponse struct {
    92  		Empty string `json:"-"`
    93  	}
    94  
    95  	// RemoveNetworkListSubscriptionRequest contains request parameters for RemoveNetworkListSubscription method
    96  	RemoveNetworkListSubscriptionRequest struct {
    97  		Recipients []string `json:"recipients"`
    98  		UniqueIds  []string `json:"uniqueIds"`
    99  	}
   100  
   101  	// Recipients contains recipients
   102  	Recipients struct {
   103  		Recipients string `json:"notificationRecipients"`
   104  	}
   105  )
   106  
   107  func (p *networklists) GetNetworkListSubscription(ctx context.Context, _ GetNetworkListSubscriptionRequest) (*GetNetworkListSubscriptionResponse, error) {
   108  
   109  	logger := p.Log(ctx)
   110  	logger.Debug("GetNetworkListSubscription")
   111  
   112  	var rval GetNetworkListSubscriptionResponse
   113  
   114  	uri := "/network-list/v2/notifications/subscriptions"
   115  
   116  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   117  	if err != nil {
   118  		return nil, fmt.Errorf("failed to create getnetworklistsubscription request: %s", err.Error())
   119  	}
   120  
   121  	resp, err := p.Exec(req, &rval)
   122  	if err != nil {
   123  		return nil, fmt.Errorf("getnetworklistsubscription  request failed: %s", err.Error())
   124  	}
   125  
   126  	if resp.StatusCode != http.StatusOK {
   127  		return nil, p.Error(resp)
   128  	}
   129  
   130  	return &rval, nil
   131  
   132  }
   133  
   134  // Update will update a NetworkListSubscription.
   135  //
   136  // API Docs: // network_lists v2
   137  //
   138  // https://developer.akamai.com/api/cloud_security/network_lists/v2.html#putnetworklistsubscription
   139  
   140  func (p *networklists) UpdateNetworkListSubscription(ctx context.Context, params UpdateNetworkListSubscriptionRequest) (*UpdateNetworkListSubscriptionResponse, error) {
   141  
   142  	logger := p.Log(ctx)
   143  	logger.Debug("UpdateNetworkListSubscription")
   144  
   145  	postURL := "/network-list/v2/notifications/subscribe"
   146  
   147  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, postURL, nil)
   148  	if err != nil {
   149  		return nil, fmt.Errorf("failed to create create NetworkListSubscriptionrequest: %s", err.Error())
   150  	}
   151  
   152  	var rval UpdateNetworkListSubscriptionResponse
   153  	resp, err := p.Exec(req, &rval, params)
   154  	if err != nil {
   155  		return nil, fmt.Errorf("remove NetworkListSubscription request failed: %s", err.Error())
   156  	}
   157  
   158  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated && resp.StatusCode != http.StatusNoContent {
   159  		return nil, p.Error(resp)
   160  	}
   161  
   162  	return &rval, nil
   163  }
   164  
   165  // Remove will remove a NetworkListSubscription.
   166  //
   167  // API Docs: // network_lists v2
   168  //
   169  // https://developer.akamai.com/api/cloud_security/network_lists/v2.html#putnetworklistsubscription
   170  
   171  func (p *networklists) RemoveNetworkListSubscription(ctx context.Context, params RemoveNetworkListSubscriptionRequest) (*RemoveNetworkListSubscriptionResponse, error) {
   172  
   173  	logger := p.Log(ctx)
   174  	logger.Debug("UpdateNetworkListSubscription")
   175  
   176  	postURL := "/network-list/v2/notifications/unsubscribe"
   177  
   178  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, postURL, nil)
   179  	if err != nil {
   180  		return nil, fmt.Errorf("failed to create create NetworkListSubscriptionrequest: %s", err.Error())
   181  	}
   182  
   183  	var rval RemoveNetworkListSubscriptionResponse
   184  	resp, err := p.Exec(req, &rval, params)
   185  	if err != nil {
   186  		return nil, fmt.Errorf("remove NetworkListSubscription request failed: %s", err.Error())
   187  	}
   188  
   189  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated && resp.StatusCode != http.StatusNoContent {
   190  		return nil, p.Error(resp)
   191  	}
   192  
   193  	return &rval, nil
   194  }