コード例 #1
0
ファイル: PermissionDao.cs プロジェクト: progvp/mail-check
        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);
            }
        }
コード例 #2
0
        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"));
        }
コード例 #3
0
        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"));
        }
コード例 #4
0
		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();
		}
コード例 #5
0
        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));
        }