public Task <IEnumerable <string> > AddBuildTag( int buildId, Guid projectId, string buildTag, CancellationToken cancellationToken = default(CancellationToken)) { BuildTags.Add(buildTag); return(Task.FromResult <IEnumerable <string> >(BuildTags)); }
public DevDataSeeder( ILogger <DevDataSeeder> logger, IOptions <AppConfig> appConfig, AppDbContext dbContext, HttpClient httpClient, BuildService buildService, BlueprintConverter blueprintConverter, ImageService imageService, BuildTags buildTags) { _logger = logger; _appConfig = appConfig.Value; _dbContext = dbContext; _httpClient = httpClient; _buildService = buildService; _blueprintConverter = blueprintConverter; _imageService = imageService; _buildTags = buildTags; }
public void ConfigureServices(IServiceCollection services) { var appConfig = _configuration.GetSection(nameof(AppConfig)).Get <AppConfig>() ?? new AppConfig(); services.AddSingleton(Options.Create(appConfig)); // todo: quick fix for ImageSharp.Web bug _environment.WebRootPath = appConfig.DataDir; services.AddProblemDetails(); services.AddHttpClient(); services.AddControllers().AddJsonOptions(options => { options.JsonSerializerOptions.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); options.JsonSerializerOptions.Converters.Add(new PolymorphicJsonConverter <PayloadModelBase>()); options.JsonSerializerOptions.Converters.Add(new CustomJsonStringEnumConverter(new SnakeCaseNamingPolicy())); options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter(new SnakeCaseNamingPolicy())); options.JsonSerializerOptions.Converters.Add(new VersionJsonConverter()); options.JsonSerializerOptions.Converters.Add(new HashJsonConverter()); options.JsonSerializerOptions.IgnoreNullValues = true; options.JsonSerializerOptions.PropertyNamingPolicy = new SnakeCaseNamingPolicy(); }); services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "factorio.tech", Version = "v1" }); options.AddSecurityDefinition(SecuritySchemeType.OAuth2.ToString(), new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, Flows = new OpenApiOAuthFlows { AuthorizationCode = new OpenApiOAuthFlow { AuthorizationUrl = new Uri(appConfig.IdentityUri.AbsoluteUri + "connect/authorize"), TokenUrl = new Uri(appConfig.IdentityUri.AbsoluteUri + "connect/token"), Scopes = new Dictionary <string, string> { { "openid", "Informs the authorization server that the client is making an OpenID Connect request." }, { "profile", "Requests access to the user's profile information." }, }, }, }, }); options.EnableAnnotations(true, true); options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"{Assembly.GetExecutingAssembly().GetName().Name}.xml")); options.MapType(typeof(Instant), () => new OpenApiSchema { Type = "string" }); options.MapType(typeof(Hash), () => new OpenApiSchema { Type = "string" }); options.MapType(typeof(Version), () => new OpenApiSchema { Type = "string" }); options.MapType(typeof(AssetService.IconSize), () => new OpenApiSchema { Type = "integer" }); options.OperationFilter <OAuthResponsesOperationFilter>(); options.UseAllOfToExtendReferenceSchemas(); options.UseInlineDefinitionsForEnums(); }); services.AddCors(options => { options.AddPolicy("factorio-blueprint-editor", builder => builder.WithOrigins($"{appConfig.BlueprintEditorUri.Scheme}://{appConfig.BlueprintEditorUri.Authority}") .AllowAnyHeader() .AllowAnyMethod()); options.AddDefaultPolicy(builder => builder.AllowAnyHeader() .AllowAnyMethod() .AllowCredentials() .Let(b => _environment.IsProduction() ? b.WithOrigins($"{appConfig.WebUri.Scheme}://{appConfig.WebUri.Authority}") : b.WithOrigins($"{appConfig.WebUri.Scheme}://{appConfig.WebUri.Authority}", "https://local.factorio.tech", "http://localhost:3000"))); }); services.AddDbContext <AppDbContext>(options => { options.UseNpgsql(_configuration.GetConnectionString("Postgres"), o => o.UseNodaTime()); }); services.AddAuthentication("Bearer").AddJwtBearer("Bearer", options => { options.Authority = $"{appConfig.IdentityUri.Scheme}://{appConfig.IdentityUri.Authority}"; if (!_environment.IsProduction() && (appConfig.IdentityUri.IsLoopback || appConfig.IdentityUri.Host.EndsWith("local.factorio.tech"))) { options.BackchannelHttpHandler = new HttpClientHandler { ClientCertificateOptions = ClientCertificateOption.Manual, ServerCertificateCustomValidationCallback = (_, _, _, _) => true, }; } options.TokenValidationParameters = new TokenValidationParameters { ValidateAudience = false, }; }); services.AddAuthorization(); services.AddApplicationInsightsTelemetry(options => { options.ApplicationVersion = BuildInformation.Version; }); services.AddSingleton <ITelemetryInitializer, CloudRoleInitializer>(); services.AddSingleton <ITelemetryInitializer, UserInitializer>(); if (!_environment.IsProduction()) { services.AddTransient <DevDataSeeder>(); } if (!_environment.IsDevelopment()) { services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(Path.Join(appConfig.ProtectedDataDir, "dataprotection"))) .ProtectKeysWithCertificate(new X509Certificate2("/mnt/keys/certificate.pfx")); } services.AddImageSharp() .AddProvider <CoverProvider>() .AddProvider <RenderingProvider>() .RemoveProvider <PhysicalFileSystemProvider>() .Configure <PhysicalFileSystemCacheOptions>(options => { options.CacheRoot = appConfig.DataDir; options.CacheFolder = "image-cache"; }); services.AddTransient <FbsrClient>(); services.AddTransient <BlueprintConverter>(); services.AddTransient <BuildService>(); services.AddTransient <FollowerService>(); services.AddTransient <ImageService>(); services.AddTransient <AssetService>(); services.AddTransient <SlugService>(); services.AddSingleton(BuildTags.Load()); services.AddSingleton <IFileProvider>(new PhysicalFileProvider(appConfig.DataDir)); }