-
Notifications
You must be signed in to change notification settings - Fork 162
/
Copy pathProgram.cs
131 lines (106 loc) · 4.55 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright (c) 2022 Jon P Smith, GitHub: JonPSmith, web: http://www.thereformedprogrammer.net/
// Licensed under MIT license. See License.txt in the project root for license information.
using Example1.RazorPages.IndividualAccounts.PermissionsCode;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Collections.Generic;
using System.Globalization;
using AuthPermissions;
using AuthPermissions.AspNetCore;
using AuthPermissions.AspNetCore.Services;
using AuthPermissions.AspNetCore.StartupServices;
using Example1.RazorPages.IndividualAccounts;
using Example1.RazorPages.IndividualAccounts.Data;
using LocalizeMessagesAndErrors;
using Microsoft.EntityFrameworkCore;
using RunMethodsSequentially;
using Microsoft.Extensions.Options;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDbContext<ApplicationDbContext>(opt =>
opt.UseInMemoryDatabase(nameof(ApplicationDbContext)));
builder.Services.AddDefaultIdentity<IdentityUser>(
options => options.SignIn.RequireConfirmedAccount = false)
.AddEntityFrameworkStores<ApplicationDbContext>();
//Example of configure a page as only shown if you log in
builder.Services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/AuthBuiltIn/LoggedInConfigure");
})
#region localization
.AddViewLocalization(options => options.ResourcesPath = "Resources");
#endregion
#region localization - defining the cultures
//see https://learn.microsoft.com/en-us/aspnet/core/fundamentals/localization#localization-middleware
var supportedCultures = new[] { "en", "fr"};
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
//This defines that the culture is selected by the culture cookie
localizationOptions.RequestCultureProviders = new List<IRequestCultureProvider>()
{
new CookieRequestCultureProvider(),
//new AcceptLanguageHeaderRequestCultureProvider(),
//new QueryStringRequestCultureProvider()
};
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
List<CultureInfo> supportedCultures = new List<CultureInfo>
{
new ("en"),
new ("fr"),
};
options.DefaultRequestCulture = new RequestCulture("en");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.RequestCultureProviders = new List<IRequestCultureProvider>()
{
new CookieRequestCultureProvider(),
new AcceptLanguageHeaderRequestCultureProvider(),
new QueryStringRequestCultureProvider()
};
});
#endregion
//Register the SimpleLocalizer with its own Resource file
//This is used for localization of simple messages
builder.Services.RegisterSimpleLocalizer<AppLocalizeResource>();
builder.Services.RegisterAuthPermissions<Example1Permissions>()
.UsingInMemoryDatabase()
.IndividualAccountsAuthentication()
.AddRolesPermissionsIfEmpty(AppAuthSetupData.RolesDefinition)
.AddAuthUsersIfEmpty(AppAuthSetupData.UsersWithRolesDefinition)
.RegisterAuthenticationProviderReader<SyncIndividualAccountUsers>()
.RegisterFindUserInfoService<IndividualAccountUserLookup>()
.SetupAuthPLocalization<AuthPLocalizeResource>(supportedCultures)
.AddSuperUserToIndividualAccounts()
.SetupAspNetCoreAndDatabase(options =>
{
//Migrate individual account database
options.RegisterServiceToRunInJob<StartupServiceMigrateAnyDbContext<ApplicationDbContext>>();
//Add demo users to the database
options.RegisterServiceToRunInJob<StartupServicesIndividualAccountsAddDemoUsers>();
});
var app = builder.Build();
#region localization
//see https://learn.microsoft.com/en-us/aspnet/core/fundamentals/localization#localization-middleware
app.UseRequestLocalization(localizationOptions);
//var options = app.Services.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value;
//app.UseRequestLocalization(options);
#endregion
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();