Fix Calendar

This commit is contained in:
Vashchuk Nikita 2021-05-17 21:35:23 +03:00
parent bf41c21c4e
commit 94047ab0a1
22 changed files with 225 additions and 142 deletions

View File

@ -67,7 +67,8 @@ namespace ASC.Common.Utils
{
try
{
var payloadParts = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(signature)).Split('?');
var rightSignature = signature.Replace("\"", "");
var payloadParts = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(rightSignature)).Split('?');
if (GetHashBase64(payloadParts[1] + secret) == payloadParts[0])
{
//Sig correct

View File

@ -262,7 +262,8 @@ namespace ASC.Core
public string AuthenticateMe(Guid userId, List<Claim> additionalClaims = null)
{
return AuthenticateMe(Authentication.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, userId), additionalClaims);
var account = Authentication.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, userId);
return AuthenticateMe(account, additionalClaims);
}
public void Logout()

View File

@ -40,7 +40,8 @@ using ASC.Core.Users;
using Microsoft.Extensions.Options;
namespace ASC.Core
{
{
[Scope]
class ConfigureHostedSolution : IConfigureNamedOptions<HostedSolution>
{
private UserFormatter UserFormatter { get; }

View File

@ -21,6 +21,12 @@
<ProjectReference Include="..\..\ASC.Core.Common\ASC.Core.Common.csproj" />
</ItemGroup>
<ItemGroup>
<Content Update="radicale.log.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties properties_4launchsettings_1json__JsonSchema="https://json.schemastore.org/local.settings.json" /></VisualStudio></ProjectExtensions>

View File

@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
@ -12,7 +10,6 @@ using ASC.Common.Logging;
using ASC.Common.Utils;
using ASC.Core;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
@ -43,6 +40,8 @@ namespace ASC.Radicale
{
var pythonName = "python";
var configPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "radicale.config"));
if (WorkContext.IsMono)
{
pythonName = "python3";
@ -54,8 +53,7 @@ namespace ASC.Radicale
UseShellExecute = false,
FileName = pythonName,
WindowStyle = ProcessWindowStyle.Hidden,
Arguments = string.Format("-m radicale --config \"{0}\"",
Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "radicale.config"))),
Arguments = $"-m radicale --config \"{configPath}\"",
WorkingDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
};
@ -78,7 +76,6 @@ namespace ASC.Radicale
{
StopRadicale();
Proc = Process.Start(StartInfo);
}
private void StopRadicale()

View File

@ -54,7 +54,7 @@ hosts = localhost:5232
# Authentication method
# Value: none | htpasswd | remote_user | http_x_remote_user
type = app_auth_plugin
portal_url = http://localhost:8092/apisystem/caldav
portal_url = http://localhost/apisystem/caldav
machine_key = 1123askdasjklasbnd
# Htpasswd filename
@ -88,7 +88,7 @@ file = radicale.rights
# Value: multifilesystem
# type = multifilesystem
type = app_store_plugin
portal_url = http://localhost:8092/apisystem/caldav
portal_url = http://localhost/apisystem/caldav
# Folder for storing local collections, created if not present
filesystem_folder = ..\..\Data\radicale\collections\
@ -121,4 +121,4 @@ level = info
[headers]
# Additional HTTP headers
Access-Control-Allow-Origin = *
Access-Control-Allow-Origin = *

View File

@ -15,8 +15,8 @@ handlers = file
[handler_file]
class = handlers.TimedRotatingFileHandler
# Specify the output file here.
args = ('','midnight', 1, 7)
args = ('../../../../../../Logs/radicale.log','midnight', 1, 7)
formatter = full
[formatter_full]
format = %(asctime)s - [%(thread)x] %(levelname)s: %(message)s
format = %(asctime)s - [%(thread)x] %(levelname)s: %(message)s

View File

@ -316,8 +316,8 @@ server {
}
location /caldav {
rewrite caldav/(.*) /$1 break;
proxy_pass http://localhost:5232;
proxy_set_header X-Script-Name /caldav;
proxy_set_header X-REWRITER-URL $X_REWRITER_URL;
}

View File

