Skip to content

Commit fcb4c2c

Browse files
committed
feat(#478): add statestorage options
1 parent 374d6a5 commit fcb4c2c

File tree

61 files changed

+1179
-931
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1179
-931
lines changed

samples/Standalone.MvcSample/Standalone.MvcSample.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@
3131
</ItemGroup>
3232

3333
<ItemGroup>
34-
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.22.0" />
34+
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.23.0" />
3535
</ItemGroup>
3636
</Project>

src/ActiveLogin.Authentication.BankId.AspNetCore/ActiveLogin.Authentication.BankId.AspNetCore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
<ItemGroup>
1616
<FrameworkReference Include="Microsoft.AspNetCore.App" />
17-
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.1" />
17+
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.2" />
1818
<PackageReference Include="ActiveLogin.Identity.Swedish" Version="3.0.0" />
1919
</ItemGroup>
2020

src/ActiveLogin.Authentication.BankId.AspNetCore/Areas/ActiveLogin/Controllers/BankIdUiApiControllerBase.cs

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
using ActiveLogin.Authentication.BankId.AspNetCore.DataProtection;
99
using ActiveLogin.Authentication.BankId.AspNetCore.Helpers;
1010
using ActiveLogin.Authentication.BankId.AspNetCore.Models;
11+
using ActiveLogin.Authentication.BankId.Core;
1112
using ActiveLogin.Authentication.BankId.Core.Flow;
13+
using ActiveLogin.Authentication.BankId.Core.Models;
1214
using ActiveLogin.Authentication.BankId.Core.UserMessage;
1315

1416
using Microsoft.AspNetCore.Http;
@@ -17,40 +19,29 @@
1719
namespace ActiveLogin.Authentication.BankId.AspNetCore.Areas.ActiveLogin.Controllers;
1820

1921
[NonController]
20-
public abstract class BankIdUiApiControllerBase : ControllerBase
22+
public abstract class BankIdUiApiControllerBase(
23+
IBankIdFlowService bankIdFlowService,
24+
IBankIdDataStateProtector<BankIdUiOrderRef> orderRefProtector,
25+
IBankIdDataStateProtector<BankIdQrStartState> qrStartStateProtector,
26+
IBankIdDataStateProtector<BankIdUiOptions> uiOptionsProtector,
27+
28+
IBankIdUserMessage bankIdUserMessage,
29+
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
30+
IBankIdDataStateProtector<BankIdUiResult> uiAuthResultProtector,
31+
IStateStorage stateStorage
32+
) : ControllerBase
2133
{
2234
private static JsonSerializerOptions JsonSerializerOptions = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
2335

24-
protected readonly IBankIdFlowService BankIdFlowService;
25-
protected readonly IBankIdUiOrderRefProtector OrderRefProtector;
26-
protected readonly IBankIdQrStartStateProtector QrStartStateProtector;
27-
protected readonly IBankIdUiOptionsProtector UiOptionsProtector;
36+
protected readonly IBankIdFlowService BankIdFlowService = bankIdFlowService;
37+
protected readonly IBankIdDataStateProtector<BankIdUiOrderRef> OrderRefProtector = orderRefProtector;
38+
protected readonly IBankIdDataStateProtector<BankIdQrStartState> QrStartStateProtector = qrStartStateProtector;
39+
protected readonly IBankIdDataStateProtector<BankIdUiOptions> UiOptionsProtector = uiOptionsProtector;
40+
protected readonly IStateStorage _stateStorage = stateStorage;
2841

29-
private readonly IBankIdUserMessage _bankIdUserMessage;
30-
private readonly IBankIdUserMessageLocalizer _bankIdUserMessageLocalizer;
31-
private readonly IBankIdUiResultProtector _uiAuthResultProtector;
32-
33-
protected BankIdUiApiControllerBase(
34-
IBankIdFlowService bankIdFlowService,
35-
IBankIdUiOrderRefProtector orderRefProtector,
36-
IBankIdQrStartStateProtector qrStartStateProtector,
37-
IBankIdUiOptionsProtector uiOptionsProtector,
38-
39-
IBankIdUserMessage bankIdUserMessage,
40-
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
41-
IBankIdUiResultProtector uiAuthResultProtector
42-
43-
)
44-
{
45-
BankIdFlowService = bankIdFlowService;
46-
OrderRefProtector = orderRefProtector;
47-
QrStartStateProtector = qrStartStateProtector;
48-
UiOptionsProtector = uiOptionsProtector;
49-
50-
_bankIdUserMessage = bankIdUserMessage;
51-
_bankIdUserMessageLocalizer = bankIdUserMessageLocalizer;
52-
_uiAuthResultProtector = uiAuthResultProtector;
53-
}
42+
private readonly IBankIdUserMessage _bankIdUserMessage = bankIdUserMessage;
43+
private readonly IBankIdUserMessageLocalizer _bankIdUserMessageLocalizer = bankIdUserMessageLocalizer;
44+
private readonly IBankIdDataStateProtector<BankIdUiResult> _uiAuthResultProtector = uiAuthResultProtector;
5445

5546
[ValidateAntiForgeryToken]
5647
[HttpPost(BankIdConstants.Routes.BankIdApiStatusActionName)]

src/ActiveLogin.Authentication.BankId.AspNetCore/Areas/ActiveLogin/Controllers/BankIdUiAuthApiController.cs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using ActiveLogin.Authentication.BankId.AspNetCore.Models;
77
using ActiveLogin.Authentication.BankId.Core.Flow;
88
using ActiveLogin.Authentication.BankId.Core.UserMessage;
9-
9+
using ActiveLogin.Authentication.BankId.Core;
1010
using Microsoft.AspNetCore.Authorization;
1111
using Microsoft.AspNetCore.Mvc;
1212

@@ -17,20 +17,17 @@ namespace ActiveLogin.Authentication.BankId.AspNetCore.Areas.ActiveLogin.Control
1717
[ApiController]
1818
[AllowAnonymous]
1919
[NonController]
20-
public class BankIdUiAuthApiController : BankIdUiApiControllerBase
20+
public class BankIdUiAuthApiController(
21+
IBankIdFlowService bankIdFlowService,
22+
IBankIdDataStateProtector<BankIdUiOrderRef> orderRefProtector,
23+
IBankIdDataStateProtector<Core.Models.BankIdQrStartState> qrStartStateProtector,
24+
IBankIdDataStateProtector<BankIdUiOptions> uiOptionsProtector,
25+
IBankIdUserMessage bankIdUserMessage,
26+
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
27+
IBankIdDataStateProtector<BankIdUiResult> uiAuthResultProtector,
28+
IStateStorage stateStorage
29+
) : BankIdUiApiControllerBase(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector, stateStorage)
2130
{
22-
public BankIdUiAuthApiController(
23-
IBankIdFlowService bankIdFlowService,
24-
IBankIdUiOrderRefProtector orderRefProtector,
25-
IBankIdQrStartStateProtector qrStartStateProtector,
26-
IBankIdUiOptionsProtector uiOptionsProtector,
27-
IBankIdUserMessage bankIdUserMessage,
28-
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
29-
IBankIdUiResultProtector uiAuthResultProtector)
30-
: base(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector)
31-
{
32-
}
33-
3431
[ValidateAntiForgeryToken]
3532
[HttpPost(BankIdConstants.Routes.BankIdApiInitializeActionName)]
3633
public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankIdUiApiInitializeRequest request)

src/ActiveLogin.Authentication.BankId.AspNetCore/Areas/ActiveLogin/Controllers/BankIdUiAuthController.cs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
using ActiveLogin.Authentication.BankId.AspNetCore.Auth;
12
using ActiveLogin.Authentication.BankId.AspNetCore.DataProtection;
3+
using ActiveLogin.Authentication.BankId.AspNetCore.Models;
24
using ActiveLogin.Authentication.BankId.AspNetCore.StateHandling;
5+
using ActiveLogin.Authentication.BankId.Core;
36
using ActiveLogin.Authentication.BankId.Core.UserMessage;
47

58
using Microsoft.AspNetCore.Antiforgery;
69
using Microsoft.AspNetCore.Authorization;
10+
using Microsoft.AspNetCore.Http;
711
using Microsoft.AspNetCore.Mvc;
812
using Microsoft.Extensions.Localization;
913

@@ -12,21 +16,15 @@ namespace ActiveLogin.Authentication.BankId.AspNetCore.Areas.ActiveLogin.Control
1216
[Area(BankIdConstants.Routes.ActiveLoginAreaName)]
1317
[AllowAnonymous]
1418
[NonController]
15-
public class BankIdUiAuthController : BankIdUiControllerBase
19+
public class BankIdUiAuthController(
20+
IAntiforgery antiforgery,
21+
IStringLocalizer<ActiveLoginResources> localizer,
22+
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
23+
IBankIdDataStateProtector<BankIdUiOptions> uiOptionsProtector,
24+
IBankIdInvalidStateHandler bankIdInvalidStateHandler,
25+
IStateStorage stateStorage
26+
) : BankIdUiControllerBase<BankIdUiAuthState>(antiforgery, localizer, bankIdUserMessageLocalizer, uiOptionsProtector, bankIdInvalidStateHandler, stateStorage)
1627
{
17-
public BankIdUiAuthController(
18-
IAntiforgery antiforgery,
19-
IStringLocalizer<ActiveLoginResources> localizer,
20-
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
21-
IBankIdUiOptionsProtector uiOptionsProtector,
22-
IBankIdInvalidStateHandler bankIdInvalidStateHandler,
23-
IBankIdUiStateProtector bankIdUiStateProtector
24-
)
25-
: base(antiforgery, localizer, bankIdUserMessageLocalizer, uiOptionsProtector, bankIdInvalidStateHandler, bankIdUiStateProtector)
26-
{
27-
28-
}
29-
3028
[HttpGet]
3129
[Route($"/[area]/{BankIdConstants.Routes.BankIdPathName}/{BankIdConstants.Routes.BankIdAuthControllerPath}")]
3230
public Task<ActionResult> Init(string returnUrl, [FromQuery(Name = BankIdConstants.QueryStringParameters.UiOptions)] string protectedUiOptions)

src/ActiveLogin.Authentication.BankId.AspNetCore/Areas/ActiveLogin/Controllers/BankIdUiControllerBase.cs

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using ActiveLogin.Authentication.BankId.AspNetCore.Payment;
77
using ActiveLogin.Authentication.BankId.AspNetCore.Sign;
88
using ActiveLogin.Authentication.BankId.AspNetCore.StateHandling;
9+
using ActiveLogin.Authentication.BankId.Core;
910
using ActiveLogin.Authentication.BankId.Core.UserMessage;
1011

1112
using Microsoft.AspNetCore.Antiforgery;
@@ -15,29 +16,42 @@
1516
namespace ActiveLogin.Authentication.BankId.AspNetCore.Areas.ActiveLogin.Controllers;
1617

1718
[NonController]
18-
public abstract class BankIdUiControllerBase : Controller
19+
public abstract class BankIdUiControllerBase<T> : Controller
20+
where T : BankIdUiState
1921
{
2022
private readonly IAntiforgery _antiforgery;
2123
private readonly IStringLocalizer<ActiveLoginResources> _localizer;
2224
private readonly IBankIdUserMessageLocalizer _bankIdUserMessageLocalizer;
23-
private readonly IBankIdUiOptionsProtector _uiOptionsProtector;
25+
private readonly IBankIdDataStateProtector<BankIdUiOptions> _uiOptionsProtector;
2426
private readonly IBankIdInvalidStateHandler _bankIdInvalidStateHandler;
25-
private readonly IBankIdUiStateProtector _bankIdUiStateProtector;
27+
private readonly IStateStorage stateStorage;
2628

27-
protected BankIdUiControllerBase(
29+
public BankIdUiControllerBase(
2830
IAntiforgery antiforgery,
2931
IStringLocalizer<ActiveLoginResources> localizer,
3032
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
31-
IBankIdUiOptionsProtector uiOptionsProtector,
33+
IBankIdDataStateProtector<BankIdUiOptions> uiOptionsProtector,
3234
IBankIdInvalidStateHandler bankIdInvalidStateHandler,
33-
IBankIdUiStateProtector bankIdUiStateProtector)
35+
IStateStorage stateStorage
36+
)
3437
{
38+
this.stateStorage = stateStorage;
3539
_antiforgery = antiforgery;
3640
_localizer = localizer;
3741
_bankIdUserMessageLocalizer = bankIdUserMessageLocalizer;
3842
_uiOptionsProtector = uiOptionsProtector;
3943
_bankIdInvalidStateHandler = bankIdInvalidStateHandler;
40-
_bankIdUiStateProtector = bankIdUiStateProtector;
44+
}
45+
46+
protected async Task<T?> GetUIState(BankIdUiOptions uiOptions)
47+
{
48+
var cookie = HttpContext.Request.Cookies[uiOptions.StateKeyCookieName];
49+
if (cookie is null)
50+
{
51+
return default;
52+
}
53+
var stateKey = new StateKey(cookie);
54+
return await stateStorage.GetAsync<T>(stateKey);
4155
}
4256

4357
protected async Task<ActionResult> Initialize(string returnUrl, string apiControllerName, string protectedUiOptions, string viewName)
@@ -59,32 +73,40 @@ protected async Task<ActionResult> Initialize(string returnUrl, string apiContro
5973
return new EmptyResult();
6074
}
6175

62-
var antiforgeryTokens = _antiforgery.GetAndStoreTokens(HttpContext);
76+
var state = await GetUIState(uiOptions);
6377

64-
var protectedState = Request.Cookies[uiOptions.StateCookieName];
65-
if(protectedState == null)
78+
if (state == null)
6679
{
6780
var invalidStateContext = new BankIdInvalidStateContext(uiOptions.CancelReturnUrl);
6881
await _bankIdInvalidStateHandler.HandleAsync(invalidStateContext);
6982

7083
return new EmptyResult();
7184
}
72-
var state = _bankIdUiStateProtector.Unprotect(protectedState);
7385

86+
var antiforgeryTokens = _antiforgery.GetAndStoreTokens(HttpContext);
7487
var viewModel = GetUiViewModel(returnUrl, apiControllerName, protectedUiOptions, uiOptions, state, antiforgeryTokens);
7588

7689
return View(viewName, viewModel);
7790
}
7891

7992
private bool HasStateCookie(BankIdUiOptions uiOptions)
8093
{
81-
if (string.IsNullOrEmpty(uiOptions.StateCookieName)
82-
|| !HttpContext.Request.Cookies.ContainsKey(uiOptions.StateCookieName))
94+
if (string.IsNullOrEmpty(uiOptions.StateKeyCookieName))
95+
{
96+
return false;
97+
}
98+
99+
if (!HttpContext.Request.Cookies.ContainsKey(uiOptions.StateKeyCookieName))
100+
{
101+
return false;
102+
}
103+
104+
if (string.IsNullOrEmpty(HttpContext.Request.Cookies[uiOptions.StateKeyCookieName]))
83105
{
84106
return false;
85107
}
86108

87-
return !string.IsNullOrEmpty(HttpContext.Request.Cookies[uiOptions.StateCookieName]);
109+
return true;
88110
}
89111

90112
private BankIdUiViewModel GetUiViewModel(string returnUrl, string apiControllerName, string protectedUiOptions, BankIdUiOptions unprotectedUiOptions, BankIdUiState uiState, AntiforgeryTokenSet antiforgeryTokens)
@@ -123,7 +145,7 @@ private BankIdUiViewModel GetUiViewModel(string returnUrl, string apiControllerN
123145
var localizedCancelButtonText = _localizer["Cancel_Button"];
124146
var localizedQrCodeImageAltText = _localizer["Qr_Code_Image"];
125147

126-
if(uiState is BankIdUiSignState signState)
148+
if (uiState is BankIdUiSignState signState)
127149
{
128150
var uiSignData = new BankIdUiSignData
129151
{

src/ActiveLogin.Authentication.BankId.AspNetCore/Areas/ActiveLogin/Controllers/BankIdUiPaymentApiController.cs

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using ActiveLogin.Authentication.BankId.AspNetCore.Helpers;
66
using ActiveLogin.Authentication.BankId.AspNetCore.Models;
77
using ActiveLogin.Authentication.BankId.AspNetCore.Payment;
8+
using ActiveLogin.Authentication.BankId.Core;
89
using ActiveLogin.Authentication.BankId.Core.Flow;
910
using ActiveLogin.Authentication.BankId.Core.Models;
1011
using ActiveLogin.Authentication.BankId.Core.UserMessage;
@@ -19,24 +20,17 @@ namespace ActiveLogin.Authentication.BankId.AspNetCore.Areas.ActiveLogin.Control
1920
[ApiController]
2021
[AllowAnonymous]
2122
[NonController]
22-
public class BankIdUiPaymentApiController : BankIdUiApiControllerBase
23+
public class BankIdUiPaymentApiController(
24+
IBankIdFlowService bankIdFlowService,
25+
IBankIdDataStateProtector<BankIdUiOrderRef> orderRefProtector,
26+
IBankIdDataStateProtector<BankIdQrStartState> qrStartStateProtector,
27+
IBankIdDataStateProtector<BankIdUiOptions> uiOptionsProtector,
28+
IBankIdUserMessage bankIdUserMessage,
29+
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
30+
IBankIdDataStateProtector<BankIdUiResult> uiAuthResultProtector,
31+
IStateStorage stateStorage
32+
) : BankIdUiApiControllerBase(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector, stateStorage)
2333
{
24-
private readonly IBankIdUiStateProtector _bankIdUiStateProtector;
25-
26-
public BankIdUiPaymentApiController(
27-
IBankIdFlowService bankIdFlowService,
28-
IBankIdUiOrderRefProtector orderRefProtector,
29-
IBankIdQrStartStateProtector qrStartStateProtector,
30-
IBankIdUiOptionsProtector uiOptionsProtector,
31-
IBankIdUserMessage bankIdUserMessage,
32-
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
33-
IBankIdUiResultProtector uiAuthResultProtector,
34-
IBankIdUiStateProtector bankIdUiStateProtector)
35-
: base(bankIdFlowService, orderRefProtector, qrStartStateProtector, uiOptionsProtector, bankIdUserMessage, bankIdUserMessageLocalizer, uiAuthResultProtector)
36-
{
37-
_bankIdUiStateProtector = bankIdUiStateProtector;
38-
}
39-
4034
[ValidateAntiForgeryToken]
4135
[HttpPost(BankIdConstants.Routes.BankIdApiInitializeActionName)]
4236
public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankIdUiApiInitializeRequest request)
@@ -46,8 +40,8 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
4640

4741
var uiOptions = UiOptionsProtector.Unprotect(request.UiOptions);
4842

49-
var state = GetStateFromCookie(uiOptions);
50-
if(state == null)
43+
var state = await GetState(uiOptions);
44+
if (state == null)
5145
{
5246
throw new InvalidOperationException(BankIdConstants.ErrorMessages.InvalidStateCookie);
5347
}
@@ -109,14 +103,15 @@ public async Task<ActionResult<BankIdUiApiInitializeResponse>> Initialize(BankId
109103
}
110104
}
111105

112-
private BankIdUiPaymentState? GetStateFromCookie(BankIdUiOptions uiOptions)
106+
private Task<BankIdUiPaymentState?> GetState(BankIdUiOptions uiOptions)
113107
{
114-
var protectedState = Request.Cookies[uiOptions.StateCookieName];
115-
if (protectedState == null)
108+
var cookie = Request.Cookies[uiOptions.StateKeyCookieName];
109+
if (cookie == null)
116110
{
117-
throw new InvalidOperationException(BankIdConstants.ErrorMessages.InvalidStateCookie);
111+
return Task.FromResult<BankIdUiPaymentState?>(null);
118112
}
119113

120-
return _bankIdUiStateProtector.Unprotect(protectedState) as BankIdUiPaymentState;
114+
var stateKey = new StateKey(cookie);
115+
return _stateStorage.GetAsync<BankIdUiPaymentState>(stateKey);
121116
}
122117
}

src/ActiveLogin.Authentication.BankId.AspNetCore/Areas/ActiveLogin/Controllers/BankIdUiPaymentController.cs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using ActiveLogin.Authentication.BankId.AspNetCore.DataProtection;
2+
using ActiveLogin.Authentication.BankId.AspNetCore.Payment;
23
using ActiveLogin.Authentication.BankId.AspNetCore.StateHandling;
4+
using ActiveLogin.Authentication.BankId.Core;
35
using ActiveLogin.Authentication.BankId.Core.UserMessage;
46

57
using Microsoft.AspNetCore.Antiforgery;
@@ -12,21 +14,15 @@ namespace ActiveLogin.Authentication.BankId.AspNetCore.Areas.ActiveLogin.Control
1214
[Area(BankIdConstants.Routes.ActiveLoginAreaName)]
1315
[AllowAnonymous]
1416
[NonController]
15-
public class BankIdUiPaymentController : BankIdUiControllerBase
17+
public class BankIdUiPaymentController(
18+
IAntiforgery antiforgery,
19+
IStringLocalizer<ActiveLoginResources> localizer,
20+
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
21+
IBankIdDataStateProtector<AspNetCore.Models.BankIdUiOptions> uiOptionsProtector,
22+
IBankIdInvalidStateHandler bankIdInvalidStateHandler,
23+
IStateStorage stateStorage
24+
) : BankIdUiControllerBase<BankIdUiPaymentState>(antiforgery, localizer, bankIdUserMessageLocalizer, uiOptionsProtector, bankIdInvalidStateHandler, stateStorage)
1625
{
17-
public BankIdUiPaymentController(
18-
IAntiforgery antiforgery,
19-
IStringLocalizer<ActiveLoginResources> localizer,
20-
IBankIdUserMessageLocalizer bankIdUserMessageLocalizer,
21-
IBankIdUiOptionsProtector uiOptionsProtector,
22-
IBankIdInvalidStateHandler bankIdInvalidStateHandler,
23-
IBankIdUiStateProtector bankIdUiStateProtector
24-
)
25-
: base(antiforgery, localizer, bankIdUserMessageLocalizer, uiOptionsProtector, bankIdInvalidStateHandler, bankIdUiStateProtector)
26-
{
27-
28-
}
29-
3026
[HttpGet]
3127
[AllowAnonymous]
3228
[Route($"/[area]/{BankIdConstants.Routes.BankIdPathName}/{BankIdConstants.Routes.BankIdPaymentControllerPath}")]

0 commit comments

Comments
 (0)