DocSpace-buildtools/web/ASC.Web.Api/Api/SecurityController.cs

155 lines
6.2 KiB
C#
Raw Normal View History

2022-03-01 10:58:02 +00:00
namespace ASC.Web.Api.Controllers;
[Scope]
[DefaultRoute]
[ApiController]
public class SecurityController : ControllerBase
2022-02-28 15:31:03 +00:00
{
2022-03-01 10:58:02 +00:00
private readonly PermissionContext _permissionContext;
private readonly TenantExtra _tenantExtra;
private readonly TenantManager _tenantManager;
private readonly MessageService _messageService;
private readonly LoginEventsRepository _loginEventsRepository;
private readonly AuditEventsRepository _auditEventsRepository;
private readonly AuditReportCreator auditReportCreator;
private readonly SettingsManager _settingsManager;
public SecurityController(
PermissionContext permissionContext,
TenantExtra tenantExtra,
TenantManager tenantManager,
MessageService messageService,
LoginEventsRepository loginEventsRepository,
AuditEventsRepository auditEventsRepository,
AuditReportCreator auditReportCreator,
SettingsManager settingsManager)
2020-10-06 07:06:05 +00:00
{
2022-03-01 10:58:02 +00:00
_permissionContext = permissionContext;
_tenantExtra = tenantExtra;
_tenantManager = tenantManager;
_messageService = messageService;
_loginEventsRepository = loginEventsRepository;
_auditEventsRepository = auditEventsRepository;
this.auditReportCreator = auditReportCreator;
_settingsManager = settingsManager;
}
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
[Read("audit/login/last")]
public IEnumerable<EventResponseDto> GetLastLoginEvents()
{
if (!SetupInfo.IsVisibleSettings(nameof(ManagementType.LoginHistory)))
2022-02-28 15:31:03 +00:00
{
2022-03-01 10:58:02 +00:00
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
}
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
return _loginEventsRepository.GetLast(_tenantManager.GetCurrentTenant().Id, 20).Select(x => new EventResponseDto(x));
}
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
[Read("audit/events/last")]
public IEnumerable<EventResponseDto> GetLastAuditEvents()
{
if (!SetupInfo.IsVisibleSettings(nameof(ManagementType.AuditTrail)))
2022-02-28 15:31:03 +00:00
{
2022-03-01 10:58:02 +00:00
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
}
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
return _auditEventsRepository.GetLast(_tenantManager.GetCurrentTenant().Id, 20).Select(x => new EventResponseDto(x));
}
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
[Create("audit/login/report")]
public object CreateLoginHistoryReport()
{
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
var tenantId = _tenantManager.GetCurrentTenant().Id;
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
if (!_tenantExtra.GetTenantQuota().Audit || !SetupInfo.IsVisibleSettings(nameof(ManagementType.LoginHistory)))
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
var settings = _settingsManager.LoadForTenant<TenantAuditSettings>(_tenantManager.GetCurrentTenant().Id);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
var to = DateTime.UtcNow;
var from = to.Subtract(TimeSpan.FromDays(settings.LoginHistoryLifeTime));
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
var reportName = string.Format(AuditReportResource.LoginHistoryReportName + ".csv", from.ToShortDateString(), to.ToShortDateString());
var events = _loginEventsRepository.Get(tenantId, from, to);
var result = auditReportCreator.CreateCsvReport(events, reportName);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
_messageService.Send(MessageAction.LoginHistoryReportDownloaded);
return result;
}
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
[Create("audit/events/report")]
public object CreateAuditTrailReport()
{
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
var tenantId = _tenantManager.GetCurrentTenant().Id;
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
if (!_tenantExtra.GetTenantQuota().Audit || !SetupInfo.IsVisibleSettings(nameof(ManagementType.AuditTrail)))
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
var settings = _settingsManager.LoadForTenant<TenantAuditSettings>(_tenantManager.GetCurrentTenant().Id);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
var to = DateTime.UtcNow;
var from = to.Subtract(TimeSpan.FromDays(settings.AuditTrailLifeTime));
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
var reportName = string.Format(AuditReportResource.AuditTrailReportName + ".csv", from.ToString("MM.dd.yyyy"), to.ToString("MM.dd.yyyy"));
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
var events = _auditEventsRepository.Get(tenantId, from, to);
var result = auditReportCreator.CreateCsvReport(events, reportName);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
_messageService.Send(MessageAction.AuditTrailReportDownloaded);
return result;
}
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
[Read("audit/settings/lifetime")]
public TenantAuditSettings GetAuditSettings()
{
if (!SetupInfo.IsVisibleSettings(nameof(ManagementType.LoginHistory)))
2022-02-28 15:31:03 +00:00
{
2022-03-01 10:58:02 +00:00
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
}
2021-05-23 16:11:25 +00:00
2022-03-01 10:58:02 +00:00
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
return _settingsManager.LoadForTenant<TenantAuditSettings>(_tenantManager.GetCurrentTenant().Id);
}
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
[Create("audit/settings/lifetime")]
public TenantAuditSettings SetAuditSettingsFromBody([FromBody] TenantAuditSettingsWrapper wrapper)
{
return SetAuditSettings(wrapper);
}
2022-02-28 15:31:03 +00:00
2022-03-01 10:58:02 +00:00
[Create("audit/settings/lifetime")]
[Consumes("application/x-www-form-urlencoded")]
public TenantAuditSettings SetAuditSettingsFromForm([FromForm] TenantAuditSettingsWrapper wrapper)
{
return SetAuditSettings(wrapper);
}
2022-02-28 15:31:03 +00:00
2022-03-01 10:58:02 +00:00
private TenantAuditSettings SetAuditSettings(TenantAuditSettingsWrapper wrapper)
{
if (!_tenantExtra.GetTenantQuota().Audit || !SetupInfo.IsVisibleSettings(nameof(ManagementType.LoginHistory)))
throw new BillingException(Resource.ErrorNotAllowedOption, "Audit");
2021-05-23 16:11:25 +00:00
2022-03-01 10:58:02 +00:00
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
if (wrapper.settings.LoginHistoryLifeTime <= 0 || wrapper.settings.LoginHistoryLifeTime > TenantAuditSettings.MaxLifeTime)
throw new ArgumentException("LoginHistoryLifeTime");
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
if (wrapper.settings.AuditTrailLifeTime <= 0 || wrapper.settings.AuditTrailLifeTime > TenantAuditSettings.MaxLifeTime)
throw new ArgumentException("AuditTrailLifeTime");
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
_settingsManager.SaveForTenant(wrapper.settings, _tenantManager.GetCurrentTenant().Id);
_messageService.Send(MessageAction.AuditSettingsUpdated);
2020-10-06 07:06:05 +00:00
2022-03-01 10:58:02 +00:00
return wrapper.settings;
2020-10-06 07:06:05 +00:00
}
}