API
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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. using AutoMapper;
  2. using Microsoft.AspNetCore.Authentication.JwtBearer;
  3. using Microsoft.AspNetCore.Builder;
  4. using Microsoft.AspNetCore.Cors.Infrastructure;
  5. using Microsoft.AspNetCore.Hosting;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.AspNetCore.Mvc.Cors.Internal;
  8. using Microsoft.EntityFrameworkCore;
  9. using Microsoft.Extensions.Configuration;
  10. using Microsoft.Extensions.DependencyInjection;
  11. using Microsoft.IdentityModel.Tokens;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using UnivateProperties_API.Context;
  15. using UnivateProperties_API.Helpers;
  16. using UnivateProperties_API.Model.Banks;
  17. using UnivateProperties_API.Model.Campaigns;
  18. using UnivateProperties_API.Model.Communication;
  19. using UnivateProperties_API.Model.Financial;
  20. using UnivateProperties_API.Model.Misc;
  21. using UnivateProperties_API.Model.ProcessFlow;
  22. using UnivateProperties_API.Model.Properties;
  23. using UnivateProperties_API.Model.Region;
  24. using UnivateProperties_API.Model.Timeshare;
  25. using UnivateProperties_API.Model.Users;
  26. using UnivateProperties_API.Repository;
  27. using UnivateProperties_API.Repository.Banks;
  28. using UnivateProperties_API.Repository.Campaigns;
  29. using UnivateProperties_API.Repository.Communication;
  30. using UnivateProperties_API.Repository.Financial;
  31. using UnivateProperties_API.Repository.Logging;
  32. using UnivateProperties_API.Repository.Misc;
  33. using UnivateProperties_API.Repository.ProccessFlow;
  34. using UnivateProperties_API.Repository.Properties;
  35. using UnivateProperties_API.Repository.Region;
  36. using UnivateProperties_API.Repository.Timeshare;
  37. using UnivateProperties_API.Repository.Users;
  38. namespace UnivateProperties_API
  39. {
  40. public class Startup
  41. {
  42. public Startup(IConfiguration configuration)
  43. {
  44. Configuration = configuration;
  45. }
  46. public IConfiguration Configuration { get; }
  47. public void ConfigureServices(IServiceCollection services)
  48. {
  49. services.AddAutoMapper();
  50. services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
  51. {
  52. builder.AllowAnyOrigin()
  53. .AllowAnyMethod()
  54. .AllowAnyHeader();
  55. }));
  56. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
  57. services.AddDbContext<DataContext>(o => o.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
  58. MyCommon.TenderUrl = Configuration.GetConnectionString("TenderConnection");
  59. MyCommon.Reservations = Configuration.GetConnectionString("ReservationsURL");
  60. MyCommon.ReservationsUserCode = Configuration.GetConnectionString("ReservationsUserCode");
  61. MyCommon.ReservationsPassword = Configuration.GetConnectionString("ReservationsPassword");
  62. var appSettingsSection = Configuration.GetSection("AppSettings");
  63. services.Configure<AppSettings>(appSettingsSection);
  64. // configure jwt authentication
  65. var appSettings = appSettingsSection.Get<AppSettings>();
  66. var key = Encoding.ASCII.GetBytes(appSettings.Secret);
  67. services.AddAuthentication(x =>
  68. {
  69. x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
  70. x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  71. })
  72. .AddJwtBearer(x =>
  73. {
  74. x.Events = new JwtBearerEvents
  75. {
  76. OnTokenValidated = context =>
  77. {
  78. var registerRepository = context.HttpContext.RequestServices.GetRequiredService<IRegisterRepository>();
  79. var userId = int.Parse(context.Principal.Identity.Name);
  80. var user = registerRepository.GetById(userId);
  81. if (user == null)
  82. {
  83. // return unauthorized if user no longer exists
  84. context.Fail("Unauthorized");
  85. }
  86. return Task.CompletedTask;
  87. }
  88. };
  89. x.RequireHttpsMetadata = false;
  90. x.SaveToken = true;
  91. x.TokenValidationParameters = new TokenValidationParameters
  92. {
  93. ValidateIssuerSigningKey = true,
  94. IssuerSigningKey = new SymmetricSecurityKey(key),
  95. ValidateIssuer = false,
  96. ValidateAudience = false
  97. };
  98. });
  99. services.Configure<IISServerOptions>(options =>
  100. {
  101. options.AutomaticAuthentication = true;
  102. });
  103. #region
  104. services.AddTransient<IBankRepository, BankRepository>();
  105. #endregion
  106. #region ProcessFlow
  107. services.AddTransient<IBidRepository, BidRepository>();
  108. #endregion
  109. #region Property
  110. services.AddTransient<IRepository<Agent>, AgentRepository>();
  111. services.AddTransient<IRegisterRepository, RegisterRepository>();
  112. services.AddTransient<IRepository<Agency>, AgencyRepository>();
  113. services.AddTransient<IRepository<Email>, EmailRepository>();
  114. services.AddTransient<IRepository<SMTPAccount>, SMTPAccountRepository>();
  115. services.AddTransient<IRepository<SMTPHost>, SMTPHostRepository>();
  116. services.AddTransient<IPropertyRepository, PropertyRepository>();
  117. services.AddTransient<IPropertyImageRepository, PropertyImageRepository>();
  118. services.AddTransient<IRepository<PropertyType>, PropertyTypeRepository>();
  119. services.AddTransient<IRepository<PropertyUserField>, PropertyUserFieldRepository>();
  120. services.AddTransient<IRepository<UserDefinedField>, UserDefinedFieldRepository>();
  121. services.AddTransient<IUserDefinedGroupRepository, UserDefinedGroupRepository>();
  122. services.AddTransient<IRepository<Payment>, PaymentRepository>();
  123. #endregion Property
  124. #region Region
  125. services.AddTransient<IRepository<Province>, ProvinceRepository>();
  126. #endregion Region
  127. #region Timeshare
  128. services.AddTransient<IRepository<Status>, StatusRepository>();
  129. services.AddTransient<IRepository<Season>, SeasonRepository>();
  130. services.AddTransient<IRepository<UnitConfiguration>, UnitConfigurationRepository>();
  131. services.AddTransient<IRepository<TimeshareWeek>, WeekRepository>();
  132. services.AddTransient<IWeekRepository, WeekRepository>();
  133. services.AddTransient<IRepository<Bank>, BankAccountRepository>();
  134. services.AddTransient<IRepository<BankAccount>, BankAccountRepository>();
  135. services.AddTransient<IResortRepository, ResortRepository>();
  136. #endregion Timeshare
  137. #region User
  138. services.AddScoped<IRegisterRepository, RegisterRepository>();
  139. services.AddTransient<IRepository<Agent>, AgentRepository>();
  140. services.AddTransient<IRegisterRepository, RegisterRepository>();
  141. services.AddTransient<IRepository<Agency>, AgencyRepository>();
  142. services.AddTransient<IRepository<User>, UserRepository>();
  143. services.AddTransient<IRepository<Individual>, IndividualRepository>();
  144. #endregion User
  145. #region Communication
  146. services.AddTransient<IRepository<Template>, TemplateRepository>();
  147. services.AddTransient<IRepository<Email>, EmailRepository>();
  148. services.AddTransient<IRepository<SMTPAccount>, SMTPAccountRepository>();
  149. services.AddTransient<IRepository<SMTPHost>, SMTPHostRepository>();
  150. services.AddTransient<IMailRepository, MailRepository>();
  151. #endregion Communication
  152. #region Logs
  153. services.AddTransient<ISearchLogRepository, SearchLogRepository>();
  154. #endregion
  155. #region Financial
  156. services.AddTransient<IPaygateRepository, PaygateRepository>();
  157. services.AddTransient<IListingRepository, ListingRepository>();
  158. #endregion
  159. #region Misc
  160. services.AddTransient<ICarouselRepository, CarouselRepository>();
  161. services.AddTransient<IRepository<PlaceHolderFormat>, PlaceHolderFormatRepository>();
  162. services.AddTransient<ITCRepository, TCRepository>();
  163. #endregion
  164. #region Campaign
  165. services.AddTransient<ICampaignRepository, CampaignRepository>();
  166. #endregion
  167. services.Configure<MvcOptions>(options =>
  168. {
  169. options.Filters.Add(new CorsAuthorizationFilterFactory("MyPolicy"));
  170. });
  171. }
  172. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  173. {
  174. UpdateDatabase(app);
  175. if (env.IsDevelopment())
  176. {
  177. app.UseDeveloperExceptionPage();
  178. }
  179. app.UseCors(x => x
  180. .AllowAnyOrigin()
  181. .AllowAnyMethod()
  182. .AllowAnyHeader());
  183. app.UseAuthentication();
  184. app.UseHttpsRedirection();
  185. app.UseMvc();
  186. }
  187. private static void UpdateDatabase(IApplicationBuilder app)
  188. {
  189. using (var serviceScope = app.ApplicationServices
  190. .GetRequiredService<IServiceScopeFactory>()
  191. .CreateScope())
  192. {
  193. using (var context = serviceScope.ServiceProvider.GetService<DataContext>())
  194. {
  195. //context.Database.Migrate();
  196. }
  197. }
  198. }
  199. }
  200. }