Пример #1
0
        public object SaveMailDomainSettings(TenantTrustedDomainsType type, List <string> domains, bool inviteUsersAsVisitors)
        {
            try
            {
                SecurityContext.DemandPermissions(SecutiryConstants.EditPortalSettings);

                var tenant = CoreContext.TenantManager.GetCurrentTenant();

                if (type == TenantTrustedDomainsType.Custom)
                {
                    tenant.TrustedDomains.Clear();
                    foreach (var domain in domains)
                    {
                        var d = (domain ?? "").Trim().ToLower();
                        if (!CheckTrustedDomain(d))
                        {
                            return new { Status = 0, Message = Resources.Resource.ErrorNotCorrectTrustedDomain }
                        }
                        ;

                        tenant.TrustedDomains.Add(d);
                    }
                }

                if (tenant.TrustedDomains.Count == 0)
                {
                    tenant.TrustedDomainsType = TenantTrustedDomainsType.None;
                }
                else
                {
                    tenant.TrustedDomainsType = type;
                }

                var domainSettingsObj = new StudioTrustedDomainSettings {
                    InviteUsersAsVisitors = inviteUsersAsVisitors
                };
                var resultStatus = SettingsManager.Instance.SaveSettings(domainSettingsObj, TenantProvider.CurrentTenantID);

                CoreContext.TenantManager.SaveTenant(tenant);

                AdminLog.PostAction("Settings: saved mail domain settings with parameters type={0}, domains={1}, inviteUsersAsVisitors={2}", type, string.Join("|", domains.ToArray()), inviteUsersAsVisitors.ToString());

                return(new { Status = 1, Message = Resources.Resource.SuccessfullySaveSettingsMessage });
            }
            catch (Exception e)
            {
                return(new { Status = 0, Message = e.Message.HtmlEncode() });
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(GetType());

            Page.RegisterBodyScripts(ResolveUrl("~/usercontrols/management/maildomainsettings/js/maildomainsettings.js"));
            Page.RegisterStyleControl(VirtualPathUtility.ToAbsolute("~/usercontrols/management/maildomainsettings/css/maildomainsettings.less"));

            _currentTenant = CoreContext.TenantManager.GetCurrentTenant();
            _studioTrustedDomainSettings = SettingsManager.Instance.LoadSettings <StudioTrustedDomainSettings>(TenantProvider.CurrentTenantID);
            _enableInviteUsers           = TenantStatisticsProvider.GetUsersCount() < TenantExtra.GetTenantQuota().ActiveUsers;

            if (!_enableInviteUsers)
            {
                _studioTrustedDomainSettings.InviteUsersAsVisitors = true;
            }
        }
        public object SaveMailDomainSettings(TenantTrustedDomainsType type, List <string> domains, bool inviteUsersAsVisitors)
        {
            try
            {
                SecurityContext.DemandPermissions(SecutiryConstants.EditPortalSettings);

                var tenant = CoreContext.TenantManager.GetCurrentTenant();

                if (type == TenantTrustedDomainsType.Custom)
                {
                    tenant.TrustedDomains.Clear();
                    foreach (var d in domains.Select(domain => (domain ?? "").Trim().ToLower()))
                    {
                        if (!CheckTrustedDomain(d))
                        {
                            return new { Status = 0, Message = Resource.ErrorNotCorrectTrustedDomain }
                        }
                        ;

                        tenant.TrustedDomains.Add(d);
                    }

                    if (tenant.TrustedDomains.Count == 0)
                    {
                        type = TenantTrustedDomainsType.None;
                    }
                }

                tenant.TrustedDomainsType = type;

                var domainSettingsObj = new StudioTrustedDomainSettings {
                    InviteUsersAsVisitors = inviteUsersAsVisitors
                };
                SettingsManager.Instance.SaveSettings(domainSettingsObj, TenantProvider.CurrentTenantID);

                CoreContext.TenantManager.SaveTenant(tenant);

                MessageService.Send(HttpContext.Current.Request, MessageAction.TrustedMailDomainSettingsUpdated);

                return(new { Status = 1, Message = Resource.SuccessfullySaveSettingsMessage });
            }
            catch (Exception e)
            {
                return(new { Status = 0, Message = e.Message.HtmlEncode() });
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(GetType());

            Page.RegisterBodyScripts("~/usercontrols/management/maildomainsettings/js/maildomainsettings.js");
            Page.RegisterStyle("~/usercontrols/management/maildomainsettings/css/maildomainsettings.less");

            _currentTenant = CoreContext.TenantManager.GetCurrentTenant();
            _studioTrustedDomainSettings = SettingsManager.Instance.LoadSettings <StudioTrustedDomainSettings>(TenantProvider.CurrentTenantID);
            _enableInviteUsers           = TenantStatisticsProvider.GetUsersCount() < TenantExtra.GetTenantQuota().ActiveUsers;

            if (!_enableInviteUsers)
            {
                _studioTrustedDomainSettings.InviteUsersAsVisitors = true;
            }

            var managementPage = Page as Studio.Management;

            _tenantAccessAnyone = managementPage != null ?
                                  managementPage.TenantAccess.Anyone :
                                  SettingsManager.Instance.LoadSettings <TenantAccessSettings>(TenantProvider.CurrentTenantID).Anyone;
        }
        public object SendJoinInviteMail(string email)
        {
            try
            {
                if (!EnabledJoin)
                {
                    throw new MethodAccessException("Method not available");
                }

                if (!email.TestEmailRegex())
                {
                    throw new Exception(Resource.ErrorNotCorrectEmail);
                }

                var user = CoreContext.UserManager.GetUserByEmail(email);
                if (!user.ID.Equals(Constants.LostUser.ID))
                {
                    throw new Exception(CustomNamingPeople.Substitute <Resource>("ErrorEmailAlreadyExists"));
                }

                var tenant   = CoreContext.TenantManager.GetCurrentTenant();
                var settings = IPRestrictionsSettings.Load();

                if (settings.Enable && !IPSecurity.IPSecurity.Verify(tenant))
                {
                    throw new Exception(Resource.ErrorAccessRestricted);
                }

                var trustedDomainSettings = StudioTrustedDomainSettings.Load();
                var emplType          = trustedDomainSettings.InviteUsersAsVisitors ? EmployeeType.Visitor : EmployeeType.User;
                var enableInviteUsers = TenantStatisticsProvider.GetUsersCount() <
                                        TenantExtra.GetTenantQuota().ActiveUsers;

                if (!enableInviteUsers)
                {
                    emplType = EmployeeType.Visitor;
                }

                switch (tenant.TrustedDomainsType)
                {
                case TenantTrustedDomainsType.Custom:
                {
                    var address = new MailAddress(email);
                    if (
                        tenant.TrustedDomains.Any(
                            d => address.Address.EndsWith("@" + d, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        StudioNotifyService.Instance.SendJoinMsg(email, emplType);
                        MessageService.Send(HttpContext.Current.Request, MessageInitiator.System,
                                            MessageAction.SentInviteInstructions, email);
                        return(new { Status = 1, Message = Resource.FinishInviteJoinEmailMessage });
                    }

                    throw new Exception(Resource.ErrorEmailDomainNotAllowed);
                }

                case TenantTrustedDomainsType.All:
                {
                    StudioNotifyService.Instance.SendJoinMsg(email, emplType);
                    MessageService.Send(HttpContext.Current.Request, MessageInitiator.System,
                                        MessageAction.SentInviteInstructions, email);
                    return(new { Status = 1, Message = Resource.FinishInviteJoinEmailMessage });
                }

                default:
                    throw new Exception(Resource.ErrorNotCorrectEmail);
                }
            }
            catch (FormatException)
            {
                return(new { Status = 0, Message = Resource.ErrorNotCorrectEmail });
            }
            catch (Exception e)
            {
                return(new { Status = 0, Message = e.Message.HtmlEncode() });
            }
        }
        public AjaxResponse SendJoinInviteMail(string email)
        {
            email = (email ?? "").Trim();
            var resp = new AjaxResponse {
                rs1 = "0"
            };

            try
            {
                if (String.IsNullOrEmpty(email))
                {
                    resp.rs2 = Resource.ErrorNotCorrectEmail;
                    return(resp);
                }

                if (!email.TestEmailRegex())
                {
                    resp.rs2 = Resource.ErrorNotCorrectEmail;
                }

                var user = CoreContext.UserManager.GetUserByEmail(email);
                if (!user.ID.Equals(ASC.Core.Users.Constants.LostUser.ID))
                {
                    resp.rs1 = "0";
                    resp.rs2 = CustomNamingPeople.Substitute <Resource>("ErrorEmailAlreadyExists").HtmlEncode();
                    return(resp);
                }

                var tenant = CoreContext.TenantManager.GetCurrentTenant();
                if (tenant != null)
                {
                    var settings = IPRestrictionsSettings.Load();
                    if (settings.Enable && !IPSecurity.IPSecurity.Verify(tenant))
                    {
                        resp.rs2 = Resource.ErrorAccessRestricted;
                        return(resp);
                    }
                }


                var trustedDomainSettings = StudioTrustedDomainSettings.Load();
                var emplType          = trustedDomainSettings.InviteUsersAsVisitors ? EmployeeType.Visitor : EmployeeType.User;
                var enableInviteUsers = TenantStatisticsProvider.GetUsersCount() < TenantExtra.GetTenantQuota().ActiveUsers;

                if (!enableInviteUsers)
                {
                    emplType = EmployeeType.Visitor;
                }

                switch (tenant.TrustedDomainsType)
                {
                case TenantTrustedDomainsType.Custom:
                {
                    var address = new MailAddress(email);
                    if (tenant.TrustedDomains.Any(d => address.Address.EndsWith("@" + d, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        StudioNotifyService.Instance.InviteUsers(email, "", true, emplType);
                        MessageService.Send(HttpContext.Current.Request, MessageInitiator.System, MessageAction.SentInviteInstructions, email);
                        resp.rs1 = "1";
                        resp.rs2 = Resource.FinishInviteJoinEmailMessage;
                        return(resp);
                    }
                    else
                    {
                        resp.rs2 = Resource.ErrorEmailDomainNotAllowed;
                    }
                }
                break;

                case TenantTrustedDomainsType.All:
                    StudioNotifyService.Instance.InviteUsers(email, "", true, emplType);
                    MessageService.Send(HttpContext.Current.Request, MessageInitiator.System, MessageAction.SentInviteInstructions, email);
                    resp.rs1 = "1";
                    resp.rs2 = Resource.FinishInviteJoinEmailMessage;
                    return(resp);

                default:
                    resp.rs2 = Resource.ErrorNotCorrectEmail;
                    break;
                }
            }
            catch (FormatException)
            {
                resp.rs2 = Resource.ErrorNotCorrectEmail;
            }
            catch (Exception e)
            {
                resp.rs2 = HttpUtility.HtmlEncode(e.Message);
            }

            return(resp);
        }