github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/reputation_profile_action.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 validation "github.com/go-ozzo/ozzo-validation/v4" 9 ) 10 11 type ( 12 // The ReputationProfileAction interface supports retrieving and modifying the action associated with 13 // a specified reputation profile, or with all reputation profiles in a security policy. 14 // 15 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#reputationprofileactiongroup 16 ReputationProfileAction interface { 17 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#getreputationprofileactions 18 GetReputationProfileActions(ctx context.Context, params GetReputationProfileActionsRequest) (*GetReputationProfileActionsResponse, error) 19 20 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#getreputationprofileaction 21 GetReputationProfileAction(ctx context.Context, params GetReputationProfileActionRequest) (*GetReputationProfileActionResponse, error) 22 23 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#putreputationprofileaction 24 UpdateReputationProfileAction(ctx context.Context, params UpdateReputationProfileActionRequest) (*UpdateReputationProfileActionResponse, error) 25 } 26 27 // GetReputationProfileActionsRequest is used to retrieve the list of reputation profiles and their associated actions. 28 GetReputationProfileActionsRequest struct { 29 ConfigID int `json:"configId"` 30 Version int `json:"version"` 31 PolicyID string `json:"policyId"` 32 ReputationProfileID int `json:"id"` 33 Action string `json:"action"` 34 } 35 36 // GetReputationProfileActionsResponse is returned from a call to GetReputationProfileActions. 37 GetReputationProfileActionsResponse struct { 38 ReputationProfiles []struct { 39 Action string `json:"action,omitempty"` 40 ID int `json:"id,omitempty"` 41 } `json:"reputationProfiles,omitempty"` 42 } 43 44 // GetReputationProfileActionRequest is used to retrieve the details for a specific reputation profile. 45 GetReputationProfileActionRequest struct { 46 ConfigID int `json:"configId"` 47 Version int `json:"version"` 48 PolicyID string `json:"policyId"` 49 ReputationProfileID int `json:"id"` 50 Action string `json:"action"` 51 } 52 53 // GetReputationProfileActionResponse is returned from a call to GetReputationProfileAction. 54 GetReputationProfileActionResponse struct { 55 Action string `json:"action,omitempty"` 56 } 57 58 // UpdateReputationProfileActionRequest is used to modify the details for a specific reputation profile. 59 UpdateReputationProfileActionRequest struct { 60 ConfigID int `json:"-"` 61 Version int `json:"-"` 62 PolicyID string `json:"-"` 63 ReputationProfileID int `json:"-"` 64 Action string `json:"action"` 65 } 66 67 // UpdateReputationProfileActionResponse is returned from a call to UpdateReputationProfileAction. 68 UpdateReputationProfileActionResponse struct { 69 Action string `json:"action"` 70 } 71 72 // ReputationProfileActionPost is currently unused. 73 ReputationProfileActionPost struct { 74 Action string `json:"action"` 75 } 76 ) 77 78 // Validate validates a GetReputationProfileActionRequest. 79 func (v GetReputationProfileActionRequest) Validate() error { 80 return validation.Errors{ 81 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 82 "Version": validation.Validate(v.Version, validation.Required), 83 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 84 }.Filter() 85 } 86 87 // Validate validates a GetReputationProfileActionsRequest. 88 func (v GetReputationProfileActionsRequest) Validate() error { 89 return validation.Errors{ 90 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 91 "Version": validation.Validate(v.Version, validation.Required), 92 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 93 }.Filter() 94 } 95 96 // Validate validates an UpdateReputationProfileActionRequest. 97 func (v UpdateReputationProfileActionRequest) Validate() error { 98 return validation.Errors{ 99 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 100 "Version": validation.Validate(v.Version, validation.Required), 101 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 102 "ReputationProfileID": validation.Validate(v.ReputationProfileID, validation.Required), 103 }.Filter() 104 } 105 106 func (p *appsec) GetReputationProfileAction(ctx context.Context, params GetReputationProfileActionRequest) (*GetReputationProfileActionResponse, error) { 107 logger := p.Log(ctx) 108 logger.Debug("GetReputationProfileAction") 109 110 if err := params.Validate(); err != nil { 111 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 112 } 113 114 uri := fmt.Sprintf( 115 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-profiles/%d", 116 params.ConfigID, 117 params.Version, 118 params.PolicyID, 119 params.ReputationProfileID) 120 121 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 122 if err != nil { 123 return nil, fmt.Errorf("failed to create GetReputationProfileAction request: %w", err) 124 } 125 126 var result GetReputationProfileActionResponse 127 resp, err := p.Exec(req, &result) 128 if err != nil { 129 return nil, fmt.Errorf("get reputation profile action request failed: %w", err) 130 } 131 if resp.StatusCode != http.StatusOK { 132 return nil, p.Error(resp) 133 } 134 135 return &result, nil 136 } 137 138 func (p *appsec) GetReputationProfileActions(ctx context.Context, params GetReputationProfileActionsRequest) (*GetReputationProfileActionsResponse, error) { 139 logger := p.Log(ctx) 140 logger.Debug("GetReputationProfileActions") 141 142 if err := params.Validate(); err != nil { 143 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 144 } 145 146 uri := fmt.Sprintf( 147 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-profiles", 148 params.ConfigID, 149 params.Version, 150 params.PolicyID) 151 152 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 153 if err != nil { 154 return nil, fmt.Errorf("failed to create GetReputationProfileActions request: %w", err) 155 } 156 157 var result GetReputationProfileActionsResponse 158 resp, err := p.Exec(req, &result) 159 if err != nil { 160 return nil, fmt.Errorf("get reputation profile actions request failed: %w", err) 161 } 162 if resp.StatusCode != http.StatusOK { 163 return nil, p.Error(resp) 164 } 165 166 if params.ReputationProfileID != 0 { 167 var filteredResult GetReputationProfileActionsResponse 168 for _, val := range result.ReputationProfiles { 169 if val.ID == params.ReputationProfileID { 170 filteredResult.ReputationProfiles = append(filteredResult.ReputationProfiles, val) 171 } 172 } 173 return &filteredResult, nil 174 } 175 176 return &result, nil 177 } 178 179 func (p *appsec) UpdateReputationProfileAction(ctx context.Context, params UpdateReputationProfileActionRequest) (*UpdateReputationProfileActionResponse, error) { 180 logger := p.Log(ctx) 181 logger.Debug("UpdateReputationProfileAction") 182 183 if err := params.Validate(); err != nil { 184 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 185 } 186 187 uri := fmt.Sprintf( 188 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-profiles/%d", 189 params.ConfigID, 190 params.Version, 191 params.PolicyID, 192 params.ReputationProfileID, 193 ) 194 195 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 196 if err != nil { 197 return nil, fmt.Errorf("failed to create UpdateReputationProfileAction request: %w", err) 198 } 199 200 var result UpdateReputationProfileActionResponse 201 resp, err := p.Exec(req, &result, params) 202 if err != nil { 203 return nil, fmt.Errorf("update reputation profile action request failed: %w", err) 204 } 205 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 206 return nil, p.Error(resp) 207 } 208 209 return &result, nil 210 }