Skip to content

Commit 656d580

Browse files
committed
Authentication based on API key
1 parent 359f231 commit 656d580

File tree

5 files changed

+38
-10
lines changed

5 files changed

+38
-10
lines changed

src/Umbraco.Forms.Integrations.Automation.Zapier/Configuration/ZapierSettings.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@ public ZapierSettings()
1111

1212
public ZapierSettings(NameValueCollection appSettings)
1313
{
14-
UserGroup = appSettings[Constants.UmbracoFormsIntegrationsAutomationZapierUserGroup];
14+
UserGroupAlias = appSettings[Constants.UmbracoFormsIntegrationsAutomationZapierUserGroupAlias];
15+
16+
ApiKey = appSettings[Constants.UmbracoFormsIntegrationsAutomationZapierApiKey];
1517
}
1618

17-
public string UserGroup { get; set; }
19+
public string UserGroupAlias { get; set; }
20+
21+
public string ApiKey { get; set; }
1822
}
1923
}

src/Umbraco.Forms.Integrations.Automation.Zapier/Constants.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@ namespace Umbraco.Forms.Integrations.Automation.Zapier
33
{
44
public class Constants
55
{
6-
public const string UmbracoFormsIntegrationsAutomationZapierUserGroup = "Umbraco.Forms.Integrations.Automation.Zapier.UserGroup";
6+
public const string UmbracoFormsIntegrationsAutomationZapierUserGroupAlias = "Umbraco.Forms.Integrations.Automation.Zapier.UserGroupAlias";
7+
8+
public const string UmbracoFormsIntegrationsAutomationZapierApiKey = "Umbraco.Forms.Integrations.Automation.Zapier.ApiKey";
79

810
public static class ZapierAppConfiguration
911
{
1012
public const string UsernameHeaderKey = "X-USERNAME";
1113

1214
public const string PasswordHeaderKey = "X-PASSWORD";
15+
16+
public const string ApiKeyHeaderKey = "X-APIKEY";
1317
}
1418

1519
public static class Configuration

src/Umbraco.Forms.Integrations.Automation.Zapier/Controllers/ZapierFormAuthorizedApiController.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public bool IsUserValid()
4040
{
4141
string username = string.Empty;
4242
string password = string.Empty;
43+
string apiKey = string.Empty;
4344

4445
#if NETCOREAPP
4546
if (Request.Headers.TryGetValue(Constants.ZapierAppConfiguration.UsernameHeaderKey,
@@ -48,18 +49,24 @@ public bool IsUserValid()
4849
if (Request.Headers.TryGetValue(Constants.ZapierAppConfiguration.PasswordHeaderKey,
4950
out var passwordValues))
5051
password = passwordValues.First();
52+
if (Request.Headers.TryGetValue(Constants.ZapierAppConfiguration.ApiKeyHeaderKey,
53+
out var apiKeyValues))
54+
apiKey = apiKeyValues.First();
5155
#else
5256
if (Request.Headers.TryGetValues(Constants.ZapierAppConfiguration.UsernameHeaderKey,
5357
out var usernameValues))
5458
username = usernameValues.First();
5559
if (Request.Headers.TryGetValues(Constants.ZapierAppConfiguration.PasswordHeaderKey,
5660
out var passwordValues))
5761
password = passwordValues.First();
62+
if (Request.Headers.TryGetValues(Constants.ZapierAppConfiguration.ApiKeyHeaderKey,
63+
out var apiKeyValues))
64+
apiKey = apiKeyValues.First();
5865
#endif
5966

60-
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) return false;
67+
if (string.IsNullOrEmpty(apiKey) && (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))) return false;
6168

62-
var isAuthorized = _userValidationService.Validate(username, password, Options.UserGroup).GetAwaiter()
69+
var isAuthorized = _userValidationService.Validate(username, password, Options.ApiKey).GetAwaiter()
6370
.GetResult();
6471
if (!isAuthorized) return false;
6572

src/Umbraco.Forms.Integrations.Automation.Zapier/Services/IUserValidationService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ namespace Umbraco.Forms.Integrations.Automation.Zapier.Services
44
{
55
public interface IUserValidationService
66
{
7-
Task<bool> Validate(string username, string password, string userGroup);
7+
Task<bool> Validate(string username, string password, string apiKey);
88
}
99
}

src/Umbraco.Forms.Integrations.Automation.Zapier/Services/UserValidationService.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
using System.Linq;
22
using System.Threading.Tasks;
33

4+
using Umbraco.Forms.Integrations.Automation.Zapier.Configuration;
5+
46
#if NETCOREAPP
7+
using Microsoft.Extensions.Options;
8+
59
using Umbraco.Cms.Core.Security;
610
using Umbraco.Cms.Core.Services;
711
#else
12+
using System.Configuration;
813
using Umbraco.Core.Services;
914
#endif
1015

@@ -14,23 +19,31 @@ public class UserValidationService : IUserValidationService
1419
{
1520
private readonly IUserService _userService;
1621

22+
private readonly ZapierSettings _zapierSettings;
1723

1824
#if NETCOREAPP
1925
private readonly IBackOfficeUserManager _backOfficeUserManager;
2026

21-
public UserValidationService(IBackOfficeUserManager backOfficeUserManager, IUserService userService)
27+
public UserValidationService(IOptions<ZapierSettings> options, IBackOfficeUserManager backOfficeUserManager, IUserService userService)
2228
{
2329
_backOfficeUserManager = backOfficeUserManager;
30+
31+
_zapierSettings = options.Value;
2432
}
2533
#else
2634
public UserValidationService(IUserService userService)
2735
{
2836
_userService = userService;
37+
38+
_zapierSettings = new ZapierSettings(ConfigurationManager.AppSettings);
2939
}
3040
#endif
3141

32-
public async Task<bool> Validate(string username, string password, string userGroup)
42+
public async Task<bool> Validate(string username, string password, string apiKey)
3343
{
44+
if (!string.IsNullOrEmpty(apiKey))
45+
return apiKey == _zapierSettings.ApiKey;
46+
3447
#if NETCOREAPP
3548
var isUserValid =
3649
await _backOfficeUserManager.ValidateCredentialsAsync(username, password);
@@ -40,11 +53,11 @@ public async Task<bool> Validate(string username, string password, string userGr
4053

4154
if (!isUserValid) return false;
4255

43-
if (!string.IsNullOrEmpty(userGroup))
56+
if (!string.IsNullOrEmpty(_zapierSettings.UserGroupAlias))
4457
{
4558
var user = _userService.GetByUsername(username);
4659

47-
return user != null && user.Groups.Any(p => p.Name == userGroup);
60+
return user != null && user.Groups.Any(p => p.Alias == _zapierSettings.UserGroupAlias);
4861
}
4962

5063
return true;

0 commit comments

Comments
 (0)