-
Notifications
You must be signed in to change notification settings - Fork 229
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* added files, not working yet * templates good right now, taking care of nullability now * looks all good now, getting the PR out soon. * minor fixes * minor fixes * added TODOs
- Loading branch information
1 parent
3d4e2de
commit 2420991
Showing
313 changed files
with
36,041 additions
and
363 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
42 changes: 42 additions & 0 deletions
42
src/dotnet-scaffolding/dotnet-scaffold-aspnet/CodeModificationConfigs/identityChanges.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
{ | ||
"Files": [ | ||
{ | ||
"FileName": "Program.cs", | ||
"Usings": [ | ||
"Microsoft.AspNetCore.Identity", | ||
"Microsoft.EntityFrameworkCore", | ||
"$(UserClassNamespace)" | ||
], | ||
"Options": [ | ||
"EfScenario" | ||
], | ||
"Methods": { | ||
"Global": { | ||
"CodeChanges": [ | ||
{ | ||
"InsertAfter": "WebApplication.CreateBuilder", | ||
"CheckBlock": "builder.Configuration.GetConnectionString", | ||
"Block": "\nvar connectionString = builder.Configuration.GetConnectionString(\"$(ConnectionStringName)\") ?? throw new InvalidOperationException(\"Connection string '$(ConnectionStringName)' not found.\")" | ||
}, | ||
{ | ||
"InsertAfter": "builder.Configuration.GetConnectionString", | ||
"CheckBlock": "builder.Services.AddDbContext", | ||
"Block": "builder.Services.AddDbContext<$(DbContextName)>(options => options.$(UseDbMethod))", | ||
"LeadingTrivia": { | ||
"Newline": true | ||
} | ||
}, | ||
{ | ||
"InsertAfter": "builder.Services.AddDbContext", | ||
"CheckBlock": "builder.Services.AddDefaultIdentity", | ||
"Block": "builder.Services.AddDefaultIdentity<$(UserClassName)>(options => options.SignIn.RequireConfirmedAccount = true).AddEntityFrameworkStores<$(DbContextName)>()\"", | ||
"LeadingTrivia": { | ||
"Newline": true | ||
} | ||
} | ||
] | ||
} | ||
} | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
127 changes: 127 additions & 0 deletions
127
...tnet-scaffolding/dotnet-scaffold-aspnet/Extensions/IdentityScaffolderBuilderExtensions.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
using System.Diagnostics; | ||
using Microsoft.DotNet.Scaffolding.CodeModification; | ||
using Microsoft.DotNet.Scaffolding.Core.Builder; | ||
using Microsoft.DotNet.Scaffolding.Core.Steps; | ||
using Microsoft.DotNet.Scaffolding.Internal; | ||
using Microsoft.DotNet.Scaffolding.TextTemplating; | ||
using Microsoft.DotNet.Tools.Scaffold.AspNet.Common; | ||
using Microsoft.DotNet.Tools.Scaffold.AspNet.Helpers; | ||
using Microsoft.DotNet.Tools.Scaffold.AspNet.Models; | ||
using Microsoft.DotNet.Tools.Scaffold.AspNet.ScaffoldSteps.Settings; | ||
|
||
namespace Microsoft.DotNet.Scaffolding.Core.Hosting; | ||
|
||
internal static class IdentityScaffolderBuilderExtensions | ||
{ | ||
public static IScaffoldBuilder WithIdentityAddPackagesStep(this IScaffoldBuilder builder) | ||
{ | ||
return builder.WithStep<AddPackagesStep>(config => | ||
{ | ||
var step = config.Step; | ||
var context = config.Context; | ||
List<string> packageList = [ | ||
PackageConstants.AspNetCorePackages.AspNetCoreIdentityEfPackageName, | ||
PackageConstants.AspNetCorePackages.AspNetCoreIdentityUiPackageName, | ||
PackageConstants.EfConstants.EfCoreToolsPackageName | ||
]; | ||
if (context.Properties.TryGetValue(nameof(IdentitySettings), out var commandSettingsObj) && | ||
commandSettingsObj is IdentitySettings commandSettings) | ||
{ | ||
step.ProjectPath = commandSettings.Project; | ||
step.Prerelease = commandSettings.Prerelease; | ||
if (!string.IsNullOrEmpty(commandSettings.DatabaseProvider) && | ||
PackageConstants.EfConstants.IdentityEfPackagesDict.TryGetValue(commandSettings.DatabaseProvider, out string? dbProviderPackageName)) | ||
{ | ||
packageList.Add(dbProviderPackageName); | ||
} | ||
step.PackageNames = packageList; | ||
} | ||
else | ||
{ | ||
step.SkipStep = true; | ||
return; | ||
} | ||
}); | ||
} | ||
|
||
public static IScaffoldBuilder WithIdentityTextTemplatingStep(this IScaffoldBuilder builder) | ||
{ | ||
builder = builder.WithStep<TextTemplatingStep>(config => | ||
{ | ||
var step = config.Step; | ||
var context = config.Context; | ||
context.Properties.TryGetValue(nameof(IdentityModel), out var blazorIdentityModelObj); | ||
IdentityModel identityModel = blazorIdentityModelObj as IdentityModel ?? | ||
throw new InvalidOperationException("missing 'IdentityModel' in 'ScaffolderContext.Properties'"); | ||
var templateFolderUtilities = new TemplateFoldersUtilities(); | ||
//all the .cshtml and their model class (.cshtml.cs) templates | ||
var allIdentityPageFiles = templateFolderUtilities.GetAllT4Templates(["Identity"]); | ||
//ApplicationUser.tt template | ||
var applicationUserFile = templateFolderUtilities.GetAllT4Templates(["Files"]) | ||
.FirstOrDefault(x => x.EndsWith("ApplicationUser.tt", StringComparison.OrdinalIgnoreCase)); | ||
var identityFileProperties = IdentityHelper.GetTextTemplatingProperties(allIdentityPageFiles, identityModel); | ||
var applicationUserProperty = IdentityHelper.GetApplicationUserTextTemplatingProperty(applicationUserFile, identityModel); | ||
if (applicationUserProperty is not null) | ||
{ | ||
identityFileProperties = identityFileProperties.Append(applicationUserProperty); | ||
} | ||
if (identityFileProperties is not null && identityFileProperties.Any()) | ||
{ | ||
step.TextTemplatingProperties = identityFileProperties; | ||
step.DisplayName = "Identity files"; | ||
step.Overwrite = identityModel.Overwrite; | ||
} | ||
else | ||
{ | ||
step.SkipStep = true; | ||
return; | ||
} | ||
}); | ||
|
||
return builder; | ||
} | ||
|
||
public static IScaffoldBuilder WithIdentityCodeChangeStep(this IScaffoldBuilder builder) | ||
{ | ||
builder = builder.WithStep<CodeModificationStep>(config => | ||
{ | ||
var step = config.Step; | ||
var codeModificationFilePath = GlobalToolFileFinder.FindCodeModificationConfigFile("identityChanges.json", System.Reflection.Assembly.GetExecutingAssembly()); | ||
//get needed properties and cast them as needed | ||
config.Context.Properties.TryGetValue(nameof(IdentitySettings), out var identitySettingsObj); | ||
config.Context.Properties.TryGetValue(nameof(IdentityModel), out var identityModelObj); | ||
config.Context.Properties.TryGetValue(Internal.Constants.StepConstants.CodeModifierProperties, out var codeModifierPropertiesObj); | ||
var identitySettings = identitySettingsObj as IdentitySettings; | ||
var codeModifierProperties = codeModifierPropertiesObj as Dictionary<string, string>; | ||
var identityModel = identityModelObj as IdentityModel; | ||
//initialize CodeModificationStep's properties | ||
if (!string.IsNullOrEmpty(codeModificationFilePath) && | ||
identitySettings is not null && | ||
codeModifierProperties is not null && | ||
identityModel is not null) | ||
{ | ||
step.CodeModifierConfigPath = codeModificationFilePath; | ||
foreach (var kvp in codeModifierProperties) | ||
{ | ||
step.CodeModifierProperties.TryAdd(kvp.Key, kvp.Value); | ||
} | ||
step.ProjectPath = identitySettings.Project; | ||
step.CodeChangeOptions = identityModel.ProjectInfo.CodeChangeOptions ?? []; | ||
} | ||
else | ||
{ | ||
step.SkipStep = true; | ||
return; | ||
} | ||
}); | ||
|
||
return builder; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.