Skip to content

Commit 58bde17

Browse files
committed
feat(#479): set returnUrl in requests
1 parent 419c660 commit 58bde17

2 files changed

Lines changed: 32 additions & 19 deletions

File tree

src/ActiveLogin.Authentication.BankId.Api/BankIdAppApiClientExtensions.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace ActiveLogin.Authentication.BankId.Api;
66
/// Extensions to enable easier access to common api scenarios.
77
/// </summary>
88
public static class BankIdAppApiClientExtensions
9-
{
9+
{
1010
/// <summary></summary>
1111
/// <param name="appApiClient">The <see cref="IBankIdAppApiClient"/> instance.</param>
1212
/// <param name="endUserIp">
@@ -27,21 +27,26 @@ public static class BankIdAppApiClientExtensions
2727
/// <param name="userVisibleDataFormat">
2828
/// If present, and set to "simpleMarkdownV1", this parameter indicates that userVisibleData holds formatting characters which, if used correctly, will make the text displayed with the user nicer to look at.
2929
/// For further information of formatting options, please study the document Guidelines for Formatted Text.
30+
/// </param>
31+
/// <param name="returnUrl">
32+
/// If present the user will be redirected to this URL when the order is completed. Any return URL provided in the start URL when the BankID app was launched will be ignored.
3033
/// </param>
3134
public static Task<AuthResponse> AuthAsync(
3235
this IBankIdAppApiClient appApiClient,
3336
string endUserIp,
3437
Requirement? requirement = null,
3538
string? userVisibleData = null,
3639
byte[]? userNonVisibleData = null,
37-
string? userVisibleDataFormat = null)
40+
string? userVisibleDataFormat = null,
41+
string? returnUrl = null)
3842
{
3943
return appApiClient.AuthAsync(new(
4044
endUserIp,
4145
userVisibleData: userVisibleData,
4246
userNonVisibleData: userNonVisibleData,
4347
requirement: requirement,
44-
userVisibleDataFormat: userVisibleDataFormat));
48+
userVisibleDataFormat: userVisibleDataFormat,
49+
returnUrl: returnUrl));
4550
}
4651

4752
/// <summary>
@@ -81,8 +86,8 @@ public static Task<AuthResponse> AuthAsync(this IBankIdAppApiClient appApiClient
8186
public static Task<SignResponse> SignAsync(this IBankIdAppApiClient appApiClient, string endUserIp, string userVisibleData)
8287
{
8388
return appApiClient.SignAsync(new SignRequest(endUserIp, userVisibleData));
84-
}
85-
89+
}
90+
8691
/// <summary>
8792
/// Initiates an authentication order. Use the collect method to query the status of the order.
8893
/// </summary>
@@ -100,14 +105,18 @@ public static Task<SignResponse> SignAsync(this IBankIdAppApiClient appApiClient
100105
/// </param>
101106
/// <param name="userNonVisibleData">
102107
/// Data not displayed to the user.
108+
/// </param>
109+
/// <param name="returnUrl">
110+
/// If present the user will be redirected to this URL when the order is completed. Any return URL provided in the start URL when the BankID app was launched will be ignored.
103111
/// </param>
104112
/// <returns>If the request is successful, the OrderRef and AutoStartToken is returned.</returns>
105-
public static Task<SignResponse> SignAsync(this IBankIdAppApiClient appApiClient, string endUserIp, string userVisibleData, byte[] userNonVisibleData)
113+
public static Task<SignResponse> SignAsync(this IBankIdAppApiClient appApiClient, string endUserIp, string userVisibleData, byte[] userNonVisibleData, string? returnUrl = null)
106114
{
107115
return appApiClient.SignAsync(new SignRequest(
108116
endUserIp,
109117
userVisibleData,
110-
userNonVisibleData: userNonVisibleData));
118+
userNonVisibleData: userNonVisibleData,
119+
returnUrl: returnUrl));
111120
}
112121

113122
/// <summary></summary>

src/ActiveLogin.Authentication.BankId.Core/Flow/BankIdFlowService.cs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ IBankIdEndUserDeviceDataResolverFactory bankIdEndUserDeviceDataResolverFactory
6868
public async Task<BankIdFlowInitializeResult> InitializeAuth(BankIdFlowOptions flowOptions, string returnRedirectUrl)
6969
{
7070
var detectedUserDevice = _bankIdSupportedDeviceDetector.Detect();
71-
var response = await GetAuthResponse(flowOptions, detectedUserDevice);
71+
var response = await AuthAsync(flowOptions, detectedUserDevice, returnRedirectUrl);
7272

7373
await _bankIdEventTrigger.TriggerAsync(new BankIdInitializeSuccessEvent(personalIdentityNumber: null, response.OrderRef, detectedUserDevice, flowOptions));
7474

@@ -90,11 +90,11 @@ public async Task<BankIdFlowInitializeResult> InitializeAuth(BankIdFlowOptions f
9090
}
9191
}
9292

93-
private async Task<AuthResponse> GetAuthResponse(BankIdFlowOptions flowOptions, BankIdSupportedDevice detectedUserDevice)
93+
private async Task<AuthResponse> AuthAsync(BankIdFlowOptions flowOptions, BankIdSupportedDevice detectedUserDevice, string returnRedirectUrl)
9494
{
9595
try
9696
{
97-
var request = await GetAuthRequest(flowOptions);
97+
var request = await GetAuthRequest(flowOptions, returnRedirectUrl);
9898
return await _bankIdAppApiClient.AuthAsync(request);
9999
}
100100
catch (BankIdApiException bankIdApiException)
@@ -104,14 +104,16 @@ private async Task<AuthResponse> GetAuthResponse(BankIdFlowOptions flowOptions,
104104
}
105105
}
106106

