diff --git a/agrirouter-sdk-dotnet-standard-impl/Service/Onboard/AuthorizationService.cs b/agrirouter-sdk-dotnet-standard-impl/Service/Onboard/AuthorizationService.cs
index cc8bcff..04dd67a 100644
--- a/agrirouter-sdk-dotnet-standard-impl/Service/Onboard/AuthorizationService.cs
+++ b/agrirouter-sdk-dotnet-standard-impl/Service/Onboard/AuthorizationService.cs
@@ -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
};
}
+
+ ///
+ /// Generates the authorization URL for the application used within the onboarding process and adds the redirect URI
+ /// parameter.
+ ///
+ /// The application ID for the authorization.
+ /// A predefined identifier for the state (used by the external application).
+ /// The redirect URI.
+ /// -
+ 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}";
+ }
+
///
/// Parsing the result which was attached as parameters to the URL.
///
@@ -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"),
@@ -99,7 +129,7 @@ public AuthorizationResult Parse(string authorizationResult)
/// Will be thrown if the input is not valid.
public AuthorizationResult Parse(Uri callbackUri)
{
- return Parse(callbackUri.Query);
+ return Parse(callbackUri.Query);
}
///
@@ -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));
}
@@ -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));
}
diff --git a/agrirouter-sdk-dotnet-standard-test/Data/OnboardingResponses/Http/EnableAllCapabilitiesForOnboardingResponsesTest.cs b/agrirouter-sdk-dotnet-standard-test/Data/OnboardingResponses/Http/EnableAllCapabilitiesForOnboardingResponsesTest.cs
index 54cc816..eb2fc4c 100644
--- a/agrirouter-sdk-dotnet-standard-test/Data/OnboardingResponses/Http/EnableAllCapabilitiesForOnboardingResponsesTest.cs
+++ b/agrirouter-sdk-dotnet-standard-test/Data/OnboardingResponses/Http/EnableAllCapabilitiesForOnboardingResponsesTest.cs
@@ -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
{
@@ -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);
}
});
@@ -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);
}
});
}
diff --git a/agrirouter-sdk-dotnet-standard-test/Service/Onboard/AuthorizationServiceTest.cs b/agrirouter-sdk-dotnet-standard-test/Service/Onboard/AuthorizationServiceTest.cs
index 6942192..59a9b15 100644
--- a/agrirouter-sdk-dotnet-standard-test/Service/Onboard/AuthorizationServiceTest.cs
+++ b/agrirouter-sdk-dotnet-standard-test/Service/Onboard/AuthorizationServiceTest.cs
@@ -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()
{