using AmtScanner.Api.Data; using AmtScanner.Api.Models; using AmtScanner.Api.Services; using AmtScanner.Api.Repositories; using Microsoft.EntityFrameworkCore; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; // Disable SSL certificate validation for AMT devices (they use self-signed certs) ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; var builder = WebApplication.CreateBuilder(args); // Add services to the container builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Add CORS builder.Services.AddCors(options => { options.AddPolicy("AllowFrontend", policy => { policy.WithOrigins("http://localhost:5173", "http://localhost:3000", "http://localhost:3001") .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); // Add SignalR for WebSocket builder.Services.AddSignalR(); // Add Database var databaseProvider = builder.Configuration.GetValue("DatabaseProvider", "SQLite"); if (databaseProvider == "MySQL") { var connectionString = builder.Configuration.GetConnectionString("MySqlConnection"); builder.Services.AddDbContext(options => options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString))); } else { builder.Services.AddDbContext(options => options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection"))); } // Add Services builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddHttpClient(); var app = builder.Build(); // Configure the HTTP request pipeline if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseCors("AllowFrontend"); app.UseAuthorization(); app.MapControllers(); // Map SignalR Hub app.MapHub("/scanHub"); // Ensure database is created using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService(); try { // Apply migrations (create database and tables) db.Database.Migrate(); // Add default credential if not exists if (!db.AmtCredentials.Any()) { var credentialService = scope.ServiceProvider.GetRequiredService(); var defaultCredential = new AmtCredential { Name = "Default Admin", Username = "admin", Password = credentialService.EncryptPassword("Guo1wu3shi4!"), IsDefault = true, Description = "默认管理员凭据", CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow }; db.AmtCredentials.Add(defaultCredential); db.SaveChanges(); Console.WriteLine("✅ 默认凭据已创建: admin / Guo1wu3shi4!"); } Console.WriteLine($"✅ 数据库连接成功: {databaseProvider}"); } catch (Exception ex) { Console.WriteLine($"❌ 数据库初始化失败: {ex.Message}"); throw; } } app.Run();