Spaces:
Sleeping
Sleeping
File size: 4,553 Bytes
e36e2eb 068485b da13799 068485b 1a7e978 ccc2569 ee79726 ccc2569 ee79726 ccc2569 068485b ed77e1a 068485b ccc2569 e36e2eb d8a7fc4 e36e2eb ccc2569 6f32ae8 ace6185 6f32ae8 1a7e978 068485b da13799 ed77e1a 068485b ccc2569 ee79726 ccc2569 068485b ee79726 1a7e978 068485b 6f32ae8 068485b | 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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | using System.IO;
using System.Text;
using DbConnect.Data;
using DbConnect.Entities;
using Backend.Features.Auth;
using Backend.Features.Users;
using Backend.Features.Books;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using Backend.Features.Subscriptions;
using Backend.Features.Categories;
using Backend.Features.Borrowings;
using Backend.Features.Loyalty;
using Backend.Features.Notification;
using Backend.Features.Wishlist;
using Backend.Features.Wallet;
using FirebaseAdmin;
using Google.Apis.Auth.OAuth2;
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
var builder = WebApplication.CreateBuilder(args);
// Firebase Admin SDK Initialization
var firebaseConfig = Environment.GetEnvironmentVariable("FIREBASE_CONFIG");
if (!string.IsNullOrEmpty(firebaseConfig))
{
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.FromJson(firebaseConfig)
});
}
else if (File.Exists("LibraryFirebase.json"))
{
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.FromFile("LibraryFirebase.json")
});
}
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowWasm",
policy => policy.WithOrigins(
"https://localhost:7058",
"http://localhost:5158",
"https://librarymanagement-eosin-omega.vercel.app",
"https://yuruyuruu-librarymanagement.hf.space"
)
.AllowAnyMethod()
.AllowAnyHeader());
});
builder.Services.AddControllers();
builder.Services.AddAuthorization();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Library Management API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "JWT Authorization header using the Bearer scheme.",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.Http,
Scheme = "bearer",
BearerFormat = "JWT"
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] {}
}
});
});
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
// Register Services
builder.Services.AddScoped<IAuthService, AuthService>();
builder.Services.AddScoped<IUserService, UserService>();
builder.Services.AddScoped<IBookService, BookService>();
builder.Services.AddScoped<ISubscriptionService, SubscriptionService>();
builder.Services.AddScoped<ICategoryService, CategoryService>();
builder.Services.AddScoped<IBorrowingService, BorrowingService>();
builder.Services.AddScoped<INotificationService, NotificationService>();
builder.Services.AddScoped<IWishlistService, WishlistService>();
builder.Services.AddScoped<IWalletService, WalletService>();
builder.Services.AddHostedService<NotificationBackgroundService>();
// Register Loyalty API Client
builder.Services.AddHttpClient<ILoyaltyService, LoyaltyService>(client =>
{
client.BaseAddress = new Uri("http://150.95.88.91:4100");
});
// Configure JWT Authentication
var key = Encoding.ASCII.GetBytes(builder.Configuration["Jwt:Secret"] ?? "YourSuperSecretKeyForLibraryManagementSystem_AtLeast32CharsLong");
builder.Services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = true,
ValidateAudience = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
ClockSkew = TimeSpan.Zero
};
});
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
app.UseCors("AllowWasm");
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
|