Update 07082021

This commit is contained in:
2021-08-07 09:44:37 +02:00
parent 1ff218a129
commit 4d443fdfd4
5663 changed files with 6581858 additions and 1321 deletions

25
.dockerignore Normal file
View File

@@ -0,0 +1,25 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!--
IIS configuration sections.
@@ -191,6 +191,15 @@
<binding protocol="https" bindingInformation="*:44327:localhost" />
</bindings>
</site>
<site name="WebFormApp" id="6">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\WebFormApp" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:53521:localhost" />
<binding protocol="https" bindingInformation="*:44388:localhost" />
</bindings>
</site>
<siteDefaults>
<!-- To enable logging, please change the below attribute "enabled" to "true" -->
<logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false" />

Binary file not shown.

BIN
.vs/BWPM/v17/.suo Normal file

Binary file not shown.

View File

@@ -95,7 +95,7 @@ namespace App.Controllers
BWPMModels.Schulhaus u = new BWPMModels.Schulhaus();
u = value.value;
u.mutiert_am = DateTime.Now;
u.mutierer = Convert.ToInt32(_userManager.GetUserId(HttpContext.User));
u.mutierer = Convert.ToString(_userManager.GetUserId(HttpContext.User));
httpcli.CallService("Schulhaus", u.ID.ToString(), "PUT", value.value);
if (httpcli.Results.resultstatuscode != "OK")
{
@@ -112,7 +112,7 @@ namespace App.Controllers
BWPMModels.Schulhaus u = new BWPMModels.Schulhaus();
u = value.value;
u.mutiert_am = DateTime.Now;
u.mutierer = Convert.ToInt32(_userManager.GetUserId(HttpContext.User));
u.mutierer = Convert.ToString(_userManager.GetUserId(HttpContext.User));
u.erstellt_am = DateTime.Now;
httpcli.CallService("Schulhaus", "", "POST", u);
if (httpcli.Results.resultstatuscode != "OK")
@@ -127,7 +127,7 @@ namespace App.Controllers
Helper.HttpClientHelper httpcli = new Helper.HttpClientHelper();
BWPMModels.Schulhaus u = new BWPMModels.Schulhaus();
u.mutiert_am = DateTime.Now;
u.mutierer = Convert.ToInt32(_userManager.GetUserId(HttpContext.User));
u.mutierer = Convert.ToString(_userManager.GetUserId(HttpContext.User));
httpcli.CallService("Schulhaus", value.Key.ToString(), "DELETE", u);
if (httpcli.Results.resultstatuscode != "OK")
{

View File

@@ -0,0 +1,3 @@
is_global = true
build_property.RootNamespace = APP
build_property.ProjectDir = E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
e88ff7cd909590b92bbb5a7800b7ca9bd25d93f2

View File

@@ -0,0 +1,24 @@
// <auto-generated/>
#pragma warning disable 1591
#pragma warning disable 0414
#pragma warning disable 0649
#pragma warning disable 0169
namespace APP.Views.Demo
{
#line hidden
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
public partial class Index : Microsoft.AspNetCore.Components.ComponentBase
{
#pragma warning disable 1998
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder)
{
}
#pragma warning restore 1998
}
}
#pragma warning restore 1591

File diff suppressed because one or more lines are too long

View File

@@ -31,7 +31,7 @@ public class clsDB
public string Get_Connectionstring()
{
return System.Configuration.ConfigurationManager.ConnectionStrings["QWToolConnectionString"].ConnectionString;
return System.Configuration.ConfigurationManager.ConnectionStrings["BWPMConnectionstring"].ConnectionString;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -3,6 +3,7 @@
"additionalProbingPaths": [
"C:\\Users\\Steafn Hutter lokal\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\Steafn Hutter lokal\\.nuget\\packages",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet"
]
}

View File

@@ -14,10 +14,12 @@
"outputPath": "E:\\Software-Projekte\\Lehrlingsparcours\\Core\\BWPM\\APP\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\"
],
"configFilePaths": [
"C:\\Users\\Steafn Hutter lokal\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
],
@@ -25,6 +27,7 @@
"netcoreapp3.1"
],
"sources": {
"C:\\Program Files (x86)\\FastReports\\FastReport.Net\\Nugets": {},
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"http://nuget.grapecity.com/nuget": {},
"https://api.nuget.org/v3/index.json": {}
@@ -92,7 +95,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.301\\RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.302\\RuntimeIdentifierGraph.json"
}
}
},
@@ -106,10 +109,12 @@
"outputPath": "E:\\Software-Projekte\\Lehrlingsparcours\\Core\\BWPM\\Models\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\"
],
"configFilePaths": [
"C:\\Users\\Steafn Hutter lokal\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
],
@@ -117,6 +122,7 @@
"netcoreapp3.1"
],
"sources": {
"C:\\Program Files (x86)\\FastReports\\FastReport.Net\\Nugets": {},
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"http://nuget.grapecity.com/nuget": {},
"https://api.nuget.org/v3/index.json": {}
@@ -161,7 +167,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.301\\RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.302\\RuntimeIdentifierGraph.json"
}
}
}

View File

@@ -5,12 +5,13 @@
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Steafn Hutter lokal\.nuget\packages\;C:\Program Files (x86)\Microsoft\Xamarin\NuGet\</NuGetPackageFolders>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Steafn Hutter lokal\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files (x86)\Microsoft\Xamarin\NuGet\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.10.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\Steafn Hutter lokal\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft\Xamarin\NuGet\" />
</ItemGroup>
<PropertyGroup>

View File

@@ -153,164 +153,17 @@ E:\Software-Projekte\_Demos\__MVCDemos\SFMenu\APP\bin\Debug\netcoreapp3.1\runtim
E:\Software-Projekte\_Demos\__MVCDemos\SFMenu\APP\obj\Debug\netcoreapp3.1\APP.csprojAssemblyReference.cache
E:\Software-Projekte\_Demos\__MVCDemos\SFMenu\APP\obj\Debug\netcoreapp3.1\Razor\Views\Account\Login.cshtml.g.cs
E:\Software-Projekte\_Demos\__MVCDemos\SFMenu\APP\obj\Debug\netcoreapp3.1\Razor\Views\Account\Welcome.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.csproj.AssemblyReference.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.AssemblyInfoInputs.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.AssemblyInfo.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.csproj.CoreCompileInputs.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.MvcApplicationPartsAssemblyInfo.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.MvcApplicationPartsAssemblyInfo.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorAssemblyInfo.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorAssemblyInfo.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\staticwebassets\APP.StaticWebAssets.Manifest.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\staticwebassets\APP.StaticWebAssets.xml
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\scopedcss\bundle\APP.styles.css
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.TagHelpers.input.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.TagHelpers.output.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorCoreGenerate.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Account\Login.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Account\Welcome.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Dialog\DialogFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Home\Index.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Home\Privacy.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Menu\MenuFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\NumericTextBox\NumericTextBoxFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\RichTextEditor\RichTextEditorFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\Components\Menuitems\MenuItems.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\Components\UserStatus\UserStatus.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\Error.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\_Layout.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\_ValidationScriptsPartial.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\TextBoxes\TextBoxesFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\_ViewImports.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\_ViewStart.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorTargetAssemblyInfo.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorTargetAssemblyInfo.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorComponent.input.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\RazorDeclaration\Views\Demo\Index.razor.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorComponent.output.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\appsettings.Development.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\appsettings.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.StaticWebAssets.xml
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.exe
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.deps.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.runtimeconfig.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.runtimeconfig.dev.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.Views.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.Views.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Net.Http.Formatting.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Cryptography.Internal.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Cryptography.KeyDerivation.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Identity.UI.Views.V3.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Identity.UI.Views.V4.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Identity.UI.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.JsonPatch.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Razor.Language.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.CSharp.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.Razor.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.Workspaces.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Caching.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Configuration.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Configuration.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Configuration.Binder.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.DependencyInjection.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.DependencyInjection.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.FileProviders.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.FileProviders.Embedded.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Identity.Core.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Identity.Stores.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Logging.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Logging.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Options.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Primitives.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.Contracts.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.Core.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\dotnet-aspnet-codegenerator-design.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCore.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.Templating.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.Utils.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGenerators.Mvc.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Newtonsoft.Json.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Newtonsoft.Json.Bson.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\NuGet.Frameworks.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Syncfusion.EJ2.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Syncfusion.Licensing.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.AttributedModel.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.Convention.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.Hosting.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.Runtime.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.TypedParts.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Data.SqlClient.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Net.Http.Json.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Text.Json.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\cs\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\de\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\es\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\fr\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\it\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ja\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ko\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pl\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pt-BR\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ru\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\tr\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hans\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hant\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\de\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\es\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\it\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\win-arm64\native\sni.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\win-x64\native\sni.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\win-x86\native\sni.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\unix\lib\netcoreapp2.1\System.Data.SqlClient.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\win\lib\netcoreapp2.1\System.Data.SqlClient.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\BWPMModels.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\BWPMModels.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.Views.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.csproj.CopyComplete
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.genruntimeconfig.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\User\Index.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\Components\Footer\Footer.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Schulhaus\Index.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\wwwroot - Kopie\scripts\NumericTextBox\cldr-data\.ignored-bower.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\wwwroot - Kopie\scripts\NumericTextBox\cldr-data\.ignored-package.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\wwwroot - Kopie\scripts\NumericTextBox\cldr-data\availableLocales.json
@@ -463,9 +316,156 @@ E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\www
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\wwwroot - Kopie\scripts\NumericTextBox\cldr-data\supplemental\weekData.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\wwwroot - Kopie\scripts\NumericTextBox\cldr-data\supplemental\windowsZones.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\wwwroot - Kopie\scripts\NumericTextBox\cldr-data\urls.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.csproj.AssemblyReference.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorComponent.input.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorComponent.output.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.StaticWebAssets.xml
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.exe
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.deps.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.runtimeconfig.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.runtimeconfig.dev.json
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.Views.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\APP.Views.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Net.Http.Formatting.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Cryptography.Internal.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Cryptography.KeyDerivation.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Identity.UI.Views.V3.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Identity.UI.Views.V4.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Identity.UI.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.JsonPatch.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.AspNetCore.Razor.Language.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.CSharp.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.Razor.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.CodeAnalysis.Workspaces.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Caching.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Configuration.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Configuration.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Configuration.Binder.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.DependencyInjection.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.DependencyInjection.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.FileProviders.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.FileProviders.Embedded.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Identity.Core.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Identity.Stores.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Logging.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Logging.Abstractions.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Options.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.Extensions.Primitives.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.Contracts.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.Core.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\dotnet-aspnet-codegenerator-design.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCore.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.Templating.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGeneration.Utils.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Microsoft.VisualStudio.Web.CodeGenerators.Mvc.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Newtonsoft.Json.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Newtonsoft.Json.Bson.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\NuGet.Frameworks.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Syncfusion.EJ2.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\Syncfusion.Licensing.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.AttributedModel.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.Convention.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.Hosting.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.Runtime.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Composition.TypedParts.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Data.SqlClient.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Net.Http.Json.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\System.Text.Json.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\cs\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\de\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\es\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\fr\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\it\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ja\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ko\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pl\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pt-BR\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ru\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\tr\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hans\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hant\Microsoft.CodeAnalysis.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\de\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\es\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\it\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\win-arm64\native\sni.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\win-x64\native\sni.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\win-x86\native\sni.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\unix\lib\netcoreapp2.1\System.Data.SqlClient.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\runtimes\win\lib\netcoreapp2.1\System.Data.SqlClient.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\BWPMModels.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\bin\Debug\netcoreapp3.1\BWPMModels.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\RazorDeclaration\APP.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\RazorDeclaration\Views\Demo\Index.razor.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.TagHelpers.input.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.TagHelpers.output.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorCoreGenerate.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Demo\Index.razor.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Account\Login.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Account\Welcome.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Dialog\DialogFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Home\Index.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Home\Privacy.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Menu\MenuFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\NumericTextBox\NumericTextBoxFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\RichTextEditor\RichTextEditorFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Schulhaus\Index.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\Components\Footer\Footer.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\Components\Menuitems\MenuItems.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\Components\UserStatus\UserStatus.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\Error.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\_Layout.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\Shared\_ValidationScriptsPartial.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\TextBoxes\TextBoxesFeatures.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\User\Index.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\_ViewImports.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\Razor\Views\_ViewStart.cshtml.g.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorAssemblyInfo.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorAssemblyInfo.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\staticwebassets\APP.StaticWebAssets.Manifest.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\staticwebassets\APP.StaticWebAssets.xml
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\scopedcss\bundle\APP.styles.css
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorTargetAssemblyInfo.cache
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.RazorTargetAssemblyInfo.cs
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.Views.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.csproj.CopyComplete
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.dll
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.pdb
E:\Software-Projekte\Lehrlingsparcours\Core\BWPM\APP\obj\Debug\netcoreapp3.1\APP.genruntimeconfig.cache

