* Move PrivateKeys.cs * Update gitignore * Update gitignore * updt * Extract GmxServiceTests.cs * Refact * update todo * Update code * Fix hashdata * Replace static token hashed datas * Set allowance * Add get orders * Add get orders tests * Add ignore * add close orders * revert * Add get gas limit * Start increasePosition. Todo: Finish GetExecutionFee and estimateGas * little refact * Update gitignore * Fix namespaces and clean repo * Add tests samples * Add execution fee * Add increase position * Handle backtest on the frontend * Add tests * Update increase * Test increase * fix increase * Fix size * Start get position * Update get positions * Fix get position * Update rpc and trade mappers * Finish close position * Fix leverage
177 lines
5.8 KiB
C#
177 lines
5.8 KiB
C#
using System.Text;
|
|
using System.Text.Json.Serialization;
|
|
using Managing.Api.Authorization;
|
|
using Managing.Api.Exceptions;
|
|
using Managing.Api.Filters;
|
|
using Managing.Api.Workers;
|
|
using Managing.Application.Hubs;
|
|
using Managing.Bootstrap;
|
|
using Managing.Common;
|
|
using Managing.Infrastructure.Databases.InfluxDb.Models;
|
|
using Managing.Infrastructure.Databases.MongoDb.Configurations;
|
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
|
using Microsoft.IdentityModel.Tokens;
|
|
using Microsoft.OpenApi.Models;
|
|
using NSwag;
|
|
using NSwag.Generation.Processors.Security;
|
|
using Serilog;
|
|
using Serilog.Events;
|
|
using Serilog.Sinks.Elasticsearch;
|
|
using OpenApiSecurityRequirement = Microsoft.OpenApi.Models.OpenApiSecurityRequirement;
|
|
using OpenApiSecurityScheme = NSwag.OpenApiSecurityScheme;
|
|
|
|
// Builder
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
builder.Configuration.SetBasePath(AppContext.BaseDirectory);
|
|
builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
|
|
.AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json")
|
|
.AddJsonFile($"config.{builder.Environment.EnvironmentName}.json",
|
|
optional: true, reloadOnChange: true);
|
|
|
|
builder.Configuration.AddEnvironmentVariables();
|
|
builder.Configuration.AddUserSecrets<Program>();
|
|
|
|
builder.Host.UseSerilog((hostBuilder, loggerConfiguration) =>
|
|
{
|
|
var envName = builder.Environment.EnvironmentName.ToLower().Replace(".", "-");
|
|
var indexFormat = $"managing-{envName}-" + "{0:yyyy.MM.dd}";
|
|
var yourTemplateName = "dotnetlogs";
|
|
var es = new ElasticsearchSinkOptions(new Uri(hostBuilder.Configuration["ElasticConfiguration:Uri"]))
|
|
{
|
|
IndexFormat = indexFormat.ToLower(),
|
|
AutoRegisterTemplate = true,
|
|
OverwriteTemplate = true,
|
|
TemplateName = yourTemplateName,
|
|
AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7,
|
|
TypeName = null,
|
|
BatchAction = ElasticOpType.Create,
|
|
MinimumLogEventLevel = LogEventLevel.Information,
|
|
DetectElasticsearchVersion = true,
|
|
RegisterTemplateFailure = RegisterTemplateRecovery.IndexAnyway,
|
|
};
|
|
|
|
loggerConfiguration
|
|
.WriteTo.Console()
|
|
.WriteTo.Elasticsearch(es);
|
|
});
|
|
|
|
builder.Services.AddOptions();
|
|
builder.Services.Configure<ManagingDatabaseSettings>(builder.Configuration.GetSection(Constants.Databases.MongoDb));
|
|
builder.Services.Configure<InfluxDbSettings>(builder.Configuration.GetSection(Constants.Databases.InfluxDb));
|
|
builder.Services.AddControllers().AddJsonOptions(options =>
|
|
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));
|
|
|
|
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(o =>
|
|
{
|
|
o.SaveToken = true;
|
|
o.TokenValidationParameters = new TokenValidationParameters
|
|
{
|
|
ValidIssuer = builder.Configuration["Authentication:Schemes:Bearer:ValidIssuer"],
|
|
ValidAudience = builder.Configuration["Authentication:Schemes:Bearer:ValidAudiences"],
|
|
IssuerSigningKey = new SymmetricSecurityKey
|
|
(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Secret"])),
|
|
ValidateIssuer = false,
|
|
ValidateAudience = false,
|
|
ValidateIssuerSigningKey = true
|
|
};
|
|
});
|
|
builder.Services.AddAuthorization();
|
|
builder.Services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
|
|
{
|
|
builder
|
|
.SetIsOriginAllowed((host) => true)
|
|
.AllowAnyOrigin()
|
|
.WithOrigins("http://localhost:3000/")
|
|
.AllowAnyMethod()
|
|
.AllowAnyHeader()
|
|
.AllowCredentials();
|
|
}));
|
|
|
|
builder.Services.AddSignalR().AddJsonProtocol();
|
|
builder.Services.AddScoped<IJwtUtils, JwtUtils>();
|
|
|
|
builder.Services.RegisterApiDependencies(builder.Configuration);
|
|
builder.Services.AddEndpointsApiExplorer();
|
|
builder.Services.AddOpenApiDocument(document =>
|
|
{
|
|
document.AddSecurity("JWT", Enumerable.Empty<string>(), new OpenApiSecurityScheme
|
|
{
|
|
Type = OpenApiSecuritySchemeType.ApiKey,
|
|
Name = "Authorization",
|
|
In = OpenApiSecurityApiKeyLocation.Header,
|
|
Description = "Type into the textbox: Bearer {your JWT token}."
|
|
});
|
|
|
|
document.OperationProcessors.Add(
|
|
new AspNetCoreOperationSecurityScopeProcessor("JWT"));
|
|
});
|
|
builder.Services.AddSwaggerGen(options =>
|
|
{
|
|
options.SchemaFilter<EnumSchemaFilter>();
|
|
options.AddSecurityDefinition("Bearer,", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
|
|
{
|
|
Description = "Please insert your JWT Token into field : Bearer {your_token}",
|
|
Name = "Authorization",
|
|
Type = SecuritySchemeType.Http,
|
|
In = ParameterLocation.Header,
|
|
Scheme = "Bearer",
|
|
BearerFormat = "JWT"
|
|
});
|
|
options.AddSecurityRequirement(new OpenApiSecurityRequirement
|
|
{
|
|
{
|
|
new Microsoft.OpenApi.Models.OpenApiSecurityScheme
|
|
{
|
|
Reference = new OpenApiReference
|
|
{
|
|
Type = ReferenceType.SecurityScheme,
|
|
Id = "Bearer"
|
|
}
|
|
},
|
|
new string[] { }
|
|
}
|
|
});
|
|
});
|
|
|
|
builder.WebHost.SetupDiscordBot();
|
|
builder.Services.AddHostedService<BotManagerWorker>();
|
|
|
|
// App
|
|
var app = builder.Build();
|
|
app.UseSerilogRequestLogging();
|
|
|
|
if (app.Environment.IsDevelopment())
|
|
{
|
|
app.UseDeveloperExceptionPage();
|
|
}
|
|
|
|
app.UseOpenApi();
|
|
app.UseSwaggerUI(c =>
|
|
{
|
|
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Managing API v1");
|
|
c.RoutePrefix = string.Empty;
|
|
});
|
|
|
|
app.UseCors("CorsPolicy");
|
|
|
|
app.UseMiddleware(typeof(GlobalErrorHandlingMiddleware));
|
|
|
|
app.UseMiddleware<JwtMiddleware>();
|
|
|
|
app.UseHttpsRedirection();
|
|
|
|
app.UseRouting();
|
|
|
|
app.UseAuthentication();
|
|
|
|
app.UseAuthorization();
|
|
|
|
app.UseEndpoints(endpoints =>
|
|
{
|
|
endpoints.MapControllers();
|
|
endpoints.MapHub<BotHub>("/bothub");
|
|
endpoints.MapHub<BacktestHub>("/backtesthub");
|
|
endpoints.MapHub<CandleHub>("/candlehub");
|
|
});
|
|
|
|
app.Run(); |