Skip to content

Commit ec2180b

Browse files
authored
Merge pull request #272 from umbraco/bugfix/v13/hubspot-refresh-token-attempt
Bugfix/v13/hubspot refresh token attempt
2 parents 842ba08 + 4d71296 commit ec2180b

File tree

6 files changed

+50
-16
lines changed

6 files changed

+50
-16
lines changed

src/Umbraco.Cms.Integrations.Crm.Hubspot.Core/Controllers/FormsController.cs

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public async Task<ResponseDto> GetAll()
7777
try
7878
{
7979
var requestMessage = CreateRequest(hubspotApiKey);
80-
80+
8181
var response = await ClientFactory().SendAsync(requestMessage);
8282

8383
responseContent = await response.Content.ReadAsStringAsync();
@@ -145,7 +145,7 @@ public async Task<ResponseDto> GetAllOAuth()
145145
Forms = ParseForms(forms).ToList()
146146
};
147147
}
148-
catch(HttpRequestException ex) when (ex.Message.Contains(HttpStatusCode.Unauthorized.ToString()))
148+
catch (HttpRequestException ex) when (ex.Message.Contains(HttpStatusCode.Unauthorized.ToString()))
149149
{
150150
_logger.LogError(string.Format(LoggingResources.OAuthFetchFormsFailed, responseContent));
151151

@@ -228,14 +228,46 @@ public async Task<ResponseDto> ValidateAccessToken()
228228
Error = Constants.ErrorMessages.OAuthInvalidToken
229229
};
230230

231-
var requestMessage = new HttpRequestMessage
231+
using var requestMessage = new HttpRequestMessage
232232
{
233233
Method = HttpMethod.Get,
234234
RequestUri = new Uri(HubspotFormsApiEndpoint)
235235
};
236236
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
237237

238238
var response = await ClientFactory().SendAsync(requestMessage);
239+
if (response.StatusCode == HttpStatusCode.Unauthorized)
240+
{
241+
// Attempt to refresh the access token
242+
var refreshAccessTokenResponse = await _authorizationService.RefreshAccessTokenAsync();
243+
if (string.IsNullOrEmpty(refreshAccessTokenResponse) || refreshAccessTokenResponse.StartsWith(BaseAuthorizationService.ErrorPrefix))
244+
{
245+
return new ResponseDto
246+
{
247+
IsValid = false,
248+
Error = Constants.ErrorMessages.OAuthInvalidToken
249+
};
250+
}
251+
252+
if (!_tokenService.TryGetParameters(Constants.AccessTokenDbKey, out string newAccessToken)
253+
|| string.IsNullOrEmpty(newAccessToken))
254+
{
255+
return new ResponseDto
256+
{
257+
IsValid = false,
258+
Error = Constants.ErrorMessages.OAuthInvalidToken
259+
};
260+
}
261+
262+
// Retry the request with the new access token
263+
using var newRequestMessage = new HttpRequestMessage
264+
{
265+
Method = HttpMethod.Get,
266+
RequestUri = new Uri(HubspotFormsApiEndpoint)
267+
};
268+
newRequestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", newAccessToken);
269+
response = await ClientFactory().SendAsync(newRequestMessage);
270+
}
239271

240272
return new ResponseDto
241273
{

src/Umbraco.Cms.Integrations.Crm.Hubspot.Core/Services/AuthorizationService.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ public async Task<string> GetAccessTokenAsync(string code)
6868
var errorResult = await response.Content.ReadAsStringAsync();
6969
var errorDto = JsonConvert.DeserializeObject<ErrorDto>(errorResult);
7070

71-
return "Error: " + errorDto.Message;
71+
return string.Format("{0}: {1}", ErrorPrefix, errorDto.Message);
7272
}
7373

74-
return "Error: An unexpected error occurred.";
74+
return string.Format("{0}: An unexpected error occurred.", ErrorPrefix);
7575
}
7676

7777
public string RefreshAccessToken() =>
@@ -83,9 +83,9 @@ public async Task<string> RefreshAccessTokenAsync()
8383