107-
private async Task<AuthRequest> GetAuthRequest(BankIdFlowOptions flowOptions)
107+
private async Task<AuthRequest> GetAuthRequest(BankIdFlowOptions flowOptions, string returnRedirectUrl)
108108
{
109109
var endUserIp = _bankIdEndUserIpResolver.GetEndUserIp();
110110
var resolvedRequirements = await _bankIdAuthRequestRequirementsResolver.GetRequirementsAsync();
111111
var requiredPersonalIdentityNumber = resolvedRequirements.RequiredPersonalIdentityNumber ?? flowOptions.RequiredPersonalIdentityNumber;
112112
var requireMrtd = resolvedRequirements.RequireMrtd ?? flowOptions.RequireMrtd;
113113
var requirePinCode = resolvedRequirements.RequirePinCode ?? flowOptions.RequirePinCode;
114-
var certificatePolicies = resolvedRequirements.CertificatePolicies.Any() ? resolvedRequirements.CertificatePolicies : flowOptions.CertificatePolicies;
114+
var certificatePolicies = resolvedRequirements.CertificatePolicies.Any()
115+
? resolvedRequirements.CertificatePolicies
116+
: flowOptions.CertificatePolicies;
115117
var resolvedCertificatePolicies = GetResolvedCertificatePolicies(certificatePolicies, flowOptions.SameDevice);
116118

117119
var cardReader = resolvedRequirements.CardReader ?? flowOptions.CardReader;
@@ -129,7 +131,7 @@ private async Task<AuthRequest> GetAuthRequest(BankIdFlowOptions flowOptions)
129131
userData.UserVisibleData,
130132
userData.UserNonVisibleData,
131133
userData.UserVisibleDataFormat,
132-
returnUrl: null,
134+
returnUrl: returnRedirectUrl,
133135
returnRisk: returnRisk,
134136
web: webDeviceData,
135137
app: appDeviceData
@@ -139,7 +141,7 @@ private async Task<AuthRequest> GetAuthRequest(BankIdFlowOptions flowOptions)
139141
public async Task<BankIdFlowInitializeResult> InitializeSign(BankIdFlowOptions flowOptions, BankIdSignData bankIdSignData, string returnRedirectUrl)
140142
{
141143
var detectedUserDevice = _bankIdSupportedDeviceDetector.Detect();
142-
var response = await GetSignResponse(flowOptions, bankIdSignData, detectedUserDevice);
144+
var response = await SignAsync(flowOptions, bankIdSignData, detectedUserDevice, returnRedirectUrl);
143145

144146
await _bankIdEventTrigger.TriggerAsync(new BankIdInitializeSuccessEvent(personalIdentityNumber: null, response.OrderRef, detectedUserDevice, flowOptions));
145147

@@ -161,11 +163,11 @@ public async Task<BankIdFlowInitializeResult> InitializeSign(BankIdFlowOptions f
161163
}
162164
}
163165

164-
private async Task<SignResponse> GetSignResponse(BankIdFlowOptions flowOptions, BankIdSignData bankIdSignData, BankIdSupportedDevice detectedUserDevice)
166+
private async Task<SignResponse> SignAsync(BankIdFlowOptions flowOptions, BankIdSignData bankIdSignData, BankIdSupportedDevice detectedUserDevice, string returnRedirectUrl)
165167
{
166168
try
167169
{
168-
var request = GetSignRequest(flowOptions, bankIdSignData);
170+
var request = GetSignRequest(flowOptions, bankIdSignData, returnRedirectUrl);
169171
return await _bankIdAppApiClient.SignAsync(request);
170172
}
171173
catch (BankIdApiException bankIdApiException)
@@ -175,11 +177,13 @@ private async Task<SignResponse> GetSignResponse(BankIdFlowOptions flowOptions,
175177
}
176178
}
177179

178-
private SignRequest GetSignRequest(BankIdFlowOptions flowOptions, BankIdSignData bankIdSignData)
180+
private SignRequest GetSignRequest(BankIdFlowOptions flowOptions, BankIdSignData bankIdSignData, string returnRedirectUrl)
179181
{
180182
var endUserIp = _bankIdEndUserIpResolver.GetEndUserIp();
181183

182-
var certificatePolicies = bankIdSignData.CertificatePolicies.Any() ? bankIdSignData.CertificatePolicies: flowOptions.CertificatePolicies;
184+
var certificatePolicies = bankIdSignData.CertificatePolicies.Any()
185+
? bankIdSignData.CertificatePolicies
186+
: flowOptions.CertificatePolicies;
183187
var resolvedCertificatePolicies = GetResolvedCertificatePolicies(certificatePolicies, flowOptions.SameDevice);
184188

185189
var requiredPersonalIdentityNumber = bankIdSignData.RequiredPersonalIdentityNumber ?? flowOptions.RequiredPersonalIdentityNumber;
@@ -198,7 +202,7 @@ private SignRequest GetSignRequest(BankIdFlowOptions flowOptions, BankIdSignData
198202
userNonVisibleData: bankIdSignData.UserNonVisibleData,
199203
userVisibleDataFormat: bankIdSignData.UserVisibleDataFormat,
200204
requirement: requestRequirement,
201-
returnUrl: null,
205+
returnUrl: returnRedirectUrl,
202206
returnRisk: returnRisk,
203207
web: webDeviceData,
204208
app: appDeviceData

0 commit comments

Comments
 (0)