@@ -34,6 +34,7 @@ public interface ICloudConvertAPI
3434
3535 Task < string > UploadAsync ( string url , byte [ ] file , string fileName , object parameters ) ;
3636 bool ValidateWebhookSignatures ( string payloadString , string signature , string signingSecret ) ;
37+ string CreateSignedUrl ( string baseUrl , string signingSecret , JobCreateRequest job , string cacheKey = null ) ;
3738 }
3839
3940 public class CloudConvertAPI : ICloudConvertAPI
@@ -45,9 +46,10 @@ public class CloudConvertAPI : ICloudConvertAPI
4546 readonly string _api_key = "Bearer " ;
4647 const string sandboxUrlApi = "https://api.sandbox.cloudconvert.com/v2" ;
4748 const string publicUrlApi = "https://api.cloudconvert.com/v2" ;
48-
4949 const string sandboxUrlSyncApi = "https://sync.api.sandbox.cloudconvert.com/v2" ;
5050 const string publicUrlSyncApi = "https://sync.api.cloudconvert.com/v2" ;
51+ static readonly char [ ] base64Padding = { '=' } ;
52+
5153
5254 public CloudConvertAPI ( string api_key , bool isSandbox = false )
5355 {
@@ -212,6 +214,25 @@ private HttpRequestMessage GetMultipartFormDataRequest(string endpoint, HttpMeth
212214
213215 public Task < string > UploadAsync ( string url , byte [ ] file , string fileName , object parameters ) => _restHelper . RequestAsync ( GetMultipartFormDataRequest ( $ "{ url } ", HttpMethod . Post , file , fileName , GetParameters ( parameters ) ) ) ;
214216
217+ public string CreateSignedUrl ( string baseUrl , string signingSecret , JobCreateRequest job , string cacheKey = null )
218+ {
219+ string url = baseUrl ;
220+ string jobJson = JsonConvert . SerializeObject ( job ) ;
221+ string base64Job = System . Convert . ToBase64String ( Encoding . ASCII . GetBytes ( jobJson ) ) . TrimEnd ( base64Padding ) . Replace ( '+' , '-' ) . Replace ( '/' , '_' ) ;
222+
223+ url += "?job=" + base64Job ;
224+
225+ if ( cacheKey != null ) {
226+ url += "&cache_key=" + cacheKey ;
227+ }
228+
229+ string signature = HashHMAC ( signingSecret , url ) ;
230+
231+ url += "&s=" + signature ;
232+
233+ return url ;
234+ }
235+
215236 public bool ValidateWebhookSignatures ( string payloadString , string signature , string signingSecret )
216237 {
217238 string hashHMAC = HashHMAC ( signingSecret , payloadString ) ;
0 commit comments