Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 0 additions & 26 deletions openapi/v2/openapi-2025-03-12.json
Original file line number Diff line number Diff line change
Expand Up @@ -32854,24 +32854,6 @@
},
"ApiSearchDeploymentResponseView": {
"properties": {
"encryptionAtRestProvider": {
"description": "Cloud service provider that manages your customer keys to provide an additional layer of Encryption At Rest for the cluster.",
"enum": [
"NONE",
"AWS",
"AZURE",
"GCP"
],
"externalDocs": {
"description": "Encryption at Rest using Customer Key Management",
"url": "https://www.mongodb.com/docs/atlas/security-kms-encryption/"
},
"readOnly": true,
"type": "string",
"x-xgen-hidden-env": {
"envs": "qa,prod,stage"
}
},
"groupId": {
"description": "Unique 24-hexadecimal character string that identifies the project.",
"example": "32b6e34b3d91647abb20e7b8",
Expand Down Expand Up @@ -47586,14 +47568,6 @@
"azureKeyVault": {
"$ref": "#/components/schemas/AzureKeyVault"
},
"enabledForSearchNodes": {
"description": "Flag that indicates whether Encryption at Rest for Dedicated Search Nodes is enabled in the specified project.",
"nullable": true,
"type": "boolean",
"x-xgen-hidden-env": {
"envs": "qa,prod,stage"
}
},
"googleCloudKms": {
"$ref": "#/components/schemas/GoogleCloudKMS"
}
Expand Down
78 changes: 78 additions & 0 deletions tools/cli/internal/openapi/filter/hidden_envs.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,87 @@ func (f *HiddenEnvsFilter) Apply() error {
f.oas.Paths.Delete(path)
}
}

if f.oas.Components == nil || f.oas.Components.Schemas == nil {
return nil
}

return f.applyOnSchemas(f.oas.Components.Schemas)
}

func (f *HiddenEnvsFilter) applyOnSchemas(schemas openapi3.Schemas) error {
for name, schema := range schemas {
if err := f.removeSchemaIfHiddenForEnv(name, schema, schemas); err != nil {
return err
}
}
return nil
}

func (f *HiddenEnvsFilter) removeSchemaIfHiddenForEnv(name string, schema *openapi3.SchemaRef, schemas openapi3.Schemas) error {
if schema == nil {
return nil
}

// Remove the schema if it is hidden for the target environment
if extension, ok := schema.Extensions[hiddenEnvsExtension]; ok {
log.Printf("Found x-hidden-envs in schema: K: %q, V: %q", hiddenEnvsExtension, extension)
if isHiddenExtensionEqualToTargetEnv(extension, f.metadata.targetEnv) {
log.Printf("Removing schema: %q because is hidden for target env: %q", name, f.metadata.targetEnv)
delete(schemas, name)
return nil
}

// Remove the Hidden extension from the final OAS
delete(schema.Extensions, hiddenEnvsExtension)
}

if schema.Value == nil {
return nil
}

if schema.Value.Extensions != nil {
if extension, ok := schema.Value.Extensions[hiddenEnvsExtension]; ok {
log.Printf("Found x-hidden-envs in schema: K: %q, V: %q", hiddenEnvsExtension, extension)
if isHiddenExtensionEqualToTargetEnv(extension, f.metadata.targetEnv) {
log.Printf("Removing schema: %q because is hidden for target env: %q", name, f.metadata.targetEnv)
delete(schemas, name)
return nil
}

// Remove the Hidden extension from the final OAS
delete(schema.Value.Extensions, hiddenEnvsExtension)
}
}

// Remove properties and items if they are hidden for the target environment
if schema.Value.Properties != nil {
if err := f.applyOnSchemas(schema.Value.Properties); err != nil {
return err
}
}

f.removeItemsIfHiddenForEnv(schema)
return nil
}

func (f *HiddenEnvsFilter) removeItemsIfHiddenForEnv(schema *openapi3.SchemaRef) {
if schema.Value == nil || schema.Value.Items == nil {
return
}

if extension, ok := schema.Value.Items.Extensions[hiddenEnvsExtension]; ok {
log.Printf("Found x-hidden-envs in items: K: %q, V: %q", hiddenEnvsExtension, extension)
if isHiddenExtensionEqualToTargetEnv(extension, f.metadata.targetEnv) {
log.Printf("Removing items because is hidden for target env: %q", f.metadata.targetEnv)
schema.Value.Items = nil
} else {
// Remove the Hidden extension from the final OAS
delete(schema.Value.Items.Extensions, hiddenEnvsExtension)
}
}
}

func (f *HiddenEnvsFilter) applyOnPath(pathItem *openapi3.PathItem) error {
for k, operation := range pathItem.Operations() {
f.removeOperationIfHiddenForEnv(k, pathItem, operation)
Expand Down
Loading
Loading