Skip to content

Commit 88df80a

Browse files
authored
Add Custom Header (#587)
* Add Custom Header * Formatting fix * Format Fix #2 * Add Delay to unit test in attempt to fix test * Change Custom headers to Dictionary<string,string>
1 parent 1a9ae09 commit 88df80a

38 files changed

+207
-133
lines changed

src/ZendeskApi_v2/Core.cs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public class Core : ICore
4646
protected string Password;
4747
protected string ZendeskUrl;
4848
protected string ApiToken;
49+
protected Dictionary<string, string> CustomHeaders;
50+
4951
private readonly JsonSerializerSettings jsonSettings = new JsonSerializerSettings
5052
{
5153
NullValueHandling = NullValueHandling.Ignore,
@@ -63,7 +65,7 @@ public class Core : ICore
6365
/// <param name="zendeskApiUrl"></param>
6466
/// <param name="p_OAuthToken"></param>
6567
public Core(string zendeskApiUrl, string p_OAuthToken) :
66-
this(zendeskApiUrl, null, null, null, p_OAuthToken)
68+
this(zendeskApiUrl, null, null, null, p_OAuthToken, null)
6769
{
6870
}
6971

@@ -73,7 +75,7 @@ public Core(string zendeskApiUrl, string p_OAuthToken) :
7375
/// <param name="zendeskApiUrl"></param>
7476
/// <param name="p_OAuthToken"></param>
7577
public Core(string zendeskApiUrl, string user, string password, string apiToken) :
76-
this(zendeskApiUrl, user, password, apiToken, null)
78+
this(zendeskApiUrl, user, password, apiToken, null, null)
7779
{
7880
}
7981

@@ -84,7 +86,8 @@ public Core(string zendeskApiUrl, string user, string password, string apiToken)
8486
/// <param name="user"></param>
8587
/// <param name="password">LEAVE BLANK IF USING TOKEN</param>
8688
/// <param name="apiToken">Optional Param which is used if specified instead of the password</param>
87-
public Core(string zendeskApiUrl, string user, string password, string apiToken, string p_OAuthToken)
89+
/// <param name="customHeaders">Optional Dictionary of custom headers that adds these headers to the request</param>
90+
public Core(string zendeskApiUrl, string user, string password, string apiToken, string p_OAuthToken, Dictionary<string,string> customHeaders)
8891
{
8992
User = user;
9093
Password = password;
@@ -96,6 +99,7 @@ public Core(string zendeskApiUrl, string user, string password, string apiToken,
9699
ZendeskUrl = zendeskApiUrl;
97100
ApiToken = apiToken;
98101
OAuthToken = p_OAuthToken;
102+
CustomHeaders = customHeaders;
99103
}
100104

101105
#if SYNC
@@ -134,6 +138,7 @@ public RequestResult RunRequest(string resource, string requestMethod, object bo
134138

135139
req.Headers["Authorization"] = GetPasswordOrTokenAuthHeader();
136140
req.PreAuthenticate = true;
141+
AddCustomHeaders(req);
137142

138143
req.Method = requestMethod; //GET POST PUT DELETE
139144
req.Accept = "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml";
@@ -386,6 +391,7 @@ public async Task<RequestResult> RunRequestAsync(string resource, string request
386391
req.Headers["Authorization"] = GetPasswordOrTokenAuthHeader();
387392
req.Method = requestMethod; //GET POST PUT DELETE
388393
req.Accept = "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml";
394+
AddCustomHeaders(req);
389395

390396
byte[] data = null;
391397

@@ -620,5 +626,21 @@ private WebException GetWebException(string resource, object body, WebException
620626

621627
return wException;
622628
}
629+
630+
/// <summary>
631+
/// If the CustomHeaders Dictionary contains records then add them to the headers
632+
/// of the passed in request
633+
/// </summary>
634+
/// <param name="request"></param>
635+
private void AddCustomHeaders(HttpWebRequest request)
636+
{
637+
if (CustomHeaders != null)
638+
{
639+
foreach (var key in CustomHeaders.Keys)
640+
{
641+
request.Headers.Add(key, CustomHeaders[key]);
642+
}
643+
}
644+
}
623645
}
624646
}

src/ZendeskApi_v2/Extensions/StringExtensions.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace ZendeskApi_v2.Extensions
1+
using ZendeskApi_v2.Models.Shared;
2+
3+
namespace ZendeskApi_v2.Extensions
24
{
35
internal static class StringExtensions
46
{
@@ -22,5 +24,7 @@ internal static bool IsNullOrWhiteSpace(this string value)
2224

2325
return true;
2426
}
27+
28+
internal static bool IsNotNullOrWhiteSpace(this string value) => !IsNullOrWhiteSpace(value);
2529
}
2630
}

src/ZendeskApi_v2/HelpCenterApi.cs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using ZendeskApi_v2.Requests.HelpCenter;
1+
using System.Collections.Generic;
2+
using ZendeskApi_v2.Requests.HelpCenter;
23

34
namespace ZendeskApi_v2.HelpCenter
45
{
@@ -25,19 +26,20 @@ public HelpCenterApi(
2526
string password,
2627
string apiToken,
2728
string locale,
28-
string p_OAuthToken)
29+
string p_OAuthToken,
30+
Dictionary<string, string> customHeaders)
2931
{
30-
Categories = new Categories(yourZendeskUrl, user, password, apiToken, locale, p_OAuthToken);
31-
Sections = new Sections(yourZendeskUrl, user, password, apiToken, locale, p_OAuthToken);
32-
Articles = new Articles(yourZendeskUrl, user, password, apiToken, locale, p_OAuthToken);
33-
Translations = new Translations(yourZendeskUrl, user, password, apiToken, p_OAuthToken);
34-
Votes = new Votes(yourZendeskUrl, user, password, apiToken, p_OAuthToken);
35-
Comments = new Comments(yourZendeskUrl, user, password, apiToken, p_OAuthToken);
36-
UserSegments = new UserSegments(yourZendeskUrl, user, password, apiToken, p_OAuthToken);
37-
Topics = new Topics(yourZendeskUrl, user, password, apiToken, p_OAuthToken);
38-
Posts = new Posts(yourZendeskUrl, user, password, apiToken, p_OAuthToken);
32+
Categories = new Categories(yourZendeskUrl, user, password, apiToken, locale, p_OAuthToken, customHeaders);
33+
Sections = new Sections(yourZendeskUrl, user, password, apiToken, locale, p_OAuthToken, customHeaders);
34+
Articles = new Articles(yourZendeskUrl, user, password, apiToken, locale, p_OAuthToken, customHeaders);
35+
Translations = new Translations(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders);
36+
Votes = new Votes(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders);
37+
Comments = new Comments(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders);
38+
UserSegments = new UserSegments(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders);
39+
Topics = new Topics(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders);
40+
Posts = new Posts(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders);
3941
Locale = locale;
40-
ArticleAttachments = new ArticleAttachments(yourZendeskUrl, user, password, apiToken, locale, p_OAuthToken);
42+
ArticleAttachments = new ArticleAttachments(yourZendeskUrl, user, password, apiToken, locale, p_OAuthToken, customHeaders);
4143
}
4244

4345
public ICategories Categories { get; }

src/ZendeskApi_v2/Requests/AccountsAndActivity.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#if ASYNC
1+
#if ASYNC
2+
using System.Collections.Generic;
23
using System.Threading.Tasks;
34
#endif
45
using ZendeskApi_v2.Models.AccountsAndActivities;
@@ -15,16 +16,16 @@ public interface IAccountsAndActivity : ICore
1516

1617
#if ASYNC
1718
Task<SettingsResponse> GetSettingsAsync();
18-
Task<GroupActivityResponse> GetActivitiesAync();
19-
Task<IndividualActivityResponse> GetActivityByIdAync(long activityId);
19+
Task<GroupActivityResponse> GetActivitiesAsync();
20+
Task<IndividualActivityResponse> GetActivityByIdAsync(long activityId);
2021
#endif
2122
}
2223

2324
public class AccountsAndActivity : Core, IAccountsAndActivity
2425
{
2526

26-
public AccountsAndActivity(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken)
27-
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken)
27+
public AccountsAndActivity(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken, Dictionary<string,string> customHeaders)
28+
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders)
2829
{
2930
}
3031
#if SYNC
@@ -49,15 +50,15 @@ public async Task<SettingsResponse> GetSettingsAsync()
4950
{
5051
return await GenericGetAsync<SettingsResponse>("account/settings.json");
5152
}
52-
public async Task<GroupActivityResponse> GetActivitiesAync()
53+
public async Task<GroupActivityResponse> GetActivitiesAsync()
5354
{
5455
return await GenericGetAsync<GroupActivityResponse>("activities.json");
5556
}
5657

