Skip to content

Commit 5b57fbb

Browse files
committed
Semrush integration
- Remove ClientFactory() - Minor changes on UI
1 parent 3ca7ab7 commit 5b57fbb

File tree

7 files changed

+25
-24
lines changed

7 files changed

+25
-24
lines changed

src/Umbraco.Cms.Integrations.SEO.Semrush/Api/Management/Controllers/SemrushControllerBase.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,7 @@ namespace Umbraco.Cms.Integrations.SEO.Semrush.Api.Management.Controllers
1818
public class SemrushControllerBase : Controller
1919
{
2020
protected static IHttpClientFactory _clientFactory;
21-
private IOptions<SemrushSettings> options;
22-
private IWebHostEnvironment webHostEnvironment;
23-
private ISemrushTokenService semrushTokenService;
24-
private ICacheHelper cacheHelper;
25-
private TokenBuilder tokenBuilder;
26-
private AuthorizationImplementationFactory authorizationImplementationFactory;
21+
2722
protected static readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
2823

2924
protected readonly ISemrushTokenService _semrushTokenService;

src/Umbraco.Cms.Integrations.SEO.Semrush/Api/Management/Controllers/Token/GetAccessTokenController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public GetAccessTokenController(
2323

2424
[HttpPost("token/get")]
2525
[ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
26-
[ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
26+
[ProducesResponseType(typeof(string), StatusCodes.Status400BadRequest)]
2727
public async Task<IActionResult> GetAccessToken([FromBody] AuthorizationRequestDto request)
2828
{
2929
var result = await _authorizationService.GetAccessTokenAsync(request.Code);

src/Umbraco.Cms.Integrations.SEO.Semrush/Api/Management/Controllers/Token/RevokeTokenController.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Microsoft.AspNetCore.Hosting;
2+
using Microsoft.AspNetCore.Http;
23
using Microsoft.AspNetCore.Mvc;
34
using Microsoft.Extensions.Options;
45
using Umbraco.Cms.Integrations.SEO.Semrush.Configuration;
@@ -20,6 +21,7 @@ public RevokeTokenController(
2021
}
2122

2223
[HttpPost("token/revoke")]
24+
[ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
2325
public IActionResult RevokeToken()
2426
{
2527
_semrushTokenService.RemoveParameters(Constants.TokenDbKey);

src/Umbraco.Cms.Integrations.SEO.Semrush/Client/src/workspace/semrush-workspace.element.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ export class SemrushWorkspaceElement extends UmbLitElement {
368368
render(){
369369
return html`
370370
<umb-body-layout>
371-
${this._loading ? html`<div class="center loader"><uui-loader></uui-loader></div>` : ""}
371+
${this._loading ? html`<div class="semrush-loader"><uui-loader></uui-loader></div>` : ""}
372372
<uui-box headline="Content Properties">
373373
<div class="semrush-content">
374374
<p>
@@ -476,7 +476,7 @@ export class SemrushWorkspaceElement extends UmbLitElement {
476476
477477
${this.keywordList?.data !== undefined && !!this.keywordList?.data
478478
? html`
479-
${this._searchLoading ? html`<div class="center loader"><uui-loader></uui-loader></div>` : ""}
479+
${this._searchLoading ? html`<div class="semrush-loader"><uui-loader></uui-loader></div>` : ""}
480480
<div class="semrush-table">
481481
<uui-table>
482482
<uui-table-head style="background-color: ; color: ">
@@ -555,6 +555,10 @@ export class SemrushWorkspaceElement extends UmbLitElement {
555555
border-radius: var(--uui-border-radius);
556556
font-size: 0.9rem;
557557
}
558+
559+
.semrush-loader{
560+
text-align: center;
561+
}
558562
`];
559563
}
560564
export default SemrushWorkspaceElement;

src/Umbraco.Cms.Integrations.SEO.Semrush/Services/AuthorizationService.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Microsoft.Extensions.Options;
2+
using System.Net.Http;
23
using System.Text.Json;
34
using System.Text.Json.Nodes;
45
using Umbraco.Cms.Integrations.SEO.Semrush.Configuration;
@@ -10,8 +11,8 @@ public class AuthorizationService : BaseAuthorizationService, ISemrushAuthorizat
1011
{
1112
private readonly SemrushOAuthSettings _oauthSettings;
1213

13-
public AuthorizationService(IOptions<SemrushOAuthSettings> options, TokenBuilder tokenBuilder, ISemrushTokenService semrushTokenService)
14-
: base(tokenBuilder, semrushTokenService)
14+
public AuthorizationService(IOptions<SemrushOAuthSettings> options, TokenBuilder tokenBuilder, ISemrushTokenService semrushTokenService, IHttpClientFactory httpClientFactory)
15+
: base(tokenBuilder, semrushTokenService, httpClientFactory)
1516
{
1617
_oauthSettings = options.Value;
1718
}
@@ -33,7 +34,7 @@ public async Task<string> GetAccessTokenAsync(string code)
3334
Content = new FormUrlEncodedContent(requestData),
3435
};
3536

36-
var response = await ClientFactory().SendAsync(requestMessage);
37+
var response = await HttpClientFactory.CreateClient().SendAsync(requestMessage);
3738

3839
var result = await response.Content.ReadAsStringAsync();
3940

@@ -71,7 +72,7 @@ public async Task<string> RefreshAccessTokenAsync()
7172
};
7273
requestMessage.Headers.Add("service", "Semrush");
7374

74-
var response = await ClientFactory().SendAsync(requestMessage);
75+
var response = await HttpClientFactory.CreateClient().SendAsync(requestMessage);
7576
if (response.IsSuccessStatusCode)
7677
{
7778
var result = await response.Content.ReadAsStringAsync();

src/Umbraco.Cms.Integrations.SEO.Semrush/Services/BaseAuthorizationService.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,17 @@ public class BaseAuthorizationService
1010
"&scope={3}";
1111

1212
// Using a static HttpClient (see: https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/).
13-
private readonly static HttpClient s_client = new HttpClient();
14-
15-
// Access to the client within the class is via ClientFactory(), allowing us to mock the responses in tests.
16-
public static Func<HttpClient> ClientFactory = () => s_client;
13+
protected readonly IHttpClientFactory HttpClientFactory;
1714

1815
protected readonly TokenBuilder TokenBuilder;
1916

2017
protected readonly ISemrushTokenService SemrushTokenService;
2118

22-
public BaseAuthorizationService(TokenBuilder tokenBuilder, ISemrushTokenService semrushTokenService)
19+
public BaseAuthorizationService(TokenBuilder tokenBuilder, ISemrushTokenService semrushTokenService, IHttpClientFactory httpClientFactory)
2320
{
2421
TokenBuilder = tokenBuilder;
25-
2622
SemrushTokenService = semrushTokenService;
23+
HttpClientFactory = httpClientFactory;
2724
}
2825
}
2926
}

src/Umbraco.Cms.Integrations.SEO.Semrush/Services/UmbracoAuthorizationService.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
using System.Text.Json;
1+
using Microsoft.Extensions.Options;
2+
using System.Text.Json;
23
using System.Text.Json.Nodes;
4+
using Umbraco.Cms.Integrations.SEO.Semrush.Configuration;
35
using Umbraco.Cms.Integrations.SEO.Semrush.Models.Dtos;
46

57
namespace Umbraco.Cms.Integrations.SEO.Semrush.Services
@@ -10,8 +12,8 @@ public class UmbracoAuthorizationService : BaseAuthorizationService, ISemrushAut
1012

1113
public const string AuthProxyTokenEndpoint = "oauth/v1/token";
1214

13-
public UmbracoAuthorizationService(TokenBuilder tokenBuilder, ISemrushTokenService semrushTokenService)
14-
: base(tokenBuilder, semrushTokenService)
15+
public UmbracoAuthorizationService(IOptions<SemrushOAuthSettings> options, TokenBuilder tokenBuilder, ISemrushTokenService semrushTokenService, IHttpClientFactory httpClientFactory)
16+
: base(tokenBuilder, semrushTokenService, httpClientFactory)
1517
{
1618
}
1719

@@ -30,7 +32,7 @@ public async Task<string> GetAccessTokenAsync(string code)
3032
};
3133
requestMessage.Headers.Add("service_name", "Semrush");
3234

33-
var response = await ClientFactory().SendAsync(requestMessage);
35+
var response = await HttpClientFactory.CreateClient().SendAsync(requestMessage);
3436

3537
var result = await response.Content.ReadAsStringAsync();
3638

@@ -68,7 +70,7 @@ public async Task<string> RefreshAccessTokenAsync()
6870
};
6971
requestMessage.Headers.Add("service", "Semrush");
7072

71-
var response = await ClientFactory().SendAsync(requestMessage);
73+
var response = await HttpClientFactory.CreateClient().SendAsync(requestMessage);
7274

7375
if (response.IsSuccessStatusCode)
7476
{

0 commit comments

Comments
 (0)