private static void ConfigureServices(IServiceCollection services) { services.AddOptions(); services.AddLogging(l => l.AddConsole()); services.AddDbContext <DnsDbContext>(opt => opt.UseNpgsql(EnvironmentExtensions.GetVariable(EnvVars.PG_CONNECTION_STRING_WRITE), dbOpt => dbOpt.MigrationsAssembly("Dns.DAL"))); services.AddDbContext <DnsReadOnlyDbContext>(opt => opt.UseNpgsql(EnvironmentExtensions.GetVariable(EnvVars.PG_CONNECTION_STRING_READ))); services.AddTransient <ResolveService>(); services.AddSingleton <RedisService>(); services.AddTransient <Bootstrapper>(); }
public Task AuthorizeAsync(string login, string pass) { var authServer = EnvironmentExtensions.GetVariable(EnvVars.AUTH_SERVER_URL); var loginUrl = authServer.TrimEnd('/') + "/api/Auth/Login"; var loginModel = new LoginModel { Login = login, Password = pass }; var body = new StringContent(loginModel.ToJson(), Encoding.Default, MediaTypeHeaderValue.Parse("application/json").MediaType); return(_httpClient.PostAsync(new Uri(loginUrl, UriKind.Absolute), body)); }
public async Task ResolveDomains() { var whiteDomains = await GetWhiteDomains(); var blackDomains = await GetBlackDomains(); var stopWatch = new Stopwatch(); stopWatch.Start(); var resolvedWhiteDomains = await _resolve.ResolveDomainsWithRetry(whiteDomains, 3); stopWatch.Stop(); _logger.LogWarning($"[RESOLVING, PARALLELISM - {EnvironmentExtensions.GetVariable(EnvVars.RESOLVER_MAX_DEGREE_OF_PARALLELISM)}, BUFFER - {EnvironmentExtensions.GetVariable(EnvVars.RESOLVER_BUFFER_BLOCK_SIZE)}] {resolvedWhiteDomains.Count()} domains took {stopWatch.Elapsed}"); stopWatch.Restart(); var resolvedBlackDomains = await _resolve.ResolveDomainsWithRetry(blackDomains, 3); _logger.LogWarning($"[RESOLVING, PARALLELISM - {EnvironmentExtensions.GetVariable(EnvVars.RESOLVER_MAX_DEGREE_OF_PARALLELISM)}, BUFFER - {EnvironmentExtensions.GetVariable(EnvVars.RESOLVER_BUFFER_BLOCK_SIZE)}] {resolvedBlackDomains.Count()} domains took {stopWatch.Elapsed}"); stopWatch.Stop(); await _redis.SaveResolvedDomains(RedisKeys.WHITE_DOMAINS_RESOLVED, resolvedWhiteDomains); await _redis.SaveResolvedDomains(RedisKeys.BLACK_DOMAINS_RESOLVED, resolvedBlackDomains); }
private NotificationEmail BuildGroupEmailMessage(IEnumerable <AttackGroups> attacks) { var emailBody = File.ReadAllText(Path.Combine(EmailPath, EMAIL_GROUP_TEMPLATE)); var row = File.ReadAllText(Path.Combine(EmailPath, EMAIL_GROUP_TEMPLATE_ADDITION)); var htmlBody = new HtmlDocument(); htmlBody.LoadHtml(emailBody); var tableBody = htmlBody.DocumentNode.Descendants("tbody").First(); foreach (var attack in attacks) { var blackDomain = attack.Attacks.FirstOrDefault().BlackDomain; var whiteDomain = attack.Attacks.FirstOrDefault().WhiteDomain; var lastChange = attack.GroupHistories.OrderByDescending(x => x.Id).FirstOrDefault(); var newStatus = lastChange.CurrentEnum.GetDisplayName(); var statusText = newStatus; if (lastChange.PrevStatusEnum != AttackGroupStatusEnum.None) { statusText = $"{lastChange.PrevStatusEnum.GetDisplayName()} -> {newStatus}"; } var newRow = row .Replace(EMAIL_BLACK_DOMAIN_KEY, blackDomain) .Replace(EMAIL_WHITE_DOMAIN_KEY, whiteDomain) .Replace(EMAIL_STATUS_KEY, statusText) .Replace(EMAIL_URL_KEY, attack.Id.ToString()); tableBody.AppendChild(HtmlNode.CreateNode(newRow)); } return(new NotificationEmail { Body = htmlBody.DocumentNode.OuterHtml, From = EnvironmentExtensions.GetVariable(EnvVars.NOTIFICATION_EMAIL_FROM), Subject = EMAIL_SUBJECT }); }
public RedisService(ILogger <RedisService> logger) { _logger = logger; _redis = ConnectionMultiplexer.Connect(EnvironmentExtensions.GetVariable(EnvVars.REDIS_CONNECTION)); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext <DnsDbContext>(opt => opt.UseNpgsql(EnvironmentExtensions.GetVariable(EnvVars.PG_CONNECTION_STRING_WRITE), dbOpt => dbOpt.MigrationsAssembly("Dns.DAL"))); services.AddDbContext <DnsReadOnlyDbContext>(opt => opt.UseNpgsql(EnvironmentExtensions.GetVariable(EnvVars.PG_CONNECTION_STRING_READ))); services.AddSwaggerGen(x => { x.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "DNS API", Description = "Service of analyze domains" }); x.IncludeXmlComments("Dns.Site.xml"); x.DescribeAllEnumsAsStrings(); }); services.AddCors(options => { options.AddPolicy("AllowAll", builder => { builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); services.AddStackExchangeRedisCache(opts => { opts.Configuration = EnvironmentExtensions.GetVariable(EnvVars.REDIS_CONNECTION); opts.InstanceName = "Dns_Redis_Cache"; }); services.AddControllersWithViews() .AddNewtonsoftJson(); services.AddSignalR(opts => opts.EnableDetailedErrors = true) .AddStackExchangeRedis(EnvironmentExtensions.GetVariable(EnvVars.REDIS_CONNECTION), opt => opt.Configuration.ChannelPrefix = "Dns_SignalR_"); if (HostEnvironment.IsProduction()) { services.ConfigureSharedCookieAuthentication(); services.AddAuthorization(opts => { opts.AddPolicy("DnsPolicy", policy => policy.RequireAssertion(context => context.User.HasRole(UserRoles.DnsViewer))); }); } //ADD SERVICES services.AddScoped <AttackService>(); services.AddScoped <NotifyService>(); services.AddScoped <ExcelService>(); services.AddHttpClient <IUserService, AuthService.Client>((provider, client) => { client.BaseAddress = new Uri(EnvironmentExtensions.GetVariable(EnvVars.AUTH_SERVER_URL)); }); services.AddHttpClient <INotifyApiService, NotificationService.Client>((provider, client) => { client.BaseAddress = new Uri(EnvironmentExtensions.GetVariable(EnvVars.NOTIFY_SERVICE_URL)); }); services.AddHttpClient <IVigruzkiService, VigruzkiService.Client>((provider, client) => { client.BaseAddress = new Uri(EnvironmentExtensions.GetVariable(EnvVars.VIGRUZKI_SERVICE_URL)); }); services.AddSingleton <RedisService>(); }
public ResolveService(ILogger <ResolveService> logger) { _logger = logger; _dnsServer = EnvironmentExtensions.GetVariable(EnvVars.HYPERLOCAL_SERVER); }