Binary file not shown.

Binary file not shown.

View File

@@ -7368,6 +7368,7 @@
},
"packageFolders": {
"C:\\Users\\Steafn Hutter lokal\\.nuget\\packages\\": {},
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {},
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\": {}
},
"project": {
@@ -7380,10 +7381,12 @@
"outputPath": "E:\\Software-Projekte\\Lehrlingsparcours\\Core\\BWPM\\APP\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\"
],
"configFilePaths": [
"C:\\Users\\Steafn Hutter lokal\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
],
@@ -7391,6 +7394,7 @@
"netcoreapp3.1"
],
"sources": {
"C:\\Program Files (x86)\\FastReports\\FastReport.Net\\Nugets": {},
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"http://nuget.grapecity.com/nuget": {},
"https://api.nuget.org/v3/index.json": {}
@@ -7458,7 +7462,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.301\\RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.302\\RuntimeIdentifierGraph.json"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "GxaZgdFQEQE+8EY5nFxsoW9QjrPkV77u0NYoE6kRbMkeSrlvR4TKHFFkj/yG7++LvGuvTRC9tTP0dTVSP7nzOw==",
"dgSpecHash": "PFlOlkyHy0JoBZgX0BYI2kJrzMnHFv5NznHoPMNErCVz9uAjNAdfaghwCAVbxhCIr0EzF8YG12lW5uDK7PP1Ag==",
"success": true,
"projectFilePath": "E:\\Software-Projekte\\Lehrlingsparcours\\Core\\BWPM\\APP\\APP.csproj",
"expectedPackageFiles": [

View File

@@ -11,46 +11,84 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp1", "ConsoleApp1\
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "APP", "APP\APP.csproj", "{68D7DC42-F37D-400D-B4A8-ADB56F7904DD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BWPMWebForm", "APPWebForm\BWPMWebForm.csproj", "{1FC10A94-F028-4DB2-AD48-F0F18234A4A2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BWPMModelsWebForm", "BWPMModelsWebForm\BWPMModelsWebForm.csproj", "{57B80A22-383C-4468-A5BF-C7EB8BA9D5D9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorApp", "BlazorApp\BlazorApp.csproj", "{649400F9-4953-4AE8-ACCA-C497FEF91C39}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebFormApp", "WebFormApp\WebFormApp.csproj", "{6C7CA0D5-962C-44CD-BDD4-AABDC6740DE8}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ReportDesigner", "ReportDesigner\ReportDesigner.vbproj", "{11DE60BA-97C7-4EBC-AF69-1E1D44BE3C74}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8BE1B283-AF68-4A4B-806C-F4D69434143B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BE1B283-AF68-4A4B-806C-F4D69434143B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BE1B283-AF68-4A4B-806C-F4D69434143B}.Debug|x86.ActiveCfg = Debug|Any CPU
{8BE1B283-AF68-4A4B-806C-F4D69434143B}.Debug|x86.Build.0 = Debug|Any CPU
{8BE1B283-AF68-4A4B-806C-F4D69434143B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8BE1B283-AF68-4A4B-806C-F4D69434143B}.Release|Any CPU.Build.0 = Release|Any CPU
{8BE1B283-AF68-4A4B-806C-F4D69434143B}.Release|x86.ActiveCfg = Release|Any CPU
{8BE1B283-AF68-4A4B-806C-F4D69434143B}.Release|x86.Build.0 = Release|Any CPU
{998A7FF8-E91E-48FD-9F71-EE6164BDBEF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{998A7FF8-E91E-48FD-9F71-EE6164BDBEF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{998A7FF8-E91E-48FD-9F71-EE6164BDBEF2}.Debug|x86.ActiveCfg = Debug|Any CPU
{998A7FF8-E91E-48FD-9F71-EE6164BDBEF2}.Debug|x86.Build.0 = Debug|Any CPU
{998A7FF8-E91E-48FD-9F71-EE6164BDBEF2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{998A7FF8-E91E-48FD-9F71-EE6164BDBEF2}.Release|Any CPU.Build.0 = Release|Any CPU
{998A7FF8-E91E-48FD-9F71-EE6164BDBEF2}.Release|x86.ActiveCfg = Release|Any CPU
{998A7FF8-E91E-48FD-9F71-EE6164BDBEF2}.Release|x86.Build.0 = Release|Any CPU
{0CC33E70-D3E5-45C1-BDA7-D15E333D3568}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0CC33E70-D3E5-45C1-BDA7-D15E333D3568}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0CC33E70-D3E5-45C1-BDA7-D15E333D3568}.Debug|x86.ActiveCfg = Debug|Any CPU
{0CC33E70-D3E5-45C1-BDA7-D15E333D3568}.Debug|x86.Build.0 = Debug|Any CPU
{0CC33E70-D3E5-45C1-BDA7-D15E333D3568}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0CC33E70-D3E5-45C1-BDA7-D15E333D3568}.Release|Any CPU.Build.0 = Release|Any CPU
{0CC33E70-D3E5-45C1-BDA7-D15E333D3568}.Release|x86.ActiveCfg = Release|Any CPU
{0CC33E70-D3E5-45C1-BDA7-D15E333D3568}.Release|x86.Build.0 = Release|Any CPU
{68D7DC42-F37D-400D-B4A8-ADB56F7904DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{68D7DC42-F37D-400D-B4A8-ADB56F7904DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{68D7DC42-F37D-400D-B4A8-ADB56F7904DD}.Debug|x86.ActiveCfg = Debug|Any CPU
{68D7DC42-F37D-400D-B4A8-ADB56F7904DD}.Debug|x86.Build.0 = Debug|Any CPU
{68D7DC42-F37D-400D-B4A8-ADB56F7904DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{68D7DC42-F37D-400D-B4A8-ADB56F7904DD}.Release|Any CPU.Build.0 = Release|Any CPU
{1FC10A94-F028-4DB2-AD48-F0F18234A4A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FC10A94-F028-4DB2-AD48-F0F18234A4A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FC10A94-F028-4DB2-AD48-F0F18234A4A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1FC10A94-F028-4DB2-AD48-F0F18234A4A2}.Release|Any CPU.Build.0 = Release|Any CPU
{68D7DC42-F37D-400D-B4A8-ADB56F7904DD}.Release|x86.ActiveCfg = Release|Any CPU
{68D7DC42-F37D-400D-B4A8-ADB56F7904DD}.Release|x86.Build.0 = Release|Any CPU
{57B80A22-383C-4468-A5BF-C7EB8BA9D5D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{57B80A22-383C-4468-A5BF-C7EB8BA9D5D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{57B80A22-383C-4468-A5BF-C7EB8BA9D5D9}.Debug|x86.ActiveCfg = Debug|Any CPU
{57B80A22-383C-4468-A5BF-C7EB8BA9D5D9}.Debug|x86.Build.0 = Debug|Any CPU
{57B80A22-383C-4468-A5BF-C7EB8BA9D5D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{57B80A22-383C-4468-A5BF-C7EB8BA9D5D9}.Release|Any CPU.Build.0 = Release|Any CPU
{57B80A22-383C-4468-A5BF-C7EB8BA9D5D9}.Release|x86.ActiveCfg = Release|Any CPU
{57B80A22-383C-4468-A5BF-C7EB8BA9D5D9}.Release|x86.Build.0 = Release|Any CPU
{649400F9-4953-4AE8-ACCA-C497FEF91C39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{649400F9-4953-4AE8-ACCA-C497FEF91C39}.Debug|Any CPU.Build.0 = Debug|Any CPU
{649400F9-4953-4AE8-ACCA-C497FEF91C39}.Debug|x86.ActiveCfg = Debug|Any CPU
{649400F9-4953-4AE8-ACCA-C497FEF91C39}.Debug|x86.Build.0 = Debug|Any CPU
{649400F9-4953-4AE8-ACCA-C497FEF91C39}.Release|Any CPU.ActiveCfg = Release|Any CPU
{649400F9-4953-4AE8-ACCA-C497FEF91C39}.Release|Any CPU.Build.0 = Release|Any CPU
{649400F9-4953-4AE8-ACCA-C497FEF91C39}.Release|x86.ActiveCfg = Release|Any CPU
{649400F9-4953-4AE8-ACCA-C497FEF91C39}.Release|x86.Build.0 = Release|Any CPU
{6C7CA0D5-962C-44CD-BDD4-AABDC6740DE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C7CA0D5-962C-44CD-BDD4-AABDC6740DE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C7CA0D5-962C-44CD-BDD4-AABDC6740DE8}.Debug|x86.ActiveCfg = Debug|Any CPU
{6C7CA0D5-962C-44CD-BDD4-AABDC6740DE8}.Debug|x86.Build.0 = Debug|Any CPU
{6C7CA0D5-962C-44CD-BDD4-AABDC6740DE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C7CA0D5-962C-44CD-BDD4-AABDC6740DE8}.Release|Any CPU.Build.0 = Release|Any CPU
{6C7CA0D5-962C-44CD-BDD4-AABDC6740DE8}.Release|x86.ActiveCfg = Release|Any CPU
{6C7CA0D5-962C-44CD-BDD4-AABDC6740DE8}.Release|x86.Build.0 = Release|Any CPU
{11DE60BA-97C7-4EBC-AF69-1E1D44BE3C74}.Debug|Any CPU.ActiveCfg = Debug|x86
{11DE60BA-97C7-4EBC-AF69-1E1D44BE3C74}.Debug|x86.ActiveCfg = Debug|x86
{11DE60BA-97C7-4EBC-AF69-1E1D44BE3C74}.Debug|x86.Build.0 = Debug|x86
{11DE60BA-97C7-4EBC-AF69-1E1D44BE3C74}.Release|Any CPU.ActiveCfg = Release|x86
{11DE60BA-97C7-4EBC-AF69-1E1D44BE3C74}.Release|x86.ActiveCfg = Release|x86
{11DE60BA-97C7-4EBC-AF69-1E1D44BE3C74}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -14,10 +14,12 @@
"outputPath": "E:\\Software-Projekte\\Lehrlingsparcours\\Core\\BWPM\\BWPMModelsWebForm\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\"
],
"configFilePaths": [
"C:\\Users\\Steafn Hutter lokal\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
],
@@ -25,6 +27,7 @@
"net5.0"
],
"sources": {
"C:\\Program Files (x86)\\FastReports\\FastReport.Net\\Nugets": {},
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"http://nuget.grapecity.com/nuget": {},
"https://api.nuget.org/v3/index.json": {}
@@ -59,7 +62,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.301\\RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.302\\RuntimeIdentifierGraph.json"
}
}
}

View File

@@ -5,12 +5,13 @@
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Steafn Hutter lokal\.nuget\packages\;C:\Program Files (x86)\Microsoft\Xamarin\NuGet\</NuGetPackageFolders>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Steafn Hutter lokal\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files (x86)\Microsoft\Xamarin\NuGet\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.10.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\Steafn Hutter lokal\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft\Xamarin\NuGet\" />
</ItemGroup>
<PropertyGroup>

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v5.0", FrameworkDisplayName = "")]

View File

@@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("BWPMModelsWebForm")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("BWPMModelsWebForm")]
[assembly: System.Reflection.AssemblyTitleAttribute("BWPMModelsWebForm")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Von der MSBuild WriteCodeFragment-Klasse generiert.

View File

@@ -0,0 +1 @@
3b3d1887f33ddedf7feefb4f51f720e5fffa5557

View File

@@ -0,0 +1,8 @@
is_global = true
build_property.TargetFramework = net5.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.PublishSingleFile =
build_property.IncludeAllContentForSelfExtract =
build_property._SupportedPlatformList = Android,iOS,Linux,macOS,Windows

View File

@@ -9,6 +9,7 @@
},
"packageFolders": {
"C:\\Users\\Steafn Hutter lokal\\.nuget\\packages\\": {},
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {},
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\": {}
},
"project": {
@@ -21,10 +22,12 @@
"outputPath": "E:\\Software-Projekte\\Lehrlingsparcours\\Core\\BWPM\\BWPMModelsWebForm\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\"
],
"configFilePaths": [
"C:\\Users\\Steafn Hutter lokal\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
],
@@ -32,6 +35,7 @@
"net5.0"
],
"sources": {
"C:\\Program Files (x86)\\FastReports\\FastReport.Net\\Nugets": {},
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"http://nuget.grapecity.com/nuget": {},
"https://api.nuget.org/v3/index.json": {}
@@ -66,7 +70,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.301\\RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.302\\RuntimeIdentifierGraph.json"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "WUh617os2WiFWe+tzIYK09FZw+FlbVYqgA+uf9N6JveS/jRDsss5k+60skthelQFXM4mvmUMkmuzblm0jL/URQ==",
"dgSpecHash": "iKy7woiuu7aiYy5IKfAF+XhM0xpwfr/bjQe7ikQCYAQ8f5GBvDnw/m0kaUjmnMrwZQ7408X+k8PGMeIokM1BXA==",
"success": true,
"projectFilePath": "E:\\Software-Projekte\\Lehrlingsparcours\\Core\\BWPM\\BWPMModelsWebForm\\BWPMModelsWebForm.csproj",
"expectedPackageFiles": [],

View File

@@ -0,0 +1,13 @@
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
</CascadingAuthenticationState>

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace BlazorApp.Data
{
public class BlazorAppContext : IdentityDbContext<IdentityUser>
{
public BlazorAppContext(DbContextOptions<BlazorAppContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
}

View File

@@ -0,0 +1,27 @@
using System;
using BlazorApp.Data;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
//[assembly: HostingStartup(typeof(BlazorApp.Areas.Identity.IdentityHostingStartup))]
//namespace BlazorApp.Areas.Identity
//{
// public class IdentityHostingStartup : IHostingStartup
// {
// public void Configure(IWebHostBuilder builder)
// {
// builder.ConfigureServices((context, services) => {
// services.AddDbContext<BlazorAppContext>(options =>
// options.UseSqlServer(
// context.Configuration.GetConnectionString("BlazorAppContextConnection")));
// services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
// .AddEntityFrameworkStores<BlazorAppContext>();
// });
// }
// }
//}

View File

@@ -0,0 +1,10 @@
@page
@model AccessDeniedModel
@{
ViewData["Title"] = "Zugriff nicht gestattet";
}
<header>
<h1 class="text-danger">@ViewData["Title"]</h1>
<p class="text-danger">Für die ausgeführte Aktion haben Sie keinen Zugriff.</p>
</header>

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace BlazorApp.Areas.Identity.Pages.Account
{
public class AccessDeniedModel : PageModel
{
public void OnGet()
{
}
}
}

View File

@@ -0,0 +1,7 @@
@page
@model ConfirmEmailModel
@{
ViewData["Title"] = "E-Mail bestätigen";
}
<h1>@ViewData["Title"]</h1>

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class ConfirmEmailModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
public ConfirmEmailModel(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
[TempData]
public string StatusMessage { get; set; }
public async Task<IActionResult> OnGetAsync(string userId, string code)
{
if (userId == null || code == null)
{
return RedirectToPage("/Index");
}
var user = await _userManager.FindByIdAsync(userId);
if (user == null)
{
return NotFound($"Unable to load user with ID '{userId}'.");
}
code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
var result = await _userManager.ConfirmEmailAsync(user, code);
StatusMessage = result.Succeeded ? "Thank you for confirming your email." : "Error confirming your email.";
return Page();
}
}
}

View File

@@ -0,0 +1,8 @@
@page
@model ConfirmEmailChangeModel
@{
ViewData["Title"] = "E-Mail Änderunge bestätigen";
}
<h1>@ViewData["Title"]</h1>
<partial name="_StatusMessage" model="Model.StatusMessage" />

View File

@@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class ConfirmEmailChangeModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
public ConfirmEmailChangeModel(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
[TempData]
public string StatusMessage { get; set; }
public async Task<IActionResult> OnGetAsync(string userId, string email, string code)
{
if (userId == null || email == null || code == null)
{
return RedirectToPage("/Index");
}
var user = await _userManager.FindByIdAsync(userId);
if (user == null)
{
return NotFound($"Unable to load user with ID '{userId}'.");
}
code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
var result = await _userManager.ChangeEmailAsync(user, email, code);
if (!result.Succeeded)
{
StatusMessage = "Error changing email.";
return Page();
}
// In our UI email and user name are one and the same, so when we update the email
// we need to update the user name.
var setUserNameResult = await _userManager.SetUserNameAsync(user, email);
if (!setUserNameResult.Succeeded)
{
StatusMessage = "Error changing user name.";
return Page();
}
await _signInManager.RefreshSignInAsync(user);
StatusMessage = "Thank you for confirming your email change.";
return Page();
}
}
}

View File

@@ -0,0 +1,33 @@
@page
@model ExternalLoginModel
@{
ViewData["Title"] = "Register";
}
<h1>@ViewData["Title"]</h1>
<h4 id="external-login-title">Associate your @Model.ProviderDisplayName account.</h4>
<hr />
<p id="external-login-description" class="text-info">
You've successfully authenticated with <strong>@Model.ProviderDisplayName</strong>.
Please enter an email address for this site below and click the Register button to finish
logging in.
</p>
<div class="row">
<div class="col-md-4">
<form asp-page-handler="Confirmation" asp-route-returnUrl="@Model.ReturnUrl" method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Register</button>
</form>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,168 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class ExternalLoginModel : PageModel
{
private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;
private readonly IEmailSender _emailSender;
private readonly ILogger<ExternalLoginModel> _logger;
public ExternalLoginModel(
SignInManager<IdentityUser> signInManager,
UserManager<IdentityUser> userManager,
ILogger<ExternalLoginModel> logger,
IEmailSender emailSender)
{
_signInManager = signInManager;
_userManager = userManager;
_logger = logger;
_emailSender = emailSender;
}
[BindProperty]
public InputModel Input { get; set; }
public string ProviderDisplayName { get; set; }
public string ReturnUrl { get; set; }
[TempData]
public string ErrorMessage { get; set; }
public class InputModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
}
public IActionResult OnGetAsync()
{
return RedirectToPage("./Login");
}
public IActionResult OnPost(string provider, string returnUrl = null)
{
// Request a redirect to the external login provider.
var redirectUrl = Url.Page("./ExternalLogin", pageHandler: "Callback", values: new { returnUrl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
return new ChallengeResult(provider, properties);
}
public async Task<IActionResult> OnGetCallbackAsync(string returnUrl = null, string remoteError = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (remoteError != null)
{
ErrorMessage = $"Error from external provider: {remoteError}";
return RedirectToPage("./Login", new {ReturnUrl = returnUrl });
}
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
ErrorMessage = "Error loading external login information.";
return RedirectToPage("./Login", new { ReturnUrl = returnUrl });
}
// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor : true);
if (result.Succeeded)
{
_logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider);
return LocalRedirect(returnUrl);
}
if (result.IsLockedOut)
{
return RedirectToPage("./Lockout");
}
else
{
// If the user does not have an account, then ask the user to create an account.
ReturnUrl = returnUrl;
ProviderDisplayName = info.ProviderDisplayName;
if (info.Principal.HasClaim(c => c.Type == ClaimTypes.Email))
{
Input = new InputModel
{
Email = info.Principal.FindFirstValue(ClaimTypes.Email)
};
}
return Page();
}
}
public async Task<IActionResult> OnPostConfirmationAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
// Get the information about the user from the external login provider
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
ErrorMessage = "Error loading external login information during confirmation.";
return RedirectToPage("./Login", new { ReturnUrl = returnUrl });
}
if (ModelState.IsValid)
{
var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
var result = await _userManager.CreateAsync(user);
if (result.Succeeded)
{
result = await _userManager.AddLoginAsync(user, info);
if (result.Succeeded)
{
_logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);
var userId = await _userManager.GetUserIdAsync(user);
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
var callbackUrl = Url.Page(
"/Account/ConfirmEmail",
pageHandler: null,
values: new { area = "Identity", userId = userId, code = code },
protocol: Request.Scheme);
await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
// If account confirmation is required, we need to show the link if we don't have a real email sender
if (_userManager.Options.SignIn.RequireConfirmedAccount)
{
return RedirectToPage("./RegisterConfirmation", new { Email = Input.Email });
}
await _signInManager.SignInAsync(user, isPersistent: false, info.LoginProvider);
return LocalRedirect(returnUrl);
}
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
ProviderDisplayName = info.ProviderDisplayName;
ReturnUrl = returnUrl;
return Page();
}
}
}

View File

@@ -0,0 +1,28 @@
@page
@model ForgotPasswordModel
@{
ViewData["Title"] = "Passwort vergessen?";
}
<h1>@ViewData["Title"]</h1>
<div class="card shadow-lg p-3 mb-5 bg-white rounded">
<h4>Bitte geben Sie Ihre Mail-Adresse ein</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,70 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text.Encodings.Web;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class ForgotPasswordModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly IEmailSender _emailSender;
public ForgotPasswordModel(UserManager<IdentityUser> userManager, IEmailSender emailSender)
{
_userManager = userManager;
_emailSender = emailSender;
}
[BindProperty]
public InputModel Input { get; set; }
public class InputModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
}
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
var user = await _userManager.FindByEmailAsync(Input.Email);
if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
{
// Don't reveal that the user does not exist or is not confirmed
return RedirectToPage("./ForgotPasswordConfirmation");
}
// For more information on how to enable account confirmation and password reset please
// visit https://go.microsoft.com/fwlink/?LinkID=532713
var code = await _userManager.GeneratePasswordResetTokenAsync(user);
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
var callbackUrl = Url.Page(
"/Account/ResetPassword",
pageHandler: null,
values: new { area = "Identity", code },
protocol: Request.Scheme);
await _emailSender.SendEmailAsync(
Input.Email,
"Reset Password",
$"Please reset your password by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
return RedirectToPage("./ForgotPasswordConfirmation");
}
return Page();
}
}
}