57-
public async Task<IndividualActivityResponse> GetActivityByIdAync(long activityId)
58+
public async Task<IndividualActivityResponse> GetActivityByIdAsync(long activityId)
5859
{
5960
return await GenericGetAsync<IndividualActivityResponse>($"activities/{activityId}.json");
6061
}
6162
#endif
6263
}
63-
}
64+
}

src/ZendeskApi_v2/Requests/Attachments.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ public interface IAttachments : ICore
4545

4646
public class Attachments : Core, IAttachments
4747
{
48-
public Attachments(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken)
49-
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken)
48+
public Attachments(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken, Dictionary<string,string> customHeaders)
49+
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders)
5050
{ }
5151
#if SYNC
5252

src/ZendeskApi_v2/Requests/Automations.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ public interface IAutomations : ICore
3535

3636
public class Automations : Core, IAutomations
3737
{
38-
public Automations(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken)
39-
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken)
38+
public Automations(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken, Dictionary<string,string> customHeaders)
39+
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders)
4040
{
4141
}
4242

src/ZendeskApi_v2/Requests/Brands.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if ASYNC
1+
#if ASYNC
22
using System.Threading.Tasks;
33
#endif
44
using System.Collections.Generic;
@@ -28,8 +28,8 @@ public interface IBrands : ICore
2828

