Preserve Additional Metadata

This commit is contained in:
Samuel Lorch 2025-05-16 11:44:15 +02:00
parent 9c47dbbc2e
commit ddd910a413

View file

@ -401,96 +401,67 @@ func UpdateResource(ctx context.Context, c *api.Client, resourceID, name, userna
return fmt.Errorf("Get Resource metadata: %w", err) return fmt.Errorf("Get Resource metadata: %w", err)
} }
var metadataMap map[string]any
err = json.Unmarshal([]byte(orgMetadata), &metadataMap)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
}
var newMetadata []byte var newMetadata []byte
switch rType.Slug { switch rType.Slug {
case "v5-default": case "v5-default":
var metadataObj api.ResourceMetadataTypeV5DefaultWithTOTP
err = json.Unmarshal([]byte(orgMetadata), &metadataObj)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
}
// Modify Metadata // Modify Metadata
if name != "" { if name != "" {
metadataObj.Name = name metadataMap["name"] = name
} }
if username != "" { if username != "" {
metadataObj.Username = username metadataMap["username"] = username
} }
if uri != "" { if uri != "" {
metadataObj.URIs = []string{uri} metadataMap["uris"] = []string{uri}
}
newMetadata, err = json.Marshal(&metadataObj)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
} }
case "v5-password-string": case "v5-password-string":
var metadataObj api.ResourceMetadataTypeV5DefaultWithTOTP
err = json.Unmarshal([]byte(orgMetadata), &metadataObj)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
}
// Modify Metadata // Modify Metadata
if name != "" { if name != "" {
metadataObj.Name = name metadataMap["name"] = name
} }
if username != "" { if username != "" {
metadataObj.Username = username metadataMap["username"] = username
} }
if uri != "" { if uri != "" {
metadataObj.URIs = []string{uri} metadataMap["uris"] = []string{uri}
} }
if description != "" { if description != "" {
metadataObj.Description = description metadataMap["description"] = description
}
newMetadata, err = json.Marshal(&metadataObj)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
} }
case "v5-default-with-totp": case "v5-default-with-totp":
var metadataObj api.ResourceMetadataTypeV5DefaultWithTOTP
err = json.Unmarshal([]byte(orgMetadata), &metadataObj)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
}
// Modify Metadata // Modify Metadata
if name != "" { if name != "" {
metadataObj.Name = name metadataMap["name"] = name
} }
if username != "" { if username != "" {
metadataObj.Username = username metadataMap["username"] = username
} }
if uri != "" { if uri != "" {
metadataObj.URIs = []string{uri} metadataMap["uris"] = []string{uri}
}
newMetadata, err = json.Marshal(&metadataObj)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
} }
case "v5-totp-standalone": case "v5-totp-standalone":
var metadataObj api.ResourceMetadataTypeV5TOTPStandalone
err = json.Unmarshal([]byte(orgMetadata), &metadataObj)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
}
// Modify Metadata // Modify Metadata
if name != "" { if name != "" {
metadataObj.Name = name metadataMap["name"] = name
} }
if uri != "" { if uri != "" {
metadataObj.URIs = []string{uri} metadataMap["uris"] = []string{uri}
}
newMetadata, err = json.Marshal(&metadataObj)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
} }
default: default:
return fmt.Errorf("Unknown ResourceType: %v", rType.Slug) return fmt.Errorf("Unknown ResourceType: %v", rType.Slug)
} }
newMetadata, err = json.Marshal(&metadataMap)
if err != nil {
return fmt.Errorf("Marshalling metadata: %w", err)
}
// Validate Metadata // Validate Metadata
err = validateMetadata(rType, string(newMetadata)) err = validateMetadata(rType, string(newMetadata))
if err != nil { if err != nil {