View File

@@ -0,0 +1,11 @@
@page
@model ForgotPasswordConfirmation
@{
ViewData["Title"] = "Passwort zurücksetzen";
}
<h1>@ViewData["Title"]</h1>
<p>
Prüfen Sie bitte Ihr Postfach um Ihr Passwort zurückzusetzen.
</p>

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class ForgotPasswordConfirmation : PageModel
{
public void OnGet()
{
}
}
}

View File

@@ -0,0 +1,10 @@
@page
@model LockoutModel
@{
ViewData["Title"] = "Zugriff gesperrt";
}
<header>
<h1 class="text-danger">@ViewData["Title"]</h1>
<p class="text-danger">Ihr Konto ist gesperrt, bitte versuchen Sie es später wieder.</p>
</header>

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class LockoutModel : PageModel
{
public void OnGet()
{
}
}
}

View File

@@ -0,0 +1,125 @@
@page
@model LoginModel
@{
ViewData["Title"] = "Anmelden";
}
<h1>@ViewData["Title"]</h1>
<div class="card shadow-lg p-3 mb-5 bg-white rounded">
<h4 class="card-header">Login</h4>
<div class="card-body">
<form id="account" method="post">
<h4>Bitte melden Sie sich mit Ihrer UserID/Passwort an</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control" value="hutter@shub.ch" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.Password"></label>
@* <input asp-for="Input.Password" class="form-control" value="Admin*123" />
*@ <input asp-for="Input.Password" class="form-control" value="b" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label asp-for="Input.RememberMe">
<input asp-for="Input.RememberMe" />
@Html.DisplayNameFor(m => m.Input.RememberMe)
</label>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Log in</button>
</div>
<div class="form-group">
<p>
<a id="forgot-password" asp-page="./ForgotPassword">Passwort vergessen?</a>
</p>
<p>
<a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Neu registrieren</a>
</p>
</div>
</form>
</div>
</div>
@*<div class="row">
<div class="col-md-4">
<section>
<form id="account" method="post">
<h4>Use a local account to log in.</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password" class="form-control" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label asp-for="Input.RememberMe">
<input asp-for="Input.RememberMe" />
@Html.DisplayNameFor(m => m.Input.RememberMe)
</label>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Log in</button>
</div>
<div class="form-group">
<p>
<a id="forgot-password" asp-page="./ForgotPassword">Forgot your password?</a>
</p>
<p>
<a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
</p>
</div>
</form>
</section>
</div>
<div class="col-md-6 col-md-offset-2">
<section>
<h4>Use another service to log in.</h4>
<hr />
@{
if ((Model.ExternalLogins?.Count ?? 0) == 0)
{
<div>
<p>
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
for details on setting up this ASP.NET application to support logging in via external services.
</p>
</div>
}
else
{
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
<div>
<p>
@foreach (var provider in Model.ExternalLogins)
{
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</p>
</div>
</form>
}
}
</section>
</div>
</div>*@
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,149 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using Blazored.SessionStorage;
using BlazorApp.Helper;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class LoginModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
private readonly ILogger<LoginModel> _logger;
private readonly RoleManager<IdentityRole> _roleManager;
private SessionState sessionState;
public LoginModel(SignInManager<IdentityUser> signInManager,
ILogger<LoginModel> logger,
UserManager<IdentityUser> userManager)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
_logger = logger;
}
[BindProperty]
public InputModel Input { get; set; }
public IList<AuthenticationScheme> ExternalLogins { get; set; }
public string ReturnUrl { get; set; }
[TempData]
public string ErrorMessage { get; set; }
public class InputModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
public async Task OnGetAsync(string returnUrl = null)
{
string autologin = "";
Helper.ParameterHelper ph = new Helper.ParameterHelper();
autologin = ph.GetParameter("autologin");
if (autologin == "true")
{
await AutoLogin(returnUrl);
returnUrl = returnUrl ?? Url.Content("~/");
ReturnUrl = returnUrl;
Response.Redirect(returnUrl);
}
if (!string.IsNullOrEmpty(ErrorMessage))
{
ModelState.AddModelError(string.Empty, ErrorMessage);
}
returnUrl = returnUrl ?? Url.Content("~/");
// Clear the existing external cookie to ensure a clean login process
await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
ReturnUrl = returnUrl;
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning("User account locked out.");
return RedirectToPage("./Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}
}
// If we got this far, something failed, redisplay form
return Page();
}
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> AutoLogin(string returnUrl)
{
if (ModelState.IsValid)
{
string EMail = "info@shub.ch";
string Password = "Admin*123";
Helper.ParameterHelper ph = new Helper.ParameterHelper();
EMail = ph.GetParameter("autologin_user");
Password = ph.GetParameter("autologin_pw");
var result = await _signInManager.PasswordSignInAsync(EMail, Password, false, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
returnUrl = returnUrl ?? Url.Content("~/");
return LocalRedirect(returnUrl);
}
}
return BadRequest();
}
}
}

