Merge branch 'develop' into feature/catalog

This commit is contained in:
Timofey 2022-01-25 17:35:06 +08:00
commit 31a8b00313
49 changed files with 204 additions and 235 deletions

View File

@ -169,7 +169,7 @@ namespace ASC.Common.Caching
private string GetChannelName(CacheNotifyAction cacheNotifyAction) private string GetChannelName(CacheNotifyAction cacheNotifyAction)
{ {
return $"asc:channel:{cacheNotifyAction}:{typeof(T).FullName}".ToLower(); return $"ascchannel{cacheNotifyAction}{typeof(T).FullName}".ToLower();
} }
public void Unsubscribe(CacheNotifyAction action) public void Unsubscribe(CacheNotifyAction action)

View File

@ -14,12 +14,14 @@ namespace ASC.Core.Common.EF.Context
public class AuditTrailContext : BaseDbContext public class AuditTrailContext : BaseDbContext
{ {
public DbSet<AuditEvent> AuditEvents { get; set; } public DbSet<AuditEvent> AuditEvents { get; set; }
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
ModelBuilderWrapper ModelBuilderWrapper
.From(modelBuilder, Provider) .From(modelBuilder, Provider)
.AddAuditEvent() .AddAuditEvent()
.AddUser()
.AddDbFunction(); .AddDbFunction();
} }

View File

@ -13,6 +13,7 @@ namespace ASC.Core.Common.EF.Context
public class MessagesContext : BaseDbContext public class MessagesContext : BaseDbContext
{ {
public DbSet<LoginEvents> LoginEvents { get; set; } public DbSet<LoginEvents> LoginEvents { get; set; }
public DbSet<User> Users { get; set; }
protected override Dictionary<Provider, Func<BaseDbContext>> ProviderContext protected override Dictionary<Provider, Func<BaseDbContext>> ProviderContext
{ {
@ -31,6 +32,7 @@ namespace ASC.Core.Common.EF.Context
ModelBuilderWrapper ModelBuilderWrapper
.From(modelBuilder, Provider) .From(modelBuilder, Provider)
.AddLoginEvents() .AddLoginEvents()
.AddUser()
.AddDbFunction(); .AddDbFunction();
} }
} }

View File

@ -12,7 +12,7 @@ namespace ASC.Data.Backup.EF.Context
{ {
public DbSet<BackupRecord> Backups { get; set; } public DbSet<BackupRecord> Backups { get; set; }
public DbSet<BackupSchedule> Schedules { get; set; } public DbSet<BackupSchedule> Schedules { get; set; }
public DbSet<DbTenant> Tenants { get; set; }
public BackupsContext() { } public BackupsContext() { }
public BackupsContext(DbContextOptions<BackupsContext> options) public BackupsContext(DbContextOptions<BackupsContext> options)
: base(options) : base(options)
@ -23,8 +23,7 @@ namespace ASC.Data.Backup.EF.Context
{ {
ModelBuilderWrapper ModelBuilderWrapper
.From(modelBuilder, Provider) .From(modelBuilder, Provider)
.AddDbTenant() .AddDbTenant();
.AddDbTariff();
} }
} }

View File

@ -34,80 +34,79 @@ using ASC.Core.Common.EF.Context;
using ASC.Core.Tenants; using ASC.Core.Tenants;
using ASC.Data.Backup.EF.Context; using ASC.Data.Backup.EF.Context;
using ASC.Data.Backup.EF.Model; using ASC.Data.Backup.EF.Model;
using Microsoft.EntityFrameworkCore;
namespace ASC.Data.Backup.Storage namespace ASC.Data.Backup.Storage
{ {
[Scope] [Scope]
public class BackupRepository : IBackupRepository public class BackupRepository : IBackupRepository
{ {
private Lazy<BackupsContext> LazyBackupsContext { get; } private readonly Lazy<BackupsContext> _backupContext;
private BackupsContext BackupContext { get => LazyBackupsContext.Value; } public BackupRepository(DbContextManager<BackupsContext> dbContactManager)
private Lazy<TenantDbContext> LazyTenantDbContext { get; }
private TenantDbContext TenantDbContext { get => LazyTenantDbContext.Value; }
public BackupRepository(DbContextManager<BackupsContext> backupContext, DbContextManager<TenantDbContext> tenantDbContext)
{ {
LazyBackupsContext = new Lazy<BackupsContext>(() => backupContext.Value); _backupContext = new Lazy<BackupsContext>(() => dbContactManager.Value);
LazyTenantDbContext = new Lazy<TenantDbContext>(() => tenantDbContext.Value);
} }
public void SaveBackupRecord(BackupRecord backup) public void SaveBackupRecord(BackupRecord backup)
{ {
BackupContext.AddOrUpdate(r => r.Backups, backup); _backupContext.Value.AddOrUpdate(r => r.Backups, backup);
BackupContext.SaveChanges(); _backupContext.Value.SaveChanges();
} }
public BackupRecord GetBackupRecord(Guid id) public BackupRecord GetBackupRecord(Guid id)
{ {
return BackupContext.Backups.SingleOrDefault(b => b.Id == id); return _backupContext.Value.Backups.Find(id);
} }
public BackupRecord GetBackupRecord(string hash, int tenant) public BackupRecord GetBackupRecord(string hash, int tenant)
{ {
return BackupContext.Backups.SingleOrDefault(b => b.Hash == hash && b.TenantId == tenant); return _backupContext.Value.Backups.AsNoTracking().SingleOrDefault(b => b.Hash == hash && b.TenantId == tenant);
} }
public List<BackupRecord> GetExpiredBackupRecords() public List<BackupRecord> GetExpiredBackupRecords()
{ {
return BackupContext.Backups.Where(b => b.ExpiresOn != DateTime.MinValue && b.ExpiresOn <= DateTime.UtcNow).ToList(); return _backupContext.Value.Backups.AsNoTracking().Where(b => b.ExpiresOn != DateTime.MinValue && b.ExpiresOn <= DateTime.UtcNow).ToList();
} }
public List<BackupRecord> GetScheduledBackupRecords() public List<BackupRecord> GetScheduledBackupRecords()
{ {
return BackupContext.Backups.Where(b => b.IsScheduled == true).ToList(); return _backupContext.Value.Backups.AsNoTracking().Where(b => b.IsScheduled == true).ToList();
} }
public List<BackupRecord> GetBackupRecordsByTenantId(int tenantId) public List<BackupRecord> GetBackupRecordsByTenantId(int tenantId)
{ {
return BackupContext.Backups.Where(b => b.TenantId == tenantId).ToList(); return _backupContext.Value.Backups.AsNoTracking().Where(b => b.TenantId == tenantId).ToList();
} }
public void DeleteBackupRecord(Guid id) public void DeleteBackupRecord(Guid id)
{ {
var backup = _backupContext.Value.Backups.Find(id);
var backup = BackupContext.Backups.FirstOrDefault(b => b.Id == id);
if (backup != null) if (backup != null)
{ {
BackupContext.Backups.Remove(backup); _backupContext.Value.Backups.Remove(backup);
BackupContext.SaveChanges(); _backupContext.Value.SaveChanges();
} }
} }
public void SaveBackupSchedule(BackupSchedule schedule) public void SaveBackupSchedule(BackupSchedule schedule)
{ {
BackupContext.AddOrUpdate(r => r.Schedules, schedule); _backupContext.Value.AddOrUpdate(r => r.Schedules, schedule);
BackupContext.SaveChanges(); _backupContext.Value.SaveChanges();
} }
public void DeleteBackupSchedule(int tenantId) public void DeleteBackupSchedule(int tenantId)
{ {
var shedule = BackupContext.Schedules.Where(s => s.TenantId == tenantId).ToList(); var shedule = _backupContext.Value.Schedules.Where(s => s.TenantId == tenantId).ToList();
BackupContext.Schedules.RemoveRange(shedule);
BackupContext.SaveChanges(); _backupContext.Value.Schedules.RemoveRange(shedule);
_backupContext.Value.SaveChanges();
} }
public List<BackupSchedule> GetBackupSchedules() public List<BackupSchedule> GetBackupSchedules()
{ {
var query = BackupContext.Schedules.Join(TenantDbContext.Tenants, var query = _backupContext.Value.Schedules.Join(_backupContext.Value.Tenants,
s => s.TenantId, s => s.TenantId,
t => t.Id, t => t.Id,
(s, t) => new { schedule = s, tenant = t }) (s, t) => new { schedule = s, tenant = t })
@ -119,7 +118,7 @@ namespace ASC.Data.Backup.Storage
public BackupSchedule GetBackupSchedule(int tenantId) public BackupSchedule GetBackupSchedule(int tenantId)
{ {
return BackupContext.Schedules.SingleOrDefault(s => s.TenantId == tenantId); return _backupContext.Value.Schedules.AsNoTracking().SingleOrDefault(s => s.TenantId == tenantId);
} }
} }
} }

View File

@ -28,6 +28,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Text; using System.Text;
namespace ASC.FederatedLogin.Helpers namespace ASC.FederatedLogin.Helpers
@ -59,7 +60,7 @@ namespace ASC.FederatedLogin.Helpers
request.Content = new ByteArrayContent(bytes, 0, bytes.Length); request.Content = new ByteArrayContent(bytes, 0, bytes.Length);
if (!string.IsNullOrEmpty(contentType)) if (!string.IsNullOrEmpty(contentType))
{ {
request.Headers.Add("Content-Type", contentType); request.Content.Headers.ContentType = new MediaTypeHeaderValue(contentType);
} }
} }

