临河任务调度
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

248 lines
9.2KB

  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Microsoft.AspNetCore.Builder;
  5. using Microsoft.AspNetCore.Cors;
  6. using Microsoft.AspNetCore.DataProtection;
  7. using Microsoft.AspNetCore.Extensions.DependencyInjection;
  8. using Microsoft.Extensions.DependencyInjection;
  9. using Microsoft.Extensions.DependencyInjection.Extensions;
  10. using Microsoft.Extensions.Hosting;
  11. using Himp.TaskScheduling.MultiTenancy;
  12. using StackExchange.Redis;
  13. using Microsoft.OpenApi.Models;
  14. using OpenIddict.Validation.AspNetCore;
  15. using Volo.Abp;
  16. using Volo.Abp.Account;
  17. using Volo.Abp.Account.Web;
  18. using Volo.Abp.AspNetCore.Mvc;
  19. using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
  20. using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic;
  21. using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
  22. using Volo.Abp.AspNetCore.Serilog;
  23. using Volo.Abp.Auditing;
  24. using Volo.Abp.AuditLogging.EntityFrameworkCore;
  25. using Volo.Abp.Autofac;
  26. using Volo.Abp.Caching;
  27. using Volo.Abp.Caching.StackExchangeRedis;
  28. using Volo.Abp.Data;
  29. using Volo.Abp.Emailing;
  30. using Volo.Abp.EntityFrameworkCore;
  31. using Volo.Abp.EntityFrameworkCore.SqlServer;
  32. using Volo.Abp.FeatureManagement;
  33. using Volo.Abp.FeatureManagement.EntityFrameworkCore;
  34. using Volo.Abp.Identity;
  35. using Volo.Abp.Identity.EntityFrameworkCore;
  36. using Volo.Abp.Localization;
  37. using Volo.Abp.Modularity;
  38. using Volo.Abp.MultiTenancy;
  39. using Volo.Abp.OpenIddict.EntityFrameworkCore;
  40. using Volo.Abp.PermissionManagement;
  41. using Volo.Abp.PermissionManagement.EntityFrameworkCore;
  42. using Volo.Abp.PermissionManagement.HttpApi;
  43. using Volo.Abp.PermissionManagement.Identity;
  44. using Volo.Abp.SettingManagement;
  45. using Volo.Abp.SettingManagement.EntityFrameworkCore;
  46. using Volo.Abp.Swashbuckle;
  47. using Volo.Abp.TenantManagement;
  48. using Volo.Abp.TenantManagement.EntityFrameworkCore;
  49. using Volo.Abp.UI.Navigation.Urls;
  50. namespace Himp.TaskScheduling;
  51. [DependsOn(
  52. typeof(AbpAccountWebOpenIddictModule),
  53. typeof(AbpAccountApplicationModule),
  54. typeof(AbpAccountHttpApiModule),
  55. typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
  56. typeof(AbpAspNetCoreMvcModule),
  57. typeof(AbpAspNetCoreMvcUiBasicThemeModule),
  58. typeof(AbpAuditLoggingEntityFrameworkCoreModule),
  59. typeof(AbpAutofacModule),
  60. typeof(AbpCachingStackExchangeRedisModule),
  61. typeof(AbpEntityFrameworkCoreSqlServerModule),
  62. typeof(AbpIdentityEntityFrameworkCoreModule),
  63. typeof(AbpIdentityApplicationModule),
  64. typeof(AbpIdentityHttpApiModule),
  65. typeof(AbpOpenIddictEntityFrameworkCoreModule),
  66. typeof(AbpPermissionManagementDomainIdentityModule),
  67. typeof(AbpPermissionManagementEntityFrameworkCoreModule),
  68. typeof(AbpPermissionManagementApplicationModule),
  69. typeof(AbpPermissionManagementHttpApiModule),
  70. typeof(AbpSettingManagementEntityFrameworkCoreModule),
  71. typeof(AbpSettingManagementApplicationModule),
  72. typeof(AbpSettingManagementHttpApiModule),
  73. typeof(AbpFeatureManagementEntityFrameworkCoreModule),
  74. typeof(AbpFeatureManagementApplicationModule),
  75. typeof(AbpFeatureManagementHttpApiModule),
  76. typeof(AbpTenantManagementEntityFrameworkCoreModule),
  77. typeof(AbpTenantManagementApplicationModule),
  78. typeof(AbpTenantManagementHttpApiModule),
  79. typeof(TaskSchedulingApplicationContractsModule),
  80. typeof(AbpAspNetCoreSerilogModule),
  81. typeof(AbpSwashbuckleModule)
  82. )]
  83. public class TaskSchedulingAuthServerModule : AbpModule
  84. {
  85. public override void PreConfigureServices(ServiceConfigurationContext context)
  86. {
  87. PreConfigure<OpenIddictBuilder>(builder =>
  88. {
  89. builder.AddValidation(options =>
  90. {
  91. options.AddAudiences("TaskScheduling");
  92. options.UseLocalServer();
  93. options.UseAspNetCore();
  94. });
  95. });
  96. }
  97. public override void ConfigureServices(ServiceConfigurationContext context)
  98. {
  99. var hostingEnvironment = context.Services.GetHostingEnvironment();
  100. var configuration = context.Services.GetConfiguration();
  101. context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
  102. Configure<AbpDbContextOptions>(options =>
  103. {
  104. options.UseSqlServer();
  105. });
  106. context.Services.AddAbpSwaggerGen(
  107. options =>
  108. {
  109. options.SwaggerDoc("v1", new OpenApiInfo { Title = "TaskScheduling API", Version = "v1" });
  110. options.DocInclusionPredicate((docName, description) => true);
  111. options.CustomSchemaIds(type => type.FullName);
  112. });
  113. Configure<AbpLocalizationOptions>(options =>
  114. {
  115. options.Languages.Add(new LanguageInfo("ar", "ar", "العربية"));
  116. options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
  117. options.Languages.Add(new LanguageInfo("en", "en", "English"));
  118. options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
  119. options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish"));
  120. options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
  121. options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi"));
  122. options.Languages.Add(new LanguageInfo("is", "is", "Icelandic"));
  123. options.Languages.Add(new LanguageInfo("it", "it", "Italiano"));
  124. options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
  125. options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
  126. options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română"));
  127. options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
  128. options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak"));
  129. options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
  130. options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
  131. options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
  132. options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch"));
  133. options.Languages.Add(new LanguageInfo("es", "es", "Español"));
  134. options.Languages.Add(new LanguageInfo("el", "el", "Ελληνικά"));
  135. });
  136. Configure<AbpAuditingOptions>(options =>
  137. {
  138. //options.IsEnabledForGetRequests = true;
  139. options.ApplicationName = "AuthServer";
  140. });
  141. Configure<AppUrlOptions>(options =>
  142. {
  143. options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"];
  144. });
  145. Configure<AbpDistributedCacheOptions>(options =>
  146. {
  147. options.KeyPrefix = "TaskScheduling:";
  148. });
  149. Configure<AbpMultiTenancyOptions>(options =>
  150. {
  151. options.IsEnabled = MultiTenancyConsts.IsEnabled;
  152. });
  153. var dataProtectionBuilder = context.Services.AddDataProtection().SetApplicationName("TaskScheduling");
  154. if (!hostingEnvironment.IsDevelopment())
  155. {
  156. var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
  157. dataProtectionBuilder.PersistKeysToStackExchangeRedis(redis, "TaskScheduling-Protection-Keys");
  158. }
  159. context.Services.AddCors(options =>
  160. {
  161. options.AddDefaultPolicy(builder =>
  162. {
  163. builder
  164. .WithOrigins(
  165. configuration["App:CorsOrigins"]?
  166. .Split(",", StringSplitOptions.RemoveEmptyEntries)
  167. .Select(o => o.RemovePostFix("/"))
  168. .ToArray() ?? Array.Empty<string>()
  169. )
  170. .WithAbpExposedHeaders()
  171. .SetIsOriginAllowedToAllowWildcardSubdomains()
  172. .AllowAnyHeader()
  173. .AllowAnyMethod()
  174. .AllowCredentials();
  175. });
  176. });
  177. #if DEBUG
  178. context.Services.Replace(ServiceDescriptor.Singleton<IEmailSender, NullEmailSender>());
  179. #endif
  180. }
  181. public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
  182. {
  183. var app = context.GetApplicationBuilder();
  184. var env = context.GetEnvironment();
  185. if (env.IsDevelopment())
  186. {
  187. app.UseDeveloperExceptionPage();
  188. }
  189. else
  190. {
  191. app.UseErrorPage();
  192. app.UseHsts();
  193. }
  194. app.UseHttpsRedirection();
  195. app.UseCorrelationId();
  196. app.UseStaticFiles();
  197. app.UseRouting();
  198. app.UseCors();
  199. app.UseAuthentication();
  200. app.UseAbpOpenIddictValidation();
  201. if (MultiTenancyConsts.IsEnabled)
  202. {
  203. app.UseMultiTenancy();
  204. }
  205. app.UseAbpRequestLocalization();
  206. app.UseAuthorization();
  207. app.UseSwagger();
  208. app.UseAbpSwaggerUI(options =>
  209. {
  210. options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API");
  211. });
  212. app.UseAuditing();
  213. app.UseAbpSerilogEnrichers();
  214. app.UseConfiguredEndpoints();
  215. await SeedData(context);
  216. }
  217. private async Task SeedData(ApplicationInitializationContext context)
  218. {
  219. using (var scope = context.ServiceProvider.CreateScope())
  220. {
  221. await scope.ServiceProvider
  222. .GetRequiredService<IDataSeeder>()
  223. .SeedAsync();
  224. }
  225. }
  226. }