DocSpace-client/web/ASC.Web.Api/Controllers/SecurityController.cs

171 lines
7.1 KiB
C#
Raw Normal View History

2020-10-06 07:06:05 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using ASC.Api.Security;
using ASC.AuditTrail;
using ASC.AuditTrail.Data;
using ASC.Common;
using ASC.Core;
using ASC.Core.Billing;
using ASC.Core.Common.Settings;
using ASC.Core.Tenants;
using ASC.MessagingSystem;
using ASC.Web.Api.Routing;
using ASC.Web.Core.PublicResources;
using ASC.Web.Studio.Core;
using ASC.Web.Studio.Utility;
using Microsoft.AspNetCore.Mvc;
namespace ASC.Web.Api.Controllers
{
2020-10-06 11:24:12 +00:00
[DefaultRoute]
[ApiController]
2020-10-06 07:06:05 +00:00
public class SecurityController : ControllerBase
{
private PermissionContext PermissionContext { get; }
private CoreBaseSettings CoreBaseSettings { get; }
private TenantExtra TenantExtra { get; }
private TenantManager TenantManager { get; }
private MessageService MessageService { get; }
private LoginEventsRepository LoginEventsRepository { get; }
private AuditEventsRepository AuditEventsRepository { get; }
private AuditReportCreator AuditReportCreator { get; }
private SettingsManager SettingsManager { get; }
public SecurityController(
PermissionContext permissionContext,
CoreBaseSettings coreBaseSettings,
TenantExtra tenantExtra,
TenantManager tenantManager,
MessageService messageService,
2020-10-14 13:58:53 +00:00
LoginEventsRepository loginEventsRepository,
AuditEventsRepository auditEventsRepository,
2020-10-06 07:06:05 +00:00
AuditReportCreator auditReportCreator,
2020-10-14 13:58:53 +00:00
SettingsManager settingsManager)
2020-10-06 07:06:05 +00:00
{
PermissionContext = permissionContext;
CoreBaseSettings = coreBaseSettings;
TenantExtra = tenantExtra;
TenantManager = tenantManager;
MessageService = messageService;
LoginEventsRepository = loginEventsRepository;
AuditEventsRepository = auditEventsRepository;
AuditReportCreator = auditReportCreator;
SettingsManager = settingsManager;
}
2020-10-06 11:24:12 +00:00
[Read("audit/login/last")]
2020-10-14 13:58:53 +00:00
public IEnumerable<EventWrapper> GetLastLoginEvents()
2020-10-06 07:06:05 +00:00
{
PermissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
if (!SetupInfo.IsVisibleSettings(ManagementType.LoginHistory.ToString()) || CoreBaseSettings.Standalone && !TenantExtra.GetTenantQuota().Audit)
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
2020-10-14 13:58:53 +00:00
return LoginEventsRepository.GetLast(TenantManager.GetCurrentTenant().TenantId, 20).Select(x => new EventWrapper(x));
2020-10-06 07:06:05 +00:00
}
2020-10-06 11:24:12 +00:00
[Read("audit/events/last")]
2020-10-14 13:58:53 +00:00
public IEnumerable<EventWrapper> GetLastAuditEvents()
2020-10-06 07:06:05 +00:00
{
PermissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
if (!SetupInfo.IsVisibleSettings(ManagementType.LoginHistory.ToString()) || CoreBaseSettings.Standalone && !TenantExtra.GetTenantQuota().Audit)
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
2020-10-14 13:58:53 +00:00
return AuditEventsRepository.GetLast(TenantManager.GetCurrentTenant().TenantId, 20).Select(x => new EventWrapper(x));
2020-10-06 07:06:05 +00:00
}
2020-10-06 11:24:12 +00:00
[Create("audit/login/report")]
public object CreateLoginHistoryReport()
2020-10-06 07:06:05 +00:00
{
PermissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
var tenantId = TenantManager.GetCurrentTenant().TenantId;
if (!SetupInfo.IsVisibleSettings(ManagementType.LoginHistory.ToString()) || CoreBaseSettings.Standalone && !TenantExtra.GetTenantQuota().Audit)
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
var settings = SettingsManager.LoadForTenant<TenantAuditSettings>(TenantManager.GetCurrentTenant().TenantId);
var to = DateTime.UtcNow;
var from = to.Subtract(TimeSpan.FromDays(settings.LoginHistoryLifeTime));
var reportName = string.Format(AuditReportResource.LoginHistoryReportName + ".csv", from.ToString("MM.dd.yyyy"), to.ToString("MM.dd.yyyy"));
var events = LoginEventsRepository.Get(tenantId, from, to);
var result = AuditReportCreator.CreateCsvReport(events, reportName);
MessageService.Send(MessageAction.LoginHistoryReportDownloaded);
return result;
}
2020-10-06 11:24:12 +00:00
[Create("audit/events/report")]
public object CreateAuditTrailReport()
2020-10-06 07:06:05 +00:00
{
PermissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
var tenantId = TenantManager.GetCurrentTenant().TenantId;
if (!SetupInfo.IsVisibleSettings(ManagementType.LoginHistory.ToString()) || CoreBaseSettings.Standalone && !TenantExtra.GetTenantQuota().Audit)
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
var settings = SettingsManager.LoadForTenant<TenantAuditSettings>(TenantManager.GetCurrentTenant().TenantId);
var to = DateTime.UtcNow;
var from = to.Subtract(TimeSpan.FromDays(settings.AuditTrailLifeTime));
var reportName = string.Format(AuditReportResource.AuditTrailReportName + ".csv", from.ToString("MM.dd.yyyy"), to.ToString("MM.dd.yyyy"));
var events = AuditEventsRepository.Get(tenantId, from, to);
var result = AuditReportCreator.CreateCsvReport(events, reportName);
MessageService.Send(MessageAction.AuditTrailReportDownloaded);
return result;
}
2020-10-06 11:24:12 +00:00
[Read("audit/settings/lifetime")]
2020-10-06 07:06:05 +00:00
public TenantAuditSettings GetAuditSettings()
{
PermissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
return SettingsManager.LoadForTenant<TenantAuditSettings>(TenantManager.GetCurrentTenant().TenantId);
}
2020-10-06 11:24:12 +00:00
[Create("audit/settings/lifetime")]
2020-10-06 07:06:05 +00:00
public TenantAuditSettings SetAuditSettings(TenantAuditSettings settings)
{
PermissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
if (settings.LoginHistoryLifeTime <= 0 || settings.LoginHistoryLifeTime > TenantAuditSettings.MaxLifeTime)
throw new ArgumentException("LoginHistoryLifeTime");
if (settings.AuditTrailLifeTime <= 0 || settings.AuditTrailLifeTime > TenantAuditSettings.MaxLifeTime)
throw new ArgumentException("AuditTrailLifeTime");
SettingsManager.SaveForTenant(settings, TenantManager.GetCurrentTenant().TenantId);
MessageService.Send(MessageAction.AuditSettingsUpdated);
return settings;
}
}
public static class SecurityControllerExtension
{
public static DIHelper AddSecurityController(this DIHelper services)
{
return services
.AddPermissionContextService()
.AddCoreBaseSettingsService()
.AddTenantExtraService()
.AddTenantManagerService()
.AddMessageServiceService()
.AddLoginEventsRepositoryService()
.AddAuditEventsRepositoryService()
.AddAuditReportCreatorService()
.AddSettingsManagerService();
}
}
}