View File

@@ -0,0 +1,46 @@
@page "/Areas/Identity/Account/Login"
<h3>Login</h3>
<div class="card">
<h4 class="card-header">Login</h4>
<div class="card-body">
<form id="account" method="post">
<h4>Bitte melden Sie sich mit Ihrer UserID/Passwort an</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password" class="form-control" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label asp-for="Input.RememberMe">
<input asp-for="Input.RememberMe" />
@* @Html.DisplayNameFor(m => m.Input.RememberMe)*@
</label>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Log in</button>
</div>
<div class="form-group">
<p>
<a id="forgot-password" asp-page="./ForgotPassword">Passwort vergessen?</a>
</p>
<p>
@* <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Neu registrieren</a>*@
</p>
</div>
</form>
</div>
</div>
@code {
}

View File

@@ -0,0 +1,41 @@
@page
@model LoginWith2faModel
@{
ViewData["Title"] = "Two-factor authentication";
}
<h1>@ViewData["Title"]</h1>
<hr />
<p>Your login is protected with an authenticator app. Enter your authenticator code below.</p>
<div class="row">
<div class="col-md-4">
<form method="post" asp-route-returnUrl="@Model.ReturnUrl">
<input asp-for="RememberMe" type="hidden" />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.TwoFactorCode"></label>
<input asp-for="Input.TwoFactorCode" class="form-control" autocomplete="off" />
<span asp-validation-for="Input.TwoFactorCode" class="text-danger"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label asp-for="Input.RememberMachine">
<input asp-for="Input.RememberMachine" />
@Html.DisplayNameFor(m => m.Input.RememberMachine)
</label>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Log in</button>
</div>
</form>
</div>
</div>
<p>
Don't have access to your authenticator device? You can
<a id="recovery-code-login" asp-page="./LoginWithRecoveryCode" asp-route-returnUrl="@Model.ReturnUrl">log in with a recovery code</a>.
</p>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,98 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class LoginWith2faModel : PageModel
{
private readonly SignInManager<IdentityUser> _signInManager;
private readonly ILogger<LoginWith2faModel> _logger;
public LoginWith2faModel(SignInManager<IdentityUser> signInManager, ILogger<LoginWith2faModel> logger)
{
_signInManager = signInManager;
_logger = logger;
}
[BindProperty]
public InputModel Input { get; set; }
public bool RememberMe { get; set; }
public string ReturnUrl { get; set; }
public class InputModel
{
[Required]
[StringLength(7, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
[DataType(DataType.Text)]
[Display(Name = "Authenticator code")]
public string TwoFactorCode { get; set; }
[Display(Name = "Remember this machine")]
public bool RememberMachine { get; set; }
}
public async Task<IActionResult> OnGetAsync(bool rememberMe, string returnUrl = null)
{
// Ensure the user has gone through the username & password screen first
var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
if (user == null)
{
throw new InvalidOperationException($"Unable to load two-factor authentication user.");
}
ReturnUrl = returnUrl;
RememberMe = rememberMe;
return Page();
}
public async Task<IActionResult> OnPostAsync(bool rememberMe, string returnUrl = null)
{
if (!ModelState.IsValid)
{
return Page();
}
returnUrl = returnUrl ?? Url.Content("~/");
var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
if (user == null)
{
throw new InvalidOperationException($"Unable to load two-factor authentication user.");
}
var authenticatorCode = Input.TwoFactorCode.Replace(" ", string.Empty).Replace("-", string.Empty);
var result = await _signInManager.TwoFactorAuthenticatorSignInAsync(authenticatorCode, rememberMe, Input.RememberMachine);
if (result.Succeeded)
{
_logger.LogInformation("User with ID '{UserId}' logged in with 2fa.", user.Id);
return LocalRedirect(returnUrl);
}
else if (result.IsLockedOut)
{
_logger.LogWarning("User with ID '{UserId}' account locked out.", user.Id);
return RedirectToPage("./Lockout");
}
else
{
_logger.LogWarning("Invalid authenticator code entered for user with ID '{UserId}'.", user.Id);
ModelState.AddModelError(string.Empty, "Invalid authenticator code.");
return Page();
}
}
}
}

View File

@@ -0,0 +1,29 @@
@page
@model LoginWithRecoveryCodeModel
@{
ViewData["Title"] = "Recovery code verification";
}
<h1>@ViewData["Title"]</h1>
<hr />
<p>
You have requested to log in with a recovery code. This login will not be remembered until you provide
an authenticator app code at log in or disable 2FA and log in again.
</p>
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.RecoveryCode"></label>
<input asp-for="Input.RecoveryCode" class="form-control" autocomplete="off" />
<span asp-validation-for="Input.RecoveryCode" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Log in</button>
</form>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,89 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class LoginWithRecoveryCodeModel : PageModel
{
private readonly SignInManager<IdentityUser> _signInManager;
private readonly ILogger<LoginWithRecoveryCodeModel> _logger;
public LoginWithRecoveryCodeModel(SignInManager<IdentityUser> signInManager, ILogger<LoginWithRecoveryCodeModel> logger)
{
_signInManager = signInManager;
_logger = logger;
}
[BindProperty]
public InputModel Input { get; set; }
public string ReturnUrl { get; set; }
public class InputModel
{
[BindProperty]
[Required]
[DataType(DataType.Text)]
[Display(Name = "Recovery Code")]
public string RecoveryCode { get; set; }
}
public async Task<IActionResult> OnGetAsync(string returnUrl = null)
{
// Ensure the user has gone through the username & password screen first
var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
if (user == null)
{
throw new InvalidOperationException($"Unable to load two-factor authentication user.");
}
ReturnUrl = returnUrl;
return Page();
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
if (!ModelState.IsValid)
{
return Page();
}
var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();
if (user == null)
{
throw new InvalidOperationException($"Unable to load two-factor authentication user.");
}
var recoveryCode = Input.RecoveryCode.Replace(" ", string.Empty);
var result = await _signInManager.TwoFactorRecoveryCodeSignInAsync(recoveryCode);
if (result.Succeeded)
{
_logger.LogInformation("User with ID '{UserId}' logged in with a recovery code.", user.Id);
return LocalRedirect(returnUrl ?? Url.Content("~/"));
}
if (result.IsLockedOut)
{
_logger.LogWarning("User with ID '{UserId}' account locked out.", user.Id);
return RedirectToPage("./Lockout");
}
else
{
_logger.LogWarning("Invalid recovery code entered for user with ID '{UserId}' ", user.Id);
ModelState.AddModelError(string.Empty, "Invalid recovery code entered.");
return Page();
}
}
}
}

