Skip to content

Commit a13e66d

Browse files
Merge branch 'v9/9.3' into v9/dev
# Conflicts: # build/templates/UmbracoPackage/.template.config/template.json # build/templates/UmbracoProject/.template.config/template.json # src/Directory.Build.props
2 parents 27a3431 + 3a269ed commit a13e66d

File tree

4 files changed

+79
-18
lines changed

4 files changed

+79
-18
lines changed

src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,9 @@ protected void DefinePlan()
242242
// to 8.17.0
243243
To<AddPropertyTypeGroupColumns>("{153865E9-7332-4C2A-9F9D-F20AEE078EC7}");
244244

245+
// Hack to support migration from 8.18
246+
To<NoopMigration>("{03482BB0-CF13-475C-845E-ECB8319DBE3C}");
247+
245248
// This should be safe to execute again. We need it with a new name to ensure updates from all the following has executed this step.
246249
// - 8.15.0 RC - Current state: {4695D0C9-0729-4976-985B-048D503665D8}
247250
// - 8.15.0 Final - Current state: {5C424554-A32D-4852-8ED1-A13508187901}

src/Umbraco.Infrastructure/Migrations/Upgrade/V_9_0_0/ExternalLoginTableIndexes.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.Linq;
4+
using NPoco;
35
using Umbraco.Cms.Core;
6+
using Umbraco.Cms.Infrastructure.Persistence.DatabaseAnnotations;
7+
using Umbraco.Cms.Infrastructure.Persistence.DatabaseModelDefinitions;
48
using Umbraco.Cms.Infrastructure.Persistence.Dtos;
59

610
namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_9_0_0
@@ -20,14 +24,14 @@ protected override void Migrate()
2024
{
2125
// Before adding these indexes we need to remove duplicate data.
2226
// Get all logins by latest
23-
var logins = Database.Fetch<ExternalLoginDto>()
27+
var logins = Database.Fetch<ExternalLoginTokenTable.LegacyExternalLoginDto>()
2428
.OrderByDescending(x => x.CreateDate)
2529
.ToList();
2630

2731
var toDelete = new List<int>();
2832
// used to track duplicates so they can be removed
2933
var keys = new HashSet<(string, string)>();
30-
foreach(ExternalLoginDto login in logins)
34+
foreach(ExternalLoginTokenTable.LegacyExternalLoginDto login in logins)
3135
{
3236
if (!keys.Add((login.ProviderKey, login.LoginProvider)))
3337
{
@@ -37,16 +41,16 @@ protected override void Migrate()
3741
}
3842
if (toDelete.Count > 0)
3943
{
40-
Database.DeleteMany<ExternalLoginDto>().Where(x => toDelete.Contains(x.Id)).Execute();
41-
}
44+
Database.DeleteMany<ExternalLoginTokenTable.LegacyExternalLoginDto>().Where(x => toDelete.Contains(x.Id)).Execute();
45+
}
4246

43-
var indexName1 = "IX_" + ExternalLoginDto.TableName + "_LoginProvider";
47+
var indexName1 = "IX_" + ExternalLoginTokenTable.LegacyExternalLoginDto.TableName + "_LoginProvider";
4448

4549
if (!IndexExists(indexName1))
4650
{
4751
Create
4852
.Index(indexName1)
49-
.OnTable(ExternalLoginDto.TableName)
53+
.OnTable(ExternalLoginTokenTable.LegacyExternalLoginDto.TableName)
5054
.OnColumn("loginProvider")
5155
.Ascending()
5256
.WithOptions()
@@ -56,19 +60,21 @@ protected override void Migrate()
5660
.Do();
5761
}
5862

59-
var indexName2 = "IX_" + ExternalLoginDto.TableName + "_ProviderKey";
63+
var indexName2 = "IX_" + ExternalLoginTokenTable.LegacyExternalLoginDto.TableName + "_ProviderKey";
6064

6165
if (!IndexExists(indexName2))
6266
{
6367
Create
6468
.Index(indexName2)
65-
.OnTable(ExternalLoginDto.TableName)
69+
.OnTable(ExternalLoginTokenTable.LegacyExternalLoginDto.TableName)
6670
.OnColumn("loginProvider").Ascending()
6771
.OnColumn("providerKey").Ascending()
6872
.WithOptions()
6973
.NonClustered()
7074
.Do();
7175
}
7276
}
77+
78+
7379
}
7480
}

src/Umbraco.Infrastructure/Migrations/Upgrade/V_9_0_0/ExternalLoginTableIndexesFixup.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,29 @@ public ExternalLoginTableIndexesFixup(IMigrationContext context) : base(context)
1414

