Skip to content

Commit 122c97b

Browse files
committed
Management API updates and client resources
1 parent 7f9d14b commit 122c97b

24 files changed

+167
-387
lines changed

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/ActiveCampaignFormPickerConfiguration.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/ActiveCampaignFormPickerConfigurationEditor.cs

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,12 @@
1-
//using Umbraco.Cms.Core.IO;
2-
//using Umbraco.Cms.Core.PropertyEditors;
3-
//using Umbraco.Cms.Core.Services;
4-
5-
//namespace Umbraco.Cms.Integrations.Crm.ActiveCampaign
6-
//{
7-
// [DataEditor(
8-
// alias: Constants.PropertyEditorAlias,
9-
// name: "ActiveCampaign Form Picker",
10-
// view: "~/App_Plugins/UmbracoCms.Integrations/Crm/ActiveCampaign/views/formpicker.html",
11-
// Group = Cms.Core.Constants.PropertyEditors.Groups.Pickers,
12-
// Icon = "icon-activecampaign")]
13-
// public class ActiveCampaignFormPickerPropertyEditor : DataEditor
14-
// {
15-
// private readonly IIOHelper _ioHelper;
16-
17-
// private readonly IEditorConfigurationParser _editorConfigurationParser;
18-
19-
// public ActiveCampaignFormPickerPropertyEditor(
20-
// IDataValueEditorFactory dataValueEditorFactory,
21-
// IIOHelper ioHelper,
22-
// IEditorConfigurationParser editorConfigurationParser)
23-
// : base(dataValueEditorFactory)
24-
// {
25-
// _ioHelper = ioHelper;
26-
27-
// _editorConfigurationParser = editorConfigurationParser;
28-
// }
29-
30-
// protected override IConfigurationEditor CreateConfigurationEditor() =>
31-
// new ActiveCampaignFormPickerConfigurationEditor(_ioHelper, _editorConfigurationParser);
32-
// }
33-
//}
1+
using Umbraco.Cms.Core.PropertyEditors;
2+
3+
namespace Umbraco.Cms.Integrations.Crm.ActiveCampaign
4+
{
5+
[DataEditor(alias: Constants.PropertyEditorAlias)]
6+
public class ActiveCampaignFormPickerPropertyEditor : DataEditor
7+
{
8+
public ActiveCampaignFormPickerPropertyEditor(IDataValueEditorFactory dataValueEditorFactory) : base(dataValueEditorFactory)
9+
{
10+
}
11+
}
12+
}
Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
1-
using Microsoft.AspNetCore.Authorization;
2-
using Microsoft.AspNetCore.Mvc;
1+
using Microsoft.AspNetCore.Mvc;
32
using Microsoft.Extensions.Options;
4-
using System;
5-
using System.Collections.Generic;
6-
using System.Linq;
7-
using System.Text;
8-
using System.Threading.Tasks;
3+
using System.Net;
4+
using System.Text.Json;
5+
using System.Text.Json.Nodes;
96
using Umbraco.Cms.Api.Common.Attributes;
107
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Configuration;
11-
using Umbraco.Cms.Web.Common.Authorization;
8+
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Models.Dtos;
129
using Umbraco.Cms.Web.Common.Routing;
1310

1411
namespace Umbraco.Cms.Integrations.Crm.ActiveCampaign.Api.Management.Controllers
1512
{
1613
[ApiController]
1714
[BackOfficeRoute($"{Constants.ManagementApi.RootPath}/v{{version:apiVersion}}")]
18-
[Authorize(Policy = AuthorizationPolicies.BackOfficeAccess)]
15+
//[Authorize(Policy = AuthorizationPolicies.BackOfficeAccess)]
1916
[MapToApi(Constants.ManagementApi.ApiName)]
2017
public class ActiveCampaignControllerBase : Controller
2118
{
@@ -31,5 +28,32 @@ public ActiveCampaignControllerBase(IOptions<ActiveCampaignSettings> options, IH
3128

3229
HttpClientFactory = httpClientFactory;
3330
}
31+
32+
protected async Task<IActionResult> HandleResponseAsync(HttpResponseMessage? httpResponse)
33+
{
34+
if (httpResponse is null)
35+
{
36+
return new EmptyResult();
37+
}
38+
39+
var content = await httpResponse.Content.ReadAsStringAsync();
40+
41+
if (httpResponse.IsSuccessStatusCode)
42+
{
43+
return Ok(new JsonResult(JsonSerializer.Deserialize<FormCollectionResponseDto>(content)));
44+
}
45+
46+
var responseMessage = content.Contains("message")
47+
? JsonNode.Parse(content)!["message"]!.ToString()
48+
: content;
49+
50+
var message = httpResponse.StatusCode == HttpStatusCode.Forbidden
51+
? Constants.Resources.AuthorizationFailed
52+
: string.IsNullOrEmpty(content)
53+
? Constants.Resources.ApiAccessFailed
54+
: responseMessage;
55+
56+
return StatusCode((int)httpResponse.StatusCode, message);
57+
}
3458
}
3559
}

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Api/Management/Controllers/CheckApiAccessController.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22
using Microsoft.AspNetCore.Http;
33
using Microsoft.AspNetCore.Mvc;
44
using Microsoft.Extensions.Options;
5-
using System;
6-
using System.Collections.Generic;
7-
using System.Linq;
8-
using System.Text;
9-
using System.Threading.Tasks;
105
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Configuration;
116
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Models.Dtos;
127

@@ -21,7 +16,7 @@ public CheckApiAccessController(IOptions<ActiveCampaignSettings> options, IHttpC
2116
}
2217