View File

@@ -0,0 +1,15 @@
@page
@model LogoutModel
@{
ViewData["Title"] = "Abmelden";
}
<header>
<div class="card shadow-lg p-3 mb-5 bg-white rounded">
<div class="card-header bg-primary"><h4>@ViewData["Title"]</h4></div>
<div class="card-body">Sie haben sich erfolgreich abgemeldet</div>
<div class="card-footer">
<button class="btn btn-primary" onclick="window.location.href='/'">Startseite </button>
</div>
</div>
</header>

View File

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class LogoutModel : PageModel
{
private readonly SignInManager<IdentityUser> _signInManager;
private readonly ILogger<LogoutModel> _logger;
public LogoutModel(SignInManager<IdentityUser> signInManager, ILogger<LogoutModel> logger)
{
_signInManager = signInManager;
_logger = logger;
}
public void OnGet()
{
_signInManager.SignOutAsync();
}
public async Task<IActionResult> OnPost(string returnUrl = null)
{
await _signInManager.SignOutAsync();
_logger.LogInformation("User logged out.");
if (returnUrl != null)
{
return LocalRedirect(returnUrl);
}
else
{
return RedirectToPage();
}
}
}
}

View File

@@ -0,0 +1,36 @@
@page
@model ChangePasswordModel
@{
ViewData["Title"] = "Change password";
ViewData["ActivePage"] = ManageNavPages.ChangePassword;
}
<h4>@ViewData["Title"]</h4>
<partial name="_StatusMessage" for="StatusMessage" />
<div class="row">
<div class="col-md-6">
<form id="change-password-form" method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.OldPassword"></label>
<input asp-for="Input.OldPassword" class="form-control" />
<span asp-validation-for="Input.OldPassword" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.NewPassword"></label>
<input asp-for="Input.NewPassword" class="form-control" />
<span asp-validation-for="Input.NewPassword" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.ConfirmPassword"></label>
<input asp-for="Input.ConfirmPassword" class="form-control" />
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Update password</button>
</form>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public class ChangePasswordModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
private readonly ILogger<ChangePasswordModel> _logger;
public ChangePasswordModel(
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager,
ILogger<ChangePasswordModel> logger)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
}
[BindProperty]
public InputModel Input { get; set; }
[TempData]
public string StatusMessage { get; set; }
public class InputModel
{
[Required]
[DataType(DataType.Password)]
[Display(Name = "Current password")]
public string OldPassword { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm new password")]
[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
public async Task<IActionResult> OnGetAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
var hasPassword = await _userManager.HasPasswordAsync(user);
if (!hasPassword)
{
return RedirectToPage("./SetPassword");
}
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
var changePasswordResult = await _userManager.ChangePasswordAsync(user, Input.OldPassword, Input.NewPassword);
if (!changePasswordResult.Succeeded)
{
foreach (var error in changePasswordResult.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
return Page();
}
await _signInManager.RefreshSignInAsync(user);
_logger.LogInformation("User changed their password successfully.");
StatusMessage = "Your password has been changed.";
return RedirectToPage();
}
}
}

View File

@@ -0,0 +1,33 @@
@page
@model DeletePersonalDataModel
@{
ViewData["Title"] = "Delete Personal Data";
ViewData["ActivePage"] = ManageNavPages.PersonalData;
}
<h4>@ViewData["Title"]</h4>
<div class="alert alert-warning" role="alert">
<p>
<strong>Deleting this data will permanently remove your account, and this cannot be recovered.</strong>
</p>
</div>
<div>
<form id="delete-user" method="post" class="form-group">
<div asp-validation-summary="All" class="text-danger"></div>
@if (Model.RequirePassword)
{
<div class="form-group">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password" class="form-control" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
}
<button class="btn btn-danger" type="submit">Delete data and close my account</button>
</form>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,83 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public class DeletePersonalDataModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
private readonly ILogger<DeletePersonalDataModel> _logger;
public DeletePersonalDataModel(
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager,
ILogger<DeletePersonalDataModel> logger)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
}
[BindProperty]
public InputModel Input { get; set; }
public class InputModel
{
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
public bool RequirePassword { get; set; }
public async Task<IActionResult> OnGet()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
RequirePassword = await _userManager.HasPasswordAsync(user);
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
RequirePassword = await _userManager.HasPasswordAsync(user);
if (RequirePassword)
{
if (!await _userManager.CheckPasswordAsync(user, Input.Password))
{
ModelState.AddModelError(string.Empty, "Incorrect password.");
return Page();
}
}
var result = await _userManager.DeleteAsync(user);
var userId = await _userManager.GetUserIdAsync(user);
if (!result.Succeeded)
{
throw new InvalidOperationException($"Unexpected error occurred deleting user with ID '{userId}'.");
}
await _signInManager.SignOutAsync();
_logger.LogInformation("User with ID '{UserId}' deleted themselves.", userId);
return Redirect("~/");
}
}
}

