From 32de7b28bcb5a1d76f993a8edc8b330f9463b578 Mon Sep 17 00:00:00 2001 From: kimorris27 Date: Mon, 15 Apr 2024 08:47:14 -0500 Subject: [PATCH] Add admin API converter and static validator --- ...platformworkloadidentityroleset_convert.go | 67 +++++++++++++++++++ ...mworkloadidentityroleset_validatestatic.go | 67 +++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 pkg/api/admin/platformworkloadidentityroleset_convert.go create mode 100644 pkg/api/admin/platformworkloadidentityroleset_validatestatic.go diff --git a/pkg/api/admin/platformworkloadidentityroleset_convert.go b/pkg/api/admin/platformworkloadidentityroleset_convert.go new file mode 100644 index 00000000000..b1caa21cb63 --- /dev/null +++ b/pkg/api/admin/platformworkloadidentityroleset_convert.go @@ -0,0 +1,67 @@ +package admin + +// Copyright (c) Microsoft Corporation. +// Licensed under the Apache License 2.0. + +/* +TODO: Uncomment once API endpoints have been implemented and this code is being used. + +type platformWorkloadIdentityRoleSetConverter struct{} + +// platformWorkloadIdentityRoleSetConverter.ToExternal returns a new external representation +// of the internal object, reading from the subset of the internal object's +// fields that appear in the external representation. ToExternal does not +// modify its argument; there is no pointer aliasing between the passed and +// returned objects. +func (c platformWorkloadIdentityRoleSetConverter) ToExternal(s *api.PlatformWorkloadIdentityRoleSet) interface{} { + out := &PlatformWorkloadIdentityRoleSet{ + Properties: PlatformWorkloadIdentityRoleSetProperties{ + OpenShiftVersion: s.Properties.OpenShiftVersion, + PlatformWorkloadIdentityRoles: make([]PlatformWorkloadIdentityRole, 0, len(s.Properties.PlatformWorkloadIdentityRoles)), + }, + } + + for i, r := range s.Properties.PlatformWorkloadIdentityRoles { + out.Properties.PlatformWorkloadIdentityRoles[i].OperatorName = r.OperatorName + out.Properties.PlatformWorkloadIdentityRoles[i].RoleDefinitionName = r.RoleDefinitionName + out.Properties.PlatformWorkloadIdentityRoles[i].RoleDefinitionID = r.RoleDefinitionID + out.Properties.PlatformWorkloadIdentityRoles[i].ServiceAccounts = make([]string, 0, len(r.ServiceAccounts)) + out.Properties.PlatformWorkloadIdentityRoles[i].ServiceAccounts = append(out.Properties.PlatformWorkloadIdentityRoles[i].ServiceAccounts, r.ServiceAccounts...) + } + + return out +} + +// ToExternalList returns a slice of external representations of the internal +// objects +func (c platformWorkloadIdentityRoleSetConverter) ToExternalList(sets []*api.PlatformWorkloadIdentityRoleSet) interface{} { + l := &PlatformWorkloadIdentityRoleSetList{ + PlatformWorkloadIdentityRoleSets: make([]*PlatformWorkloadIdentityRoleSet, 0, len(sets)), + } + + for _, set := range sets { + l.PlatformWorkloadIdentityRoleSets = append(l.PlatformWorkloadIdentityRoleSets, c.ToExternal(set).(*PlatformWorkloadIdentityRoleSet)) + } + + return l +} + +// ToInternal overwrites in place a pre-existing internal object, setting (only) +// all mapped fields from the external representation. ToInternal modifies its +// argument; there is no pointer aliasing between the passed and returned +// objects +func (c platformWorkloadIdentityRoleSetConverter) ToInternal(_new interface{}, out *api.PlatformWorkloadIdentityRoleSet) { + new := _new.(*PlatformWorkloadIdentityRoleSet) + + out.Properties.OpenShiftVersion = new.Properties.OpenShiftVersion + out.Properties.PlatformWorkloadIdentityRoles = make([]api.PlatformWorkloadIdentityRole, 0, len(new.Properties.PlatformWorkloadIdentityRoles)) + + for i, r := range new.Properties.PlatformWorkloadIdentityRoles { + out.Properties.PlatformWorkloadIdentityRoles[i].OperatorName = r.OperatorName + out.Properties.PlatformWorkloadIdentityRoles[i].RoleDefinitionName = r.RoleDefinitionName + out.Properties.PlatformWorkloadIdentityRoles[i].RoleDefinitionID = r.RoleDefinitionID + out.Properties.PlatformWorkloadIdentityRoles[i].ServiceAccounts = make([]string, 0, len(r.ServiceAccounts)) + out.Properties.PlatformWorkloadIdentityRoles[i].ServiceAccounts = append(out.Properties.PlatformWorkloadIdentityRoles[i].ServiceAccounts, r.ServiceAccounts...) + } +} +*/ diff --git a/pkg/api/admin/platformworkloadidentityroleset_validatestatic.go b/pkg/api/admin/platformworkloadidentityroleset_validatestatic.go new file mode 100644 index 00000000000..a45348e069c --- /dev/null +++ b/pkg/api/admin/platformworkloadidentityroleset_validatestatic.go @@ -0,0 +1,67 @@ +package admin + +// Copyright (c) Microsoft Corporation. +// Licensed under the Apache License 2.0. + +/* +TODO: Uncomment once API endpoints have been implemented and this code is being used. + +type platformWorkloadIdentityRoleSetStaticValidator struct{} + +func (sv platformWorkloadIdentityRoleSetStaticValidator) Static(_new interface{}, _current *api.PlatformWorkloadIdentityRoleSet) error { + new := _new.(*PlatformWorkloadIdentityRoleSet) + + var current *PlatformWorkloadIdentityRoleSet + if _current != nil { + current = (&platformWorkloadIdentityRoleSetConverter{}).ToExternal(_current).(*PlatformWorkloadIdentityRoleSet) + } + + err := sv.validate(new, current == nil) + if err != nil { + return err + } + + if current == nil { + return nil + } + + return sv.validateDelta(new, current) +} + +func (sv platformWorkloadIdentityRoleSetStaticValidator) validate(new *PlatformWorkloadIdentityRoleSet, isCreate bool) error { + if new.Properties.OpenShiftVersion == "" { + return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "properties.openShiftVersion", "Must be provided") + } + + if new.Properties.PlatformWorkloadIdentityRoles == nil || len(new.Properties.PlatformWorkloadIdentityRoles) == 0 { + return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "properties.platformWorkloadIdentityRoles", "Must be provided and must be non-empty") + } + + errs := []error{} + + for i, r := range new.Properties.PlatformWorkloadIdentityRoles { + if r.OperatorName == "" { + errs = append(errs, api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, fmt.Sprintf("properties.platformWorkloadIdentityRoles[%d].operatorName", i), "Must be provided")) + } + + if r.RoleDefinitionName == "" { + errs = append(errs, api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, fmt.Sprintf("properties.platformWorkloadIdentityRoles[%d].roleDefinitionName", i), "Must be provided")) + } + + if r.RoleDefinitionID == "" { + errs = append(errs, api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, fmt.Sprintf("properties.platformWorkloadIdentityRoles[%d].roleDefinitionId", i), "Must be provided")) + } + } + + return errors.Join(errs...) +} + +func (sv platformWorkloadIdentityRoleSetStaticValidator) validateDelta(new, current *PlatformWorkloadIdentityRoleSet) error { + err := immutable.Validate("", new, current) + if err != nil { + err := err.(*immutable.ValidationError) + return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodePropertyChangeNotAllowed, err.Target, err.Message) + } + return nil +} +*/