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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|