Skip to content

Commit 3525eca

Browse files
Ticket #896 : Pass the returnUrl
1 parent 599b558 commit 3525eca

7 files changed

Lines changed: 170 additions & 3 deletions

File tree

formbuilder/FormBuilder/Link/Services/WorkflowLinkHttpRequestService.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,32 @@ public WorkflowLinkHttpRequestService(ITransformerFactory transformerFactory, IM
3131
result.Add(antiforgeryToken.FormField, antiforgeryToken.FormValue);
3232

3333
var target = parameter.Target;
34-
if(parameter.Transformers != null)
34+
if (parameter.Transformers != null)
3535
{
3636
foreach (var transformer in parameter.Transformers)
3737
target = _transformerFactory.Transform(target, transformer, json)?.ToString();
3838
}
3939

40+
if (Uri.TryCreate(target, UriKind.RelativeOrAbsolute, out var uri))
41+
{
42+
var query = uri.Query;
43+
if (!string.IsNullOrEmpty(query))
44+
{
45+
var queryParams = System.Web.HttpUtility.ParseQueryString(query);
46+
foreach (string key in queryParams.AllKeys)
47+
{
48+
if (!string.IsNullOrEmpty(key))
49+
{
50+
result[key] = queryParams[key];
51+
}
52+
}
53+
54+
target = uri.IsAbsoluteUri
55+
? $"{uri.Scheme}://{uri.Authority}{uri.AbsolutePath}"
56+
: uri.GetLeftPart(UriPartial.Path);
57+
}
58+
}
59+
4060
result.Add(nameof(IStepViewModel.StepId), stepId);
4161
result.Add(nameof(IStepViewModel.WorkflowId), workflowId);
4262
result.Add(nameof(IStepViewModel.CurrentLink), currentLink);

src/IdServer/SimpleIdServer.IdServer.Pwd/IdServerBuilderExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ public static IdServerBuilder AddPwdAuthentication(this IdServerBuilder idServer
4040
idServerBuilder.Services.AddTransient<IDataSeeder, UpdatePwdTranslationsDataseeder>();
4141
idServerBuilder.Services.AddTransient<IDataSeeder, InitPwdConfigurationDefDataseeder>();
4242
idServerBuilder.Services.AddTransient<IDataSeeder, UpdatePwdFormDataseeder>();
43+
idServerBuilder.Services.AddTransient<IDataSeeder, UpdatePwdWorkflows4Dataseeder>();
44+
idServerBuilder.Services.AddTransient<IDataSeeder, AddMissingResetTmpPwdAuthDataseeder>();
45+
idServerBuilder.Services.AddTransient<IDataSeeder, TransformNulltranslationToEmptyArrayDataseeder>();
4346
idServerBuilder.Services.AddTransient<IFakerDataService, PwdAuthFakerService>();
4447
idServerBuilder.Services.AddTransient<IPasswordValidationService, PasswordValidationService>();
4548
idServerBuilder.AutomaticConfigurationOptions.Add(typeof(IdServerPasswordOptions));
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright (c) SimpleIdServer. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
using DataSeeder;
5+
using FormBuilder.Repositories;
6+
using FormBuilder.Stores;
7+
using SimpleIdServer.IdServer.DataSeeder;
8+
using SimpleIdServer.IdServer.Stores;
9+
10+
namespace SimpleIdServer.IdServer.Pwd.Migrations
11+
{
12+
public class AddMissingResetTmpPwdAuthDataseeder : BaseAuthDataSeeder
13+
{
14+
private readonly ITransactionBuilder _transactionBuilder;
15+
16+
public AddMissingResetTmpPwdAuthDataseeder(
17+
ITransactionBuilder transactionBuilder,
18+
IRegistrationWorkflowRepository registrationWorkflowRepository,
19+
IAuthenticationContextClassReferenceRepository acrRepository,
20+
IDataSeederExecutionHistoryRepository dataSeederExecutionHistoryRepository,
21+
IFormStore formStore,
22+
IWorkflowStore workflowStore,
23+
IRealmRepository realmRepository) : base(acrRepository, dataSeederExecutionHistoryRepository, formStore, workflowStore, realmRepository)
24+
{
25+
_transactionBuilder = transactionBuilder;
26+
}
27+
28+
29+
public override string Name => nameof(AddMissingResetTmpPwdAuthDataseeder);
30+
31+
protected override async Task Execute(CancellationToken cancellationToken)
32+
{
33+
using (var transaction = _transactionBuilder.Build())
34+
{
35+
await TryAddForm(Constants.DefaultRealm, StandardPwdAuthForms.ResetTemporaryPasswordForm, cancellationToken);
36+
await transaction.Commit(cancellationToken);
37+
await Commit(cancellationToken);
38+
}
39+
}
40+
}
41+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright (c) SimpleIdServer. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
using DataSeeder;
4+
using FormBuilder.Models;
5+
using FormBuilder.Stores;
6+
using SimpleIdServer.IdServer.Stores;
7+
8+
namespace SimpleIdServer.IdServer.Pwd.Migrations
9+
{
10+
public class TransformNulltranslationToEmptyArrayDataseeder : BaseAfterDeploymentDataSeeder
11+
{
12+
private readonly ITransactionBuilder _transactionBuilder;
13+
private readonly IFormStore _formStore;
14+
15+
public TransformNulltranslationToEmptyArrayDataseeder(
16+
ITransactionBuilder transactionBuilder,
17+
IFormStore formStore,
18+
IDataSeederExecutionHistoryRepository dataSeederExecutionHistoryRepository) : base(dataSeederExecutionHistoryRepository)
19+
{
20+
_transactionBuilder = transactionBuilder;
21+
_formStore = formStore;
22+
}
23+
24+
25+
public override string Name => nameof(TransformNulltranslationToEmptyArrayDataseeder);
26+
27+
protected override async Task Execute(CancellationToken cancellationToken)
28+
{
29+
using (var transaction = _transactionBuilder.Build())
30+
{
31+
var forms = await _formStore.GetAll(Constants.DefaultRealm, cancellationToken);
32+
foreach (var form in forms)
33+
{
34+
if (form.SuccessMessageTranslations == null)
35+
{
36+
form.SuccessMessageTranslations = new List<FormMessageTranslation>();
37+
}
38+
39+
if(form.ErrorMessageTranslations == null)
40+
{
41+
form.ErrorMessageTranslations = new List<FormMessageTranslation>();
42+
}
43+
}
44+
45+
await transaction.Commit(cancellationToken);
46+
await _formStore.SaveChanges(cancellationToken);
47+
}
48+
}
49+
}
50+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Copyright (c) SimpleIdServer. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
using DataSeeder;
5+
using FormBuilder.Builders;
6+
using FormBuilder.Models;
7+
using FormBuilder.Repositories;
8+
using SimpleIdServer.IdServer.Stores;
9+
10+
namespace SimpleIdServer.IdServer.Pwd.Migrations
11+
{
12+
public class UpdatePwdWorkflowsDataseeder : BaseAfterDeploymentDataSeeder
13+
{
14+
private readonly ITransactionBuilder _transactionBuilder;
15+
private readonly IWorkflowStore _workflowStore;
16+
17+
public UpdatePwdWorkflowsDataseeder(
18+
ITransactionBuilder transactionBuilder,
19+
IWorkflowStore workflowStore,
20+
IDataSeederExecutionHistoryRepository dataSeederExecutionHistoryRepository) : base(dataSeederExecutionHistoryRepository)
21+
{
22+
_transactionBuilder = transactionBuilder;
23+
_workflowStore = workflowStore;
24+
}
25+
26+
27+
public override string Name => nameof(UpdatePwdWorkflowsDataseeder);
28+
29+
protected override async Task Execute(CancellationToken cancellationToken)
30+
{
31+
using (var transaction = _transactionBuilder.Build())
32+
{
33+
await TryUpdate(Constants.DefaultRealm, StandardPwdAuthWorkflows.DefaultPwdWorkflow, cancellationToken);
34+
await TryUpdate(Constants.DefaultRealm, StandardPwdAuthWorkflows.DefaultConfirmResetPwdWorkflow, cancellationToken);
35+
await TryUpdate(Constants.DefaultRealm, StandardPwdAuthWorkflows.DefaultCompletePwdAuthWorkflow, cancellationToken);
36+
await transaction.Commit(cancellationToken);
37+
}
38+
}
39+
40+
private async Task TryUpdate(string realm, WorkflowRecord workflowRecord, CancellationToken cancellationToken)
41+
{
42+
var existingWorkflow = await _workflowStore.Get(realm, workflowRecord.Id, cancellationToken);
43+
if (existingWorkflow == null)
44+
{
45+
return;
46+
}
47+
48+
existingWorkflow.Steps = workflowRecord.Steps;
49+
existingWorkflow.Links = workflowRecord.Links;
50+
await _workflowStore.SaveChanges(cancellationToken);
51+
}
52+
}
53+
}

src/IdServer/SimpleIdServer.IdServer.Pwd/PwdAuthWorkflowLayout.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public WorkflowLayout Get()
147147
ActionParameter = JsonSerializer.Serialize(new WorkflowLinkHttpRequestParameter
148148
{
149149
Method = HttpMethods.GET,
150-
Target = "/{realm}/pwd/Reset",
150+
Target = "/{realm}/pwd/Reset?returnUrl={returnUrl}",
151151
Transformers = new List<ITransformerParameters>
152152
{
153153
new RegexTransformerParameters()

src/IdServer/SimpleIdServer.IdServer.Pwd/StandardPwdAuthWorkflows.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public static WorkflowBuilder AddPwdAuth(this WorkflowBuilder builder, FormRecor
9595
.AddLinkHttpRequestAction(StandardPwdAuthForms.PwdForm, resetStep ?? FormBuilder.Constants.EmptyStep, StandardPwdAuthForms.pwdForgetBtnId, "Forget", new WorkflowLinkHttpRequestParameter
9696
{
9797
Method = HttpMethods.GET,
98-
Target = "/{realm}/pwd/Reset",
98+
Target = "/{realm}/pwd/Reset?returnUrl={returnUrl}",
9999
Transformers = new List<ITransformerParameters>
100100
{
101101
new RegexTransformerParameters()

0 commit comments

Comments
 (0)