Skip to content

Commit d10c73d

Browse files
authored
Merge pull request #16 from umbraco/feature/semrush-v9-multi-target
V9 multi-target version
2 parents 0cde7f0 + e43b831 commit d10c73d

File tree

9 files changed

+175
-155
lines changed

9 files changed

+175
-155
lines changed

src/Umbraco.Cms.Integrations.SEO.Semrush/App_Plugins/UmbracoCms.Integrations/SEO/Semrush/semrush.resource.js

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,54 @@
11
function semrushResource($http, umbRequestHelper) {
22

3+
const apiEndpoint = "backoffice/UmbracoCmsIntegrationsSemrush/Semrush";
4+
35
return {
46
ping: function () {
57
return umbRequestHelper.resourcePromise(
6-
$http.get(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "Test")), "Fail");
8+
$http.get(`${apiEndpoint}/Ping`), "Fail");
79
},
810
getAuthorizationUrl: function() {
911
return umbRequestHelper.resourcePromise(
10-
$http.get(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "GetAuthorizationUrl")), "Fail");
12+
$http.get(`${apiEndpoint}/GetAuthorizationUrl`), "Fail");
1113
},
12-
validateToken: function () {
14+
validateToken: function() {
1315
return umbRequestHelper.resourcePromise(
14-
$http.post(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "ValidateToken")), "Fail");
16+
$http.post(`${apiEndpoint}/ValidateToken`), "Fail");
1517
},
1618
getTokenDetails: function() {
1719
return umbRequestHelper.resourcePromise(
18-
$http.get(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "GetTokenDetails")), "Fail");
20+
$http.get(`${apiEndpoint}/GetTokenDetails`), "Fail");
1921
},
2022
revokeToken: function () {
2123
return umbRequestHelper.resourcePromise(
22-
$http.post(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "RevokeToken")), "Fail");
24+
$http.post(`${apiEndpoint}/RevokeToken`), "Fail");
2325
},
2426
getAccessToken: function (authorizationCode) {
2527
return umbRequestHelper.resourcePromise(
26-
$http.post(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "GetAccessToken"), { code: authorizationCode }), "Fail");
28+
$http.post(`${apiEndpoint}/GetAccessToken`, { code: authorizationCode }), "Fail");
2729
},
2830
refreshAccessToken: function () {
2931
return umbRequestHelper.resourcePromise(
30-
$http.post(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "RefreshAccessToken")), "Fail");
32+
$http.post(`${apiEndpoint}/RefreshAccessToken`), "Fail");
3133
},
3234
getRelatedPhrases: function (selectedPhrase, pageNumber, dataSource, method) {
33-
var url = umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "GetRelatedPhrases");
35+
var url = `${apiEndpoint}/GetRelatedPhrases`;
3436
return umbRequestHelper.resourcePromise(
3537
$http.get(url + "?phrase=" + selectedPhrase + "&pageNumber=" + pageNumber + "&dataSource=" + dataSource + "&method=" + method), "Fail");
3638
},
3739
importDataSources: function () {
3840
return umbRequestHelper.resourcePromise(
39-
$http.get(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "ImportDataSources")), "Fail");
41+
$http.get(`${apiEndpoint}/ImportDataSources`), "Fail");
4042
},
4143
getDataSources: function () {
4244
return umbRequestHelper.resourcePromise(
43-
$http.get(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "GetDataSources")), "Fail");
45+
$http.get(`${apiEndpoint}/GetDataSources`), "Fail");
4446
},
4547
getColumns: function () {
4648
return umbRequestHelper.resourcePromise(
47-
$http.get(umbRequestHelper.getApiUrl("umbracoCmsIntegrationsSemrushBaseUrl", "GetColumns")), "Fail");
49+
$http.get(`${apiEndpoint}/GetColumns`), "Fail");
4850
}
4951
};
50-
5152
}
5253

5354
angular.module("umbraco.resources")