View File

@@ -0,0 +1,25 @@
@page
@model Disable2faModel
@{
ViewData["Title"] = "Disable two-factor authentication (2FA)";
ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication;
}
<partial name="_StatusMessage" for="StatusMessage" />
<h2>@ViewData["Title"]</h2>
<div class="alert alert-warning" role="alert">
<p>
<strong>This action only disables 2FA.</strong>
</p>
<p>
Disabling 2FA does not change the keys used in authenticator apps. If you wish to change the key
used in an authenticator app you should <a asp-page="./ResetAuthenticator">reset your authenticator keys.</a>
</p>
</div>
<div>
<form method="post" class="form-group">
<button class="btn btn-danger" type="submit">Disable 2FA</button>
</form>
</div>

View File

@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public class Disable2faModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly ILogger<Disable2faModel> _logger;
public Disable2faModel(
UserManager<IdentityUser> userManager,
ILogger<Disable2faModel> logger)
{
_userManager = userManager;
_logger = logger;
}
[TempData]
public string StatusMessage { get; set; }
public async Task<IActionResult> OnGet()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
if (!await _userManager.GetTwoFactorEnabledAsync(user))
{
throw new InvalidOperationException($"Cannot disable 2FA for user with ID '{_userManager.GetUserId(User)}' as it's not currently enabled.");
}
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
var disable2faResult = await _userManager.SetTwoFactorEnabledAsync(user, false);
if (!disable2faResult.Succeeded)
{
throw new InvalidOperationException($"Unexpected error occurred disabling 2FA for user with ID '{_userManager.GetUserId(User)}'.");
}
_logger.LogInformation("User with ID '{UserId}' has disabled 2fa.", _userManager.GetUserId(User));
StatusMessage = "2fa has been disabled. You can reenable 2fa when you setup an authenticator app";
return RedirectToPage("./TwoFactorAuthentication");
}
}
}

View File

@@ -0,0 +1,12 @@
@page
@model DownloadPersonalDataModel
@{
ViewData["Title"] = "Download Your Data";
ViewData["ActivePage"] = ManageNavPages.PersonalData;
}
<h4>@ViewData["Title"]</h4>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public class DownloadPersonalDataModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly ILogger<DownloadPersonalDataModel> _logger;
public DownloadPersonalDataModel(
UserManager<IdentityUser> userManager,
ILogger<DownloadPersonalDataModel> logger)
{
_userManager = userManager;
_logger = logger;
}
public async Task<IActionResult> OnPostAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
_logger.LogInformation("User with ID '{UserId}' asked for their personal data.", _userManager.GetUserId(User));
// Only include personal data for download
var personalData = new Dictionary<string, string>();
var personalDataProps = typeof(IdentityUser).GetProperties().Where(
prop => Attribute.IsDefined(prop, typeof(PersonalDataAttribute)));
foreach (var p in personalDataProps)
{
personalData.Add(p.Name, p.GetValue(user)?.ToString() ?? "null");
}
var logins = await _userManager.GetLoginsAsync(user);
foreach (var l in logins)
{
personalData.Add($"{l.LoginProvider} external login provider key", l.ProviderKey);
}
Response.Headers.Add("Content-Disposition", "attachment; filename=PersonalData.json");
return new FileContentResult(JsonSerializer.SerializeToUtf8Bytes(personalData), "application/json");
}
}
}

View File