2929
public class Brands : Core, IBrands
3030
{
31-
public Brands(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken)
32-
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken)
31+
public Brands(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken, Dictionary<string,string> customHeaders)
32+
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders)
3333
{
3434
}
3535

@@ -91,4 +91,4 @@ public async Task<bool> DeleteBrandAsync(long id)
9191
}
9292
#endif
9393
}
94-
}
94+
}

src/ZendeskApi_v2/Requests/CustomAgentRoles.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#if ASYNC
1+
#if ASYNC
2+
using System.Collections.Generic;
23
using System.Threading.Tasks;
34
#endif
45
using ZendeskApi_v2.Models.CustomRoles;
@@ -18,8 +19,8 @@ public interface ICustomAgentRoles : ICore
1819

1920
public class CustomAgentRoles : Core, ICustomAgentRoles
2021
{
21-
public CustomAgentRoles(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken)
22-
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken)
22+
public CustomAgentRoles(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken, Dictionary<string,string> customHeaders)
23+
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders)
2324
{
2425
}
2526

@@ -37,4 +38,4 @@ public async Task<CustomRoles> GetCustomRolesAsync()
3738
}
3839
#endif
3940
}
40-
}
41+
}

src/ZendeskApi_v2/Requests/Groups.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#if ASYNC
2+
using System.Collections.Generic;
23
using System.Threading.Tasks;
34
#endif
45
using ZendeskApi_v2.Models.Groups;
@@ -68,8 +69,8 @@ public interface IGroups : ICore
6869

6970
public class Groups : Core, IGroups
7071
{
71-
public Groups(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken)
72-
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken)
72+
public Groups(string yourZendeskUrl, string user, string password, string apiToken, string p_OAuthToken, Dictionary<string,string> customHeaders)
73+
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders)
7374
{
7475
}
7576

src/ZendeskApi_v2/Requests/HelpCenter/ArticleAttachments.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ public ArticleAttachments(
3838
string password,
3939
string apiToken,
4040
string locale,
41-
string p_OAuthToken)
42-
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken)
41+
string p_OAuthToken,
42+
Dictionary<string, string> customHeaders)
43+
: base(yourZendeskUrl, user, password, apiToken, p_OAuthToken, customHeaders)
4344
{
4445
_locale = locale;
4546
}

0 commit comments

Comments
 (0)