2318
[HttpGet("api-access")]
24-
[ProducesResponseType(typeof(JsonResult), StatusCodes.Status200OK)]
25-
public IActionResult CheckApiAccess() => new JsonResult(new ApiAccessDto(Settings.BaseUrl, Settings.ApiKey));
19+
[ProducesResponseType(typeof(ApiAccessDto), StatusCodes.Status200OK)]
20+
public IActionResult CheckApiAccess() => Ok(new ApiAccessDto(Settings.BaseUrl, Settings.ApiKey));
2621
}
2722
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using Asp.Versioning;
2+
using Microsoft.AspNetCore.Http;
3+
using Microsoft.AspNetCore.Mvc;
4+
using Microsoft.Extensions.Options;
5+
using System.Text.Json;
6+
using System.Text.Json.Nodes;
7+
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Configuration;
8+
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Models.Dtos;
9+
10+
namespace Umbraco.Cms.Integrations.Crm.ActiveCampaign.Api.Management.Controllers
11+
{
12+
[ApiVersion("1.0")]
13+
[ApiExplorerSettings(GroupName = Constants.ManagementApi.GroupName)]
14+
public class GetFormByIdController : ActiveCampaignControllerBase
15+
{
16+
public GetFormByIdController(IOptions<ActiveCampaignSettings> options, IHttpClientFactory httpClientFactory) : base(options, httpClientFactory)
17+
{
18+
}
19+
20+
[HttpGet("forms/{id}")]
21+
[ProducesResponseType(typeof(FormResponseDto), StatusCodes.Status200OK)]
22+
public async Task<IActionResult> GetForm(string id)
23+
{
24+
var client = HttpClientFactory.CreateClient(Constants.FormsHttpClient);
25+
26+
var response = await client.SendAsync(
27+
new HttpRequestMessage
28+
{
29+
Method = HttpMethod.Get,
30+
RequestUri = new Uri($"{client.BaseAddress}{ApiPath}/{id}")
31+
});
32+
33+
return await HandleResponseAsync(response);
34+
}
35+
}
36+
}

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Api/Management/Controllers/GetFormsByIdController.cs

Lines changed: 0 additions & 58 deletions
This file was deleted.
Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,8 @@
22
using Microsoft.AspNetCore.Http;
33
using Microsoft.AspNetCore.Mvc;
44
using Microsoft.Extensions.Options;
5-
using System;
6-
using System.Collections.Generic;
7-
using System.Linq;
8-
using System.Net.Http;
9-
using System.Text;
105
using System.Text.Json;
116
using System.Text.Json.Nodes;
12-
using System.Threading.Tasks;
137
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Configuration;
148
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Models.Dtos;
159

@@ -23,9 +17,9 @@ public GetFormsByPageController(IOptions<ActiveCampaignSettings> options, IHttpC
2317
{
2418
}
2519

26-
[HttpGet("forms/{page:int}")]
27-
[ProducesResponseType(typeof(Task<IActionResult>), StatusCodes.Status200OK)]
28-
public async Task<IActionResult> GetForms(int page = 1)
20+
[HttpGet("forms")]
21+
[ProducesResponseType(typeof(FormCollectionResponseDto), StatusCodes.Status200OK)]
22+
public async Task<IActionResult> GetForms([FromQuery]int page = 1)
2923
{
3024
var client = HttpClientFactory.CreateClient(Constants.FormsHttpClient);
3125

@@ -41,22 +35,7 @@ public async Task<IActionResult> GetForms(int page = 1)
4135

4236
var response = await client.SendAsync(requestMessage);
4337

44-
var content = await response.Content.ReadAsStringAsync();
45-
46-
if (!response.IsSuccessStatusCode)
47-
{
48-
var result = new JsonResult(new FormCollectionResponseDto
49-
{
50-
Message = string.IsNullOrEmpty(content)
51-
? response.StatusCode == System.Net.HttpStatusCode.Forbidden
52-
? Constants.Resources.AuthorizationFailed : Constants.Resources.ApiAccessFailed
53-
: JsonNode.Parse(content)["message"].ToString()
54-
});
55-
56-
return Ok(result);
57-
}
58-
59-
return Ok(new JsonResult(JsonSerializer.Deserialize<FormCollectionResponseDto>(content)));
38+
return await HandleResponseAsync(response);
6039
}
6140
}
6241
}

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Configuration/ActiveCampaignSettings.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ namespace Umbraco.Cms.Integrations.Crm.ActiveCampaign.Configuration
33
{
44
public class ActiveCampaignSettings
55
{
6-
public string BaseUrl { get; set; }
6+
public string BaseUrl { get; set; } = string.Empty;
77

8-
public string ApiKey { get; set; }
8+
public string ApiKey { get; set; } = string.Empty;
99
}
1010
}

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Constants.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ namespace Umbraco.Cms.Integrations.Crm.ActiveCampaign
33
{
44
public class Constants
55
{
6-
public const string PropertyEditorAlias = "Umbraco.Cms.Integrations.Crm.ActiveCampaign.FormPicker";
6+
public const string PropertyEditorAlias = "ActiveCampaign.FormPicker";
77

88
public const string SettingsPath = "Umbraco:Cms:Integrations:Crm:ActiveCampaign:Settings";
99

@@ -20,13 +20,13 @@ public class Resources
2020

2121
public static class ManagementApi
2222
{
23-
public const string RootPath = "active-campaign/management/api";
23+
public const string RootPath = "active-campaign-forms/management/api";
2424

25-
public const string ApiTitle = "Active Campaign Management API";
25+
public const string ApiTitle = "ActiveCampaign Forms Management API";
2626

2727
public const string ApiName = "active-campaign-management";
2828

29-
public const string GroupName = "Active Campaign";
29+
public const string GroupName = "Active Campaign Forms";
3030
}
3131
}
3232
}

0 commit comments

Comments
 (0)