@@ -0,0 +1,43 @@
@page
@model EmailModel
@{
ViewData["Title"] = "Manage Email";
ViewData["ActivePage"] = ManageNavPages.Email;
}
<h4>@ViewData["Title"]</h4>
<partial name="_StatusMessage" model="Model.StatusMessage" />
<div class="row">
<div class="col-md-6">
<form id="email-form" method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Email"></label>
@if (Model.IsEmailConfirmed)
{
<div class="input-group">
<input asp-for="Email" class="form-control" disabled />
<div class="input-group-append">
<span class="input-group-text text-success font-weight-bold">✓</span>
</div>
</div>
}
else
{
<input asp-for="Email" class="form-control" disabled />
<button id="email-verification" type="submit" asp-page-handler="SendVerificationEmail" class="btn btn-link">Send verification email</button>
}
</div>
<div class="form-group">
<label asp-for="Input.NewEmail"></label>
<input asp-for="Input.NewEmail" class="form-control" />
<span asp-validation-for="Input.NewEmail" class="text-danger"></span>
</div>
<button id="change-email-button" type="submit" asp-page-handler="ChangeEmail" class="btn btn-primary">Change email</button>
</form>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,146 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
using System.Text.Encodings.Web;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public partial class EmailModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
private readonly IEmailSender _emailSender;
public EmailModel(
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager,
IEmailSender emailSender)
{
_userManager = userManager;
_signInManager = signInManager;
_emailSender = emailSender;
}
public string Username { get; set; }
public string Email { get; set; }
public bool IsEmailConfirmed { get; set; }
[TempData]
public string StatusMessage { get; set; }
[BindProperty]
public InputModel Input { get; set; }
public class InputModel
{
[Required]
[EmailAddress]
[Display(Name = "New email")]
public string NewEmail { get; set; }
}
private async Task LoadAsync(IdentityUser user)
{
var email = await _userManager.GetEmailAsync(user);
Email = email;
Input = new InputModel
{
NewEmail = email,
};
IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user);
}
public async Task<IActionResult> OnGetAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
await LoadAsync(user);
return Page();
}
public async Task<IActionResult> OnPostChangeEmailAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
if (!ModelState.IsValid)
{
await LoadAsync(user);
return Page();
}
var email = await _userManager.GetEmailAsync(user);
if (Input.NewEmail != email)
{
var userId = await _userManager.GetUserIdAsync(user);
var code = await _userManager.GenerateChangeEmailTokenAsync(user, Input.NewEmail);
var callbackUrl = Url.Page(
"/Account/ConfirmEmailChange",
pageHandler: null,
values: new { userId = userId, email = Input.NewEmail, code = code },
protocol: Request.Scheme);
await _emailSender.SendEmailAsync(
Input.NewEmail,
"Confirm your email",
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
StatusMessage = "Confirmation link to change email sent. Please check your email.";
return RedirectToPage();
}
StatusMessage = "Your email is unchanged.";
return RedirectToPage();
}
public async Task<IActionResult> OnPostSendVerificationEmailAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
if (!ModelState.IsValid)
{
await LoadAsync(user);
return Page();
}
var userId = await _userManager.GetUserIdAsync(user);
var email = await _userManager.GetEmailAsync(user);
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
var callbackUrl = Url.Page(
"/Account/ConfirmEmail",
pageHandler: null,
values: new { area = "Identity", userId = userId, code = code },
protocol: Request.Scheme);
await _emailSender.SendEmailAsync(
email,
"Confirm your email",
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
StatusMessage = "Verification email sent. Please check your email.";
return RedirectToPage();
}
}
}

View File

@@ -0,0 +1,53 @@
@page
@model EnableAuthenticatorModel
@{
ViewData["Title"] = "Configure authenticator app";
ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication;
}
<partial name="_StatusMessage" for="StatusMessage" />
<h4>@ViewData["Title"]</h4>
<div>
<p>To use an authenticator app go through the following steps:</p>
<ol class="list">
<li>
<p>
Download a two-factor authenticator app like Microsoft Authenticator for
<a href="https://go.microsoft.com/fwlink/?Linkid=825072">Android</a> and
<a href="https://go.microsoft.com/fwlink/?Linkid=825073">iOS</a> or
Google Authenticator for
<a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&amp;hl=en">Android</a> and
<a href="https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8">iOS</a>.
</p>
</li>
<li>
<p>Scan the QR Code or enter this key <kbd>@Model.SharedKey</kbd> into your two factor authenticator app. Spaces and casing do not matter.</p>
<div class="alert alert-info">Learn how to <a href="https://go.microsoft.com/fwlink/?Linkid=852423">enable QR code generation</a>.</div>
<div id="qrCode"></div>
<div id="qrCodeData" data-url="@Html.Raw(@Model.AuthenticatorUri)"></div>
</li>
<li>
<p>
Once you have scanned the QR code or input the key above, your two factor authentication app will provide you
with a unique code. Enter the code in the confirmation box below.
</p>
<div class="row">
<div class="col-md-6">
<form id="send-code" method="post">
<div class="form-group">
<label asp-for="Input.Code" class="control-label">Verification Code</label>
<input asp-for="Input.Code" class="form-control" autocomplete="off" />
<span asp-validation-for="Input.Code" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Verify</button>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
</form>
</div>
</div>
</li>
</ol>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,156 @@
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
using System.Text;
using System.Text.Encodings.Web;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public class EnableAuthenticatorModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly ILogger<EnableAuthenticatorModel> _logger;
private readonly UrlEncoder _urlEncoder;
private const string AuthenticatorUriFormat = "otpauth://totp/{0}:{1}?secret={2}&issuer={0}&digits=6";
public EnableAuthenticatorModel(
UserManager<IdentityUser> userManager,
ILogger<EnableAuthenticatorModel> logger,
UrlEncoder urlEncoder)
{
_userManager = userManager;
_logger = logger;
_urlEncoder = urlEncoder;
}
public string SharedKey { get; set; }
public string AuthenticatorUri { get; set; }
[TempData]
public string[] RecoveryCodes { get; set; }
[TempData]
public string StatusMessage { get; set; }
[BindProperty]
public InputModel Input { get; set; }
public class InputModel
{
[Required]
[StringLength(7, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
[DataType(DataType.Text)]
[Display(Name = "Verification Code")]
public string Code { get; set; }
}
public async Task<IActionResult> OnGetAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
await LoadSharedKeyAndQrCodeUriAsync(user);
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
if (!ModelState.IsValid)
{
await LoadSharedKeyAndQrCodeUriAsync(user);
return Page();
}
// Strip spaces and hypens
var verificationCode = Input.Code.Replace(" ", string.Empty).Replace("-", string.Empty);
var is2faTokenValid = await _userManager.VerifyTwoFactorTokenAsync(
user, _userManager.Options.Tokens.AuthenticatorTokenProvider, verificationCode);
if (!is2faTokenValid)
{
ModelState.AddModelError("Input.Code", "Verification code is invalid.");
await LoadSharedKeyAndQrCodeUriAsync(user);
return Page();
}
await _userManager.SetTwoFactorEnabledAsync(user, true);
var userId = await _userManager.GetUserIdAsync(user);
_logger.LogInformation("User with ID '{UserId}' has enabled 2FA with an authenticator app.", userId);
StatusMessage = "Your authenticator app has been verified.";
if (await _userManager.CountRecoveryCodesAsync(user) == 0)
{
var recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10);
RecoveryCodes = recoveryCodes.ToArray();
return RedirectToPage("./ShowRecoveryCodes");
}
else
{
return RedirectToPage("./TwoFactorAuthentication");
}
}
private async Task LoadSharedKeyAndQrCodeUriAsync(IdentityUser user)
{
// Load the authenticator key & QR code URI to display on the form
var unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user);
if (string.IsNullOrEmpty(unformattedKey))
{
await _userManager.ResetAuthenticatorKeyAsync(user);
unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user);
}
SharedKey = FormatKey(unformattedKey);
var email = await _userManager.GetEmailAsync(user);
AuthenticatorUri = GenerateQrCodeUri(email, unformattedKey);
}
private string FormatKey(string unformattedKey)
{
var result = new StringBuilder();
int currentPosition = 0;
while (currentPosition + 4 < unformattedKey.Length)
{
result.Append(unformattedKey.Substring(currentPosition, 4)).Append(" ");
currentPosition += 4;
}
if (currentPosition < unformattedKey.Length)
{
result.Append(unformattedKey.Substring(currentPosition));
}
return result.ToString().ToLowerInvariant();
}
private string GenerateQrCodeUri(string email, string unformattedKey)
{
return string.Format(
AuthenticatorUriFormat,
_urlEncoder.Encode("BlazorApp"),
_urlEncoder.Encode(email),
unformattedKey);
}
}
}

View File