View File

@ -45,17 +45,14 @@ namespace ASC.AuditTrail
private MessageTarget MessageTarget { get; set; } private MessageTarget MessageTarget { get; set; }
private UserFormatter UserFormatter { get; set; } private UserFormatter UserFormatter { get; set; }
private Lazy<AuditTrailContext> LazyAuditTrailContext { get; } private Lazy<AuditTrailContext> LazyAuditTrailContext { get; }
private Lazy<UserDbContext> LazyUserDbContext { get; }
private AuditTrailContext AuditTrailContext { get => LazyAuditTrailContext.Value; } private AuditTrailContext AuditTrailContext { get => LazyAuditTrailContext.Value; }
private UserDbContext UserDbContext { get => LazyUserDbContext.Value; }
private AuditActionMapper AuditActionMapper { get; } private AuditActionMapper AuditActionMapper { get; }
public AuditEventsRepository(MessageTarget messageTarget, UserFormatter userFormatter, DbContextManager<AuditTrailContext> dbContextManager, AuditActionMapper auditActionMapper, DbContextManager<UserDbContext> DbContextManager) public AuditEventsRepository(MessageTarget messageTarget, UserFormatter userFormatter, DbContextManager<AuditTrailContext> dbContextManager, AuditActionMapper auditActionMapper)
{ {
MessageTarget = messageTarget; MessageTarget = messageTarget;
UserFormatter = userFormatter; UserFormatter = userFormatter;
LazyAuditTrailContext = new Lazy<AuditTrailContext>(() => dbContextManager.Value ); LazyAuditTrailContext = new Lazy<AuditTrailContext>(() => dbContextManager.Value );
LazyUserDbContext = new Lazy<UserDbContext>(() => DbContextManager.Value);
AuditActionMapper = auditActionMapper; AuditActionMapper = auditActionMapper;
} }
@ -79,7 +76,7 @@ namespace ASC.AuditTrail
{ {
var query = var query =
from q in AuditTrailContext.AuditEvents from q in AuditTrailContext.AuditEvents
from p in UserDbContext.Users.Where(p => q.UserId == p.Id).DefaultIfEmpty() from p in AuditTrailContext.Users.Where(p => q.UserId == p.Id).DefaultIfEmpty()
where q.TenantId == tenant where q.TenantId == tenant
orderby q.Date descending orderby q.Date descending
select new Query { AuditEvent = q, User = p }; select new Query { AuditEvent = q, User = p };

View File

@ -44,19 +44,13 @@ namespace ASC.AuditTrail.Data
public class LoginEventsRepository public class LoginEventsRepository
{ {
private UserFormatter UserFormatter { get; } private UserFormatter UserFormatter { get; }
private Lazy<AuditTrailContext> LazyAuditTrailContext { get; }
private AuditTrailContext AuditTrailContext { get => LazyAuditTrailContext.Value; }
private AuditActionMapper AuditActionMapper { get; } private AuditActionMapper AuditActionMapper { get; }
private UserDbContext UserDbContext { get => LazyUserDbContext.Value; }
private Lazy<UserDbContext> LazyUserDbContext { get; }
private MessagesContext MessagesContext { get => LazyMessagesContext.Value; } private MessagesContext MessagesContext { get => LazyMessagesContext.Value; }
private Lazy<MessagesContext> LazyMessagesContext { get; } private Lazy<MessagesContext> LazyMessagesContext { get; }
public LoginEventsRepository(UserFormatter userFormatter, DbContextManager<AuditTrailContext> dbContextManager, AuditActionMapper auditActionMapper, DbContextManager<UserDbContext> DbContextManager, DbContextManager<MessagesContext> dbMessagesContext) public LoginEventsRepository(UserFormatter userFormatter, AuditActionMapper auditActionMapper, DbContextManager<MessagesContext> dbMessagesContext)
{ {
UserFormatter = userFormatter; UserFormatter = userFormatter;
LazyAuditTrailContext = new Lazy<AuditTrailContext>(() => dbContextManager.Value);
LazyUserDbContext = new Lazy<UserDbContext>(() => DbContextManager.Value);
AuditActionMapper = auditActionMapper; AuditActionMapper = auditActionMapper;
LazyMessagesContext = new Lazy<MessagesContext>(() => dbMessagesContext.Value); LazyMessagesContext = new Lazy<MessagesContext>(() => dbMessagesContext.Value);
} }
@ -71,7 +65,7 @@ namespace ASC.AuditTrail.Data
{ {
var query = var query =
(from b in MessagesContext.LoginEvents (from b in MessagesContext.LoginEvents
from p in UserDbContext.Users.Where(p => b.UserId == p.Id).DefaultIfEmpty() from p in MessagesContext.Users.Where(p => b.UserId == p.Id).DefaultIfEmpty()
where b.TenantId == tenant where b.TenantId == tenant
orderby b.Date descending orderby b.Date descending
select new Query { LoginEvents = b, User = p }) select new Query { LoginEvents = b, User = p })
@ -84,7 +78,7 @@ namespace ASC.AuditTrail.Data
{ {
var query = var query =
from q in MessagesContext.LoginEvents from q in MessagesContext.LoginEvents
from p in UserDbContext.Users.Where(p => q.UserId == p.Id).DefaultIfEmpty() from p in MessagesContext.Users.Where(p => q.UserId == p.Id).DefaultIfEmpty()
where q.TenantId == tenant where q.TenantId == tenant
where q.Date >= fromDate where q.Date >= fromDate
where q.Date <= to where q.Date <= to

View File

@ -1,7 +1,15 @@
var builder = WebApplication.CreateBuilder(args); using Microsoft.Extensions.Hosting.WindowsServices;
var options = new WebApplicationOptions
{
Args = args,
ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default
};
var builder = WebApplication.CreateBuilder(options);
builder.Host.UseSystemd();
builder.Host.UseWindowsService(); builder.Host.UseWindowsService();
builder.Host.UseSystemd();
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.WebHost.ConfigureKestrel((hostingContext, serverOptions) => builder.WebHost.ConfigureKestrel((hostingContext, serverOptions) =>

View File

@ -50,8 +50,6 @@ namespace ASC.CRM.Core.Dao
private Lazy<CrmDbContext> LazyCrmDbContext { get; } private Lazy<CrmDbContext> LazyCrmDbContext { get; }
public CrmDbContext CrmDbContext { get => LazyCrmDbContext.Value; } public CrmDbContext CrmDbContext { get => LazyCrmDbContext.Value; }
private Lazy<TenantDbContext> LazyTenantDbContext { get; }
public TenantDbContext TenantDbContext { get => LazyTenantDbContext.Value; }
protected readonly SecurityContext _securityContext; protected readonly SecurityContext _securityContext;
protected readonly ICache _cache; protected readonly ICache _cache;
protected ILog _logger; protected ILog _logger;
@ -59,7 +57,6 @@ namespace ASC.CRM.Core.Dao
public AbstractDao( public AbstractDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
@ -73,7 +70,6 @@ namespace ASC.CRM.Core.Dao
_cache = ascCache; _cache = ascCache;
LazyCrmDbContext = new Lazy<CrmDbContext>(() => dbContextManager.Get(CrmConstants.DatabaseId)); LazyCrmDbContext = new Lazy<CrmDbContext>(() => dbContextManager.Get(CrmConstants.DatabaseId));
LazyTenantDbContext = new Lazy<TenantDbContext>(() => dbContextManager1.Get(CrmConstants.DatabaseId));
TenantID = tenantManager.GetCurrentTenant().TenantId; TenantID = tenantManager.GetCurrentTenant().TenantId;
_securityContext = securityContext; _securityContext = securityContext;

View File

@ -65,7 +65,6 @@ namespace ASC.CRM.Core.Dao
public CasesDao( public CasesDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
CrmSecurity crmSecurity, CrmSecurity crmSecurity,
@ -78,7 +77,6 @@ namespace ASC.CRM.Core.Dao
IMapper mapper IMapper mapper
) : ) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -67,7 +67,6 @@ namespace ASC.CRM.Core.Dao
public ContactDao( public ContactDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
CrmSecurity crmSecurity, CrmSecurity crmSecurity,
@ -83,7 +82,6 @@ namespace ASC.CRM.Core.Dao
IMapper mapper IMapper mapper
) : ) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -54,7 +54,6 @@ namespace ASC.CRM.Core.Dao
public ContactInfoDao( public ContactInfoDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
TenantUtil tenantUtil, TenantUtil tenantUtil,
@ -63,7 +62,6 @@ namespace ASC.CRM.Core.Dao
FactoryIndexerContactInfo factoryIndexerContactInfo, FactoryIndexerContactInfo factoryIndexerContactInfo,
IMapper mapper) IMapper mapper)
: base(dbContextManager, : base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -46,14 +46,12 @@ namespace ASC.CRM.Core.Dao
public class CurrencyInfoDao : AbstractDao public class CurrencyInfoDao : AbstractDao
{ {
public CurrencyInfoDao(DbContextManager<CrmDbContext> dbContextManager, public CurrencyInfoDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
ICache ascCache, ICache ascCache,
IMapper mapper) : IMapper mapper) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -47,14 +47,12 @@ namespace ASC.CRM.Core.Dao
{ {
public CurrencyRateDao( public CurrencyRateDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
ICache ascCache, ICache ascCache,
IMapper mapper) : IMapper mapper) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -58,7 +58,6 @@ namespace ASC.CRM.Core.Dao
public CustomFieldDao( public CustomFieldDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
TenantUtil tenantUtil, TenantUtil tenantUtil,
@ -68,7 +67,6 @@ namespace ASC.CRM.Core.Dao
IMapper mapper IMapper mapper
) : ) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -65,7 +65,6 @@ namespace ASC.CRM.Core.Dao
private readonly AuthorizationManager _authorizationManager; private readonly AuthorizationManager _authorizationManager;
public DealDao(DbContextManager<CrmDbContext> dbContextManager, public DealDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
CrmSecurity crmSecurity, CrmSecurity crmSecurity,
@ -78,7 +77,6 @@ namespace ASC.CRM.Core.Dao
IMapper mapper, IMapper mapper,
BundleSearch bundleSearch) : BundleSearch bundleSearch) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -54,14 +54,12 @@ namespace ASC.CRM.Core.Dao
{ {
public DealMilestoneDao(DbContextManager<CrmDbContext> dbContextManager, public DealMilestoneDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
ICache ascCache, ICache ascCache,
IMapper mapper) : IMapper mapper) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -50,14 +50,12 @@ namespace ASC.CRM.Core.Dao
private FilesIntegration _filesIntegration; private FilesIntegration _filesIntegration;
public FileDao(FilesIntegration filesIntegration, public FileDao(FilesIntegration filesIntegration,
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
ICache ascCache, ICache ascCache,
IMapper mapper) : IMapper mapper) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -76,7 +76,6 @@ namespace ASC.CRM.Core.Dao
public InvoiceDao( public InvoiceDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
FactoryIndexerInvoice factoryIndexer, FactoryIndexerInvoice factoryIndexer,
@ -89,7 +88,6 @@ namespace ASC.CRM.Core.Dao
TenantUtil tenantUtil, TenantUtil tenantUtil,
IMapper mapper) IMapper mapper)
: base(dbContextManager, : base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -54,7 +54,6 @@ namespace ASC.CRM.Core.Dao
public InvoiceItemDao( public InvoiceItemDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
CrmSecurity crmSecurity, CrmSecurity crmSecurity,
@ -62,7 +61,6 @@ namespace ASC.CRM.Core.Dao
ICache ascCache, ICache ascCache,
IMapper mapper IMapper mapper
) : base(dbContextManager, ) : base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -51,14 +51,12 @@ namespace ASC.CRM.Core.Dao
public class InvoiceLineDao : AbstractDao public class InvoiceLineDao : AbstractDao
{ {
public InvoiceLineDao(DbContextManager<CrmDbContext> dbContextManager, public InvoiceLineDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
ICache ascCache, ICache ascCache,
IMapper mapper) IMapper mapper)
: base(dbContextManager, : base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -51,7 +51,6 @@ namespace ASC.CRM.Core.Dao
public InvoiceTaxDao( public InvoiceTaxDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
@ -59,7 +58,6 @@ namespace ASC.CRM.Core.Dao
IMapper mapper IMapper mapper
) )
: base(dbContextManager, : base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -53,14 +53,12 @@ namespace ASC.CRM.Core.Dao
public ListItemDao( public ListItemDao(
CrmSecurity crmSecurity, CrmSecurity crmSecurity,
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
ICache ascCache, ICache ascCache,
IMapper mapper) IMapper mapper)
: base(dbContextManager, : base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -62,7 +62,6 @@ namespace ASC.CRM.Core.Dao
private readonly FactoryIndexerEvents _factoryIndexer; private readonly FactoryIndexerEvents _factoryIndexer;
public RelationshipEventDao(DbContextManager<CrmDbContext> dbContextManager, public RelationshipEventDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
FilesIntegration filesIntegration, FilesIntegration filesIntegration,
@ -74,7 +73,6 @@ namespace ASC.CRM.Core.Dao
IMapper mapper IMapper mapper
) : ) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -79,7 +79,6 @@ namespace ASC.CRM.Core.Dao
#region Constructor #region Constructor
public ReportDao(DbContextManager<CrmDbContext> dbContextManager, public ReportDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
FilesIntegration filesIntegration, FilesIntegration filesIntegration,
@ -95,7 +94,6 @@ namespace ASC.CRM.Core.Dao
DisplayUserSettingsHelper displayUserSettingsHelper, DisplayUserSettingsHelper displayUserSettingsHelper,
IMapper mapper) : IMapper mapper) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -73,7 +73,6 @@ namespace ASC.CRM.Core.Dao
public SearchDao(DbContextManager<CrmDbContext> dbContextManager, public SearchDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
DaoFactory daoFactory, DaoFactory daoFactory,
SecurityContext securityContext, SecurityContext securityContext,
@ -89,7 +88,6 @@ namespace ASC.CRM.Core.Dao
IMapper mapper IMapper mapper
) : ) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -50,13 +50,12 @@ namespace ASC.CRM.Core.Dao
public class TagDao : AbstractDao public class TagDao : AbstractDao
{ {
public TagDao(DbContextManager<CrmDbContext> dbContextManager, public TagDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
ICache ascCache, ICache ascCache,
IMapper mapper) : IMapper mapper) :
base(dbContextManager,dbContextManager1, base(dbContextManager,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -61,7 +61,6 @@ namespace ASC.CRM.Core.Dao
private UserDbContext _userDbContext { get => LazyUserDbContext.Value; } private UserDbContext _userDbContext { get => LazyUserDbContext.Value; }
public TaskDao(DbContextManager<CrmDbContext> dbContextManager, public TaskDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
CrmSecurity crmSecurity, CrmSecurity crmSecurity,
@ -72,7 +71,6 @@ namespace ASC.CRM.Core.Dao
DbContextManager<UserDbContext> userDbContext, DbContextManager<UserDbContext> userDbContext,
IMapper mapper) : IMapper mapper) :
base(dbContextManager, base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -49,7 +49,6 @@ namespace ASC.CRM.Core.Dao
{ {
public TaskTemplateContainerDao( public TaskTemplateContainerDao(
DbContextManager<CrmDbContext> dbContextManager, DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
@ -57,7 +56,6 @@ namespace ASC.CRM.Core.Dao
IMapper mapper IMapper mapper
) )
: base(dbContextManager, : base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,
@ -123,14 +121,12 @@ namespace ASC.CRM.Core.Dao
public class TaskTemplateDao : AbstractDao public class TaskTemplateDao : AbstractDao
{ {
public TaskTemplateDao(DbContextManager<CrmDbContext> dbContextManager, public TaskTemplateDao(DbContextManager<CrmDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
SecurityContext securityContext, SecurityContext securityContext,
IOptionsMonitor<ILog> logger, IOptionsMonitor<ILog> logger,
ICache cache, ICache cache,
IMapper mapper) IMapper mapper)
: base(dbContextManager, : base(dbContextManager,
dbContextManager1,
tenantManager, tenantManager,
securityContext, securityContext,
logger, logger,

View File

@ -35,6 +35,7 @@ namespace ASC.CRM.Core.EF
public virtual DbSet<DbTaskTemplateTask> TaskTemplateTask { get; set; } public virtual DbSet<DbTaskTemplateTask> TaskTemplateTask { get; set; }
public virtual DbSet<DbVoipCalls> VoipCalls { get; set; } public virtual DbSet<DbVoipCalls> VoipCalls { get; set; }
public virtual DbSet<DbVoipNumber> VoipNumber { get; set; } public virtual DbSet<DbVoipNumber> VoipNumber { get; set; }
public virtual DbSet<DbTenant> Tenants { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
@ -45,7 +46,8 @@ namespace ASC.CRM.Core.EF
.AddDbCase() .AddDbCase()
.AddDbRelationshipEvent() .AddDbRelationshipEvent()
.AddDbDeal() .AddDbDeal()
.AddDbTask(); .AddDbTask()
.AddDbTenant();
modelBuilder.Entity<DbCurrencyInfo>(entity => modelBuilder.Entity<DbCurrencyInfo>(entity =>
{ {

View File

@ -46,39 +46,48 @@ namespace ASC.Web.CRM.Classes
[Scope] [Scope]
public class CurrencyProvider public class CurrencyProvider
{ {
private readonly ILog _log; private readonly ILog _logger;
private readonly object _syncRoot = new object(); private readonly object _syncRoot = new object();
private readonly Dictionary<String, CurrencyInfo> _currencies; private readonly IConfiguration _configuration;
private readonly SettingsManager _settingsManager;
private Dictionary<string, decimal> _exchangeRates; private Dictionary<string, decimal> _exchangeRates;
private DateTime _publisherDate; private DateTime _publisherDate;
private const String _formatDate = "yyyy-MM-ddTHH:mm:ss.fffffffK"; private const String _formatDate = "yyyy-MM-ddTHH:mm:ss.fffffffK";
private Dictionary<String, CurrencyInfo> _currencies;
private readonly DaoFactory _daoFactory;
public CurrencyProvider(IOptionsMonitor<ILog> logger, public CurrencyProvider(IOptionsMonitor<ILog> logger,
IConfiguration configuration, IConfiguration configuration,
SettingsManager settingsManager, DaoFactory daoFactory,
DaoFactory daoFactory) SettingsManager settingsManager)
{ {
_log = logger.Get("ASC"); _logger = logger.Get("ASC");
Configuration = configuration; _daoFactory = daoFactory;
SettingsManager = settingsManager; _configuration = configuration;
_settingsManager = settingsManager;
var daocur = daoFactory.GetCurrencyInfoDao();
var currencies = daocur.GetAll();
if (currencies == null || currencies.Count == 0)
{
currencies = new List<CurrencyInfo>
{
new CurrencyInfo("Currency_UnitedStatesDollar", "USD", "$", "US", true, true)
};
}
_currencies = currencies.ToDictionary(c => c.Abbreviation);
} }
public IConfiguration Configuration { get; } public Dictionary<String, CurrencyInfo> Currencies
public SettingsManager SettingsManager { get; } {
get
{
if (_currencies != null) return _currencies;
var currencies = _daoFactory.GetCurrencyInfoDao().GetAll();
if (currencies == null || currencies.Count == 0)
{
currencies = new List<CurrencyInfo>
{
new CurrencyInfo("Currency_UnitedStatesDollar", "USD", "$", "US", true, true)
};
}
_currencies = currencies.ToDictionary(c => c.Abbreviation);
return _currencies;
}
}
public DateTime GetPublisherDate public DateTime GetPublisherDate
{ {
@ -91,31 +100,31 @@ namespace ASC.Web.CRM.Classes
public CurrencyInfo Get(string currencyAbbreviation) public CurrencyInfo Get(string currencyAbbreviation)
{ {
if (!_currencies.ContainsKey(currencyAbbreviation)) if (!Currencies.ContainsKey(currencyAbbreviation))
return null; return null;
return _currencies[currencyAbbreviation]; return Currencies[currencyAbbreviation];
} }
public List<CurrencyInfo> GetAll() public List<CurrencyInfo> GetAll()
{ {
return _currencies.Values.OrderBy(v => v.Abbreviation).ToList(); return Currencies.Values.OrderBy(v => v.Abbreviation).ToList();
} }
public List<CurrencyInfo> GetBasic() public List<CurrencyInfo> GetBasic()
{ {
return _currencies.Values.Where(c => c.IsBasic).OrderBy(v => v.Abbreviation).ToList(); return Currencies.Values.Where(c => c.IsBasic).OrderBy(v => v.Abbreviation).ToList();
} }
public List<CurrencyInfo> GetOther() public List<CurrencyInfo> GetOther()
{ {
return _currencies.Values.Where(c => !c.IsBasic).OrderBy(v => v.Abbreviation).ToList(); return Currencies.Values.Where(c => !c.IsBasic).OrderBy(v => v.Abbreviation).ToList();
} }
public Dictionary<CurrencyInfo, Decimal> MoneyConvert(CurrencyInfo baseCurrency) public Dictionary<CurrencyInfo, Decimal> MoneyConvert(CurrencyInfo baseCurrency)
{ {
if (baseCurrency == null) throw new ArgumentNullException("baseCurrency"); if (baseCurrency == null) throw new ArgumentNullException("baseCurrency");
if (!_currencies.ContainsKey(baseCurrency.Abbreviation)) throw new ArgumentOutOfRangeException("baseCurrency", "Not found."); if (!Currencies.ContainsKey(baseCurrency.Abbreviation)) throw new ArgumentOutOfRangeException("baseCurrency", "Not found.");
var result = new Dictionary<CurrencyInfo, Decimal>(); var result = new Dictionary<CurrencyInfo, Decimal>();
var rates = GetExchangeRates(); var rates = GetExchangeRates();
@ -142,12 +151,12 @@ namespace ASC.Web.CRM.Classes
public bool IsConvertable(String abbreviation) public bool IsConvertable(String abbreviation)
{ {
var findedItem = _currencies.Keys.ToList().Find(item => String.Compare(abbreviation, item) == 0); var findedItem = Currencies.Keys.ToList().Find(item => String.Compare(abbreviation, item) == 0);
if (findedItem == null) if (findedItem == null)
throw new ArgumentException(abbreviation); throw new ArgumentException(abbreviation);
return _currencies[findedItem].IsConvertable; return Currencies[findedItem].IsConvertable;
} }
public Decimal MoneyConvert(decimal amount, string from, string to) public Decimal MoneyConvert(decimal amount, string from, string to)
@ -166,7 +175,7 @@ namespace ASC.Web.CRM.Classes
public decimal MoneyConvertToDefaultCurrency(decimal amount, string from) public decimal MoneyConvertToDefaultCurrency(decimal amount, string from)
{ {
var crmSettings = SettingsManager.Load<CrmSettings>(); var crmSettings = _settingsManager.Load<CrmSettings>();
var defaultCurrency = Get(crmSettings.DefaultCurrency); var defaultCurrency = Get(crmSettings.DefaultCurrency);
return MoneyConvert(amount, from, defaultCurrency.Abbreviation); return MoneyConvert(amount, from, defaultCurrency.Abbreviation);
@ -202,10 +211,10 @@ namespace ASC.Web.CRM.Classes
var updateEnable = Configuration["crm:update:currency:info:enable"] != "false"; var updateEnable = _configuration["crm:update:currency:info:enable"] != "false";
var ratesUpdatedFlag = false; var ratesUpdatedFlag = false;
foreach (var ci in _currencies.Values.Where(c => c.IsConvertable)) foreach (var ci in Currencies.Values.Where(c => c.IsConvertable))
{ {
var filepath = Path.Combine(tmppath, ci.Abbreviation + ".html"); var filepath = Path.Combine(tmppath, ci.Abbreviation + ".html");
@ -242,7 +251,7 @@ namespace ASC.Web.CRM.Classes
} }
catch (Exception error) catch (Exception error)
{ {
_log.Error(error); _logger.Error(error);
_publisherDate = DateTime.UtcNow; _publisherDate = DateTime.UtcNow;
} }
} }
@ -297,7 +306,7 @@ namespace ASC.Web.CRM.Classes
} }
catch (Exception err) catch (Exception err)
{ {
_log.Error(err); _logger.Error(err);
} }
} }
} }
@ -311,7 +320,7 @@ namespace ASC.Web.CRM.Classes
} }
catch (Exception err) catch (Exception err)
{ {
_log.Error(err); _logger.Error(err);
} }
} }
@ -350,7 +359,7 @@ namespace ASC.Web.CRM.Classes
} }
catch (Exception error) catch (Exception error)
{ {
_log.Error(error); _logger.Error(error);
} }
} }

View File

@ -28,6 +28,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Text; using System.Text;
using System.Web; using System.Web;
@ -258,8 +259,8 @@ namespace ASC.Calendar.BusinessObjects
} }
public List<object[]> GetCalendarIdByCaldavGuid(string caldavGuid) public List<object[]> GetCalendarIdByCaldavGuid(string caldavGuid)
{ {
var data = CalendarDb.CalendarCalendars var data = CalendarDb.CalendarCalendars
.Where(p => p.CaldavGuid == caldavGuid) .Where(p => p.CaldavGuid == caldavGuid)
.Select(s => new object[]{ .Select(s => new object[]{
@ -268,10 +269,10 @@ namespace ASC.Calendar.BusinessObjects
s.Tenant s.Tenant
}).ToList(); }).ToList();
return data; return data;
} }
public Event GetEventIdByUid(string uid, int calendarId) public Event GetEventIdByUid(string uid, int calendarId)
{ {
var eventId = CalendarDb.CalendarEvents var eventId = CalendarDb.CalendarEvents
.Where(p => .Where(p =>
uid.Contains(p.Uid) && uid.Contains(p.Uid) &&
@ -279,8 +280,8 @@ namespace ASC.Calendar.BusinessObjects
) )
.Select(s => s.Id).FirstOrDefault(); .Select(s => s.Id).FirstOrDefault();
return eventId == 0 ? null : GetEventById(eventId); return eventId == 0 ? null : GetEventById(eventId);
} }
public Event GetEventIdOnlyByUid(string uid) public Event GetEventIdOnlyByUid(string uid)
{ {
@ -806,7 +807,10 @@ namespace ASC.Calendar.BusinessObjects
var authorization = isShared ? GetSystemAuthorization() : GetUserAuthorization(email); var authorization = isShared ? GetSystemAuthorization() : GetUserAuthorization(email);
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(authorization))); request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(authorization)));
request.Headers.Add("Content-Type", "text/xml; charset=utf-8"); request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml")
{
CharSet = Encoding.UTF8.WebName
};
using var httpClient = new HttpClient(); using var httpClient = new HttpClient();
httpClient.Send(request); httpClient.Send(request);
@ -1022,19 +1026,19 @@ namespace ASC.Calendar.BusinessObjects
groups.AddRange(UserManager.GetUserGroups(userId, Constants.SysGroupCategoryId).Select(g => g.ID)); groups.AddRange(UserManager.GetUserGroups(userId, Constants.SysGroupCategoryId).Select(g => g.ID));
var evIds = from events in CalendarDb.CalendarEvents var evIds = from events in CalendarDb.CalendarEvents
join eventItem in CalendarDb.CalendarEventItem on events.Id equals eventItem.EventId join eventItem in CalendarDb.CalendarEventItem on events.Id equals eventItem.EventId
where where
events.Tenant == tenantId && events.Tenant == tenantId &&
( (
eventItem.ItemId == userId || (groups.Contains(eventItem.ItemId) && eventItem.IsGroup == 1) && eventItem.ItemId == userId || (groups.Contains(eventItem.ItemId) && eventItem.IsGroup == 1) &&
events.Tenant == tenantId && events.Tenant == tenantId &&
((events.StartDate >= utcStartDate && events.StartDate <= utcEndDate && events.Rrule == "") || events.Rrule != "") && ((events.StartDate >= utcStartDate && events.StartDate <= utcEndDate && events.Rrule == "") || events.Rrule != "") &&
events.OwnerId != userId && events.OwnerId != userId &&
!(from calEventUser in CalendarDb.CalendarEventUser !(from calEventUser in CalendarDb.CalendarEventUser
where calEventUser.EventId == events.Id && calEventUser.UserId == userId && calEventUser.IsUnsubscribe == 1 where calEventUser.EventId == events.Id && calEventUser.UserId == userId && calEventUser.IsUnsubscribe == 1
select calEventUser.EventId).Any() select calEventUser.EventId).Any()
) )
select events.Id; select events.Id;
return GetEventsByIds(evIds.ToArray(), userId, tenantId); return GetEventsByIds(evIds.ToArray(), userId, tenantId);
} }
@ -1264,7 +1268,7 @@ namespace ASC.Calendar.BusinessObjects
{ {
CalendarDb.CalendarEventItem.Remove(cei); CalendarDb.CalendarEventItem.Remove(cei);
} }
else if(!userNoSubscibe) else if (!userNoSubscibe)
{ {
var newEventUser = new CalendarEventUser var newEventUser = new CalendarEventUser
{ {

View File

@ -31,6 +31,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Security; using System.Security;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
@ -1030,7 +1031,10 @@ namespace ASC.Calendar.Controllers
var request = new HttpRequestMessage(); var request = new HttpRequestMessage();
request.Method = HttpMethod.Get; request.Method = HttpMethod.Get;
request.RequestUri = new Uri(calUrl); request.RequestUri = new Uri(calUrl);
request.Headers.Add("Content-Type", "text/xml; charset=utf-8"); request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml")
{
CharSet = Encoding.UTF8.WebName
};
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(authorization))); request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(authorization)));
try try
@ -4188,7 +4192,10 @@ namespace ASC.Calendar.Controllers
var _email = UserManager.GetUsers(ownerId).Email; var _email = UserManager.GetUsers(ownerId).Email;
var authorization = sharedPostfixIndex != -1 ? DataProvider.GetSystemAuthorization() : DataProvider.GetUserAuthorization(_email); var authorization = sharedPostfixIndex != -1 ? DataProvider.GetSystemAuthorization() : DataProvider.GetUserAuthorization(_email);
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(authorization))); request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(authorization)));
request.Headers.Add("Content-Type", "text/calendar; charset=utf-8"); request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/calendar")
{
CharSet = Encoding.UTF8.WebName
};
Log.Info(String.Format("UpdateCalDavEvent eventURl: {0}", eventURl)); Log.Info(String.Format("UpdateCalDavEvent eventURl: {0}", eventURl));

View File

@ -52,9 +52,6 @@ namespace ASC.Files.Core.Data
private Lazy<EF.FilesDbContext> LazyFilesDbContext { get; } private Lazy<EF.FilesDbContext> LazyFilesDbContext { get; }
public EF.FilesDbContext FilesDbContext { get => LazyFilesDbContext.Value; } public EF.FilesDbContext FilesDbContext { get => LazyFilesDbContext.Value; }
private Lazy<TenantDbContext> LazyTenantDbContext { get; }
public TenantDbContext TenantDbContext { get => LazyTenantDbContext.Value; }
private int tenantID; private int tenantID;
protected internal int TenantID { get => tenantID != 0 ? tenantID : (tenantID = TenantManager.GetCurrentTenant().TenantId); } protected internal int TenantID { get => tenantID != 0 ? tenantID : (tenantID = TenantManager.GetCurrentTenant().TenantId); }
protected UserManager UserManager { get; } protected UserManager UserManager { get; }
@ -71,7 +68,6 @@ namespace ASC.Files.Core.Data
protected AbstractDao( protected AbstractDao(
DbContextManager<EF.FilesDbContext> dbContextManager, DbContextManager<EF.FilesDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
UserManager userManager, UserManager userManager,
TenantManager tenantManager, TenantManager tenantManager,
TenantUtil tenantUtil, TenantUtil tenantUtil,
@ -87,7 +83,6 @@ namespace ASC.Files.Core.Data
{ {
this.cache = cache; this.cache = cache;
LazyFilesDbContext = new Lazy<EF.FilesDbContext>(() => dbContextManager.Get(FileConstant.DatabaseId)); LazyFilesDbContext = new Lazy<EF.FilesDbContext>(() => dbContextManager.Get(FileConstant.DatabaseId));
LazyTenantDbContext = new Lazy<TenantDbContext>(() => dbContextManager1.Get(FileConstant.DatabaseId));
UserManager = userManager; UserManager = userManager;
TenantManager = tenantManager; TenantManager = tenantManager;
TenantUtil = tenantUtil; TenantUtil = tenantUtil;

View File

@ -79,7 +79,6 @@ namespace ASC.Files.Core.Data
FactoryIndexerFile factoryIndexer, FactoryIndexerFile factoryIndexer,
UserManager userManager, UserManager userManager,
DbContextManager<EF.FilesDbContext> dbContextManager, DbContextManager<EF.FilesDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
TenantUtil tenantUtil, TenantUtil tenantUtil,
SetupInfo setupInfo, SetupInfo setupInfo,
@ -102,7 +101,6 @@ namespace ASC.Files.Core.Data
Settings settings) Settings settings)
: base( : base(
dbContextManager, dbContextManager,
dbContextManager1,
userManager, userManager,
tenantManager, tenantManager,
tenantUtil, tenantUtil,

View File

@ -78,7 +78,6 @@ namespace ASC.Files.Core.Data
FactoryIndexerFolder factoryIndexer, FactoryIndexerFolder factoryIndexer,
UserManager userManager, UserManager userManager,
DbContextManager<EF.FilesDbContext> dbContextManager, DbContextManager<EF.FilesDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
TenantUtil tenantUtil, TenantUtil tenantUtil,
SetupInfo setupInfo, SetupInfo setupInfo,
@ -96,7 +95,6 @@ namespace ASC.Files.Core.Data
CrossDao crossDao) CrossDao crossDao)
: base( : base(
dbContextManager, dbContextManager,
dbContextManager1,
userManager, userManager,
tenantManager, tenantManager,
tenantUtil, tenantUtil,

View File

@ -40,7 +40,6 @@ namespace ASC.Files.Core.Data
public LinkDao( public LinkDao(
UserManager userManager, UserManager userManager,
DbContextManager<EF.FilesDbContext> dbContextManager, DbContextManager<EF.FilesDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
TenantUtil tenantUtil, TenantUtil tenantUtil,
SetupInfo setupInfo, SetupInfo setupInfo,
@ -54,7 +53,6 @@ namespace ASC.Files.Core.Data
ICache cache) ICache cache)
: base( : base(
dbContextManager, dbContextManager,
dbContextManager1,
userManager, userManager,
tenantManager, tenantManager,
tenantUtil, tenantUtil,

View File

@ -49,7 +49,6 @@ namespace ASC.Files.Core.Data
{ {
public SecurityDao(UserManager userManager, public SecurityDao(UserManager userManager,
DbContextManager<EF.FilesDbContext> dbContextManager, DbContextManager<EF.FilesDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
TenantUtil tenantUtil, TenantUtil tenantUtil,
SetupInfo setupInfo, SetupInfo setupInfo,
@ -62,7 +61,6 @@ namespace ASC.Files.Core.Data
IServiceProvider serviceProvider, IServiceProvider serviceProvider,
ICache cache) ICache cache)
: base(dbContextManager, : base(dbContextManager,
dbContextManager1,
userManager, userManager,
tenantManager, tenantManager,
tenantUtil, tenantUtil,

View File

@ -54,7 +54,6 @@ namespace ASC.Files.Core.Data
public TagDao( public TagDao(
UserManager userManager, UserManager userManager,
DbContextManager<EF.FilesDbContext> dbContextManager, DbContextManager<EF.FilesDbContext> dbContextManager,
DbContextManager<TenantDbContext> dbContextManager1,
TenantManager tenantManager, TenantManager tenantManager,
TenantUtil tenantUtil, TenantUtil tenantUtil,
SetupInfo setupInfo, SetupInfo setupInfo,
@ -67,7 +66,6 @@ namespace ASC.Files.Core.Data
IServiceProvider serviceProvider, IServiceProvider serviceProvider,
ICache cache) ICache cache)
: base(dbContextManager, : base(dbContextManager,
dbContextManager1,
userManager, userManager,
tenantManager, tenantManager,
tenantUtil, tenantUtil,

View File

@ -22,8 +22,11 @@ namespace ASC.Files.Core.EF
public DbSet<DbFilesTagLink> TagLink { get; set; } public DbSet<DbFilesTagLink> TagLink { get; set; }
public DbSet<DbFilesTag> Tag { get; set; } public DbSet<DbFilesTag> Tag { get; set; }
public DbSet<DbFilesThirdpartyApp> ThirdpartyApp { get; set; } public DbSet<DbFilesThirdpartyApp> ThirdpartyApp { get; set; }
public DbSet<DbFilesLink> FilesLink { get; set; } public DbSet<DbFilesLink> FilesLink { get; set; }
public DbSet<DbTariff> Tariffs { get; set; }
public DbSet<DbQuota> Quotas { get; set; }
public DbSet<DbTenant> Tenants { get; set; }
protected override Dictionary<Provider, Func<BaseDbContext>> ProviderContext protected override Dictionary<Provider, Func<BaseDbContext>> ProviderContext
{ {
get get
@ -48,7 +51,11 @@ namespace ASC.Files.Core.EF
.AddDbFilesThirdpartyIdMapping() .AddDbFilesThirdpartyIdMapping()
.AddDbFilesTagLink() .AddDbFilesTagLink()
.AddDbFilesTag() .AddDbFilesTag()
.AddDbDbFilesThirdpartyApp() .AddDbFilesLink(); .AddDbDbFilesThirdpartyApp()
.AddDbFilesLink()
.AddDbTariff()
.AddDbQuota()
.AddDbTenant();
} }
} }

View File

@ -132,7 +132,7 @@ namespace ASC.Web.Files.Core.Search
IQueryable<FileTenant> GetBaseQuery(DateTime lastIndexed) => fileDao.FilesDbContext.Files IQueryable<FileTenant> GetBaseQuery(DateTime lastIndexed) => fileDao.FilesDbContext.Files
.Where(r => r.ModifiedOn >= lastIndexed) .Where(r => r.ModifiedOn >= lastIndexed)
.Join(fileDao.TenantDbContext.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FileTenant { DbFile = f, DbTenant = t }) .Join(fileDao.FilesDbContext.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FileTenant { DbFile = f, DbTenant = t })
.Where(r => r.DbTenant.Status == ASC.Core.Tenants.TenantStatus.Active); .Where(r => r.DbTenant.Status == ASC.Core.Tenants.TenantStatus.Active);
try try

View File

@ -128,7 +128,7 @@ namespace ASC.Web.Files.Core.Search
IQueryable<FolderTenant> GetBaseQuery(DateTime lastIndexed) => folderDao.FilesDbContext.Folders IQueryable<FolderTenant> GetBaseQuery(DateTime lastIndexed) => folderDao.FilesDbContext.Folders
.Where(r => r.ModifiedOn >= lastIndexed) .Where(r => r.ModifiedOn >= lastIndexed)
.Join(folderDao.TenantDbContext.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FolderTenant { DbFolder = f, DbTenant = t }) .Join(folderDao.FilesDbContext.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FolderTenant { DbFolder = f, DbTenant = t })
.Where(r => r.DbTenant.Status == ASC.Core.Tenants.TenantStatus.Active); .Where(r => r.DbTenant.Status == ASC.Core.Tenants.TenantStatus.Active);
try try

View File

@ -30,6 +30,7 @@ using System.IO;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -262,7 +263,10 @@ namespace ASC.Files.Thirdparty.OneDrive
request.RequestUri = uploadUriBuilder.Uri; request.RequestUri = uploadUriBuilder.Uri;
request.Method = HttpMethod.Post; request.Method = HttpMethod.Post;
request.Headers.Add("Authorization", "Bearer " + AccessToken); request.Headers.Add("Authorization", "Bearer " + AccessToken);
request.Headers.Add("Content-Type", "application/json; charset=UTF-8"); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json")
{
CharSet = Encoding.UTF8.WebName
};
var uploadSession = new ResumableUploadSession(onedriveFile.Id, folderId, contentLength); var uploadSession = new ResumableUploadSession(onedriveFile.Id, folderId, contentLength);

View File

@ -30,6 +30,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Security; using System.Security;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@ -343,7 +344,7 @@ namespace ASC.Web.Files.ThirdPartyApp
request.Method = HttpMethod.Post; request.Method = HttpMethod.Post;
request.Headers.Add("Authorization", "Bearer " + token); request.Headers.Add("Authorization", "Bearer " + token);
request.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary); request.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data; boundary=" + boundary);
Logger.Debug("BoxApp: save file totalSize - " + tmpStream.Length); Logger.Debug("BoxApp: save file totalSize - " + tmpStream.Length);
tmpStream.Seek(0, SeekOrigin.Begin); tmpStream.Seek(0, SeekOrigin.Begin);

View File

@ -30,6 +30,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Security; using System.Security;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@ -321,7 +322,7 @@ namespace ASC.Web.Files.ThirdPartyApp
request.RequestUri = new Uri(GoogleLoginProvider.GoogleUrlFileUpload + "/{fileId}?uploadType=media".Replace("{fileId}", fileId)); request.RequestUri = new Uri(GoogleLoginProvider.GoogleUrlFileUpload + "/{fileId}?uploadType=media".Replace("{fileId}", fileId));
request.Method = HttpMethod.Patch; request.Method = HttpMethod.Patch;
request.Headers.Add("Authorization", "Bearer " + token); request.Headers.Add("Authorization", "Bearer " + token);
request.Headers.Add("Content-Type", MimeMapping.GetMimeMapping(currentType)); request.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(currentType));
if (stream != null) if (stream != null)
{ {
@ -769,7 +770,7 @@ namespace ASC.Web.Files.ThirdPartyApp
request.Method = HttpMethod.Post; request.Method = HttpMethod.Post;
request.Headers.Add("Authorization", "Bearer " + token); request.Headers.Add("Authorization", "Bearer " + token);
request.Headers.Add("Content-Type", "multipart/related; boundary=" + boundary); request.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/related; boundary=" + boundary);
Logger.Debug("GoogleDriveApp: create file totalSize - " + tmpStream.Length); Logger.Debug("GoogleDriveApp: create file totalSize - " + tmpStream.Length);

View File

@ -28,10 +28,10 @@ using System;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Web; using System.Web;
using ASC.Common; using ASC.Common;
using ASC.Common.Web;
using ASC.Core; using ASC.Core;
using ASC.Core.Common; using ASC.Core.Common;
using ASC.Web.Studio.Core; using ASC.Web.Studio.Core;
@ -137,7 +137,7 @@ namespace ASC.Web.Files.Utils
request.RequestUri = new Uri(BaseCommonLinkUtility.GetFullAbsolutePath(apiUrlAttach)); request.RequestUri = new Uri(BaseCommonLinkUtility.GetFullAbsolutePath(apiUrlAttach));
request.Method = HttpMethod.Post; request.Method = HttpMethod.Post;
request.Headers.Add("Authorization", SecurityContext.AuthenticateMe(SecurityContext.CurrentAccount.ID)); request.Headers.Add("Authorization", SecurityContext.AuthenticateMe(SecurityContext.CurrentAccount.ID));
request.Headers.Add("Content-Type", MimeMapping.GetMimeMapping(mailMergeTask.AttachTitle)); request.Content.Headers.ContentType = new MediaTypeHeaderValue(mailMergeTask.AttachTitle);
request.Content = new StreamContent(mailMergeTask.Attach); request.Content = new StreamContent(mailMergeTask.Attach);
// hack. http://ubuntuforums.org/showthread.php?t=1841740 // hack. http://ubuntuforums.org/showthread.php?t=1841740

View File

@ -38,25 +38,16 @@ namespace ASC.Files.ThumbnailBuilder
private readonly ICache cache; private readonly ICache cache;
private Lazy<Core.EF.FilesDbContext> LazyFilesDbContext { get; } private Lazy<Core.EF.FilesDbContext> LazyFilesDbContext { get; }
private Core.EF.FilesDbContext filesDbContext { get => LazyFilesDbContext.Value; } private Core.EF.FilesDbContext filesDbContext { get => LazyFilesDbContext.Value; }
private Lazy<TenantDbContext> LazyTenantDbContext { get; }
private TenantDbContext TenantDbContext { get => LazyTenantDbContext.Value; }
private Lazy<CoreDbContext> LazyCoreDbContext { get; }
private CoreDbContext coreDbContext { get => LazyCoreDbContext.Value; }
private readonly string cacheKey; private readonly string cacheKey;
public FileDataProvider( public FileDataProvider(
ThumbnailSettings settings, ThumbnailSettings settings,
ICache ascCache, ICache ascCache,
DbContextManager<Core.EF.FilesDbContext> dbContextManager, DbContextManager<Core.EF.FilesDbContext> dbContextManager)
DbContextManager<TenantDbContext> tenantdbContextManager,
DbContextManager<CoreDbContext> coredbContextManager
)
{ {
thumbnailSettings = settings; thumbnailSettings = settings;
cache = ascCache; cache = ascCache;
LazyFilesDbContext = new Lazy<Core.EF.FilesDbContext>(() => dbContextManager.Get(thumbnailSettings.ConnectionStringName)); LazyFilesDbContext = new Lazy<Core.EF.FilesDbContext>(() => dbContextManager.Get(thumbnailSettings.ConnectionStringName));
LazyTenantDbContext = new Lazy<TenantDbContext>(() => tenantdbContextManager.Get(thumbnailSettings.ConnectionStringName));
LazyCoreDbContext = new Lazy<CoreDbContext>(() => coredbContextManager.Get(thumbnailSettings.ConnectionStringName));
cacheKey = "PremiumTenants"; cacheKey = "PremiumTenants";
} }
@ -97,8 +88,8 @@ namespace ASC.Files.ThumbnailBuilder
*/ */
var search = var search =
coreDbContext.Tariffs filesDbContext.Tariffs
.Join(coreDbContext.Quotas.DefaultIfEmpty(), a => a.Tariff, b => b.Tenant, (tariff, quota) => new { tariff, quota }) .Join(filesDbContext.Quotas.DefaultIfEmpty(), a => a.Tariff, b => b.Tenant, (tariff, quota) => new { tariff, quota })
.Where(r => .Where(r =>
( (
r.tariff.Comment == null || r.tariff.Comment == null ||
@ -139,7 +130,7 @@ namespace ASC.Files.ThumbnailBuilder
} }
return search return search
.Join(TenantDbContext.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FileTenant { DbFile = f, DbTenant = t }) .Join(filesDbContext.Tenants, r => r.TenantId, r => r.Id, (f, t) => new FileTenant { DbFile = f, DbTenant = t })
.Where(r => r.DbTenant.Status == TenantStatus.Active) .Where(r => r.DbTenant.Status == TenantStatus.Active)
.Select(r => new FileData<int>(r.DbFile.TenantId, r.DbFile.Id, "")) .Select(r => new FileData<int>(r.DbFile.TenantId, r.DbFile.Id, ""))
.ToList(); .ToList();

View File

@ -29,6 +29,7 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Web; using System.Web;
@ -169,7 +170,7 @@ namespace ASC.Web.Core.Sms
var request = new HttpRequestMessage(); var request = new HttpRequestMessage();
request.RequestUri = new Uri(url); request.RequestUri = new Uri(url);
request.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
using var httpClient = new HttpClient(); using var httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMilliseconds(15000); httpClient.Timeout = TimeSpan.FromMilliseconds(15000);
@ -263,7 +264,7 @@ namespace ASC.Web.Core.Sms
var request = new HttpRequestMessage(); var request = new HttpRequestMessage();
request.RequestUri = new Uri(url); request.RequestUri = new Uri(url);
request.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
using var httpClient = new HttpClient(); using var httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMilliseconds(1000); httpClient.Timeout = TimeSpan.FromMilliseconds(1000);