src/Umbraco.Cms.Integrations.SEO.Semrush/Controllers/BaseController.cs

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

src/Umbraco.Cms.Integrations.SEO.Semrush/Controllers/SemrushController.cs

Lines changed: 69 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Newtonsoft.Json;
2+
23
using System;
34
using System.Collections.Generic;
45
using System.IO;
@@ -7,16 +8,29 @@
78
using System.Net.Http;
89
using System.Threading;
910
using System.Threading.Tasks;
10-
using System.Web.Http;
11+
1112
using Umbraco.Cms.Integrations.SEO.Semrush.Configuration;
1213
using Umbraco.Cms.Integrations.SEO.Semrush.Models.Dtos;
1314
using Umbraco.Cms.Integrations.SEO.Semrush.Services;
15+
16+
#if NETCOREAPP
17+
using Microsoft.AspNetCore.Hosting;
18+
using Microsoft.AspNetCore.Mvc;
19+
20+
using Umbraco.Cms.Web.Common.Attributes;
21+
using Umbraco.Cms.Web.BackOffice.Controllers;
22+
#else
23+
using System.Web;
24+
using System.Web.Http;
25+
26+
using Umbraco.Web.WebApi;
1427
using Umbraco.Web.Mvc;
28+
#endif
1529

1630
namespace Umbraco.Cms.Integrations.SEO.Semrush.Controllers
1731
{
1832
[PluginController("UmbracoCmsIntegrationsSemrush")]
19-
public class SemrushController : BaseController
33+
public class SemrushController : UmbracoAuthorizedApiController
2034
{
2135
// Using a static HttpClient (see: https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/).
2236
private readonly static HttpClient s_client = new HttpClient();
@@ -26,9 +40,28 @@ public class SemrushController : BaseController
2640

2741
private static readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
2842

43+
private readonly ISemrushTokenService _semrushTokenService;
44+
45+
private readonly ICacheHelper _cacheHelper;
46+
47+
private readonly TokenBuilder _tokenBuilder;
48+
49+
#if NETCOREAPP
50+
private readonly IWebHostEnvironment _webHostEnvironment;
51+
52+
public SemrushController(IWebHostEnvironment webHostEnvironment, ISemrushTokenService semrushTokenService, ICacheHelper cacheHelper, TokenBuilder tokenBuilder)
53+
{
54+
_webHostEnvironment = webHostEnvironment;
55+
#else
2956
public SemrushController(ISemrushTokenService semrushTokenService, ICacheHelper cacheHelper, TokenBuilder tokenBuilder)
30-
: base(semrushTokenService, cacheHelper, tokenBuilder)
3157
{
58+
59+
#endif
60+
_semrushTokenService = semrushTokenService;
61+
62+
_cacheHelper = cacheHelper;
63+
64+
_tokenBuilder = tokenBuilder;
3265
}
3366

3467
[HttpGet]
@@ -41,21 +74,21 @@ public SemrushController(ISemrushTokenService semrushTokenService, ICacheHelper
4174
[HttpGet]
4275
public TokenDto GetTokenDetails()
4376
{
44-
return SemrushTokenService.TryGetParameters(SemrushSettings.TokenDbKey, out TokenDto tokenDto) ? tokenDto : new TokenDto();
77+
return _semrushTokenService.TryGetParameters(SemrushSettings.TokenDbKey, out TokenDto tokenDto) ? tokenDto : new TokenDto();
4578
}
4679

4780
[HttpPost]
4881
public void RevokeToken()
4982
{
50-
SemrushTokenService.RemoveParameters(SemrushSettings.TokenDbKey);
83+
_semrushTokenService.RemoveParameters(SemrushSettings.TokenDbKey);
5184

52-
CacheHelper.ClearCachedItems();
85+
_cacheHelper.ClearCachedItems();
5386
}
5487

5588
[HttpPost]
5689
public async Task<string> GetAccessToken([FromBody] AuthorizationRequestDto request)
5790
{
58-
var requestData = TokenBuilder.ForAccessToken(request.Code).Build();
91+
var requestData = _tokenBuilder.ForAccessToken(request.Code).Build();
5992

6093
var requestMessage = new HttpRequestMessage
6194
{
@@ -70,7 +103,7 @@ public async Task<string> GetAccessToken([FromBody] AuthorizationRequestDto requ
70103
{
71104
var result = await response.Content.ReadAsStringAsync();
72105

73-
SemrushTokenService.SaveParameters(SemrushSettings.TokenDbKey, result);
106+
_semrushTokenService.SaveParameters(SemrushSettings.TokenDbKey, result);
74107

75108
return result;
76109
}
@@ -81,7 +114,7 @@ public async Task<string> GetAccessToken([FromBody] AuthorizationRequestDto requ
81114
[HttpPost]
82115
public async Task<AuthorizationResponseDto> ValidateToken()
83116
{
84-
SemrushTokenService.TryGetParameters(SemrushSettings.TokenDbKey, out TokenDto token);
117+
_semrushTokenService.TryGetParameters(SemrushSettings.TokenDbKey, out TokenDto token);
85118

86119
if (!token.IsAccessTokenAvailable) return new AuthorizationResponseDto { IsExpired = true };
87120

@@ -94,16 +127,16 @@ public async Task<AuthorizationResponseDto> ValidateToken()
94127
IsFreeAccount = response.Headers.TryGetValues(SemrushSettings.AllowLimitOffsetHeaderName,
95128
out IEnumerable<string> values)
96129
? values.First().Equals("0")
97-
: (bool?) null
130+
: (bool?)null
98131
};
99132
}
100133

101134
[HttpPost]
102135
public async Task<string> RefreshAccessToken()
103136
{
104-
SemrushTokenService.TryGetParameters(SemrushSettings.TokenDbKey, out TokenDto token);
137+
_semrushTokenService.TryGetParameters(SemrushSettings.TokenDbKey, out TokenDto token);
105138

106-
var requestData = TokenBuilder.ForRefreshToken(token.RefreshToken).Build();
139+
var requestData = _tokenBuilder.ForRefreshToken(token.RefreshToken).Build();
107140

108141
var requestMessage = new HttpRequestMessage
109142
{
@@ -118,7 +151,7 @@ public async Task<string> RefreshAccessToken()
118151
{
119152
var result = await response.Content.ReadAsStringAsync();
120153

121-
SemrushTokenService.SaveParameters(SemrushSettings.TokenDbKey, result);
154+
_semrushTokenService.SaveParameters(SemrushSettings.TokenDbKey, result);
122155

123156
return result;
124157
}
@@ -131,7 +164,7 @@ public async Task<RelatedPhrasesDto> GetRelatedPhrases(string phrase, int pageNu
131164
{
132165
string cacheKey = $"{dataSource}-{method}-{phrase}";
133166

134-
if (CacheHelper.TryGetCachedItem<RelatedPhrasesDto>(cacheKey, out var relatedPhrasesDto) && relatedPhrasesDto.Data != null)
167+
if (_cacheHelper.TryGetCachedItem<RelatedPhrasesDto>(cacheKey, out var relatedPhrasesDto) && relatedPhrasesDto.Data != null)
135168
{
136169
relatedPhrasesDto.TotalPages = relatedPhrasesDto.Data.Rows.Count / SemrushSettings.DefaultPageSize;
137170
relatedPhrasesDto.Data.Rows = relatedPhrasesDto.Data.Rows
@@ -142,7 +175,7 @@ public async Task<RelatedPhrasesDto> GetRelatedPhrases(string phrase, int pageNu
142175
return relatedPhrasesDto;
143176
}
144177

145-
SemrushTokenService.TryGetParameters(SemrushSettings.TokenDbKey, out TokenDto token);
178+
_semrushTokenService.TryGetParameters(SemrushSettings.TokenDbKey, out TokenDto token);
146179

147180
var response = await ClientFactory()
148181
.GetAsync(string.Format(SemrushSettings.SemrushKeywordsEndpoint, method, token.AccessToken, phrase, dataSource));
@@ -155,7 +188,7 @@ public async Task<RelatedPhrasesDto> GetRelatedPhrases(string phrase, int pageNu
155188

156189
if (!relatedPhrasesDeserialized.IsSuccessful) return relatedPhrasesDeserialized;
157190

158-
CacheHelper.AddCachedItem(cacheKey, responseContent);
191+
_cacheHelper.AddCachedItem(cacheKey, responseContent);
159192

160193
relatedPhrasesDeserialized.TotalPages = relatedPhrasesDeserialized.Data.Rows.Count / SemrushSettings.DefaultPageSize;
161194
relatedPhrasesDeserialized.Data.Rows = relatedPhrasesDeserialized.Data.Rows
@@ -172,19 +205,26 @@ public async Task<RelatedPhrasesDto> GetRelatedPhrases(string phrase, int pageNu
172205
[HttpGet]
173206
public DataSourceDto GetDataSources()
174207
{
208+
#if NETCOREAPP
209+
string semrushDataSourcesPath = $"{_webHostEnvironment.ContentRootPath}/App_Plugins/UmbracoCms.Integrations/SEO/Semrush/semrushDataSources.json";
210+
#else
211+
string semrushDataSourcesPath = HttpContext.Current.Server.MapPath(
212+
"/App_Plugins/UmbracoCms.Integrations/SEO/Semrush/semrushDataSources.json");
213+
#endif
214+
175215
_lock.EnterReadLock();
176216

177217
try
178218
{
179-
if (!File.Exists(SemrushDataSourcesPath))
219+
if (!System.IO.File.Exists(semrushDataSourcesPath))
180220
{
181-
var fs = File.Create(SemrushDataSourcesPath);
221+
var fs = System.IO.File.Create(semrushDataSourcesPath);
182222
fs.Close();
183223

184224
return new DataSourceDto();
185225
}
186226

187-
var content = File.ReadAllText(SemrushDataSourcesPath);
227+
var content = System.IO.File.ReadAllText(semrushDataSourcesPath);
188228
var dataSourceDto = new DataSourceDto
189229
{
190230
Items = JsonConvert.DeserializeObject<List<DataSourceItemDto>>(content).Select(p =>
@@ -212,19 +252,26 @@ public DataSourceDto GetDataSources()
212252
[HttpGet]
213253
public IEnumerable<ColumnDto> GetColumns()
214254
{
255+
#if NETCOREAPP
256+
string semrushColumnsPath = $"{_webHostEnvironment.ContentRootPath}/App_Plugins/UmbracoCms.Integrations/SEO/Semrush/semrushColumns.json";
257+
#else
258+
string semrushColumnsPath = HttpContext.Current.Server.MapPath(
259+
"/App_Plugins/UmbracoCms.Integrations/SEO/Semrush/semrushColumns.json");
260+
#endif
261+
215262
_lock.EnterReadLock();
216263

217264
try
218265
{
219-
if (!File.Exists(SemrushColumnsPath))
266+
if (!System.IO.File.Exists(semrushColumnsPath))
220267
{
221-
var fs = File.Create(SemrushColumnsPath);
268+
var fs = System.IO.File.Create(semrushColumnsPath);
222269
fs.Close();
223270

224271
return Enumerable.Empty<ColumnDto>();
225272
}
226273

227-
var content = File.ReadAllText(SemrushColumnsPath);
274+
var content = System.IO.File.ReadAllText(semrushColumnsPath);
228275
return JsonConvert.DeserializeObject<IEnumerable<ColumnDto>>(content).Select(p =>
229276
new ColumnDto
230277
{

src/Umbraco.Cms.Integrations.SEO.Semrush/SemrushComponent.cs

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

0 commit comments

Comments
 (0)