From 826071c0c08d2311899825eff9824f8260b248af Mon Sep 17 00:00:00 2001 From: Krystian Jarmicki Date: Fri, 14 Nov 2025 11:34:07 +0100 Subject: [PATCH 1/2] Add support for `AdminContext` --- api/admin/asset.go | 7 +++++ api/admin/asset_acceptance_test.go | 41 ++++++++++++++++++++++++++++++ api/api.go | 20 +++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/api/admin/asset.go b/api/admin/asset.go index 3ad68a9..301790e 100644 --- a/api/admin/asset.go +++ b/api/admin/asset.go @@ -95,6 +95,7 @@ type AssetResult struct { Usage interface{} `json:"usage"` OriginalFilename string `json:"original_filename"` Context AssetContextResult `json:"context"` + AdminContext []AssetAdminContextResult `json:"admin_context"` Error api.ErrorResp `json:"error,omitempty"` Response interface{} } @@ -181,6 +182,11 @@ func (m *AssetContextResult) UnmarshalJSON(data []byte) error { return nil } +type AssetAdminContextResult struct { + Name string `json:"name"` + Value interface{} `json:"value"` +} + // UpdateAssetParams are the parameters for UpdateAsset. type UpdateAssetParams struct { AssetType api.AssetType `json:"-"` @@ -202,6 +208,7 @@ type UpdateAssetParams struct { NotificationURL string `json:"notification_url,omitempty"` Tags api.CldAPIArray `json:"tags,omitempty,omitempty"` Context api.CldAPIMap `json:"context,omitempty"` + AdminContext []api.AdminContext `json:"admin_context,omitempty"` FaceCoordinates api.Coordinates `json:"face_coordinates,omitempty"` CustomCoordinates api.Coordinates `json:"custom_coordinates,omitempty"` AccessControl interface{} `json:"access_control,omitempty"` diff --git a/api/admin/asset_acceptance_test.go b/api/admin/asset_acceptance_test.go index ea0ec70..5a9a83f 100644 --- a/api/admin/asset_acceptance_test.go +++ b/api/admin/asset_acceptance_test.go @@ -176,6 +176,47 @@ func getAssetTestCases() []AdminAPIAcceptanceTestCase { ExpectedCallCount: 1, }) + assetWithAdminContext := admin.AssetResult{ + AssetID: "1", + PublicID: cldtest.PublicID, + AdminContext: []admin.AssetAdminContextResult{ + { + Name: "key1", + Value: []interface{}{"value1", "value2"}, + }, + }, + } + responseJsonAdminContext, _ := json.Marshal(map[string]interface{}{ + "asset_id": "1", + "public_id": cldtest.PublicID, + "admin_context": []map[string]interface{}{ + {"name": "key1", "value": []string{"value1", "value2"}}, + }, + }) + + testCases = append(testCases, AdminAPIAcceptanceTestCase{ + Name: "Asset response with admin context", + RequestTest: func(api *admin.API, ctx context.Context) (interface{}, error) { + return api.Asset(ctx, admin.AssetParams{PublicID: cldtest.PublicID}) + }, + ResponseTest: func(response interface{}, t *testing.T) { + v, ok := response.(*admin.AssetResult) + if !ok { + t.Errorf("Response should be type of AssetResult, %s given", reflect.TypeOf(response)) + } + v.Response = nil // omit raw response comparison + if !reflect.DeepEqual(*v, assetWithAdminContext) { + t.Errorf("Response asset should be %+v\n%+v given", assetWithAdminContext, *v) + } + }, + ExpectedRequest: cldtest.ExpectedRequestParams{ + Method: "GET", + URI: "/resources/image/upload/" + cldtest.PublicID, + }, + JsonResponse: string(responseJsonAdminContext), + ExpectedCallCount: 1, + }) + return testCases } diff --git a/api/api.go b/api/api.go index 44b2e42..5d1844c 100644 --- a/api/api.go +++ b/api/api.go @@ -171,6 +171,26 @@ type Metadata map[string]interface{} // HookExecution is the result of a hook execution. type HookExecution map[string]interface{} +type AdminContextOp string + +const ( + AdminContextOpAdd AdminContextOp = "+" + AdminContextOpRemove AdminContextOp = "-" + AdminContextOpReplace AdminContextOp = "=" +) + +type AdminContextType string + +const AdminContextTypeArray AdminContextType = "array" + +// AdminContext is the Cloudinary admin contextual metadata payload +type AdminContext struct { + Name string `json:"name"` + Value []string `json:"value"` + Type AdminContextType `json:"type"` + Op AdminContextOp `json:"op"` +} + // AutoTranscription represents the auto transcription params. type AutoTranscription struct { Translate []string `json:"translate,omitempty"` From f10a8f5f4c35071e09bbe06124bba9d6120d1ee2 Mon Sep 17 00:00:00 2001 From: Constantine Nathanson Date: Sun, 16 Nov 2025 15:11:06 +0200 Subject: [PATCH 2/2] whitespace --- api/admin/asset.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/admin/asset.go b/api/admin/asset.go index 0cfe296..f693171 100644 --- a/api/admin/asset.go +++ b/api/admin/asset.go @@ -98,7 +98,7 @@ type AssetResult struct { Usage interface{} `json:"usage"` OriginalFilename string `json:"original_filename"` Context AssetContextResult `json:"context"` - AdminContext []AssetAdminContextResult `json:"admin_context"` + AdminContext []AssetAdminContextResult `json:"admin_context"` Error api.ErrorResp `json:"error,omitempty"` Response interface{} }