|
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using IdentityModel;
- using Microsoft.AspNetCore.Authentication.JwtBearer;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Cors;
- using Microsoft.AspNetCore.DataProtection;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Hosting;
- using Himp.TaskScheduling.EntityFrameworkCore;
- using Himp.TaskScheduling.MultiTenancy;
- using StackExchange.Redis;
- using Microsoft.OpenApi.Models;
- using Volo.Abp;
- using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
- using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
- using Volo.Abp.AspNetCore.Serilog;
- using Volo.Abp.AuditLogging.EntityFrameworkCore;
- using Volo.Abp.Autofac;
- using Volo.Abp.Caching;
- using Volo.Abp.Caching.StackExchangeRedis;
- using Volo.Abp.EntityFrameworkCore;
- using Volo.Abp.EntityFrameworkCore.SqlServer;
- using Volo.Abp.Localization;
- using Volo.Abp.Modularity;
- using Volo.Abp.MultiTenancy;
- using Volo.Abp.PermissionManagement.EntityFrameworkCore;
- using Volo.Abp.Security.Claims;
- using Volo.Abp.SettingManagement.EntityFrameworkCore;
- using Volo.Abp.Swashbuckle;
- using Volo.Abp.TenantManagement.EntityFrameworkCore;
- using Volo.Abp.VirtualFileSystem;
- using Asp.Versioning.ApplicationModels;
- using Volo.Abp.AspNetCore.Mvc;
-
- namespace Himp.TaskScheduling;
-
- [DependsOn(
- typeof(TaskSchedulingApplicationModule),
- typeof(TaskSchedulingEntityFrameworkCoreModule),
- typeof(TaskSchedulingHttpApiModule),
- typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
- typeof(AbpAutofacModule),
- typeof(AbpCachingStackExchangeRedisModule),
- typeof(AbpEntityFrameworkCoreSqlServerModule),
- //typeof(AbpAuditLoggingEntityFrameworkCoreModule),
- //typeof(AbpPermissionManagementEntityFrameworkCoreModule),
- //typeof(AbpSettingManagementEntityFrameworkCoreModule),
- //typeof(AbpTenantManagementEntityFrameworkCoreModule),
- typeof(AbpAspNetCoreSerilogModule),
- typeof(AbpSwashbuckleModule)
- )]
- public class TaskSchedulingHttpApiHostModule : AbpModule
- {
-
- public override void ConfigureServices(ServiceConfigurationContext context)
- {
- //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
- var hostingEnvironment = context.Services.GetHostingEnvironment();
- var configuration = context.Services.GetConfiguration();
-
- Configure<AbpDbContextOptions>(options =>
- {
- options.UseSqlServer();
- });
-
- Configure<AbpMultiTenancyOptions>(options =>
- {
- options.IsEnabled = MultiTenancyConsts.IsEnabled;
- });
-
- ConfigureHangfire(context, configuration);
-
- if (hostingEnvironment.IsDevelopment())
- {
- Configure<AbpVirtualFileSystemOptions>(options =>
- {
- options.FileSets.ReplaceEmbeddedByPhysical<TaskSchedulingDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Himp.TaskScheduling.Domain.Shared", Path.DirectorySeparatorChar)));
- options.FileSets.ReplaceEmbeddedByPhysical<TaskSchedulingDomainModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Himp.TaskScheduling.Domain", Path.DirectorySeparatorChar)));
- options.FileSets.ReplaceEmbeddedByPhysical<TaskSchedulingApplicationContractsModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Himp.TaskScheduling.Application.Contracts", Path.DirectorySeparatorChar)));
- options.FileSets.ReplaceEmbeddedByPhysical<TaskSchedulingApplicationModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Himp.TaskScheduling.Application", Path.DirectorySeparatorChar)));
- });
- }
-
- context.Services.AddAbpSwaggerGenWithOAuth(
- configuration["AuthServer:Authority"]!,
- new Dictionary<string, string>
- {
- {"TaskScheduling", "TaskScheduling API"}
- },
- options =>
- {
- options.SwaggerDoc("v1", new OpenApiInfo {Title = "TaskScheduling API", Version = "v1"});
- options.DocInclusionPredicate((docName, description) => true);
- options.CustomSchemaIds(type => type.FullName);
- });
-
- context.Services.AddHttpClient();
-
- Configure<AbpLocalizationOptions>(options =>
- {
- options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
- options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
- options.Languages.Add(new LanguageInfo("en", "en", "English"));
- options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
- options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish"));
- options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
- options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi"));
- options.Languages.Add(new LanguageInfo("is", "is", "Icelandic"));
- options.Languages.Add(new LanguageInfo("it", "it", "Italiano"));
- options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
- options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
- options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română"));
- options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
- options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak"));
- options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
- options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
- options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
- options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch"));
- options.Languages.Add(new LanguageInfo("es", "es", "Español"));
- options.Languages.Add(new LanguageInfo("el", "el", "Ελληνικά"));
- });
-
- //var redisConnectionString = configuration.GetConnectionString("Redis");
- //var redis = ConnectionMultiplexer.Connect(redisConnectionString);
- //context.Services.AddSingleton<IConnectionMultiplexer>(redis);
-
- //context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
- // .AddJwtBearer(options =>
- // {
- // options.Authority = configuration["AuthServer:Authority"];
- // options.RequireHttpsMetadata = configuration.GetValue<bool>("AuthServer:RequireHttpsMetadata");
- // options.Audience = "TaskScheduling";
- // });
-
-
- Configure<AbpDistributedCacheOptions>(options =>
- {
- options.KeyPrefix = "TaskScheduling:";
- });
-
- var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("TaskScheduling");
- if (!hostingEnvironment.IsDevelopment())
- {
- var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
- dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "TaskScheduling-Protection-Keys");
- }
-
- context.Services.AddCors(options =>
- {
- options.AddDefaultPolicy(builder =>
- {
- builder
- .WithOrigins(
- configuration["App:CorsOrigins"]?
- .Split(",", StringSplitOptions.RemoveEmptyEntries)
- .Select(o => o.RemovePostFix("/"))
- .ToArray() ?? Array.Empty<string>()
- )
- .WithAbpExposedHeaders()
- .SetIsOriginAllowedToAllowWildcardSubdomains()
- .AllowAnyHeader()
- .AllowAnyMethod()
- .AllowCredentials();
- });
- });
-
- //versionless APIs
- context.Services.AddTransient<IApiControllerFilter, NoControllerFilter>();
- context.Services.AddAbpApiVersioning(options =>
- {
- options.ReportApiVersions = true;
- options.AssumeDefaultVersionWhenUnspecified = true;
- });
-
- Configure<AbpAspNetCoreMvcOptions>(options =>
- {
- options.ChangeControllerModelApiExplorerGroupName = false;
- });
-
- context.Services.AddHttpClient();
-
- //context.Services.AddElsa(elsa =>
- //{
- // // Configure Management layer to use EF Core.
- // elsa.UseWorkflowManagement(management => management.UseEntityFrameworkCore());
-
- // // Configure Runtime layer to use EF Core.
- // elsa.UseWorkflowRuntime(runtime => runtime.UseEntityFrameworkCore());
-
- // // Default Identity features for authentication/authorization.
- // elsa.UseIdentity(identity =>
- // {
- // identity.TokenOptions = options => options.SigningKey = "sufficiently-large-secret-signing-key"; // This key needs to be at least 256 bits long.
- // identity.UseAdminUserProvider();
- // });
-
- // // Configure ASP.NET authentication/authorization.
- // elsa.UseDefaultAuthentication(auth => auth.UseAdminApiKey());
-
- // // Expose Elsa API endpoints.
- // elsa.UseWorkflowsApi();
-
- // // Setup a SignalR hub for real-time updates from the server.
- // elsa.UseRealTimeWorkflows();
-
-
- // // Enable JavaScript workflow expressions
- // elsa.UseJavaScript(options => options.AllowClrAccess = true);
-
- // // Enable HTTP activities.
- // elsa.UseHttp();
-
- // // Register custom activities from the application, if any.
- // elsa.AddActivitiesFrom<Program>();
- // // Register custom workflows from the application, if any.
- // elsa.AddWorkflowsFrom<Program>();
- //});
- }
-
- private void ConfigureHangfire(ServiceConfigurationContext context, IConfiguration configuration)
- {
- //context.Services.AddHangfire(config =>
- //{
- // config.UseSqlServerStorage(configuration.GetConnectionString("Default"));
- //});
- }
-
- public override void OnApplicationInitialization(ApplicationInitializationContext context)
- {
- var app = context.GetApplicationBuilder();
- var env = context.GetEnvironment();
-
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- app.UseSwagger();
- app.UseAbpSwaggerUI(options =>
- {
- options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API");
-
- var configuration = context.GetConfiguration();
- options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
- options.OAuthScopes("TaskScheduling");
- });
- }
- else
- {
- app.UseHsts();
- }
-
- app.UseHttpsRedirection();
- app.UseCorrelationId();
- app.UseStaticFiles();
- app.UseRouting();
- app.UseCors();
- //app.UseAuthentication();
- //app.UseAbpHangfireDashboard();
- //app.UseWorkflowsApi();
- //app.UseWorkflows();
-
- if (MultiTenancyConsts.IsEnabled)
- {
- app.UseMultiTenancy();
- }
- app.UseAbpRequestLocalization();
- //app.UseAuthorization();
- app.UseAuditing();
-
- app.UseAbpSerilogEnrichers();
- app.UseConfiguredEndpoints();
- }
- }
|