Skip to content

Commit cfab0f4

Browse files
Ticket #896 : Fix migration
1 parent c5b6735 commit cfab0f4

14 files changed

Lines changed: 324 additions & 4 deletions

File tree

src/IdServer/SimpleIdServer.IdServer.Email/IdServerBuilderExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public static IdServerBuilder AddEmailAuthentication(this IdServerBuilder idServ
3232
idServerBuilder.Services.AddTransient<IDataSeeder, InitEmailAuthDataseeder>();
3333
idServerBuilder.Services.AddTransient<IDataSeeder, UpdateEmailTranslationsDataseeder>();
3434
idServerBuilder.Services.AddTransient<IDataSeeder, InitEmailConfigurationDefDataseeder>();
35+
idServerBuilder.Services.AddTransient<IDataSeeder, UpdateTargetsEmailWorkflowsDataseeder>();
3536
idServerBuilder.AutomaticConfigurationOptions.Add(typeof(IdServerEmailOptions));
3637
if (isDefaultAuthMethod)
3738
{
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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.Email.Migrations
11+
{
12+
public class UpdateTargetsEmailWorkflowsDataseeder : BaseAfterDeploymentDataSeeder
13+
{
14+
private readonly ITransactionBuilder _transactionBuilder;
15+
private readonly IWorkflowStore _workflowStore;
16+
17+
public UpdateTargetsEmailWorkflowsDataseeder(
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(UpdateTargetsEmailWorkflowsDataseeder);
28+
29+
protected override async Task Execute(CancellationToken cancellationToken)
30+
{
31+
using (var transaction = _transactionBuilder.Build())
32+
{
33+
await TryUpdate(IdServer.Constants.DefaultRealm, StandardEmailAuthWorkflows.DefaultWorkflow, cancellationToken);
34+
await TryUpdate(IdServer.Constants.DefaultRealm, StandardEmailRegisterWorkflows.DefaultWorkflow, cancellationToken);
35+
await transaction.Commit(cancellationToken);
36+
}
37+
}
38+
39+
private async Task TryUpdate(string realm, WorkflowRecord workflowRecord, CancellationToken cancellationToken)
40+
{
41+
var existingWorkflow = await _workflowStore.Get(realm, workflowRecord.Id, cancellationToken);
42+
if (existingWorkflow == null)
43+
{
44+
return;
45+
}
46+
47+
existingWorkflow.Steps = workflowRecord.Steps;
48+
existingWorkflow.Links = workflowRecord.Links;
49+
await _workflowStore.SaveChanges(cancellationToken);
50+
}
51+
}
52+
}

src/IdServer/SimpleIdServer.IdServer.Fido/IdServerBuilderExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public static IdServerBuilder AddMobileAuthentication(this IdServerBuilder idSer
2424
idServerBuilder.Services.AddTransient<IDataSeeder, InitMobileAuthDataseeder>();
2525
idServerBuilder.Services.AddTransient<IDataSeeder, InitMobileConfigurationDefDataseeder>();
2626
idServerBuilder.Services.AddTransient<IDataSeeder, UpdateFidoTranslationsDataseeder>();
27+
idServerBuilder.Services.AddTransient<IDataSeeder, UpdateTargetsFidoWorkflowsDataseeder>();
2728
idServerBuilder.AutomaticConfigurationOptions.Add<MobileOptions>();
2829
if (isDefaultAuthMethod)
2930
{
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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.Fido.Migrations
11+
{
12+
public class UpdateTargetsFidoWorkflowsDataseeder : BaseAfterDeploymentDataSeeder
13+
{
14+
private readonly ITransactionBuilder _transactionBuilder;
15+
private readonly IWorkflowStore _workflowStore;
16+
17+
public UpdateTargetsFidoWorkflowsDataseeder(
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(UpdateTargetsFidoWorkflowsDataseeder);
28+
29+
protected override async Task Execute(CancellationToken cancellationToken)
30+
{
31+
using (var transaction = _transactionBuilder.Build())
32+
{
33+
await TryUpdate(IdServer.Constants.DefaultRealm, StandardFidoAuthWorkflows.DefaultWebauthnWorkflow, cancellationToken);
34+
await TryUpdate(IdServer.Constants.DefaultRealm, StandardFidoAuthWorkflows.DefaultMobileWorkflow, cancellationToken);
35+
await TryUpdate(IdServer.Constants.DefaultRealm, StandardFidoRegistrationWorkflows.WebauthnWorkflow, cancellationToken);
36+
await TryUpdate(IdServer.Constants.DefaultRealm, StandardFidoRegistrationWorkflows.MobileWorkflow, cancellationToken);
37+
await transaction.Commit(cancellationToken);
38+
}
39+
}
40+
41+
private async Task TryUpdate(string realm, WorkflowRecord workflowRecord, CancellationToken cancellationToken)
42+
{
43+
var existingWorkflow = await _workflowStore.Get(realm, workflowRecord.Id, cancellationToken);
44+
if (existingWorkflow == null)
45+
{
46+
return;
47+
}
48+
49+
existingWorkflow.Steps = workflowRecord.Steps;
50+
existingWorkflow.Links = workflowRecord.Links;
51+
await _workflowStore.SaveChanges(cancellationToken);
52+
}
53+
}
54+
}

src/IdServer/SimpleIdServer.IdServer.Otp/IdServerBuilderExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public static IdServerBuilder AddOtpAuthentication(this IdServerBuilder idServer
2727
idServerBuilder.Services.AddTransient<IWorkflowLayoutService, OtpAuthWorkflowLayout>();
2828
idServerBuilder.Services.AddTransient<IDataSeeder, InitOtpAuthDataseeder>();
2929
idServerBuilder.Services.AddTransient<IDataSeeder, UpdateOtpTranslationsDataseeder>();
30+
idServerBuilder.Services.AddTransient<IDataSeeder, UpdateTargetsOtpWorkflowsDataseeder>();
3031
if (isDefaultAuthMethod)
3132
{
3233
idServerBuilder.Services.Configure<IdServerHostOptions>(o =>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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.Otp.Migrations
11+
{
12+
public class UpdateTargetsOtpWorkflowsDataseeder : BaseAfterDeploymentDataSeeder
13+
{
14+
private readonly ITransactionBuilder _transactionBuilder;
15+
private readonly IWorkflowStore _workflowStore;
16+
17+
public UpdateTargetsOtpWorkflowsDataseeder(
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(UpdateTargetsOtpWorkflowsDataseeder);
28+
29+
protected override async Task Execute(CancellationToken cancellationToken)
30+
{
31+
using (var transaction = _transactionBuilder.Build())
32+
{
33+
await TryUpdate(IdServer.Constants.DefaultRealm, StandardOtpAuthWorkflows.DefaultWorkflow, cancellationToken);
34+
await transaction.Commit(cancellationToken);
35+
}
36+
}
37+
38+
private async Task TryUpdate(string realm, WorkflowRecord workflowRecord, CancellationToken cancellationToken)
39+
{
40+
var existingWorkflow = await _workflowStore.Get(realm, workflowRecord.Id, cancellationToken);
41+
if (existingWorkflow == null)
42+
{
43+
return;
44+
}
45+
46+
existingWorkflow.Steps = workflowRecord.Steps;
47+
existingWorkflow.Links = workflowRecord.Links;
48+
await _workflowStore.SaveChanges(cancellationToken);
49+
}
50+
}
51+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ 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, UpdatePwdWorkflowsDataseeder>();
43+
idServerBuilder.Services.AddTransient<IDataSeeder, UpdateTargetsPwdWorkflowsDataseeder>();
4444
idServerBuilder.Services.AddTransient<IDataSeeder, AddMissingResetTmpPwdAuthDataseeder>();
4545
idServerBuilder.Services.AddTransient<IDataSeeder, TransformNulltranslationToEmptyArrayDataseeder>();
4646
idServerBuilder.Services.AddTransient<IFakerDataService, PwdAuthFakerService>();

src/IdServer/SimpleIdServer.IdServer.Pwd/Migrations/UpdatePwdWorkflowsDataseeder.cs renamed to src/IdServer/SimpleIdServer.IdServer.Pwd/Migrations/UpdateTargetsPwdWorkflowsDataseeder.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99

1010
namespace SimpleIdServer.IdServer.Pwd.Migrations
1111
{
12-
public class UpdatePwdWorkflowsDataseeder : BaseAfterDeploymentDataSeeder
12+
public class UpdateTargetsPwdWorkflowsDataseeder : BaseAfterDeploymentDataSeeder
1313
{
1414
private readonly ITransactionBuilder _transactionBuilder;
1515
private readonly IWorkflowStore _workflowStore;
1616

17-
public UpdatePwdWorkflowsDataseeder(
17+
public UpdateTargetsPwdWorkflowsDataseeder(
1818
ITransactionBuilder transactionBuilder,
1919
IWorkflowStore workflowStore,
2020
IDataSeederExecutionHistoryRepository dataSeederExecutionHistoryRepository) : base(dataSeederExecutionHistoryRepository)
@@ -24,7 +24,7 @@ public UpdatePwdWorkflowsDataseeder(
2424
}
2525

2626

27-
public override string Name => nameof(UpdatePwdWorkflowsDataseeder);
27+
public override string Name => nameof(UpdateTargetsPwdWorkflowsDataseeder);
2828

2929
protected override async Task Execute(CancellationToken cancellationToken)
3030
{
@@ -33,6 +33,7 @@ protected override async Task Execute(CancellationToken cancellationToken)
3333
await TryUpdate(Constants.DefaultRealm, StandardPwdAuthWorkflows.DefaultPwdWorkflow, cancellationToken);
3434
await TryUpdate(Constants.DefaultRealm, StandardPwdAuthWorkflows.DefaultConfirmResetPwdWorkflow, cancellationToken);
3535
await TryUpdate(Constants.DefaultRealm, StandardPwdAuthWorkflows.DefaultCompletePwdAuthWorkflow, cancellationToken);
36+
await TryUpdate(Constants.DefaultRealm, StandardPwdRegistrationWorkflows.DefaultWorkflow, cancellationToken);
3637
await transaction.Commit(cancellationToken);
3738
}
3839
}

src/IdServer/SimpleIdServer.IdServer.Sms/IdServerBuildExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public static IdServerBuilder AddSmsAuthentication(this IdServerBuilder idServer
2828
idServerBuilder.Services.AddTransient<IDataSeeder, InitSmsAuthDataseeder>();
2929
idServerBuilder.Services.AddTransient<IDataSeeder, UpdateSmsTranslationsDataseeder>();
3030
idServerBuilder.Services.AddTransient<IDataSeeder, InitSmsConfigurationDefDataseeder>();
31+
idServerBuilder.Services.AddTransient<IDataSeeder, UpdateTargetsSmsWorkflowsDataseeder>();
3132
idServerBuilder.AutomaticConfigurationOptions.Add<IdServerSmsOptions>();
3233
if (isDefaultAuthMethod)
3334
{
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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.Sms.Migrations
11+
{
12+
public class UpdateTargetsSmsWorkflowsDataseeder : BaseAfterDeploymentDataSeeder
13+
{
14+
private readonly ITransactionBuilder _transactionBuilder;
15+
private readonly IWorkflowStore _workflowStore;
16+
17+
public UpdateTargetsSmsWorkflowsDataseeder(
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(UpdateTargetsSmsWorkflowsDataseeder);
28+
29+
protected override async Task Execute(CancellationToken cancellationToken)
30+
{
31+
using (var transaction = _transactionBuilder.Build())
32+
{
33+
await TryUpdate(IdServer.Constants.DefaultRealm, StandardSmsAuthWorkflows.DefaultWorkflow, cancellationToken);
34+
await TryUpdate(IdServer.Constants.DefaultRealm, StandardSmsRegisterWorkflows.DefaultWorkflow, cancellationToken);
35+
await transaction.Commit(cancellationToken);
36+
}
37+
}
38+
39+
private async Task TryUpdate(string realm, WorkflowRecord workflowRecord, CancellationToken cancellationToken)
40+
{
41+
var existingWorkflow = await _workflowStore.Get(realm, workflowRecord.Id, cancellationToken);
42+
if (existingWorkflow == null)
43+
{
44+
return;
45+
}
46+
47+
existingWorkflow.Steps = workflowRecord.Steps;
48+
existingWorkflow.Links = workflowRecord.Links;
49+
await _workflowStore.SaveChanges(cancellationToken);
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)