1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-24 15:59:41 +02:00

chore(code): replace interface{} with any EE-6513 (#11986)

This commit is contained in:
andres-portainer 2024-06-28 14:59:28 -03:00 committed by GitHub
parent 9c4935286f
commit f0d43f941f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
66 changed files with 231 additions and 231 deletions

View file

@ -47,12 +47,12 @@ func (transport *Transport) createAzureRequestContext(request *http.Request) (*a
return context, nil
}
func decorateObject(object map[string]interface{}, resourceControl *portainer.ResourceControl) map[string]interface{} {
func decorateObject(object map[string]any, resourceControl *portainer.ResourceControl) map[string]any {
if object["Portainer"] == nil {
object["Portainer"] = make(map[string]interface{})
object["Portainer"] = make(map[string]any)
}
portainerMetadata := object["Portainer"].(map[string]interface{})
portainerMetadata := object["Portainer"].(map[string]any)
portainerMetadata["ResourceControl"] = resourceControl
return object
@ -88,18 +88,18 @@ func (transport *Transport) userCanDeleteContainerGroup(request *http.Request, c
return authorization.UserCanAccessResource(context.userID, context.userTeamIDs, resourceControl)
}
func (transport *Transport) decorateContainerGroups(containerGroups []interface{}, context *azureRequestContext) []interface{} {
decoratedContainerGroups := make([]interface{}, 0)
func (transport *Transport) decorateContainerGroups(containerGroups []any, context *azureRequestContext) []any {
decoratedContainerGroups := make([]any, 0)
for _, containerGroup := range containerGroups {
containerGroup = transport.decorateContainerGroup(containerGroup.(map[string]interface{}), context)
containerGroup = transport.decorateContainerGroup(containerGroup.(map[string]any), context)
decoratedContainerGroups = append(decoratedContainerGroups, containerGroup)
}
return decoratedContainerGroups
}
func (transport *Transport) decorateContainerGroup(containerGroup map[string]interface{}, context *azureRequestContext) map[string]interface{} {
func (transport *Transport) decorateContainerGroup(containerGroup map[string]any, context *azureRequestContext) map[string]any {
containerGroupId, ok := containerGroup["id"].(string)
if ok {
resourceControl := transport.findResourceControl(containerGroupId, context)
@ -113,13 +113,13 @@ func (transport *Transport) decorateContainerGroup(containerGroup map[string]int
return containerGroup
}
func (transport *Transport) filterContainerGroups(containerGroups []interface{}, context *azureRequestContext) []interface{} {
filteredContainerGroups := make([]interface{}, 0)
func (transport *Transport) filterContainerGroups(containerGroups []any, context *azureRequestContext) []any {
filteredContainerGroups := make([]any, 0)
for _, containerGroup := range containerGroups {
userCanAccessResource := false
containerGroup := containerGroup.(map[string]interface{})
portainerObject, ok := containerGroup["Portainer"].(map[string]interface{})
containerGroup := containerGroup.(map[string]any)
portainerObject, ok := containerGroup["Portainer"].(map[string]any)
if ok {
resourceControl, ok := portainerObject["ResourceControl"].(*portainer.ResourceControl)
if ok {
@ -135,7 +135,7 @@ func (transport *Transport) filterContainerGroups(containerGroups []interface{},
return filteredContainerGroups
}
func (transport *Transport) removeResourceControl(containerGroup map[string]interface{}, context *azureRequestContext) error {
func (transport *Transport) removeResourceControl(containerGroup map[string]any, context *azureRequestContext) error {
containerGroupID, ok := containerGroup["id"].(string)
if !ok {
log.Debug().Msg("missing ID in container group")

View file

@ -28,7 +28,7 @@ func (transport *Transport) proxyContainerGroupsGetRequest(request *http.Request
return nil, err
}
value, ok := responseObject["value"].([]interface{})
value, ok := responseObject["value"].([]any)
if ok {
context, err := transport.createAzureRequestContext(request)
if err != nil {

View file

@ -22,7 +22,7 @@ const (
)
type (
resourceLabelsObjectSelector func(map[string]interface{}) map[string]interface{}
resourceLabelsObjectSelector func(map[string]any) map[string]any
resourceOperationParameters struct {
resourceIdentifierAttribute string
resourceType portainer.ResourceControlType
@ -47,7 +47,7 @@ func getUniqueElements(items string) []string {
return result
}
func (transport *Transport) newResourceControlFromPortainerLabels(labelsObject map[string]interface{}, resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) {
func (transport *Transport) newResourceControlFromPortainerLabels(labelsObject map[string]any, resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) {
if labelsObject[resourceLabelForPortainerPublicResourceControl] != nil {
resourceControl := authorization.NewPublicResourceControl(resourceID, resourceType)
@ -155,7 +155,7 @@ func (transport *Transport) getInheritedResourceControlFromServiceOrStack(resour
return nil, nil
}
func (transport *Transport) applyAccessControlOnResource(parameters *resourceOperationParameters, responseObject map[string]interface{}, response *http.Response, executor *operationExecutor) error {
func (transport *Transport) applyAccessControlOnResource(parameters *resourceOperationParameters, responseObject map[string]any, response *http.Response, executor *operationExecutor) error {
if responseObject[parameters.resourceIdentifierAttribute] == nil {
log.Warn().
Str("identifier_attribute", parameters.resourceIdentifierAttribute).
@ -194,7 +194,7 @@ func (transport *Transport) applyAccessControlOnResource(parameters *resourceOpe
return utils.RewriteAccessDeniedResponse(response)
}
func (transport *Transport) applyAccessControlOnResourceList(parameters *resourceOperationParameters, resourceData []interface{}, executor *operationExecutor) ([]interface{}, error) {
func (transport *Transport) applyAccessControlOnResourceList(parameters *resourceOperationParameters, resourceData []any, executor *operationExecutor) ([]any, error) {
if executor.operationContext.isAdmin {
return transport.decorateResourceList(parameters, resourceData, executor.operationContext.resourceControls)
}
@ -202,11 +202,11 @@ func (transport *Transport) applyAccessControlOnResourceList(parameters *resourc
return transport.filterResourceList(parameters, resourceData, executor.operationContext)
}
func (transport *Transport) decorateResourceList(parameters *resourceOperationParameters, resourceData []interface{}, resourceControls []portainer.ResourceControl) ([]interface{}, error) {
decoratedResourceData := make([]interface{}, 0)
func (transport *Transport) decorateResourceList(parameters *resourceOperationParameters, resourceData []any, resourceControls []portainer.ResourceControl) ([]any, error) {
decoratedResourceData := make([]any, 0)
for _, resource := range resourceData {
resourceObject := resource.(map[string]interface{})
resourceObject := resource.(map[string]any)
if resourceObject[parameters.resourceIdentifierAttribute] == nil {
log.Warn().
@ -244,11 +244,11 @@ func (transport *Transport) decorateResourceList(parameters *resourceOperationPa
return decoratedResourceData, nil
}
func (transport *Transport) filterResourceList(parameters *resourceOperationParameters, resourceData []interface{}, context *restrictedDockerOperationContext) ([]interface{}, error) {
filteredResourceData := make([]interface{}, 0)
func (transport *Transport) filterResourceList(parameters *resourceOperationParameters, resourceData []any, context *restrictedDockerOperationContext) ([]any, error) {
filteredResourceData := make([]any, 0)
for _, resource := range resourceData {
resourceObject := resource.(map[string]interface{})
resourceObject := resource.(map[string]any)
if resourceObject[parameters.resourceIdentifierAttribute] == nil {
log.Warn().
Str("identifier_attribute", parameters.resourceIdentifierAttribute).
@ -292,7 +292,7 @@ func (transport *Transport) filterResourceList(parameters *resourceOperationPara
return filteredResourceData, nil
}
func (transport *Transport) findResourceControl(resourceIdentifier string, resourceType portainer.ResourceControlType, resourceLabelsObject map[string]interface{}, resourceControls []portainer.ResourceControl) (*portainer.ResourceControl, error) {
func (transport *Transport) findResourceControl(resourceIdentifier string, resourceType portainer.ResourceControlType, resourceLabelsObject map[string]any, resourceControls []portainer.ResourceControl) (*portainer.ResourceControl, error) {
resourceControl := authorization.GetResourceControlByResourceIDAndType(resourceIdentifier, resourceType, resourceControls)
if resourceControl != nil {
return resourceControl, nil
@ -350,12 +350,12 @@ func getStackResourceIDFromLabels(resourceLabelsObject map[string]string, endpoi
return ""
}
func decorateObject(object map[string]interface{}, resourceControl *portainer.ResourceControl) map[string]interface{} {
func decorateObject(object map[string]any, resourceControl *portainer.ResourceControl) map[string]any {
if object["Portainer"] == nil {
object["Portainer"] = make(map[string]interface{})
object["Portainer"] = make(map[string]any)
}
portainerMetadata := object["Portainer"].(map[string]interface{})
portainerMetadata := object["Portainer"].(map[string]any)
portainerMetadata["ResourceControl"] = resourceControl
return object

View file

@ -75,7 +75,7 @@ func (transport *Transport) configInspectOperation(response *http.Response, exec
// API schema references:
// https://docs.docker.com/engine/api/v1.37/#operation/ConfigList
// https://docs.docker.com/engine/api/v1.37/#operation/ConfigInspect
func selectorConfigLabels(responseObject map[string]interface{}) map[string]interface{} {
func selectorConfigLabels(responseObject map[string]any) map[string]any {
if secretSpec := utils.GetJSONObject(responseObject, "Spec"); secretSpec != nil {
return utils.GetJSONObject(secretSpec, "Labels")
}

View file

@ -102,7 +102,7 @@ func (transport *Transport) containerInspectOperation(response *http.Response, e
// This selector is specific to the containerInspect Docker operation.
// Labels are available under the "Config.Labels" property.
// API schema reference: https://docs.docker.com/engine/api/v1.28/#operation/ContainerInspect
func selectorContainerLabelsFromContainerInspectOperation(responseObject map[string]interface{}) map[string]interface{} {
func selectorContainerLabelsFromContainerInspectOperation(responseObject map[string]any) map[string]any {
containerConfigObject := utils.GetJSONObject(responseObject, "Config")
if containerConfigObject != nil {
containerLabelsObject := utils.GetJSONObject(containerConfigObject, "Labels")
@ -115,18 +115,18 @@ func selectorContainerLabelsFromContainerInspectOperation(responseObject map[str
// This selector is specific to the containerList Docker operation.
// Labels are available under the "Labels" property.
// API schema reference: https://docs.docker.com/engine/api/v1.28/#operation/ContainerList
func selectorContainerLabelsFromContainerListOperation(responseObject map[string]interface{}) map[string]interface{} {
func selectorContainerLabelsFromContainerListOperation(responseObject map[string]any) map[string]any {
containerLabelsObject := utils.GetJSONObject(responseObject, "Labels")
return containerLabelsObject
}
// filterContainersWithLabels loops through a list of containers, and filters containers that do not contains
// any labels in the labels black list.
func filterContainersWithBlackListedLabels(containerData []interface{}, labelBlackList []portainer.Pair) ([]interface{}, error) {
filteredContainerData := make([]interface{}, 0)
func filterContainersWithBlackListedLabels(containerData []any, labelBlackList []portainer.Pair) ([]any, error) {
filteredContainerData := make([]any, 0)
for _, container := range containerData {
containerObject := container.(map[string]interface{})
containerObject := container.(map[string]any)
containerLabels := selectorContainerLabelsFromContainerListOperation(containerObject)
if containerLabels != nil {
@ -141,7 +141,7 @@ func filterContainersWithBlackListedLabels(containerData []interface{}, labelBla
return filteredContainerData, nil
}
func containerHasBlackListedLabel(containerLabels map[string]interface{}, labelBlackList []portainer.Pair) bool {
func containerHasBlackListedLabel(containerLabels map[string]any, labelBlackList []portainer.Pair) bool {
for key, value := range containerLabels {
labelName := key
labelValue := value.(string)
@ -159,13 +159,13 @@ func containerHasBlackListedLabel(containerLabels map[string]interface{}, labelB
func (transport *Transport) decorateContainerCreationOperation(request *http.Request, resourceIdentifierAttribute string, resourceType portainer.ResourceControlType) (*http.Response, error) {
type PartialContainer struct {
HostConfig struct {
Privileged bool `json:"Privileged"`
PidMode string `json:"PidMode"`
Devices []interface{} `json:"Devices"`
Sysctls map[string]interface{} `json:"Sysctls"`
CapAdd []string `json:"CapAdd"`
CapDrop []string `json:"CapDrop"`
Binds []string `json:"Binds"`
Privileged bool `json:"Privileged"`
PidMode string `json:"PidMode"`
Devices []any `json:"Devices"`
Sysctls map[string]any `json:"Sysctls"`
CapAdd []string `json:"CapAdd"`
CapDrop []string `json:"CapDrop"`
Binds []string `json:"Binds"`
} `json:"HostConfig"`
}

View file

@ -78,7 +78,7 @@ func (transport *Transport) networkInspectOperation(response *http.Response, exe
// findSystemNetworkResourceControl will check if the network object is a system network
// and will return a system resource control if that's the case.
func findSystemNetworkResourceControl(networkObject map[string]interface{}) *portainer.ResourceControl {
func findSystemNetworkResourceControl(networkObject map[string]any) *portainer.ResourceControl {
if networkObject[networkObjectName] == nil {
return nil
}
@ -98,6 +98,6 @@ func findSystemNetworkResourceControl(networkObject map[string]interface{}) *por
// API schema references:
// https://docs.docker.com/engine/api/v1.28/#operation/NetworkInspect
// https://docs.docker.com/engine/api/v1.28/#operation/NetworkList
func selectorNetworkLabels(responseObject map[string]interface{}) map[string]interface{} {
func selectorNetworkLabels(responseObject map[string]any) map[string]any {
return utils.GetJSONObject(responseObject, "Labels")
}

View file

@ -15,10 +15,10 @@ func init() {
portainerContainerId, _ = os.Hostname()
}
func (transport *Transport) applyPortainerContainers(resources []interface{}) ([]interface{}, error) {
decoratedResourceData := make([]interface{}, 0)
func (transport *Transport) applyPortainerContainers(resources []any) ([]any, error) {
decoratedResourceData := make([]any, 0)
for _, resource := range resources {
responseObject, ok := resource.(map[string]interface{})
responseObject, ok := resource.(map[string]any)
if !ok {
decoratedResourceData = append(decoratedResourceData, resource)
continue
@ -30,7 +30,7 @@ func (transport *Transport) applyPortainerContainers(resources []interface{}) ([
return decoratedResourceData, nil
}
func (transport *Transport) applyPortainerContainer(resourceObject map[string]interface{}) (map[string]interface{}, error) {
func (transport *Transport) applyPortainerContainer(resourceObject map[string]any) (map[string]any, error) {
resourceId, ok := resourceObject["Id"].(string)
if !ok {
return resourceObject, nil

View file

@ -77,7 +77,7 @@ func (transport *Transport) secretInspectOperation(response *http.Response, exec
// API schema references:
// https://docs.docker.com/engine/api/v1.37/#operation/SecretList
// https://docs.docker.com/engine/api/v1.37/#operation/SecretInspect
func selectorSecretLabels(responseObject map[string]interface{}) map[string]interface{} {
func selectorSecretLabels(responseObject map[string]any) map[string]any {
secretSpec := utils.GetJSONObject(responseObject, "Spec")
if secretSpec != nil {
secretLabelsObject := utils.GetJSONObject(secretSpec, "Labels")

View file

@ -80,7 +80,7 @@ func (transport *Transport) serviceInspectOperation(response *http.Response, exe
// API schema references:
// https://docs.docker.com/engine/api/v1.28/#operation/ServiceInspect
// https://docs.docker.com/engine/api/v1.28/#operation/ServiceList
func selectorServiceLabels(responseObject map[string]interface{}) map[string]interface{} {
func selectorServiceLabels(responseObject map[string]any) map[string]any {
serviceSpecObject := utils.GetJSONObject(responseObject, "Spec")
if serviceSpecObject != nil {
return utils.GetJSONObject(serviceSpecObject, "Labels")

View file

@ -36,7 +36,7 @@ func (transport *Transport) taskListOperation(response *http.Response, executor
// selectorServiceLabels retrieve the labels object associated to the task object.
// Labels are available under the "Spec.ContainerSpec.Labels" property.
// API schema reference: https://docs.docker.com/engine/api/v1.28/#operation/TaskList
func selectorTaskLabels(responseObject map[string]interface{}) map[string]interface{} {
func selectorTaskLabels(responseObject map[string]any) map[string]any {
taskSpecObject := utils.GetJSONObject(responseObject, "Spec")
if taskSpecObject != nil {
containerSpecObject := utils.GetJSONObject(taskSpecObject, "ContainerSpec")

View file

@ -45,7 +45,7 @@ func (transport *Transport) volumeListOperation(response *http.Response, executo
// The "Volumes" field contains the list of volumes as an array of JSON objects
if responseObject["Volumes"] != nil {
volumeData := responseObject["Volumes"].([]interface{})
volumeData := responseObject["Volumes"].([]any)
if transport.snapshotService != nil {
// Filling snapshot data can improve the performance of getVolumeResourceID
@ -57,7 +57,7 @@ func (transport *Transport) volumeListOperation(response *http.Response, executo
}
for _, volumeObject := range volumeData {
volume := volumeObject.(map[string]interface{})
volume := volumeObject.(map[string]any)
if err := transport.decorateVolumeResponseWithResourceID(volume); err != nil {
return fmt.Errorf("failed decorating volume response: %w", err)
@ -105,7 +105,7 @@ func (transport *Transport) volumeInspectOperation(response *http.Response, exec
return transport.applyAccessControlOnResource(resourceOperationParameters, responseObject, response, executor)
}
func (transport *Transport) decorateVolumeResponseWithResourceID(responseObject map[string]interface{}) error {
func (transport *Transport) decorateVolumeResponseWithResourceID(responseObject map[string]any) error {
if responseObject["Name"] == nil {
return errors.New("missing identifier in Docker resource detail response")
}
@ -125,7 +125,7 @@ func (transport *Transport) decorateVolumeResponseWithResourceID(responseObject
// API schema references:
// https://docs.docker.com/engine/api/v1.28/#operation/VolumeInspect
// https://docs.docker.com/engine/api/v1.28/#operation/VolumeList
func selectorVolumeLabels(responseObject map[string]interface{}) map[string]interface{} {
func selectorVolumeLabels(responseObject map[string]any) map[string]any {
return utils.GetJSONObject(responseObject, "Labels")
}

View file

@ -13,25 +13,25 @@ import (
// GetJSONObject will extract an object from a specific property of another JSON object.
// Returns nil if nothing is associated to the specified key.
func GetJSONObject(jsonObject map[string]interface{}, property string) map[string]interface{} {
func GetJSONObject(jsonObject map[string]any, property string) map[string]any {
object := jsonObject[property]
if object != nil {
return object.(map[string]interface{})
return object.(map[string]any)
}
return nil
}
// GetArrayObject will extract an array from a specific property of another JSON object.
// Returns nil if nothing is associated to the specified key.
func GetArrayObject(jsonObject map[string]interface{}, property string) []interface{} {
func GetArrayObject(jsonObject map[string]any, property string) []any {
object := jsonObject[property]
if object != nil {
return object.([]interface{})
return object.([]any)
}
return nil
}
func getBody(body io.ReadCloser, contentType string, isGzip bool) (interface{}, error) {
func getBody(body io.ReadCloser, contentType string, isGzip bool) (any, error) {
if body == nil {
return nil, errors.New("unable to parse response: empty response body")
}
@ -49,7 +49,7 @@ func getBody(body io.ReadCloser, contentType string, isGzip bool) (interface{},
defer reader.Close()
var data interface{}
var data any
err := unmarshal(contentType, reader, &data)
if err != nil {
return nil, err
@ -58,7 +58,7 @@ func getBody(body io.ReadCloser, contentType string, isGzip bool) (interface{},
return data, nil
}
func marshal(contentType string, data interface{}) ([]byte, error) {
func marshal(contentType string, data any) ([]byte, error) {
// Note: contentType can look like: "application/json" or "application/json; charset=utf-8"
mediaType, _, err := mime.ParseMediaType(contentType)
if err != nil {
@ -75,7 +75,7 @@ func marshal(contentType string, data interface{}) ([]byte, error) {
return nil, fmt.Errorf("content type is not supported for marshaling: %s", contentType)
}
func unmarshal(contentType string, body io.Reader, returnBody interface{}) error {
func unmarshal(contentType string, body io.Reader, returnBody any) error {
// Note: contentType can look like: "application/json" or "application/json; charset=utf-8"
mediaType, _, err := mime.ParseMediaType(contentType)
if err != nil {

View file

@ -12,13 +12,13 @@ import (
)
// GetResponseAsJSONObject returns the response content as a generic JSON object
func GetResponseAsJSONObject(response *http.Response) (map[string]interface{}, error) {
func GetResponseAsJSONObject(response *http.Response) (map[string]any, error) {
responseData, err := getResponseBody(response)
if err != nil {
return nil, err
}
responseObject, ok := responseData.(map[string]interface{})
responseObject, ok := responseData.(map[string]any)
if !ok {
return nil, nil
}
@ -26,7 +26,7 @@ func GetResponseAsJSONObject(response *http.Response) (map[string]interface{}, e
}
// GetResponseAsJSONArray returns the response content as an array of generic JSON object
func GetResponseAsJSONArray(response *http.Response) ([]interface{}, error) {
func GetResponseAsJSONArray(response *http.Response) ([]any, error) {
responseData, err := getResponseBody(response)
if err != nil {
return nil, err
@ -36,9 +36,9 @@ func GetResponseAsJSONArray(response *http.Response) ([]interface{}, error) {
}
switch responseObject := responseData.(type) {
case []interface{}:
case []any:
return responseObject, nil
case map[string]interface{}:
case map[string]any:
if responseObject["message"] != nil {
return nil, errors.New(responseObject["message"].(string))
}
@ -76,7 +76,7 @@ func RewriteAccessDeniedResponse(response *http.Response) error {
// RewriteResponse will replace the existing response body and status code with the one specified
// in parameters
func RewriteResponse(response *http.Response, newResponseData interface{}, statusCode int) error {
func RewriteResponse(response *http.Response, newResponseData any, statusCode int) error {
data, err := marshal(getContentType(response), newResponseData)
if err != nil {
return err
@ -96,7 +96,7 @@ func RewriteResponse(response *http.Response, newResponseData interface{}, statu
return nil
}
func getResponseBody(response *http.Response) (interface{}, error) {
func getResponseBody(response *http.Response) (any, error) {
isGzip := response.Header.Get("Content-Encoding") == "gzip"
if isGzip {
response.Header.Del("Content-Encoding")