Skip to content

Commit

Permalink
+ADD: Functionality to generate an AuthorizationURL for a selfdefined… (
Browse files Browse the repository at this point in the history
#131)

* +ADD: Functionality to generate an AuthorizationURL for a selfdefined state rather than one that's provided by the library

* Log the exception in case there was an error.

* Enhance comment.

* Use type keyword.

* Fix method name pattern.

* Adapt implementation to fix failing test.
DRY.

---------

Co-authored-by: Sascha Doemer <[email protected]>
  • Loading branch information
Frank-Wiebeler and saschadoemer authored Jul 18, 2023
1 parent a9f6f46 commit ea2d619
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,43 @@ public AuthorizationUrlResult AuthorizationUrl(string applicationId)
public AuthorizationUrlResult AuthorizationUrl(string applicationId, string redirectUri)
{
var state = Guid.NewGuid().ToString();
var authorizationUrl = GenerateAuthorizationUrlForState(applicationId, state, redirectUri);

return new AuthorizationUrlResult
{
AuthorizationUrl =
$"{_environment.AuthorizationUrl(applicationId)}?response_type=onboard&state={state}&redirect_uri={redirectUri}",
AuthorizationUrl = authorizationUrl,
State = state
};
}


/// <summary>
/// Generates the authorization URL for the application used within the onboarding process and adds the redirect URI
/// parameter.
/// </summary>
/// <param name="applicationId">The application ID for the authorization.</param>
/// <param name="state">A predefined identifier for the state (used by the external application).</param>
/// <param name="redirectUri">The redirect URI.</param>
/// <returns>-</returns>
public AuthorizationUrlResult AuthorizationUrlForState(string applicationId, Guid state, string redirectUri)
{
var stateAsString = state.ToString();
var authorizationUrl = GenerateAuthorizationUrlForState(applicationId, stateAsString, redirectUri);

return new AuthorizationUrlResult
{
AuthorizationUrl = authorizationUrl,
State = stateAsString
};
}

private string GenerateAuthorizationUrlForState(string applicationId, string state, string redirectUri)
{
return string.IsNullOrEmpty(redirectUri)
? $"{_environment.AuthorizationUrl(applicationId)}?response_type=onboard&state={state}"
: $"{_environment.AuthorizationUrl(applicationId)}?response_type=onboard&state={state}&redirect_uri={redirectUri}";
}

/// <summary>
/// Parsing the result which was attached as parameters to the URL.
/// </summary>
Expand All @@ -82,6 +111,7 @@ public AuthorizationResult Parse(string authorizationResult)
{
throw new ArgumentException($"The input '{authorizationResult}' does not meet the specification");
}

return new AuthorizationResult
{
State = parameters.Get("state"),
Expand All @@ -99,7 +129,7 @@ public AuthorizationResult Parse(string authorizationResult)
/// <exception cref="System.ArgumentException">Will be thrown if the input is not valid.</exception>
public AuthorizationResult Parse(Uri callbackUri)
{
return Parse(callbackUri.Query);
return Parse(callbackUri.Query);
}

/// <summary>
Expand All @@ -110,7 +140,7 @@ public AuthorizationResult Parse(Uri callbackUri)
public AuthorizationToken Parse(AuthorizationResult authorizationResult)
{
return
(AuthorizationToken) JsonConvert.DeserializeObject(
(AuthorizationToken)JsonConvert.DeserializeObject(
Encoding.UTF8.GetString(Convert.FromBase64String(authorizationResult.Token)),
typeof(AuthorizationToken));
}
Expand All @@ -128,7 +158,7 @@ public bool Verify(string state, string token, string signature)
{
var signer = SignerUtilities.GetSigner(Algorithm);
signer.Init(false,
(RsaKeyParameters) new PemReader(new StringReader(_environment.PublicKey())).ReadObject());
(RsaKeyParameters)new PemReader(new StringReader(_environment.PublicKey())).ReadObject());
signer.BlockUpdate(Encoding.UTF8.GetBytes(concatenatedValues), 0, concatenatedValues.Length);
return signer.VerifySignature(Base64.Decode(signature));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
using System;
using System.Collections.Generic;
using System.Threading;
using Agrirouter.Request.Payload.Endpoint;
using Agrirouter.Api.Service.Parameters;
using Agrirouter.Api.Service.Parameters.Inner;
using Agrirouter.Impl.Service.Common;
using Agrirouter.Impl.Service.Messaging;
using Agrirouter.Request.Payload.Endpoint;
using Agrirouter.Test.Helper;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;
using Serilog;
using Xunit;
using Timer = Agrirouter.Test.Helper.Timer;

namespace Agrirouter.Test.Data.OnboardingResponses.Http
{
Expand Down Expand Up @@ -50,7 +47,7 @@ public void
}
catch (Exception e)
{
Log.Error("Exception while sending capabilities message for {}", onboardResponse.SensorAlternateId);
Log.Error(e,"Exception while sending capabilities message for {}", onboardResponse.SensorAlternateId);
}
});

Expand Down Expand Up @@ -84,7 +81,7 @@ public void
}
catch (Exception e)
{
Log.Error("Exception while sending capabilities message for {}", onboardResponse.SensorAlternateId);
Log.Error(e,"Exception while sending capabilities message for {}", onboardResponse.SensorAlternateId);
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,21 @@ public void
authorizationUrlResult.AuthorizationUrl);
}


[Fact]
public void
GivenValidApplicationIdAndUuidAndRedirectUriWhenCreatingAuthorizationUrlThenTheUrlShouldBeFineDuringManualTesting()
{
var authorizationService = new AuthorizationService(new QualityAssuranceEnvironment());
var uuid = Guid.NewGuid();
var authorizationUrlResult =
authorizationService.AuthorizationUrlForState(ApplicationId, uuid,"https://www.dev4Agriculture.de");
Assert.Equal(
$"https://agrirouter-qa.cfapps.eu10.hana.ondemand.com/application/16b1c3ab-55ef-412c-952b-f280424272e1/authorize?response_type=onboard&state={uuid}&redirect_uri=https://www.dev4Agriculture.de",
authorizationUrlResult.AuthorizationUrl);
}


[Fact]
public void GivenValidApplicationIdWhenCreatingAuthorizationUrlThenTheUrlShouldBeFineDuringManualTesting()
{
Expand Down

0 comments on commit ea2d619

Please sign in to comment.