8484
var data = new Dictionary<string, string>
8585
{
86-
{"grant_type", "refresh_token"},
87-
{"client_id", _oauthSettings.ClientId },
88-
{"client_secret", _oauthSettings.ClientSecret },
86+
{ "grant_type", "refresh_token" },
87+
{ "client_id", _oauthSettings.ClientId },
88+
{ "client_secret", _oauthSettings.ClientSecret },
8989
{ "refresh_token", refreshToken }
9090
};
9191

@@ -109,7 +109,7 @@ public async Task<string> RefreshAccessTokenAsync()
109109
return result;
110110
}
111111

112-
return "error";
112+
return ErrorPrefix;
113113
}
114114
}
115115
}

src/Umbraco.Cms.Integrations.Crm.Hubspot.Core/Services/BaseAuthorizationService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ public class BaseAuthorizationService
1818

1919
protected readonly ITokenService TokenService;
2020

21+
public const string ErrorPrefix = "Error";
22+
2123
public BaseAuthorizationService(ITokenService tokenService)
2224
{
2325
TokenService = tokenService;

src/Umbraco.Cms.Integrations.Crm.Hubspot.Core/Services/UmbracoAuthorizationService.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@ public async Task<string> GetAccessTokenAsync(string code)
7575
var errorResult = await response.Content.ReadAsStringAsync();
7676
var errorDto = JsonConvert.DeserializeObject<ErrorDto>(errorResult);
7777

78-
return "Error: " + errorDto.Message;
78+
return string.Format("{0}: {1}", ErrorPrefix, errorDto.Message);
7979
}
8080

81-
return "Error: An unexpected error occurred.";
81+
return string.Format("{0}: An unexpected error occurred.", ErrorPrefix);
8282
}
8383

8484
public string RefreshAccessToken() =>
@@ -90,8 +90,8 @@ public async Task<string> RefreshAccessTokenAsync()
9090

9191
var data = new Dictionary<string, string>
9292
{
93-
{"grant_type", "refresh_token"},
94-
{"client_id", ClientId },
93+
{ "grant_type", "refresh_token" },
94+
{ "client_id", ClientId },
9595
{ "refresh_token", refreshToken }
9696
};
9797

@@ -116,7 +116,7 @@ public async Task<string> RefreshAccessTokenAsync()
116116
return result;
117117
}
118118

119-
return "error";
119+
return ErrorPrefix;
120120
}
121121
}
122122
}

src/Umbraco.Cms.Integrations.Crm.Hubspot.Core/Umbraco.Cms.Integrations.Crm.Hubspot.Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<PackageIconUrl></PackageIconUrl>
1212
<PackageProjectUrl>https://github.com/umbraco/Umbraco.Cms.Integrations/tree/main/src/Umbraco.Cms.Integrations.Crm.Hubspot</PackageProjectUrl>
1313
<RepositoryUrl>https://github.com/umbraco/Umbraco.Cms.Integrations</RepositoryUrl>
14-
<Version>4.0.2</Version>
14+
<Version>4.0.3</Version>
1515
<Authors>Umbraco HQ</Authors>
1616
<Company>Umbraco</Company>
1717
</PropertyGroup>

src/Umbraco.Cms.Integrations.Crm.Hubspot/Umbraco.Cms.Integrations.Crm.Hubspot.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<PackageIconUrl></PackageIconUrl>
1111
<PackageProjectUrl>https://github.com/umbraco/Umbraco.Cms.Integrations/blob/main/src/Umbraco.Cms.Integrations.Crm.Hubspot</PackageProjectUrl>
1212
<RepositoryUrl>https://github.com/umbraco/Umbraco.Cms.Integrations</RepositoryUrl>
13-
<Version>4.0.3</Version>
13+
<Version>4.0.4</Version>
1414
<Authors>Umbraco HQ</Authors>
1515
<Company>Umbraco</Company>
1616
<PackageTags>Umbraco;Umbraco-Marketplace</PackageTags>

0 commit comments

Comments
 (0)