@ -26,14 +26,10 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using ASC.Api.Core;
using ASC.Calendar.Core.Dao;
@ -44,14 +40,11 @@ using ASC.Common;
using ASC.Common.Logging;
using ASC.Common.Utils;
using ASC.Core;
using ASC.Core.Common;
using ASC.Core.Common.EF;
using ASC.Core.Users;
using ASC.Security.Cryptography;
using ASC.Web.Core.Calendars;
using ASC.Web.Core.WhiteLabel;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
namespace ASC.Calendar.BusinessObjects
@ -118,10 +111,10 @@ namespace ASC.Calendar.BusinessObjects
public List<UserViewSettings> GetUserViewSettings(Guid userId, List<string> calendarIds)
{
var data = CalendarDb.CalendarCalendarUser
var data = CalendarDb.CalendarCalendarUser.AsNoTracking()
.Where(ccu =>
(calendarIds.Contains(ccu.CalendarId.ToString()) || calendarIds.Contains(ccu.ExtCalendarId)) &&
ccu.UserId == userId)
(calendarIds.Contains(ccu.CalendarId.ToString()) || calendarIds.Contains(ccu.ExtCalendarId)) &&
ccu.UserId == userId)
.ToList();
var options = new List<UserViewSettings>();
@ -320,12 +313,12 @@ namespace ASC.Calendar.BusinessObjects
calDavGuid = cc.CaldavGuid,
isTodo = cc.IsTodo,
usrId = uc.UserId,
usrHideEvents = uc.HideEvents,
usrIsAccepted = uc.IsAccepted,
usrId = (Guid?)uc.UserId,
usrHideEvents = (int?)uc.HideEvents,
usrIsAccepted = (int?)uc.IsAccepted,
usrTextColor = uc.TextColor,
usrBackground = uc.BackgroundColor,
usrAlertType = uc.AlertType,
usrAlertType = (int?)uc.AlertType,
usrCalName = uc.Name,
usrTimeZone = uc.TimeZone
};
@ -383,7 +376,7 @@ namespace ASC.Calendar.BusinessObjects
var uvs = new UserViewSettings
{
CalendarId = calendar.Id,
UserId = r.usrId,
UserId = r.usrId.GetValueOrDefault(),
IsHideEvents = Convert.ToBoolean(r.usrHideEvents),
IsAccepted = Convert.ToBoolean(r.usrIsAccepted),
TextColor = r.usrTextColor,
@ -627,7 +620,7 @@ namespace ASC.Calendar.BusinessObjects
}
public void UpdateCalendarUserView(UserViewSettings viewSettings)
{
using var tx = CalendarDb.Database.BeginTransaction();
//using var tx = CalendarDb.Database.BeginTransaction();
int calendarId;
if (int.TryParse(viewSettings.CalendarId, out calendarId))
@ -636,6 +629,7 @@ namespace ASC.Calendar.BusinessObjects
{
CalendarId = calendarId,
UserId = viewSettings.UserId,
ExtCalendarId = viewSettings.ExtCalendarId,
HideEvents = Convert.ToInt32(viewSettings.IsHideEvents),
TextColor = viewSettings.TextColor,
BackgroundColor = viewSettings.BackgroundColor,
@ -644,7 +638,17 @@ namespace ASC.Calendar.BusinessObjects
Name = viewSettings.Name ?? "",
TimeZone = viewSettings.TimeZone != null ? viewSettings.TimeZone.Id : null
};
CalendarDb.CalendarCalendarUser.Add(calendarUser);
var existCalendar = CalendarDb.CalendarCalendarUser
.Any(c => c.CalendarId == calendarUser.CalendarId && c.UserId == calendarUser.UserId);
if (existCalendar)
CalendarDb.CalendarCalendarUser.Update(calendarUser);
else
CalendarDb.CalendarCalendarUser.Add(calendarUser);
CalendarDb.SaveChanges();
//tx.Commit();
//update notifications
var eventsData = CalendarDb.CalendarEvents
@ -660,9 +664,6 @@ namespace ASC.Calendar.BusinessObjects
}
).ToList();
CalendarDb.SaveChanges();
tx.Commit();
foreach (var r in eventsData)
{
UpdateEventNotifications(r.eId, calendarId,
@ -686,10 +687,17 @@ namespace ASC.Calendar.BusinessObjects
Name = viewSettings.Name ?? "",
TimeZone = viewSettings.TimeZone != null ? viewSettings.TimeZone.Id : null
};
CalendarDb.CalendarCalendarUser.Add(calendarUser);
var existCalendar = CalendarDb.CalendarCalendarUser
.Any(c => c.ExtCalendarId == calendarUser.ExtCalendarId && c.UserId == calendarUser.UserId);
if (existCalendar)
CalendarDb.CalendarCalendarUser.Update(calendarUser);
else
CalendarDb.CalendarCalendarUser.Add(calendarUser);
CalendarDb.SaveChanges();
tx.Commit();
//tx.Commit();
if (String.Equals(viewSettings.CalendarId, SharedEventsCalendar.CalendarId,
StringComparison.InvariantCultureIgnoreCase))
@ -852,6 +860,7 @@ namespace ASC.Calendar.BusinessObjects
{
Id = Convert.ToInt32(id),
Name = name,
Tenant = TenantManager.GetCurrentTenant().TenantId,
Description = description,
CalendarId = calendarId,
OwnerId = ownerId,
@ -1023,7 +1032,6 @@ namespace ASC.Calendar.BusinessObjects
select calEventUser.EventId).Any()
)
select events.Id;
return GetEventsByIds(evIds.ToArray(), userId, tenantId);
}
@ -1047,7 +1055,7 @@ namespace ASC.Calendar.BusinessObjects
)
)
)
.Select(s => s.Id).ToList();
.Select(s => s.Id).ToList();
return GetEventsByIds(evIds.ToArray(), userId, tenantId);
}
@ -1098,17 +1106,17 @@ namespace ASC.Calendar.BusinessObjects
Id = calEvt.Id.ToString(),
Name = calEvt.Name,
Description = calEvt.Description,
TenantId = calEvt.Tenant,
TenantId = (int?)calEvt.Tenant,
CalendarId = calEvt.CalendarId.ToString(),
UtcStartDate = calEvt.StartDate,
UtcEndDate = calEvt.EndDate,
UtcUpdateDate = (DateTime)calEvt.UpdateDate,
AllDayLong = Convert.ToBoolean(calEvt.AllDayLong),
OwnerId = calEvt.OwnerId,
AlertType = (EventAlertType)ue.AlertType,
OwnerId = (Guid?)calEvt.OwnerId,
AlertType = (EventAlertType?)ue.AlertType,
RecurrenceRule = calEvt.Rrule,
Uid = calEvt.Uid,
Status = (EventStatus)calEvt.Status
Status = (EventStatus?)calEvt.Status
};
foreach (var r in data)
{
@ -1123,17 +1131,17 @@ namespace ASC.Calendar.BusinessObjects
Id = r.Id,
Name = r.Name,
Description = r.Description,
TenantId = r.TenantId,
TenantId = r.TenantId.GetValueOrDefault(),
CalendarId = r.CalendarId,
UtcStartDate = r.UtcStartDate,
UtcEndDate = r.UtcEndDate,
UtcUpdateDate = r.UtcUpdateDate,
AllDayLong = r.AllDayLong,
OwnerId = r.OwnerId,
AlertType = r.AlertType,
OwnerId = r.OwnerId.GetValueOrDefault(),
AlertType = r.AlertType.GetValueOrDefault(),
RecurrenceRule = RecurrenceRule.Parse(r.RecurrenceRule),
Uid = r.Uid,
Status = r.Status
Status = r.Status.GetValueOrDefault()
};
events.Add(ev);
}
@ -1164,17 +1172,17 @@ namespace ASC.Calendar.BusinessObjects
Id = calEvt.Id.ToString(),
Name = calEvt.Name,
Description = calEvt.Description,
TenantId = calEvt.Tenant,
TenantId = (int?)calEvt.Tenant,
CalendarId = calEvt.CalendarId.ToString(),
UtcStartDate = calEvt.StartDate,
UtcEndDate = calEvt.EndDate,
UtcUpdateDate = (DateTime)calEvt.UpdateDate,
AllDayLong = Convert.ToBoolean(calEvt.AllDayLong),
OwnerId = calEvt.OwnerId,
AlertType = (EventAlertType)ue.AlertType,
OwnerId = (Guid?)calEvt.OwnerId,
AlertType = (EventAlertType?)ue.AlertType,
RecurrenceRule = calEvt.Rrule,
Uid = calEvt.Uid,
Status = (EventStatus)calEvt.Status
Status = (EventStatus?)calEvt.Status
};
foreach (var r in data)
{
@ -1189,17 +1197,17 @@ namespace ASC.Calendar.BusinessObjects
Id = r.Id,
Name = r.Name,
Description = r.Description,
TenantId = r.TenantId,
TenantId = r.TenantId.GetValueOrDefault(),
CalendarId = r.CalendarId,
UtcStartDate = r.UtcStartDate,
UtcEndDate = r.UtcEndDate,
UtcUpdateDate = r.UtcUpdateDate,
AllDayLong = r.AllDayLong,
OwnerId = r.OwnerId,
AlertType = r.AlertType,
OwnerId = r.OwnerId.GetValueOrDefault(),
AlertType = r.AlertType.GetValueOrDefault(),
RecurrenceRule = RecurrenceRule.Parse(r.RecurrenceRule),
Uid = r.Uid,
Status = r.Status
Status = r.Status.GetValueOrDefault()
};
events.Add(ev);
}
@ -1247,12 +1255,13 @@ namespace ASC.Calendar.BusinessObjects
using var tx = CalendarDb.Database.BeginTransaction();
var cei = CalendarDb.CalendarEventItem.Where(r => r.EventId == eventID && r.ItemId == userId && r.IsGroup == 0).SingleOrDefault();
var userNoSubscibe = CalendarDb.CalendarEventUser.Any(u => u.UserId == userId && u.EventId == eventID && u.IsUnsubscribe == 1);
if (cei != null)
{
CalendarDb.CalendarEventItem.Remove(cei);
}
else
else if(!userNoSubscibe)
{
var newEventUser = new CalendarEventUser
{

View File

@ -44,6 +44,7 @@ namespace ASC.Calendar.BusinessObjects
public List<Ical.Net.Calendar> History { get; set; }
}
[Scope]
public class EventHistoryHelper
{
public DDayICalParser DDayICalParser { get; }

View File

@ -35,6 +35,7 @@ namespace ASC.Calendar.BusinessObjects
public class UserViewSettings
{
public virtual string CalendarId { get; set; }
public string ExtCalendarId { get; set; }
public Guid UserId { get; set; }
public string Name { get; set; }
public bool IsHideEvents { get; set; }
@ -48,6 +49,7 @@ namespace ASC.Calendar.BusinessObjects
{
this.TextColor = String.Empty;
this.BackgroundColor = String.Empty;
this.ExtCalendarId = "";
}
}
}

View File

@ -19,7 +19,6 @@ using Microsoft.Extensions.Options;
using SecurityContext = ASC.Core.SecurityContext;
using ASC.Calendar.Core;
using ASC.Calendar.Core.Dao;
using ASC.Calendar.BusinessObjects;
using ASC.Web.Core.Calendars;
using ASC.Calendar.ExternalCalendars;
@ -46,8 +45,8 @@ using System.Security;
using Ical.Net.CalendarComponents;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using ASC.Web.Studio.Core;
using System.Text.Json;
namespace ASC.Calendar.Controllers
{
@ -130,6 +129,7 @@ namespace ASC.Calendar.Controllers
public EmailValidationKeyProvider EmailValidationKeyProvider { get; }
public SetupInfo SetupInfo { get; }
public InstanceCrypto InstanceCrypto { get; }
public CalendarManager CalendarManager { get; }
public CalendarController(
@ -159,7 +159,8 @@ namespace ASC.Calendar.Controllers
SubscriptionWrapperHelper subscriptionWrapperHelper,
EmailValidationKeyProvider emailValidationKeyProvider,
SetupInfo setupInfo,
InstanceCrypto instanceCrypto)
InstanceCrypto instanceCrypto,
CalendarManager calendarManager)
{
AuthContext = authContext;
Authentication = authentication;
@ -187,16 +188,17 @@ namespace ASC.Calendar.Controllers
EmailValidationKeyProvider = emailValidationKeyProvider;
SetupInfo = setupInfo;
InstanceCrypto = instanceCrypto;
CalendarManager = calendarManager;
CalendarManager.Instance.RegistryCalendar(new SharedEventsCalendar(AuthContext, TimeZoneConverter, TenantManager, DataProvider));
CalendarManager.RegistryCalendar(new SharedEventsCalendar(AuthContext, TimeZoneConverter, TenantManager, DataProvider));
var birthdayReminderCalendar = new BirthdayReminderCalendar(AuthContext, TimeZoneConverter, UserManager, DisplayUserSettingsHelper);
if (UserManager.IsUserInGroup(AuthContext.CurrentAccount.ID, Constants.GroupVisitor.ID))
{
CalendarManager.Instance.UnRegistryCalendar(birthdayReminderCalendar.Id);
CalendarManager.UnRegistryCalendar(birthdayReminderCalendar.Id);
}
else
{
CalendarManager.Instance.RegistryCalendar(birthdayReminderCalendar);
CalendarManager.RegistryCalendar(birthdayReminderCalendar);
}
HttpContext = httpContextAccessor?.HttpContext;
}
@ -248,7 +250,7 @@ namespace ASC.Calendar.Controllers
result.AddRange(iCalStreams.ConvertAll(c => SubscriptionWrapperHelper.Get(c)));
var extCalendars = CalendarManager.Instance.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
var extCalendars = CalendarManager.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
var viewSettings = DataProvider.GetUserViewSettings(SecurityContext.CurrentAccount.ID, extCalendars.ConvertAll(c => c.Id));
result.AddRange(extCalendars.ConvertAll(c =>
@ -330,7 +332,7 @@ namespace ASC.Calendar.Controllers
//external
var extCalendars = CalendarManager.Instance.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
var extCalendars = CalendarManager.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
var viewSettings = DataProvider.GetUserViewSettings(SecurityContext.CurrentAccount.ID, extCalendars.ConvertAll(c => c.Id));
var extCalendarsWrappers = extCalendars.ConvertAll(c =>
@ -402,7 +404,7 @@ namespace ASC.Calendar.Controllers
//external
var extCalendars = CalendarManager.Instance.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
var extCalendars = CalendarManager.GetCalendarsForUser(SecurityContext.CurrentAccount.ID, UserManager);
var viewSettings = DataProvider.GetUserViewSettings(SecurityContext.CurrentAccount.ID, extCalendars.ConvertAll(c => c.Id));
var extCalendarsWrappers = extCalendars.ConvertAll(c =>
@ -459,7 +461,7 @@ namespace ASC.Calendar.Controllers
return (calendars != null ? CalendarWrapperHelper.Get(calendars) : null);
}
var extCalendar = CalendarManager.Instance.GetCalendarForUser(AuthContext.CurrentAccount.ID, calendarId, UserManager);
var extCalendar = CalendarManager.GetCalendarForUser(AuthContext.CurrentAccount.ID, calendarId, UserManager);
if (extCalendar != null)
{
var viewSettings = DataProvider.GetUserViewSettings(AuthContext.CurrentAccount.ID, new List<string> { calendarId });
@ -503,7 +505,7 @@ namespace ASC.Calendar.Controllers
{
var myUri = HttpContext.Request.GetUrlRewriter();
var calDavServerUrl = myUri.Scheme + "://" + myUri.Host + "/caldav";
var calDavServerUrl = myUri.Scheme + "://" + myUri.Host + ":" + myUri.Port + "/caldav";
var caldavHost = myUri.Host;
var userId = SecurityContext.CurrentAccount.ID;
@ -723,8 +725,11 @@ namespace ASC.Calendar.Controllers
/// <param name="calendarId">Calendar ID</param>
/// <param name="team">Project team</param>
[Delete("caldavprojcal")]
public void DeleteCaldavCalendar(string calendarId, List<string> team = null)
public void DeleteCaldavCalendar(CaldavCalendarModel caldavCalendarModel)
{
var calendarId = caldavCalendarModel.CalendarId;
var team = caldavCalendarModel.Team;
try
{
var myUri = HttpContext.Request.GetUrlRewriter();
@ -765,8 +770,12 @@ namespace ASC.Calendar.Controllers
/// <param name="uid">Event uid</param>
/// <param name="responsibles">Task responsibles</param>
[Delete("caldavevent")]
public void DeleteCaldavEvent(string calendarId, string uid, List<string> responsibles = null)
public void DeleteCaldavEvent(CaldavEventModel caldavEventModel)
{
var calendarId = caldavEventModel.CalendarId;
var uid = caldavEventModel.Uid;
var responsibles = caldavEventModel.Responsibles;
try
{
var currentUserId = SecurityContext.CurrentAccount.ID;
@ -819,8 +828,13 @@ namespace ASC.Calendar.Controllers
/// <param name="alert">Event notification type</param>
/// <param name="responsibles">Task responsibles</param>
[Update("caldavevent")]
public void UpdateCaldavEvent(string calendarId, string uid, int alert = 0, List<string> responsibles = null)
public void UpdateCaldavEvent(CaldavEventModel caldavEventModel)
{
var calendarId = caldavEventModel.CalendarId;
var uid = caldavEventModel.Uid;
var alert = caldavEventModel.Alert;
var responsibles = caldavEventModel.Responsibles;
try
{
if (responsibles.Count > 0)
@ -997,7 +1011,7 @@ namespace ASC.Calendar.Controllers
else
{
//external
icalendar = CalendarManager.Instance.GetCalendarForUser(SecurityContext.CurrentAccount.ID, calendarId, UserManager);
icalendar = CalendarManager.GetCalendarForUser(SecurityContext.CurrentAccount.ID, calendarId, UserManager);
if (icalendar != null)
{
icalendar = icalendar.GetUserCalendar(viewSettings.FirstOrDefault());
@ -1022,10 +1036,12 @@ namespace ASC.Calendar.Controllers
}
private string GetUserCaldavCalendar(string calUrl, string encoded)
{
var authorization = DataProvider.GetUserAuthorization(encoded);
var webRequest = (HttpWebRequest)WebRequest.Create(calUrl);
webRequest.Method = "GET";
webRequest.ContentType = "text/calendar; charset=utf-8";
webRequest.Headers.Add("Authorization", "Basic " + encoded);
webRequest.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(authorization)));
try
{
@ -2075,39 +2091,42 @@ namespace ASC.Calendar.Controllers
}
}
//event sharing list
foreach (var sharingOption in eventData.SharingOptions)
if (eventData.SharingOptions != null)
{
var fullAccess = sharingOption.actionId == AccessOption.FullAccessOption.Id;
if (!sharingOption.IsGroup)
foreach (var sharingOption in eventData.SharingOptions)
{
var user = UserManager.GetUsers(sharingOption.itemId);
if (DataProvider.CheckUserEmail(user))
{
var sharedEventUid = user.ID == calendarObj.OwnerId
? split[0]
: fullAccess ? split[0] + "_write" : split[0];
var fullAccess = sharingOption.actionId == AccessOption.FullAccessOption.Id;
updateCaldavEvent(old_ics, sharedEventUid, true, SharedEventsCalendar.CalendarId, myUri,
user.Email, DateTime.Now, targetCalendar.TimeZones[0],
calendarObj.TimeZone, false, user.ID != calendarObj.OwnerId);
}
}
else
{
var users = UserManager.GetUsersByGroup(sharingOption.itemId);
foreach (var user in users)
if (!sharingOption.IsGroup)
{
var user = UserManager.GetUsers(sharingOption.itemId);
if (DataProvider.CheckUserEmail(user))
{
var sharedEventUid = user.ID == calendarObj.OwnerId
? split[0]
: fullAccess ? split[0] + "_write" : split[0];
? split[0]
: fullAccess ? split[0] + "_write" : split[0];
updateCaldavEvent(old_ics, sharedEventUid, true, SharedEventsCalendar.CalendarId, myUri,
user.Email, DateTime.Now, targetCalendar.TimeZones[0],
calendarObj.TimeZone, false, user.ID != calendarObj.OwnerId);
user.Email, DateTime.Now, targetCalendar.TimeZones[0],
calendarObj.TimeZone, false, user.ID != calendarObj.OwnerId);
}
}
else
{
var users = UserManager.GetUsersByGroup(sharingOption.itemId);
foreach (var user in users)
{
if (DataProvider.CheckUserEmail(user))
{
var sharedEventUid = user.ID == calendarObj.OwnerId
? split[0]
: fullAccess ? split[0] + "_write" : split[0];
updateCaldavEvent(old_ics, sharedEventUid, true, SharedEventsCalendar.CalendarId, myUri,
user.Email, DateTime.Now, targetCalendar.TimeZones[0],
calendarObj.TimeZone, false, user.ID != calendarObj.OwnerId);
}
}
}
}
@ -2292,28 +2311,31 @@ namespace ASC.Calendar.Controllers
var sharingEventThread = new Thread(() =>
{
TenantManager.SetCurrentTenant(currentTenantId);
//event sharing ptions
foreach (var sharingOption in eventData.SharingOptions)
//event sharing options
if (eventData.SharingOptions != null)
{
if (!sharingOption.IsGroup)
foreach (var sharingOption in eventData.SharingOptions)
{
var user = UserManager.GetUsers(sharingOption.itemId);
ReplaceSharingEvent(user, sharingOption.actionId, uidData[0], myUri, old_ics,
calendarId, createDate, targetCalendar.TimeZones[0],
calendarObj.TimeZone);
}
else
{
var users = UserManager.GetUsersByGroup(sharingOption.itemId);
foreach (var user in users)
if (!sharingOption.IsGroup)
{
var user = UserManager.GetUsers(sharingOption.itemId);
ReplaceSharingEvent(user, sharingOption.actionId, uidData[0], myUri, old_ics,
calendarId, createDate, targetCalendar.TimeZones[0],
calendarObj.TimeZone);
calendarId, createDate, targetCalendar.TimeZones[0],
calendarObj.TimeZone);
}
else
{
var users = UserManager.GetUsersByGroup(sharingOption.itemId);
foreach (var user in users)
{
ReplaceSharingEvent(user, sharingOption.actionId, uidData[0], myUri, old_ics,
calendarId, createDate, targetCalendar.TimeZones[0],
calendarObj.TimeZone);
}
}
}
}
//calendar sharing ptions
//calendar sharing options
foreach (var sharingOption in calendarCharingList)
{
if (!sharingOption.IsGroup)
@ -2959,8 +2981,11 @@ namespace ASC.Calendar.Controllers
[Create("outsideevent")]
public void AddEventOutside(string calendarGuid, string eventGuid, string ics)
public void AddEventOutside(OutsideEventModel outsidEventModel)
{
var calendarGuid = outsidEventModel.CalendarGuid;
var eventGuid = outsidEventModel.EventGuid;
var ics = outsidEventModel.Ics;
if (calendarGuid.IndexOf("-shared") > 0)
{
@ -3285,16 +3310,21 @@ namespace ASC.Calendar.Controllers
var canNotify = false;
//TODO
//var apiServer = new ApiServer();
//var apiResponse = apiServer.GetApiResponse(String.Format("{0}mail/accounts.json", SetupInfo.WebApiBaseUrl), "GET");
var obj = JObject.Parse(""); //JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiResponse)));
//var obj = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(apiResponse)));
if (obj["response"] != null)
//var obj = JObject.Parse("");
var obj = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(@"{}");
if (obj.TryGetValue("response", out var response))
{
var accounts = (from account in JArray.Parse(obj["response"].ToString())
let email = account.Value<String>("email")
let enabled = account.Value<Boolean>("enabled")
let isGroup = account.Value<Boolean>("isGroup")
var accounts = (from account in response.EnumerateArray()
let email = account.GetProperty("email").GetString()
let enabled = account.GetProperty("enabled").GetBoolean()
let isGroup = account.GetProperty("isGroup").GetBoolean()
where enabled && !isGroup
select email).ToList();
@ -3752,7 +3782,7 @@ namespace ASC.Calendar.Controllers
else
{
//external
icalendar = CalendarManager.Instance.GetCalendarForUser(AuthContext.CurrentAccount.ID, calendarId, UserManager);
icalendar = CalendarManager.GetCalendarForUser(AuthContext.CurrentAccount.ID, calendarId, UserManager);
if (icalendar != null)
{
icalendar = icalendar.GetUserCalendar(viewSettings.FirstOrDefault());
@ -4004,7 +4034,8 @@ namespace ASC.Calendar.Controllers
if (indexOfChar != -1)
{
ics = ics.Remove(indexOfChar, indexOfCharEND + 14 - indexOfChar);
if (ics.IndexOf("BEGIN:VTIMEZONE") > -1) updateCaldavEvent(ics, uid, true, guid, myUri, userEmail);
if (ics.IndexOf("BEGIN:VTIMEZONE") > -1)
updateCaldavEvent(ics, uid, true, guid, myUri, userEmail);
}
var requestUrl = calDavServerUrl + "/" + HttpUtility.UrlEncode(currentUserName) + "/" + guid + (isShared ? "-shared" : "") +
@ -4044,7 +4075,7 @@ namespace ASC.Calendar.Controllers
{
icsEvent.ExceptionDates.Clear();
}
icsEvent.Uid = null;
icsEvent.Uid = uid;
}
ics = DDayICalParser.SerializeCalendar(icsCalendar);
@ -4145,7 +4176,7 @@ namespace ASC.Calendar.Controllers
TenantManager.SetCurrentTenant(tenant);
var user = UserManager.GetUserByEmail(email);
var extCalendar = CalendarManager.Instance.GetCalendarForUser(user.ID, caldavGuid, UserManager);
var extCalendar = CalendarManager.GetCalendarForUser(user.ID, caldavGuid, UserManager);
var events = extCalendar.LoadEvents(user.ID, DateTime.MinValue, DateTime.MaxValue);
string currentEventId =

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ASC.Calendar.Models
{
public class CaldavCalendarModel
{
public string CalendarId { get; set; }
public List<string> Team { get; set; }
}
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ASC.Calendar.Models
{
public class CaldavEventModel
{
public string CalendarId { get; set; }
public string Uid { get; set; }
public int Alert { get; set; }
public List<string> Responsibles { get; set; }
}
}

View File

@ -79,6 +79,7 @@ namespace ASC.Calendar.Models
}
}
[Scope]
public class EventHistoryWrapperHelper
{

View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ASC.Calendar.Models
{
public class OutsideEventModel
{
public string CalendarGuid { get; set; }
public string EventGuid { get; set; }
public string Ics { get; set; }
}
}

View File

@ -56,6 +56,8 @@ namespace ASC.Calendar.Models
}
}
[Scope]
public class PublicItemCollectionHelper
{
public AuthContext AuthContext { get; }

View File

@ -72,6 +72,7 @@ namespace ASC.Calendar.Models
}
}
[Scope]
public class PublicItemWrapperHelper
{
private Guid _owner;

View File

@ -78,6 +78,7 @@ namespace ASC.Calendar.Models
}
}
[Scope]
public class SubscriptionWrapperHelper
{

View File

@ -54,6 +54,7 @@ namespace ASC.Calendar.Models
}
}
[Scope]
public class TimeZoneWrapperHelper
{
private TimeZoneInfo _timeZone;

View File

@ -93,6 +93,7 @@ namespace ASC.Calendar.Models
}
}
[Scope]
public class TodoWrapperHelper
{

View File

@ -27,33 +27,18 @@
using System;
using System.Collections.Generic;
using ASC.Common;
using ASC.Core;
namespace ASC.Web.Core.Calendars
{
public delegate List<BaseCalendar> GetCalendarForUser(Guid userId);
[Scope]
public class CalendarManager
{
public static CalendarManager Instance
{
get;
private set;
}
private readonly List<GetCalendarForUser> _calendarProviders;
private readonly List<BaseCalendar> _calendars;
static CalendarManager()
{
Instance = new CalendarManager();
}
private CalendarManager()
{
_calendars = new List<BaseCalendar>();
_calendarProviders = new List<GetCalendarForUser>();
}
private readonly List<GetCalendarForUser> _calendarProviders = new List<GetCalendarForUser>();
private readonly List<BaseCalendar> _calendars = new List<BaseCalendar>();
public void RegistryCalendar(BaseCalendar calendar)
{