1515
protected override void Migrate()
1616
{
17-
var indexName1 = "IX_" + ExternalLoginDto.TableName + "_LoginProvider";
18-
var indexName2 = "IX_" + ExternalLoginDto.TableName + "_ProviderKey";
17+
var indexName1 = "IX_" + ExternalLoginTokenTable.LegacyExternalLoginDto.TableName + "_LoginProvider";
18+
var indexName2 = "IX_" + ExternalLoginTokenTable.LegacyExternalLoginDto.TableName + "_ProviderKey";
1919

2020
if (IndexExists(indexName1))
2121
{
2222
// drop it since the previous migration index was wrong, and we
2323
// need to modify a column that belons to it
24-
Delete.Index(indexName1).OnTable(ExternalLoginDto.TableName).Do();
24+
Delete.Index(indexName1).OnTable(ExternalLoginTokenTable.LegacyExternalLoginDto.TableName).Do();
2525
}
2626

2727
if (IndexExists(indexName2))
2828
{
2929
// drop since it's using a column we're about to modify
30-
Delete.Index(indexName2).OnTable(ExternalLoginDto.TableName).Do();
30+
Delete.Index(indexName2).OnTable(ExternalLoginTokenTable.LegacyExternalLoginDto.TableName).Do();
3131
}
3232

3333
// then fixup the length of the loginProvider column
34-
AlterColumn<ExternalLoginDto>(ExternalLoginDto.TableName, "loginProvider");
34+
AlterColumn<ExternalLoginTokenTable.LegacyExternalLoginDto>(ExternalLoginTokenTable.LegacyExternalLoginDto.TableName, "loginProvider");
3535

3636
// create it with the correct definition
3737
Create
3838
.Index(indexName1)
39-
.OnTable(ExternalLoginDto.TableName)
39+
.OnTable(ExternalLoginTokenTable.LegacyExternalLoginDto.TableName)
4040
.OnColumn("loginProvider").Ascending()
4141
.OnColumn("userId").Ascending()
4242
.WithOptions()
@@ -48,9 +48,9 @@ protected override void Migrate()
4848
// re-create the original
4949
Create
5050
.Index(indexName2)
51-
.OnTable(ExternalLoginDto.TableName)
51+
.OnTable(ExternalLoginTokenTable.LegacyExternalLoginDto.TableName)
5252
.OnColumn("loginProvider").Ascending()
53-
.OnColumn("providerKey").Ascending()
53+
.OnColumn("providerKey").Ascending()
5454
.WithOptions()
5555
.NonClustered()
5656
.Do();

src/Umbraco.Infrastructure/Migrations/Upgrade/V_9_0_0/ExternalLoginTokenTable.cs

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
using System;
12
using System.Collections.Generic;
3+
using NPoco;
4+
using Umbraco.Cms.Core;
5+
using Umbraco.Cms.Infrastructure.Persistence.DatabaseAnnotations;
6+
using Umbraco.Cms.Infrastructure.Persistence.DatabaseModelDefinitions;
27
using Umbraco.Cms.Infrastructure.Persistence.Dtos;
38
using Umbraco.Extensions;
49

510
namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_9_0_0
611
{
7-
812
public class ExternalLoginTokenTable : MigrationBase
913
{
1014
public ExternalLoginTokenTable(IMigrationContext context)
@@ -13,7 +17,7 @@ public ExternalLoginTokenTable(IMigrationContext context)
1317
}
1418

1519
/// <summary>
16-
/// Adds new External Login token table
20+
/// Adds new External Login token table
1721
/// </summary>
1822
protected override void Migrate()
1923
{
@@ -25,5 +29,53 @@ protected override void Migrate()
2529

2630
Create.Table<ExternalLoginTokenDto>().Do();
2731
}
32+
33+
[TableName(TableName)]
34+
[ExplicitColumns]
35+
[PrimaryKey("Id")]
36+
internal class LegacyExternalLoginDto
37+
{
38+
public const string TableName = Constants.DatabaseSchema.Tables.ExternalLogin;
39+
40+
[Column("id")] [PrimaryKeyColumn] public int Id { get; set; }
41+
42+
[Obsolete(
43+
"This only exists to ensure you can upgrade using external logins from umbraco version where this was used to the new where it is not used")]
44+
[Column("userId")]
45+
public int? UserId { get; set; }
46+
47+
48+
/// <summary>
49+
/// Used to store the name of the provider (i.e. Facebook, Google)
50+
/// </summary>
51+
[Column("loginProvider")]
52+
[Length(400)]
53+
[NullSetting(NullSetting = NullSettings.NotNull)]
54+
[Index(IndexTypes.UniqueNonClustered, ForColumns = "loginProvider,userOrMemberKey",
55+
Name = "IX_" + TableName + "_LoginProvider")]
56+
public string LoginProvider { get; set; }
57+
58+
/// <summary>
59+
/// Stores the key the provider uses to lookup the login
60+
/// </summary>
61+
[Column("providerKey")]
62+
[Length(4000)]
63+
[NullSetting(NullSetting = NullSettings.NotNull)]
64+
[Index(IndexTypes.NonClustered, ForColumns = "loginProvider,providerKey",
65+
Name = "IX_" + TableName + "_ProviderKey")]
66+
public string ProviderKey { get; set; }
67+
68+
[Column("createDate")]
69+
[Constraint(Default = SystemMethods.CurrentDateTime)]
70+
public DateTime CreateDate { get; set; }
71+
72+
/// <summary>
73+
/// Used to store any arbitrary data for the user and external provider - like user tokens returned from the provider
74+
/// </summary>
75+
[Column("userData")]
76+
[NullSetting(NullSetting = NullSettings.Null)]
77+
[SpecialDbType(SpecialDbTypes.NTEXT)]
78+
public string UserData { get; set; }
79+
}
2880
}
2981
}

0 commit comments

Comments
 (0)