-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathProgram.cs
More file actions
126 lines (102 loc) · 4.69 KB
/
Copy pathProgram.cs
File metadata and controls
126 lines (102 loc) · 4.69 KB
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
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.EntityFrameworkCore;
using Syncfusion.Blazor;
using Syncfusion.Blazor.SmartComponents;
using SyncfusionHelpDesk.Components;
using SyncfusionHelpDesk.Components.Account;
using SyncfusionHelpDesk.Data;
using SyncfusionHelpDesk.Models;
namespace SyncfusionHelpDesk
{
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddScoped<IdentityUserAccessor>();
builder.Services.AddScoped<IdentityRedirectManager>();
builder.Services.AddScoped<AuthenticationStateProvider, IdentityRevalidatingAuthenticationStateProvider>();
// Add Identity with roles support
builder.Services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
options.SignIn.RequireConfirmedAccount = true;
})
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddSignInManager()
.AddDefaultTokenProviders();
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection")
?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddSingleton<IEmailSender<ApplicationUser>, IdentityNoOpEmailSender>();
// Syncfusion Support
builder.Services.AddSyncfusionBlazor();
// Get SYNCFUSION_APIKEY from appsettings.json
var SyncfusionApiKey = builder.Configuration["SYNCFUSION_APIKEY"];
if (SyncfusionApiKey != "")
{
// Register Syncfusion license
Syncfusion.Licensing.SyncfusionLicenseProvider
.RegisterLicense(SyncfusionApiKey);
}
// Add Syncfusion AI components
var apiKey = builder.Configuration["OpenAI:apiKey"];
var deploymentName = builder.Configuration["OpenAI:deploymentName"];
var endpoint = builder.Configuration["OpenAI:endpoint"];
if(apiKey != "")
{
builder.Services.AddSyncfusionSmartComponents()
.ConfigureCredentials(new AIServiceCredentials(apiKey, deploymentName, endpoint))
.InjectOpenAIInference();
}
// To access HelpDesk tables
builder.Services.AddDbContextFactory<SyncfusionHelpDeskContext>(options =>
options.UseSqlServer(connectionString));
builder.Services.AddScoped<SyncfusionHelpDeskService>();
builder.Services.AddScoped<EmailSender>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
// Authentication and Authorization Middleware
app.UseAuthentication();
app.UseAuthorization();
app.UseAntiforgery(); // Must be placed after UseAuthentication and UseAuthorization
app.MapStaticAssets();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.MapAdditionalIdentityEndpoints();
// Ensure the Administrator role is created at startup
await CreateRoles(app.Services);
await app.RunAsync();
}
// Role creation logic
private static async Task CreateRoles(IServiceProvider serviceProvider)
{
using var scope = serviceProvider.CreateScope();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
// Check if the Administrator role exists, if not, create it
if (!await roleManager.RoleExistsAsync("Administrators"))
{
var adminRole = new IdentityRole("Administrators");
await roleManager.CreateAsync(adminRole);
}
}
}
}