@@ -0,0 +1,53 @@
@page
@model ExternalLoginsModel
@{
ViewData["Title"] = "Manage your external logins";
ViewData["ActivePage"] = ManageNavPages.ExternalLogins;
}
<partial name="_StatusMessage" for="StatusMessage" />
@if (Model.CurrentLogins?.Count > 0)
{
<h4>Registered Logins</h4>
<table class="table">
<tbody>
@foreach (var login in Model.CurrentLogins)
{
<tr>
<td id="@($"login-provider-{login.LoginProvider}")">@login.ProviderDisplayName</td>
<td>
@if (Model.ShowRemoveButton)
{
<form id="@($"remove-login-{login.LoginProvider}")" asp-page-handler="RemoveLogin" method="post">
<div>
<input asp-for="@login.LoginProvider" name="LoginProvider" type="hidden" />
<input asp-for="@login.ProviderKey" name="ProviderKey" type="hidden" />
<button type="submit" class="btn btn-primary" title="Remove this @login.ProviderDisplayName login from your account">Remove</button>
</div>
</form>
}
else
{
@: &nbsp;
}
</td>
</tr>
}
</tbody>
</table>
}
@if (Model.OtherLogins?.Count > 0)
{
<h4>Add another service to log in.</h4>
<hr />
<form id="link-login-form" asp-page-handler="LinkLogin" method="post" class="form-horizontal">
<div id="socialLoginList">
<p>
@foreach (var provider in Model.OtherLogins)
{
<button id="@($"link-login-button-{provider.Name}")" type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</p>
</div>
</form>
}

View File

@@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public class ExternalLoginsModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
public ExternalLoginsModel(
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
public IList<UserLoginInfo> CurrentLogins { get; set; }
public IList<AuthenticationScheme> OtherLogins { get; set; }
public bool ShowRemoveButton { get; set; }
[TempData]
public string StatusMessage { get; set; }
public async Task<IActionResult> OnGetAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID 'user.Id'.");
}
CurrentLogins = await _userManager.GetLoginsAsync(user);
OtherLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync())
.Where(auth => CurrentLogins.All(ul => auth.Name != ul.LoginProvider))
.ToList();
ShowRemoveButton = user.PasswordHash != null || CurrentLogins.Count > 1;
return Page();
}
public async Task<IActionResult> OnPostRemoveLoginAsync(string loginProvider, string providerKey)
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID 'user.Id'.");
}
var result = await _userManager.RemoveLoginAsync(user, loginProvider, providerKey);
if (!result.Succeeded)
{
StatusMessage = "The external login was not removed.";
return RedirectToPage();
}
await _signInManager.RefreshSignInAsync(user);
StatusMessage = "The external login was removed.";
return RedirectToPage();
}
public async Task<IActionResult> OnPostLinkLoginAsync(string provider)
{
// Clear the existing external cookie to ensure a clean login process
await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);
// Request a redirect to the external login provider to link a login for the current user
var redirectUrl = Url.Page("./ExternalLogins", pageHandler: "LinkLoginCallback");
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, _userManager.GetUserId(User));
return new ChallengeResult(provider, properties);
}
public async Task<IActionResult> OnGetLinkLoginCallbackAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID 'user.Id'.");
}
var info = await _signInManager.GetExternalLoginInfoAsync(user.Id);
if (info == null)
{
throw new InvalidOperationException($"Unexpected error occurred loading external login info for user with ID '{user.Id}'.");
}
var result = await _userManager.AddLoginAsync(user, info);
if (!result.Succeeded)
{
StatusMessage = "The external login was not added. External logins can only be associated with one account.";
return RedirectToPage();
}
// Clear the existing external cookie to ensure a clean login process
await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);
StatusMessage = "The external login was added.";
return RedirectToPage();
}
}
}

View File

@@ -0,0 +1,27 @@
@page
@model GenerateRecoveryCodesModel
@{
ViewData["Title"] = "Generate two-factor authentication (2FA) recovery codes";
ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication;
}
<partial name="_StatusMessage" for="StatusMessage" />
<h4>@ViewData["Title"]</h4>
<div class="alert alert-warning" role="alert">
<p>
<span class="glyphicon glyphicon-warning-sign"></span>
<strong>Put these codes in a safe place.</strong>
</p>
<p>
If you lose your device and don't have the recovery codes you will lose access to your account.
</p>
<p>
Generating new recovery codes does not change the keys used in authenticator apps. If you wish to change the key
used in an authenticator app you should <a asp-page="./ResetAuthenticator">reset your authenticator keys.</a>
</p>
</div>
<div>
<form method="post" class="form-group">
<button class="btn btn-danger" type="submit">Generate Recovery Codes</button>
</form>
</div>

View File

@@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public class GenerateRecoveryCodesModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly ILogger<GenerateRecoveryCodesModel> _logger;
public GenerateRecoveryCodesModel(
UserManager<IdentityUser> userManager,
ILogger<GenerateRecoveryCodesModel> logger)
{
_userManager = userManager;
_logger = logger;
}
[TempData]
public string[] RecoveryCodes { get; set; }
[TempData]
public string StatusMessage { get; set; }
public async Task<IActionResult> OnGetAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
var isTwoFactorEnabled = await _userManager.GetTwoFactorEnabledAsync(user);
if (!isTwoFactorEnabled)
{
var userId = await _userManager.GetUserIdAsync(user);
throw new InvalidOperationException($"Cannot generate recovery codes for user with ID '{userId}' because they do not have 2FA enabled.");
}
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
var isTwoFactorEnabled = await _userManager.GetTwoFactorEnabledAsync(user);
var userId = await _userManager.GetUserIdAsync(user);
if (!isTwoFactorEnabled)
{
throw new InvalidOperationException($"Cannot generate recovery codes for user with ID '{userId}' as they do not have 2FA enabled.");
}
var recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10);
RecoveryCodes = recoveryCodes.ToArray();
_logger.LogInformation("User with ID '{UserId}' has generated new 2FA recovery codes.", userId);
StatusMessage = "You have generated new recovery codes.";
return RedirectToPage("./ShowRecoveryCodes");
}
}
}

View File

@@ -0,0 +1,30 @@
@page
@model IndexModel
@{
ViewData["Title"] = "Profile";
ViewData["ActivePage"] = ManageNavPages.Index;
}
<h4>@ViewData["Title"]</h4>
<partial name="_StatusMessage" model="Model.StatusMessage" />
<div class="row">
<div class="col-md-6">
<form id="profile-form" method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Username"></label>
<input asp-for="Username" class="form-control" disabled />
</div>
<div class="form-group">
<label asp-for="Input.PhoneNumber"></label>
<input asp-for="Input.PhoneNumber" class="form-control" />
<span asp-validation-for="Input.PhoneNumber" class="text-danger"></span>
</div>
<button id="update-profile-button" type="submit" class="btn btn-primary">Save</button>
</form>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@@ -0,0 +1,95 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public partial class IndexModel : PageModel
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
public IndexModel(
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
public string Username { get; set; }
[TempData]
public string StatusMessage { get; set; }
[BindProperty]
public InputModel Input { get; set; }
public class InputModel
{
[Phone]
[Display(Name = "Phone number")]
public string PhoneNumber { get; set; }
}
private async Task LoadAsync(IdentityUser user)
{
var userName = await _userManager.GetUserNameAsync(user);
var phoneNumber = await _userManager.GetPhoneNumberAsync(user);
Username = userName;
Input = new InputModel
{
PhoneNumber = phoneNumber
};
}
public async Task<IActionResult> OnGetAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
await LoadAsync(user);
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
if (!ModelState.IsValid)
{
await LoadAsync(user);
return Page();
}
var phoneNumber = await _userManager.GetPhoneNumberAsync(user);
if (Input.PhoneNumber != phoneNumber)
{
var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber);
if (!setPhoneResult.Succeeded)
{
StatusMessage = "Unexpected error when trying to set phone number.";
return RedirectToPage();
}
}
await _signInManager.RefreshSignInAsync(user);
StatusMessage = "Your profile has been updated";
return RedirectToPage();
}
}
}

View File

@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace BlazorApp.Areas.Identity.Pages.Account.Manage
{
public static class ManageNavPages
{
public static string Index => "Index";
public static string Email => "Email";
public static string ChangePassword => "ChangePassword";
public static string DownloadPersonalData => "DownloadPersonalData";
public static string DeletePersonalData => "DeletePersonalData";
public static string ExternalLogins => "ExternalLogins";
public static string PersonalData => "PersonalData";
public static string TwoFactorAuthentication => "TwoFactorAuthentication";
public static string IndexNavClass(ViewContext viewContext) => PageNavClass(viewContext, Index);
public static string EmailNavClass(ViewContext viewContext) => PageNavClass(viewContext, Email);
public static string ChangePasswordNavClass(ViewContext viewContext) => PageNavClass(viewContext, ChangePassword);
public static string DownloadPersonalDataNavClass(ViewContext viewContext) => PageNavClass(viewContext, DownloadPersonalData);
public static string DeletePersonalDataNavClass(ViewContext viewContext) => PageNavClass(viewContext, DeletePersonalData);
public static string ExternalLoginsNavClass(ViewContext viewContext) => PageNavClass(viewContext, ExternalLogins);
public static string PersonalDataNavClass(ViewContext viewContext) => PageNavClass(viewContext, PersonalData);
public static string TwoFactorAuthenticationNavClass(ViewContext viewContext) => PageNavClass(viewContext, TwoFactorAuthentication);
private static string PageNavClass(ViewContext viewContext, string page)
{
var activePage = viewContext.ViewData["ActivePage"] as string
?? System.IO.Path.GetFileNameWithoutExtension(viewContext.ActionDescriptor.DisplayName);
return string.Equals(activePage, page, StringComparison.OrdinalIgnoreCase) ? "active" : null;
}
}
}

View File

@@ -0,0 +1,27 @@
@page
@model PersonalDataModel
@{
ViewData["Title"] = "Personal Data";
ViewData["ActivePage"] = ManageNavPages.PersonalData;
}
<h4>@ViewData["Title"]</h4>
<div class="row">
<div class="col-md-6">
<p>Your account contains personal data that you have given us. This page allows you to download or delete that data.</p>
<p>
<strong>Deleting this data will permanently remove your account, and this cannot be recovered.</strong>
</p>
<form id="download-data" asp-page="DownloadPersonalData" method="post" class="form-group">
<button class="btn btn-primary" type="submit">Download</button>
</form>
<p>
<a id="delete" asp-page="DeletePersonalData" class="btn btn-primary">Delete</a>
</p>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

Some files were not shown because too many files have changed in this diff Show More