DocSpace-client/products/ASC.Calendar/Server/Controllers/CalendarController.cs

247 lines
9.3 KiB
C#
Raw Normal View History

2020-02-12 07:58:31 +00:00

using System.Collections.Generic;
using ASC.Api.Core;
using ASC.Common.Logging;
using ASC.Common.Utils;
using ASC.Core;
using ASC.Core.Common.Settings;
using ASC.Core.Tenants;
using ASC.Core.Users;
using ASC.Data.Reassigns;
using ASC.FederatedLogin;
using ASC.MessagingSystem;
using ASC.Calendar.Models;
using ASC.Security.Cryptography;
using ASC.Web.Api.Routing;
using ASC.Web.Core;
using ASC.Web.Core.Users;
using ASC.Web.Studio.Core;
using ASC.Web.Studio.Core.Notify;
using ASC.Web.Studio.UserControls.Statistics;
using ASC.Web.Studio.Utility;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using SecurityContext = ASC.Core.SecurityContext;
using ASC.Calendar.Core;
using ASC.Calendar.Core.Dao;
2020-02-21 12:33:51 +00:00
using ASC.Calendar.BusinessObjects;
2020-02-26 11:44:32 +00:00
using ASC.Web.Core.Calendars;
using ASC.Calendar.ExternalCalendars;
using System.Linq;
2020-02-27 08:50:06 +00:00
using System;
using Microsoft.AspNetCore.Http;
using HttpContext = Microsoft.AspNetCore.Http.HttpContext;
using System.Web;
using ASC.Calendar.Notification;
2020-02-27 14:15:25 +00:00
using ASC.Common;
2020-02-12 07:58:31 +00:00
namespace ASC.Calendar.Controllers
{
[DefaultRoute]
[ApiController]
public class CalendarController : ControllerBase
{
2020-02-21 12:33:51 +00:00
2020-02-12 07:58:31 +00:00
public Tenant Tenant { get { return ApiContext.Tenant; } }
public ApiContext ApiContext { get; }
2020-02-26 11:44:32 +00:00
public AuthContext AuthContext { get; }
2020-02-13 09:18:13 +00:00
public UserManager UserManager { get; }
2020-02-21 12:33:51 +00:00
public DataProvider DataProvider { get; }
2020-02-12 07:58:31 +00:00
public ILog Log { get; }
2020-02-26 11:44:32 +00:00
private TenantManager TenantManager { get; }
2020-02-21 12:33:51 +00:00
public TimeZoneConverter TimeZoneConverter { get; }
public CalendarWrapperHelper CalendarWrapperHelper { get; }
2020-02-26 11:44:32 +00:00
public DisplayUserSettingsHelper DisplayUserSettingsHelper { get; }
2020-02-27 08:50:06 +00:00
private AuthorizationManager AuthorizationManager { get; }
private AuthManager Authentication { get; }
public HttpContext HttpContext { get; set; }
2020-02-12 07:58:31 +00:00
public CalendarController(
ApiContext apiContext,
2020-02-26 11:44:32 +00:00
AuthContext authContext,
2020-02-27 08:50:06 +00:00
AuthorizationManager authorizationManager,
2020-02-13 09:18:13 +00:00
UserManager userManager,
2020-02-26 11:44:32 +00:00
TenantManager tenantManager,
2020-02-21 12:33:51 +00:00
TimeZoneConverter timeZoneConverter,
2020-02-26 11:44:32 +00:00
DisplayUserSettingsHelper displayUserSettingsHelper,
IOptionsMonitor<ILog> option,
2020-02-21 12:33:51 +00:00
DataProvider dataProvider,
2020-02-27 08:50:06 +00:00
IHttpContextAccessor httpContextAccessor,
CalendarWrapperHelper calendarWrapperHelper,
AuthManager authentication)
2020-02-12 07:58:31 +00:00
{
2020-02-26 11:44:32 +00:00
AuthContext = authContext;
2020-02-27 08:50:06 +00:00
Authentication = authentication;
AuthorizationManager = authorizationManager;
2020-02-26 11:44:32 +00:00
TenantManager = tenantManager;
2020-02-12 07:58:31 +00:00
Log = option.Get("ASC.Api");
2020-02-21 12:33:51 +00:00
TimeZoneConverter = timeZoneConverter;
2020-02-12 07:58:31 +00:00
ApiContext = apiContext;
2020-02-13 09:18:13 +00:00
UserManager = userManager;
2020-02-21 12:33:51 +00:00
DataProvider = dataProvider;
2020-02-25 13:36:20 +00:00
CalendarWrapperHelper = calendarWrapperHelper;
2020-02-26 11:44:32 +00:00
DisplayUserSettingsHelper = displayUserSettingsHelper;
CalendarManager.Instance.RegistryCalendar(new SharedEventsCalendar(AuthContext, TimeZoneConverter, TenantManager));
var birthdayReminderCalendar = new BirthdayReminderCalendar(AuthContext, TimeZoneConverter, UserManager, DisplayUserSettingsHelper);
if (UserManager.IsUserInGroup(AuthContext.CurrentAccount.ID, Constants.GroupVisitor.ID))
{
CalendarManager.Instance.UnRegistryCalendar(birthdayReminderCalendar.Id);
}
else
{
CalendarManager.Instance.RegistryCalendar(birthdayReminderCalendar);
}
2020-02-27 08:50:06 +00:00
HttpContext = httpContextAccessor?.HttpContext;
}
public class SharingParam : SharingOptions.PublicItem
{
public string actionId { get; set; }
public Guid itemId
{
get { return Id; }
set { Id = value; }
}
public bool isGroup
{
get { return IsGroup; }
set { IsGroup = value; }
}
2020-02-12 07:58:31 +00:00
}
[Read("info")]
public Module GetModule()
{
var product = new CalendarProduct();
product.Init();
return new Module(product, true);
}
[Read("{calendarId}")]
2020-02-26 11:44:32 +00:00
public CalendarWrapper GetCalendarById(string calendarId)
{
2020-02-26 11:44:32 +00:00
int calId;
if (int.TryParse(calendarId, out calId))
{
var calendars = DataProvider.GetCalendarById(calId);
return (calendars != null ? CalendarWrapperHelper.Get(calendars) : null);
}
2020-02-26 11:44:32 +00:00
var extCalendar = CalendarManager.Instance.GetCalendarForUser(AuthContext.CurrentAccount.ID, calendarId, UserManager);
if (extCalendar != null)
{
var viewSettings = DataProvider.GetUserViewSettings(AuthContext.CurrentAccount.ID, new List<string> { calendarId });
return CalendarWrapperHelper.Get(extCalendar, viewSettings.FirstOrDefault());
}
return null;
}
2020-02-27 08:50:06 +00:00
[Create]
public CalendarWrapper CreateCalendar(CalendarModel calendar)
{
//string name, string description, string textColor, string backgroundColor, string timeZone, EventAlertType alertType, List<SharingParam> sharingOptions, string iCalUrl, int isTodo = 0
var sharingOptionsList = calendar.sharingOptions ?? new List<SharingParam>();
var timeZoneInfo = TimeZoneConverter.GetTimeZone(calendar.TimeZone);
calendar.Name = (calendar.Name ?? "").Trim();
if (String.IsNullOrEmpty(calendar.Name))
throw new Exception(Resources.CalendarApiResource.ErrorEmptyName);
calendar.Description = (calendar.Description ?? "").Trim();
calendar.TextColor = (calendar.TextColor ?? "").Trim();
calendar.BackgroundColor = (calendar.BackgroundColor ?? "").Trim();
Guid calDavGuid = Guid.NewGuid();
var myUri = HttpContext.Request.GetUrlRewriter();
var _email = UserManager.GetUsers(AuthContext.CurrentAccount.ID).Email;
var currentUserName = _email.ToLower() + "@" + myUri.Host;
string currentAccountPaswd = Authentication.GetUserPasswordHash(TenantManager.GetCurrentTenant().TenantId, UserManager.GetUserByEmail(_email).ID);
//TODO caldav
/*var caldavTask = new Task(() => CreateCalDavCalendar(name, description, backgroundColor, calDavGuid.ToString(), myUri, currentUserName, _email, currentAccountPaswd));
caldavTask.Start();*/
var cal = DataProvider.CreateCalendar(
AuthContext.CurrentAccount.ID,
calendar.Name,
calendar.Description,
calendar.TextColor,
calendar.BackgroundColor,
timeZoneInfo,
calendar.AlertType,
null,
sharingOptionsList.Select(o => o as SharingOptions.PublicItem).ToList(),
new List<UserViewSettings>(),
calDavGuid,
calendar.IsTodo);
if (cal == null) throw new Exception("calendar is null");
foreach (var opt in sharingOptionsList)
if (String.Equals(opt.actionId, AccessOption.FullAccessOption.Id, StringComparison.InvariantCultureIgnoreCase))
AuthorizationManager.AddAce(new AzRecord(opt.Id, CalendarAccessRights.FullAccessAction.ID, Common.Security.Authorizing.AceType.Allow, cal));
//notify
//CalendarNotifyClient.NotifyAboutSharingCalendar(cal);
/*//iCalUrl
if (!string.IsNullOrEmpty(iCalUrl))
{
try
{
var req = (HttpWebRequest)WebRequest.Create(iCalUrl);
using (var resp = req.GetResponse())
using (var stream = resp.GetResponseStream())
{
var ms = new MemoryStream();
stream.StreamCopyTo(ms);
ms.Seek(0, SeekOrigin.Begin);
using (var tempReader = new StreamReader(ms))
{
var cals = DDayICalParser.DeserializeCalendar(tempReader);
ImportEvents(Convert.ToInt32(cal.Id), cals);
}
}
}
catch (Exception ex)
{
Logger.Info(String.Format("Error import events to new calendar by ical url: {0}", ex.Message));
}
}*/
return CalendarWrapperHelper.Get(cal);
}
2020-02-12 07:58:31 +00:00
}
2020-02-21 12:33:51 +00:00
public static class CalendarControllerExtention
2020-02-12 07:58:31 +00:00
{
2020-02-27 14:15:25 +00:00
public static DIHelper AddCalendarController(this DIHelper services)
2020-02-12 07:58:31 +00:00
{
return services
.AddApiContextService()
.AddSecurityContextService()
2020-02-27 08:50:06 +00:00
.AddPermissionContextService()
.AddCommonLinkUtilityService()
.AddDisplayUserSettingsService()
.AddCalendarDbContextService()
2020-02-21 12:33:51 +00:00
.AddCalendarDataProviderService()
2020-02-27 08:50:06 +00:00
.AddCalendarWrapper();
2020-02-12 07:58:31 +00:00
}
}
}