Skip to content

Commit 7290a86

Browse files
Add support for Signature and Timestamp in UploadParams
1 parent 5721153 commit 7290a86

File tree

3 files changed

+102
-2
lines changed

3 files changed

+102
-2
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using CloudinaryDotNet.Actions;
4+
using NUnit.Framework;
5+
using SystemHttp = System.Net.Http;
6+
7+
namespace CloudinaryDotNet.Tests.UploadApi
8+
{
9+
public class UploadTest
10+
{
11+
[Test]
12+
public void TestDefaultUploadTimestampAndSignature()
13+
{
14+
var cloudinary = new MockedCloudinary();
15+
16+
17+
var iuParams = new ImageUploadParams()
18+
{
19+
File = new FileDescription(TestConstants.TestRemoteImg)
20+
};
21+
22+
cloudinary.Upload(iuParams);
23+
24+
cloudinary.AssertHttpCall(SystemHttp.HttpMethod.Post, "image/upload");
25+
26+
foreach (var expected in new List<string>
27+
{
28+
"api_key",
29+
"timestamp",
30+
"signature",
31+
TestConstants.TestRemoteImg
32+
})
33+
{
34+
StringAssert.Contains(expected, cloudinary.HttpRequestContent);
35+
}
36+
}
37+
38+
[Test]
39+
public void TestCustomUploadTimestampAndSignature()
40+
{
41+
var cloudinary = new MockedCloudinary();
42+
43+
var testDate = DateTime.Parse("2024-01-01 12:34:56Z", System.Globalization.CultureInfo.InvariantCulture)
44+
.ToUniversalTime();
45+
var timestamp = "1704112496";
46+
47+
var signature = "c8ec18c58c626d509ffa37e15329020e5c9158dc";
48+
49+
var iuParams = new ImageUploadParams()
50+
{
51+
File = new FileDescription(TestConstants.TestRemoteImg),
52+
Timestamp = testDate,
53+
Signature = signature
54+
};
55+
56+
cloudinary.Upload(iuParams);
57+
58+
cloudinary.AssertHttpCall(SystemHttp.HttpMethod.Post, "image/upload");
59+
60+
foreach (var expected in new List<string>
61+
{
62+
"api_key",
63+
"key",
64+
"timestamp",
65+
timestamp,
66+
"signature",
67+
signature,
68+
"file",
69+
TestConstants.TestRemoteImg
70+
})
71+
{
72+
StringAssert.Contains(expected, cloudinary.HttpRequestContent);
73+
}
74+
}
75+
}
76+
}

CloudinaryDotNet/Actions/AssetsUpload/BasicRawUploadParams.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,16 @@ public virtual ResourceType ResourceType
4848
/// </summary>
4949
public string FilenameOverride { get; set; }
5050

51+
/// <summary>
52+
/// Gets or sets upload timestamp.
53+
/// </summary>
54+
public DateTime Timestamp { get; set; }
55+
56+
/// <summary>
57+
/// Gets or sets upload signature.
58+
/// </summary>
59+
public string Signature { get; set; }
60+
5161
/// <summary>
5262
/// Validate object model.
5363
/// </summary>
@@ -82,6 +92,12 @@ public override SortedDictionary<string, object> ToParamsDictionary()
8292
AddParam(dict, "public_id_prefix", PublicIdPrefix);
8393
AddParam(dict, "type", Type);
8494
AddParam(dict, "filename_override", FilenameOverride);
95+
if (Timestamp != DateTime.MinValue)
96+
{
97+
AddParam(dict, "timestamp", Utils.ToUnixTimeSeconds(Timestamp));
98+
}
99+
100+
AddParam(dict, "signature", Signature);
85101

86102
if (Backup.HasValue)
87103
{

CloudinaryDotNet/ApiShared.Internal.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,16 @@ internal HttpRequestMessage PrepareRequestBody(
182182
/// <param name="parameters">Cloudinary upload parameters.</param>
183183
internal void FinalizeUploadParameters(IDictionary<string, object> parameters)
184184
{
185-
parameters.Add("timestamp", Utils.UnixTimeNowSeconds());
186-
parameters.Add("signature", SignParameters(parameters));
185+
if (!parameters.ContainsKey("timestamp"))
186+
{
187+
parameters.Add("timestamp", Utils.UnixTimeNowSeconds());
188+
}
189+
190+
if (!parameters.ContainsKey("signature"))
191+
{
192+
parameters.Add("signature", SignParameters(parameters));
193+
}
194+
187195
parameters.Add("api_key", Account.ApiKey);
188196
}
189197

0 commit comments

Comments
 (0)