public async Task <DomainPermissions> GetPermissions(int userId, int domainId) { using (MySqlConnection connection = new MySqlConnection(await _connectionInfo.GetConnectionStringAsync())) { MySqlCommand command = new MySqlCommand(PermissionDaoResource.SelectPermissionByDomain, connection); command.Parameters.AddWithValue("userId", userId); command.Parameters.AddWithValue("domainId", domainId); command.Prepare(); await connection.OpenAsync().ConfigureAwait(false); DbDataReader reader = await command.ExecuteReaderAsync(); bool aggregatePermission = false; bool domainPermission = false; while (await reader.ReadAsync()) { aggregatePermission = reader.GetBoolean("aggregate_permission"); domainPermission = reader.GetBoolean("domain_permission"); } DomainPermissions domainPermissions = new DomainPermissions(domainId, aggregatePermission, domainPermission); connection.Close(); return(domainPermissions); } }
public async Task <IActionResult> GetAggregateReportExport(int id, DateTime date) { int?userId = User.GetId(); if (!userId.HasValue) { _log.LogWarning("Forbid unknown user."); return(Forbid()); } DomainPermissions domainPermissions = await _permissionDao.GetPermissions(userId.Value, id); if (!domainPermissions.DomainPermission) { _log.LogWarning($"Domain {id} not found for user {userId}."); return(NotFound(new ErrorResponse($"No domain found for ID {id}."))); } if (!domainPermissions.AggregatePermission) { _log.LogWarning($"Forbid user {userId}"); return(Forbid()); } List <AggregateReportExportItem> export = await _reverseDnsApi.AddReverseDnsInfoToExport( await _domainStatusDao.GetAggregateReportExport(id, date), date); Stream stream = await CsvSerialiser.SerialiseAsync(export); return(File(stream, "application/octet-stream", $"AggregateReportExport-{id}-{date:yyyy-MM-dd}.csv")); }
public async Task <IActionResult> GetAggregateReportExport(int id, DateTime startDate, DateTime endDate) { int?userId = User.GetId(); if (!userId.HasValue) { _log.LogWarning("Forbid unknown user."); return(Forbid()); } DomainPermissions domainPermissions = await _permissionDao.GetPermissions(userId.Value, id); if (!domainPermissions.DomainPermission) { _log.LogWarning($"Domain {id} not found for user {userId}."); return(NotFound(new ErrorResponse($"No domain found for ID {id}."))); } if (!domainPermissions.AggregatePermission) { _log.LogWarning($"Forbid user {userId}"); return(Forbid()); } Stopwatch stopwatch = Stopwatch.StartNew(); List <AggregateReportExportItem> results = await _domainStatusDao.GetAggregateReportExport(id, startDate, endDate); _log.LogInformation($"Took {stopwatch.Elapsed.Seconds} seconds to get aggregate data for domain ID {id}."); stopwatch.Restart(); List <AggregateReportExportItem> export = results .GroupBy(_ => _.EffectiveDate) .ToDictionary(_ => _.Key, _ => _.ToList()) .Select(_ => _reverseDnsApi.AddReverseDnsInfoToExport(_.Value, _.Key)) .Batch(10) .Select(async _ => await Task.WhenAll(_)) .SelectMany(_ => _.Result.SelectMany(x => x)) .OrderByDescending(_ => _.EffectiveDate) .ToList(); _log.LogInformation($"Took {stopwatch.Elapsed.Seconds} seconds to get reverse dns data for domain ID {id}."); stopwatch.Stop(); Stream stream = await CsvSerialiser.SerialiseAsync(export); return(File(stream, "application/octet-stream", $"AggregateReportExport_{id}_{startDate:yyyy-MM-dd}_{endDate:yyyy-MM-dd}.csv")); }
public List<DomainPermission> Get(DomainPermissions role) { List<DomainPermissionEntity> entities = new List<DomainPermissionEntity>(); List<DomainPermissionEntity> entitiesToReturn = new List<DomainPermissionEntity>(); entities = GenericRepository.GetList<DomainPermissionEntity>(AuthAdminDatabase, DomainPermissionsCollection); if (entities == null) return null; IAuthSession session = this.GetSession(); //if (_userRepository == null) //{ // // TODO: Inject UserRepository from Top Level // Container container = EndpointHost.Config.ServiceManager.Container; // _userRepository = container.Resolve<UserRepository>(); //} UserEntity userEntity = SessionUtility.GetSessionUserEntity(session); if (userEntity != null) { List<int> domainPermissionIds = PermissionUtility.GetDomainPermissionIdsForRoleId(userEntity.Roles); foreach (var domainPermissionEntity in entities) { if (domainPermissionIds.Contains(domainPermissionEntity.Id)) { entitiesToReturn.Add(domainPermissionEntity); } } } return entitiesToReturn.TranslateToResponse(); }
public async Task <IActionResult> GetAggregateReportSummary(DateRangeDomainRequest request) { ValidationResult validationResult = await _dateRangeDomainRequestValidator.ValidateAsync(request); if (!validationResult.IsValid) { _log.LogWarning($"Bad request: {validationResult.GetErrorString()}."); return(BadRequest(new ErrorResponse(validationResult.GetErrorString()))); } int?userId = User.GetId(); if (!userId.HasValue) { _log.LogWarning("Forbid unknown user."); return(Forbid()); } DomainPermissions domainPermissions = await _permissionDao.GetPermissions(userId.Value, request.Id); if (!domainPermissions.DomainPermission) { _log.LogWarning($"Domain {request.Id} not found for user {userId}."); return(NotFound(new ErrorResponse($"No domain found for ID {request.Id}."))); } if (!domainPermissions.AggregatePermission) { _log.LogWarning($"Forbid user {userId}"); return(Forbid()); } bool.TryParse(HttpContext.Request.Query["includeSubdomains"].ToString(), out bool includeSubdomains); Task <SortedDictionary <DateTime, AggregateSummaryItem> > getInfos = _domainStatusDao.GetAggregateReportSummary(request.Id, request.StartDate, request.EndDate, includeSubdomains); Task <int> getEmailCount = _domainStatusDao.GetAggregateReportTotalEmailCount(request.Id, request.StartDate, request.EndDate, includeSubdomains); await Task.WhenAll(getInfos, getEmailCount); SortedDictionary <DateTime, AggregateSummaryItem> infoResults = getInfos.Result; if (!infoResults.Any()) { return(new ObjectResult(null)); } int days = request.EndDate.Subtract(request.StartDate).Days + 1; if (days > infoResults.Count) { List <DateTime> datesRange = Enumerable.Range(0, days).Select(_ => new DateTime(request.StartDate.Ticks).AddDays(_)).ToList(); foreach (DateTime date in datesRange) { if (!infoResults.TryGetValue(date, out AggregateSummaryItem value)) { _log.LogDebug($"Added empty entry for date {date}"); infoResults[date] = new AggregateSummaryItem(0, 0, 0, 0, 0); } } } AggregateSummary aggregateSummary = new AggregateSummary(infoResults, getEmailCount.Result); return(new ObjectResult(aggregateSummary)); }