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

     1  package networklists
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  	"time"
     8  
     9  	validation "github.com/go-ozzo/ozzo-validation/v4"
    10  )
    11  
    12  type (
    13  	// The Activations interface supports activating and deactivating network lists.
    14  	//
    15  	// https://developer.akamai.com/api/cloud_security/network_lists/v2.html#activationrequest
    16  	Activations interface {
    17  		// https://developer.akamai.com/api/cloud_security/network_lists/v2.html#getactivationstatus
    18  		GetActivations(ctx context.Context, params GetActivationsRequest) (*GetActivationsResponse, error)
    19  
    20  		// https://developer.akamai.com/api/cloud_security/network_lists/v2.html#getactivationstatus
    21  		GetActivation(ctx context.Context, params GetActivationRequest) (*GetActivationResponse, error)
    22  
    23  		// https://developer.akamai.com/api/cloud_security/network_lists/v2.html#postactivate
    24  		CreateActivations(ctx context.Context, params CreateActivationsRequest) (*CreateActivationsResponse, error)
    25  
    26  		// https://developer.akamai.com/api/cloud_security/network_lists/v2.html#postactivate
    27  		RemoveActivations(ctx context.Context, params RemoveActivationsRequest) (*RemoveActivationsResponse, error)
    28  	}
    29  
    30  	// GetActivationsRequest contains request parameters for getting activation status
    31  	GetActivationsRequest struct {
    32  		UniqueID     string `json:"-"`
    33  		Action       string `json:"-"`
    34  		Network      string `json:"network"`
    35  		ActivationID int    `json:"activationId"`
    36  	}
    37  
    38  	// GetActivationRequest contains request parameters for getting activation details
    39  	GetActivationRequest struct {
    40  		ActivationID int `json:"activationId"`
    41  	}
    42  
    43  	// GetActivationsResponse contains response with activation status
    44  	GetActivationsResponse struct {
    45  		ActivationID       int    `json:"activationId"`
    46  		ActivationComments string `json:"activationComments"`
    47  		ActivationStatus   string `json:"activationStatus"`
    48  		SyncPoint          int    `json:"syncPoint"`
    49  		UniqueID           string `json:"uniqueId"`
    50  		Fast               bool   `json:"fast"`
    51  		DispatchCount      int    `json:"dispatchCount"`
    52  		Links              struct {
    53  			AppendItems struct {
    54  				Href   string `json:"href"`
    55  				Method string `json:"method"`
    56  			} `json:"appendItems"`
    57  			Retrieve struct {
    58  				Href string `json:"href"`
    59  			} `json:"retrieve"`
    60  			StatusInProduction struct {
    61  				Href string `json:"href"`
    62  			} `json:"statusInProduction"`
    63  			StatusInStaging struct {
    64  				Href string `json:"href"`
    65  			} `json:"statusInStaging"`
    66  			SyncPointHistory struct {
    67  				Href string `json:"href"`
    68  			} `json:"syncPointHistory"`
    69  			Update struct {
    70  				Href   string `json:"href"`
    71  				Method string `json:"method"`
    72  			} `json:"update"`
    73  			ActivationDetails struct {
    74  				Href string `json:"href"`
    75  			} `json:"activationDetails"`
    76  		} `json:"links"`
    77  	}
    78  
    79  	// GetActivationResponse contains response with activation details
    80  	GetActivationResponse struct {
    81  		ActivationID     int       `json:"activationId"`
    82  		CreateDate       time.Time `json:"createDate"`
    83  		CreatedBy        string    `json:"createdBy"`
    84  		Environment      string    `json:"environment"`
    85  		Fast             bool      `json:"fast"`
    86  		ActivationStatus string    `json:"status"`
    87  		NetworkList      struct {
    88  			ActivationComments string `json:"activationComments"`
    89  			ActivationStatus   string `json:"activationStatus"`
    90  			Links              struct {
    91  				AppendItems struct {
    92  					Href   string `json:"href"`
    93  					Method string `json:"method"`
    94  				} `json:"appendItems"`
    95  				Retrieve struct {
    96  					Href string `json:"href"`
    97  				} `json:"retrieve"`
    98  				StatusInProduction struct {
    99  					Href string `json:"href"`
   100  				} `json:"statusInProduction"`
   101  				StatusInStaging struct {
   102  					Href string `json:"href"`
   103  				} `json:"statusInStaging"`
   104  				SyncPointHistory struct {
   105  					Href string `json:"href"`
   106  				} `json:"syncPointHistory"`
   107  				Update struct {
   108  					Href   string `json:"href"`
   109  					Method string `json:"method"`
   110  				} `json:"update"`
   111  			} `json:"links"`
   112  			SyncPoint int    `json:"syncPoint"`
   113  			UniqueID  string `json:"uniqueId"`
   114  		} `json:"networkList"`
   115  	}
   116  
   117  	// CreateActivationsRequest contains request parameters for creating new activation
   118  	CreateActivationsRequest struct {
   119  		UniqueID               string   `json:"-"`
   120  		Action                 string   `json:"-"`
   121  		Network                string   `json:"network"`
   122  		Comments               string   `json:"comments"`
   123  		NotificationRecipients []string `json:"notificationRecipients"`
   124  	}
   125  
   126  	// CreateActivationsResponse contains response after creating new activation
   127  	CreateActivationsResponse struct {
   128  		ActivationID       int    `json:"activationId"`
   129  		ActivationComments string `json:"activationComments"`
   130  		ActivationStatus   string `json:"activationStatus"`
   131  		SyncPoint          int    `json:"syncPoint"`
   132  		UniqueID           string `json:"uniqueId"`
   133  		Fast               bool   `json:"fast"`
   134  		DispatchCount      int    `json:"dispatchCount"`
   135  		Links              struct {
   136  			AppendItems struct {
   137  				Href   string `json:"href"`
   138  				Method string `json:"method"`
   139  			} `json:"appendItems"`
   140  			Retrieve struct {
   141  				Href string `json:"href"`
   142  			} `json:"retrieve"`
   143  			StatusInProduction struct {
   144  				Href string `json:"href"`
   145  			} `json:"statusInProduction"`
   146  			StatusInStaging struct {
   147  				Href string `json:"href"`
   148  			} `json:"statusInStaging"`
   149  			SyncPointHistory struct {
   150  				Href string `json:"href"`
   151  			} `json:"syncPointHistory"`
   152  			Update struct {
   153  				Href   string `json:"href"`
   154  				Method string `json:"method"`
   155  			} `json:"update"`
   156  			ActivationDetails struct {
   157  				Href string `json:"href"`
   158  			} `json:"activationDetails"`
   159  		} `json:"links"`
   160  	}
   161  
   162  	// RemoveActivationsRequest contains request parameters of Activation to deactivate
   163  	RemoveActivationsRequest struct {
   164  		UniqueID               string   `json:"-"`
   165  		ActivationID           int      `json:"-"`
   166  		Action                 string   `json:"action"`
   167  		Network                string   `json:"network"`
   168  		Comments               string   `json:"comments"`
   169  		NotificationRecipients []string `json:"notificationRecipients"`
   170  	}
   171  
   172  	// RemoveActivationsResponse contains response of Activation deactivation
   173  	RemoveActivationsResponse struct {
   174  		ActivationID       int    `json:"activationId"`
   175  		ActivationComments string `json:"activationComments"`
   176  		ActivationStatus   string `json:"activationStatus"`
   177  		SyncPoint          int    `json:"syncPoint"`
   178  		UniqueID           string `json:"uniqueId"`
   179  		Fast               bool   `json:"fast"`
   180  		DispatchCount      int    `json:"dispatchCount"`
   181  		Links              struct {
   182  			AppendItems struct {
   183  				Href   string `json:"href"`
   184  				Method string `json:"method"`
   185  			} `json:"appendItems"`
   186  			Retrieve struct {
   187  				Href string `json:"href"`
   188  			} `json:"retrieve"`
   189  			StatusInProduction struct {
   190  				Href string `json:"href"`
   191  			} `json:"statusInProduction"`
   192  			StatusInStaging struct {
   193  				Href string `json:"href"`
   194  			} `json:"statusInStaging"`
   195  			SyncPointHistory struct {
   196  				Href string `json:"href"`
   197  			} `json:"syncPointHistory"`
   198  			Update struct {
   199  				Href   string `json:"href"`
   200  				Method string `json:"method"`
   201  			} `json:"update"`
   202  			ActivationDetails struct {
   203  				Href string `json:"href"`
   204  			} `json:"activationDetails"`
   205  		} `json:"links"`
   206  	}
   207  
   208  	// ActivationValue is used to create an "enum" of possible Activation.ActivationType values
   209  	ActivationValue string
   210  
   211  	// NetworkValue is used to create an "enum" of possible Activation.Network values
   212  	NetworkValue string
   213  
   214  	// StatusValue is used to create an "enum" of possible Activation.Status values
   215  	StatusValue string
   216  )
   217  
   218  const (
   219  	// ActivationTypeActivate Activation.ActivationType value ACTIVATE
   220  	ActivationTypeActivate ActivationValue = "ACTIVATE"
   221  	// ActivationTypeDeactivate Activation.ActivationType value DEACTIVATE
   222  	ActivationTypeDeactivate ActivationValue = "DEACTIVATE"
   223  
   224  	// NetworkProduction Activation.Network value PRODUCTION
   225  	NetworkProduction NetworkValue = "PRODUCTION"
   226  	// NetworkStaging Activation.Network value STAGING
   227  	NetworkStaging NetworkValue = "STAGING"
   228  
   229  	// StatusActive Activation.Status value ACTIVE
   230  	StatusActive StatusValue = "ACTIVATED"
   231  	// StatusInactive Activation.Status value INACTIVE
   232  	StatusInactive StatusValue = "INACTIVE"
   233  	// StatusPending Activation.Status value RECEIVED
   234  	StatusPending StatusValue = "RECEIVED"
   235  	// StatusAborted Activation.Status value ABORTED
   236  	StatusAborted StatusValue = "ABORTED"
   237  	// StatusFailed Activation.Status value FAILED
   238  	StatusFailed StatusValue = "FAILED"
   239  	// StatusDeactivated Activation.Status value DEACTIVATED
   240  	StatusDeactivated StatusValue = "DEACTIVATED"
   241  	// StatusPendingDeactivation Activation.Status value PENDING_DEACTIVATION
   242  	StatusPendingDeactivation StatusValue = "PENDING_DEACTIVATION"
   243  	// StatusNew Activation.Status value NEW
   244  	StatusNew StatusValue = "NEW"
   245  )
   246  
   247  // Validate validates GetActivationsRequest
   248  func (v GetActivationsRequest) Validate() error {
   249  	return validation.Errors{
   250  		"UniqueID": validation.Validate(v.UniqueID, validation.Required),
   251  	}.Filter()
   252  }
   253  
   254  // Validate validates GetActivationRequest
   255  func (v GetActivationRequest) Validate() error {
   256  	return validation.Errors{
   257  		"ActivationID": validation.Validate(v.ActivationID, validation.Required),
   258  	}.Filter()
   259  }
   260  
   261  // GetActivations populates  *Activations with it's related Activations
   262  //
   263  // API Docs: // appsec v1
   264  //
   265  // https://developer.akamai.com/api/cloud_security/application_security/v1.html
   266  func (p *networklists) GetActivations(ctx context.Context, params GetActivationsRequest) (*GetActivationsResponse, error) {
   267  	if err := params.Validate(); err != nil {
   268  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   269  	}
   270  
   271  	logger := p.Log(ctx)
   272  	logger.Debug("GetActivations")
   273  
   274  	var rval GetActivationsResponse
   275  
   276  	uri := fmt.Sprintf("/network-list/v2/network-lists/%s/environments/%s/status",
   277  		params.UniqueID,
   278  		params.Network,
   279  	)
   280  
   281  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   282  	if err != nil {
   283  		return nil, fmt.Errorf("failed to create getactivations request: %s", err.Error())
   284  	}
   285  
   286  	resp, err := p.Exec(req, &rval)
   287  	if err != nil {
   288  		return nil, fmt.Errorf("getactivations request failed: %s", err.Error())
   289  	}
   290  
   291  	if resp.StatusCode != http.StatusOK {
   292  		return nil, p.Error(resp)
   293  	}
   294  
   295  	return &rval, nil
   296  }
   297  
   298  // GetActivation populates  *Activation with it's related Activations
   299  //
   300  // API Docs: // appsec v1
   301  //
   302  // https://developer.akamai.com/api/cloud_security/application_security/v1.html
   303  func (p *networklists) GetActivation(ctx context.Context, params GetActivationRequest) (*GetActivationResponse, error) {
   304  	if err := params.Validate(); err != nil {
   305  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   306  	}
   307  
   308  	logger := p.Log(ctx)
   309  	logger.Debug("GetActivation")
   310  
   311  	var rval GetActivationResponse
   312  
   313  	uri := fmt.Sprintf("/network-list/v2/activations/%d",
   314  		params.ActivationID,
   315  	)
   316  
   317  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   318  	if err != nil {
   319  		return nil, fmt.Errorf("failed to create getactivation request: %s", err.Error())
   320  	}
   321  
   322  	resp, err := p.Exec(req, &rval)
   323  	if err != nil {
   324  		return nil, fmt.Errorf("getactivation request failed: %s", err.Error())
   325  	}
   326  
   327  	if resp.StatusCode != http.StatusOK {
   328  		return nil, p.Error(resp)
   329  	}
   330  
   331  	return &rval, nil
   332  }
   333  
   334  // Save activates a given Configuration
   335  //
   336  // If acknowledgeWarnings is true and warnings are returned on the first attempt,
   337  // a second attempt is made, acknowledging the warnings.
   338  //
   339  func (p *networklists) CreateActivations(ctx context.Context, params CreateActivationsRequest) (*CreateActivationsResponse, error) {
   340  
   341  	logger := p.Log(ctx)
   342  	logger.Debug("CreateActivations")
   343  
   344  	uri := fmt.Sprintf("/network-list/v2/network-lists/%s/environments/%s/activate",
   345  		params.UniqueID,
   346  		params.Network,
   347  	)
   348  
   349  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri, nil)
   350  	if err != nil {
   351  		return nil, fmt.Errorf("failed to create create activation request: %s", err.Error())
   352  	}
   353  
   354  	var rval CreateActivationsResponse
   355  
   356  	resp, err := p.Exec(req, &rval, params)
   357  	if err != nil {
   358  		return nil, fmt.Errorf("create activation request failed: %s", err.Error())
   359  	}
   360  
   361  	var rvalget CreateActivationsResponse
   362  
   363  	uriget := fmt.Sprintf("/network-list/v2/network-lists/%s/environments/%s/status",
   364  		params.UniqueID,
   365  		params.Network,
   366  	)
   367  
   368  	req, err = http.NewRequestWithContext(ctx, http.MethodGet, uriget, nil)
   369  	if err != nil {
   370  		return nil, fmt.Errorf("failed to get activation request: %s", err.Error())
   371  	}
   372  
   373  	resp, err = p.Exec(req, &rvalget)
   374  	if err != nil {
   375  		return nil, fmt.Errorf("get activation request failed: %s", err.Error())
   376  	}
   377  
   378  	if resp.StatusCode != http.StatusOK {
   379  		return nil, p.Error(resp)
   380  	}
   381  
   382  	return &rvalget, nil
   383  
   384  }
   385  
   386  // Delete will delete a Activations
   387  //
   388  //
   389  // API Docs: // appsec v1
   390  //
   391  // https://developer.akamai.com/api/cloud_security/application_security/v1.html#deleteactivations
   392  func (p *networklists) RemoveActivations(ctx context.Context, params RemoveActivationsRequest) (*RemoveActivationsResponse, error) {
   393  
   394  	logger := p.Log(ctx)
   395  	logger.Debug("RemoveActivations")
   396  
   397  	uri := fmt.Sprintf("/network-list/v2/network-lists/%s/environments/%s/deactivate",
   398  		params.UniqueID,
   399  		params.Network,
   400  	)
   401  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri, nil)
   402  	if err != nil {
   403  		return nil, fmt.Errorf("failed to create remove activation request: %s", err.Error())
   404  	}
   405  
   406  	var rval RemoveActivationsResponse
   407  
   408  	_, err = p.Exec(req, &rval, params)
   409  	if err != nil {
   410  		return nil, fmt.Errorf("remove activation request failed: %s", err.Error())
   411  	}
   412  
   413  	return &rval, nil
   414  }