Exemplo n.º 1
0
 public IEnumerable <EmployeeWraper> GetProductAdministrators(Guid productid)
 {
     return(WebItemSecurity.GetProductAdministrators(productid)
            .Select(EmployeeWraper.Get)
            .ToList());
 }
Exemplo n.º 2
0
        private void InitProductSettingsInlineScript()
        {
            var isAdmin = WebItemSecurity.IsProductAdministrator(CommonLinkUtility.GetProductID(), SecurityContext.CurrentAccount.ID);

            RegisterInlineScript(string.Format("window.ASC.Resources.Master.IsProductAdmin={0};", isAdmin.ToString().ToLowerInvariant()), true, false);
        }
Exemplo n.º 3
0
 public static bool IsAdministrator(Guid userId)
 {
     return(CoreContext.UserManager.IsUserInGroup(userId, Constants.GroupAdmin.ID) ||
            WebItemSecurity.IsProductAdministrator(ProductEntryPoint.ID, userId));
 }
Exemplo n.º 4
0
        private void RegisterClientScript()
        {
            Page.RegisterBodyScripts("~/usercontrols/management/accessrights/js/accessrights.js")
            .RegisterStyle("~/usercontrols/management/accessrights/css/accessrights.less");

            var curTenant    = CoreContext.TenantManager.GetCurrentTenant();
            var currentOwner = CoreContext.UserManager.GetUsers(curTenant.OwnerId);
            var admins       = WebItemSecurity.GetProductAdministrators(Guid.Empty).Where(admin => admin.ID != currentOwner.ID).SortByUserName();

            var sb = new StringBuilder();

            sb.AppendFormat("ownerId = {0};", JavaScriptSerializer.Serialize(curTenant.OwnerId));

            sb.AppendFormat("adminList = {0};",
                            JavaScriptSerializer.Serialize(admins.ConvertAll(u => new
            {
                id           = u.ID,
                smallFotoUrl = u.GetSmallPhotoURL(),
                displayName  = u.DisplayUserName(),
                title        = u.Title.HtmlEncode(),
                userUrl      = CommonLinkUtility.GetUserProfile(u.ID),
                accessList   = GetAccessList(u.ID, WebItemSecurity.IsProductAdministrator(Guid.Empty, u.ID))
            }))
                            );

            var managementPage = Page as Studio.Management;
            var tenantAccess   = managementPage != null ? managementPage.TenantAccess : TenantAccessSettings.Load();

            if (!tenantAccess.Anyone)
            {
                var productItemList = GetProductItemListForSerialization();

                foreach (var productItem in productItemList)
                {
                    var ids   = productItem.SelectedUsers.Select(i => i.ID).ToArray();
                    var names = productItem.SelectedUsers.Select(i => i.DisplayUserName()).ToArray();

                    sb.AppendFormat("SelectedUsers_{0} = {1};",
                                    productItem.ItemName,
                                    JavaScriptSerializer.Serialize(
                                        new
                    {
                        IDs           = ids,
                        Names         = names,
                        PeopleImgSrc  = PeopleImgSrc,
                        TrashImgSrc   = TrashImgSrc,
                        TrashImgTitle = Resource.DeleteButton,
                        CurrentUserID = SecurityContext.CurrentAccount.ID
                    })
                                    );

                    ids   = productItem.SelectedGroups.Select(i => i.ID).ToArray();
                    names = productItem.SelectedGroups.Select(i => i.Name.HtmlEncode()).ToArray();

                    sb.AppendFormat("SelectedGroups_{0} = {1};",
                                    productItem.ItemName,
                                    JavaScriptSerializer.Serialize(
                                        new
                    {
                        IDs           = ids,
                        Names         = names,
                        GroupImgSrc   = GroupImgSrc,
                        TrashImgSrc   = TrashImgSrc,
                        TrashImgTitle = Resource.DeleteButton
                    })
                                    );

                    if (!productItem.CanNotBeDisabled)
                    {
                        sb.AppendFormat("ASC.Settings.AccessRights.initProduct('{0}');",
                                        Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(productItem))));
                    }
                }
            }


            sb.AppendFormat("ASC.Settings.AccessRights.init({0});",
                            JavaScriptSerializer.Serialize(Products.Select(p => p.GetSysName()).ToArray())
                            );

            Page.RegisterInlineScript(sb.ToString());
        }
Exemplo n.º 5
0
 public static bool IsCalndarAvailable()
 {
     return(WebItemSecurity.IsAvailableForUser(WebItemManager.CalendarProductID.ToString(), SecurityContext.CurrentAccount.ID));
 }
Exemplo n.º 6
0
        public EmployeeWraperFull UpdateMember(bool isVisitor, string userid, string email, string firstname, string lastname, string comment, Guid[] department, string title, string location, string sex, ApiDateTime birthday, ApiDateTime worksfrom, IEnumerable <Contact> contacts, string files, bool?disable)
        {
            SecurityContext.DemandPermissions(new UserSecurityProvider(new Guid(userid)), Core.Users.Constants.Action_EditUser);

            var user = GetUserInfo(userid);

            if (CoreContext.UserManager.IsSystemUser(user.ID))
            {
                throw new SecurityException();
            }

            var self      = SecurityContext.CurrentAccount.ID.Equals(user.ID);
            var resetDate = new DateTime(1900, 01, 01);

            //Update it

            var isLdap = user.IsLDAP();
            var isSso  = user.IsSSO();

            if (!isLdap && !isSso)
            {
                //Set common fields

                user.FirstName = firstname ?? user.FirstName;
                user.LastName  = lastname ?? user.LastName;

                //Validate email
                if (!string.IsNullOrEmpty(email))
                {
                    var address = new MailAddress(email);
                    user.Email = address.Address;
                }

                user.Title    = title ?? user.Title;
                user.Location = location ?? user.Location;
            }

            user.Notes = comment ?? user.Notes;
            user.Sex   = ("male".Equals(sex, StringComparison.OrdinalIgnoreCase)
                            ? true
                            : ("female".Equals(sex, StringComparison.OrdinalIgnoreCase) ? (bool?)false : null)) ?? user.Sex;

            user.BirthDate = birthday != null?TenantUtil.DateTimeFromUtc(Convert.ToDateTime(birthday)) : user.BirthDate;

            if (user.BirthDate == resetDate)
            {
                user.BirthDate = null;
            }

            user.WorkFromDate = worksfrom != null?TenantUtil.DateTimeFromUtc(Convert.ToDateTime(worksfrom)) : user.WorkFromDate;

            if (user.WorkFromDate == resetDate)
            {
                user.WorkFromDate = null;
            }

            //Update contacts
            UpdateContacts(contacts, user);
            UpdateDepartments(department, user);

            if (files != UserPhotoManager.GetPhotoAbsoluteWebPath(user.ID))
            {
                UpdatePhotoUrl(files, user);
            }
            if (disable.HasValue)
            {
                user.Status         = disable.Value ? EmployeeStatus.Terminated : EmployeeStatus.Active;
                user.TerminatedDate = disable.Value ? DateTime.UtcNow : (DateTime?)null;
            }

            if (self && !CoreContext.UserManager.IsUserInGroup(SecurityContext.CurrentAccount.ID, Core.Users.Constants.GroupAdmin.ID))
            {
                StudioNotifyService.Instance.SendMsgToAdminAboutProfileUpdated();
            }

            // change user type
            var canBeGuestFlag = !user.IsOwner() && !user.IsAdmin() && !user.GetListAdminModules().Any() && !user.IsMe();

            if (isVisitor && !user.IsVisitor() && canBeGuestFlag)
            {
                CoreContext.UserManager.AddUserIntoGroup(user.ID, Core.Users.Constants.GroupVisitor.ID);
                WebItemSecurity.ClearCache();
            }

            if (!self && !isVisitor && user.IsVisitor())
            {
                var usersQuota = TenantExtra.GetTenantQuota().ActiveUsers;
                if (TenantStatisticsProvider.GetUsersCount() < usersQuota)
                {
                    CoreContext.UserManager.RemoveUserFromGroup(user.ID, Core.Users.Constants.GroupVisitor.ID);
                    WebItemSecurity.ClearCache();
                }
                else
                {
                    throw new TenantQuotaException(string.Format("Exceeds the maximum active users ({0})", usersQuota));
                }
            }

            CoreContext.UserManager.SaveUserInfo(user, isVisitor);
            MessageService.Send(Request, MessageAction.UserUpdated, user.DisplayUserName(false));

            return(new EmployeeWraperFull(user));
        }
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                _context = context;

                SecurityContext.AuthenticateMe(ASC.Core.Configuration.Constants.CoreSystem);

                if (!CheckPermission())
                {
                    throw new Exception(CRMSettingResource.WebToLeadsForm_InvalidKeyException);
                }

                var productInfo = WebItemSecurity.GetSecurityInfo(ProductEntryPoint.ID.ToString());
                if (!productInfo.Enabled)
                {
                    throw new Exception(CRMCommonResource.CRMProductIsDisabled);
                }

                Contact contact;

                var fieldCollector = new NameValueCollection();

                var addressTemplate = new JObject();
                foreach (String addressPartName in Enum.GetNames(typeof(AddressPart)))
                {
                    addressTemplate.Add(addressPartName.ToLower(), "");
                }
                var addressTemplateStr = addressTemplate.ToString();

                var isCompany = false;

                var isCompanyString = GetValue("is_company");
                var firstName       = GetValue("firstName");
                var lastName        = GetValue("lastName");
                var companyName     = GetValue("companyName");

                if (!String.IsNullOrEmpty(isCompanyString))
                {
                    if (!Boolean.TryParse(isCompanyString, out isCompany))
                    {
                        throw new ArgumentException();
                    }
                }
                else //old scheme
                {
                    if (!String.IsNullOrEmpty(firstName))
                    {
                        isCompany = false;
                    }
                    else if (!String.IsNullOrEmpty(companyName))
                    {
                        isCompany = true;
                    }
                    else
                    {
                        throw new ArgumentException();
                    }
                }


                if (isCompany)
                {
                    contact = new Company();

                    ((Company)contact).CompanyName = companyName;

                    fieldCollector.Add(CRMContactResource.CompanyName, companyName);
                }
                else
                {
                    contact = new Person();

                    ((Person)contact).FirstName = firstName;
                    ((Person)contact).LastName  = lastName;
                    ((Person)contact).JobTitle  = GetValue("jobTitle");

                    fieldCollector.Add(CRMContactResource.FirstName, firstName);
                    fieldCollector.Add(CRMContactResource.LastName, lastName);

                    if (!String.IsNullOrEmpty(GetValue("jobTitle")))
                    {
                        fieldCollector.Add(CRMContactResource.JobTitle, ((Person)contact).JobTitle);
                    }
                }

                contact.About = GetValue("about");

                if (!String.IsNullOrEmpty(contact.About))
                {
                    fieldCollector.Add(CRMContactResource.About, contact.About);
                }

                if (!String.IsNullOrEmpty(GetValue("is_shared")))
                {
                    contact.ShareType = Convert.ToBoolean(GetValue("is_shared")) ? ShareType.ReadWrite : ShareType.None;
                }
                else
                {
                    contact.ShareType = (ShareType)(Convert.ToInt32(GetValue("share_type")));
                }

                contact.ID = Global.DaoFactory.GetContactDao().SaveContact(contact);

                var messageAction = contact is Company ? MessageAction.CompanyCreatedWithWebForm : MessageAction.PersonCreatedWithWebForm;
                MessageService.Send(HttpContext.Current.Request, MessageInitiator.System, messageAction, contact.GetTitle());

                var contactInfos = new List <ContactInfo>();

                foreach (var key in _context.Request.Form.AllKeys)
                {
                    if (key.StartsWith("customField_"))
                    {
                        var    fieldID    = Convert.ToInt32(key.Split(new[] { '_' })[1]);
                        String fieldValue = GetValue(key);

                        if (String.IsNullOrEmpty(fieldValue))
                        {
                            continue;
                        }

                        var customField = Global.DaoFactory.GetCustomFieldDao().GetFieldDescription(fieldID);

                        if (customField == null ||
                            !(customField.EntityType == EntityType.Contact ||
                              customField.EntityType == EntityType.Company && isCompany ||
                              customField.EntityType == EntityType.Person && !isCompany))
                        {
                            continue;
                        }

                        if (customField.FieldType == CustomFieldType.CheckBox)
                        {
                            fieldValue = fieldValue == "on" || fieldValue == "true" ? "true" : "false";
                        }
                        fieldCollector.Add(customField.Label, fieldValue);

                        Global.DaoFactory.GetCustomFieldDao().SetFieldValue(isCompany ? EntityType.Company : EntityType.Person, contact.ID, fieldID, fieldValue);
                    }
                    else if (key.StartsWith("contactInfo_"))
                    {
                        var nameParts       = key.Split(new[] { '_' }).Skip(1).ToList();
                        var contactInfoType = (ContactInfoType)Enum.Parse(typeof(ContactInfoType), nameParts[0]);
                        var category        = Convert.ToInt32(nameParts[1]);

                        bool categoryIsExists = Enum.GetValues(ContactInfo.GetCategory(contactInfoType)).Cast <object>()
                                                .Any(categoryEnum => (int)categoryEnum == category);
                        if (!categoryIsExists)
                        {
                            throw new ArgumentException(String.Format("Category for {0} not found", nameParts[0]));
                        }

                        if (contactInfoType == ContactInfoType.Address)
                        {
                            var addressPart = (AddressPart)Enum.Parse(typeof(AddressPart), nameParts[2]);

                            var findedAddress = contactInfos.Find(item => (category == item.Category) && (item.InfoType == ContactInfoType.Address));

                            if (findedAddress == null)
                            {
                                findedAddress = new ContactInfo
                                {
                                    Category  = category,
                                    InfoType  = contactInfoType,
                                    Data      = addressTemplateStr,
                                    ContactID = contact.ID
                                };

                                contactInfos.Add(findedAddress);
                            }

                            var addressParts = JObject.Parse(findedAddress.Data);

                            addressParts[addressPart.ToString().ToLower()] = GetValue(key);

                            findedAddress.Data = addressParts.ToString();

                            continue;
                        }

                        var fieldValue = GetValue(key);

                        if (String.IsNullOrEmpty(fieldValue))
                        {
                            continue;
                        }

                        contactInfos.Add(new ContactInfo
                        {
                            Category  = category,
                            InfoType  = contactInfoType,
                            Data      = fieldValue,
                            ContactID = contact.ID,
                            IsPrimary = true
                        });
                    }
                    else if (String.Compare(key, "tag", true) == 0)
                    {
                        var tags = _context.Request.Form.GetValues("tag");

                        Global.DaoFactory.GetTagDao().SetTagToEntity(EntityType.Contact, contact.ID, tags);
                    }
                }

                contactInfos.ForEach(item => fieldCollector[item.InfoType.ToLocalizedString()] = PrepareteDataToView(item.InfoType, item.Data));

                Global.DaoFactory.GetContactInfoDao().SaveList(contactInfos);

                var notifyList = GetValue("notify_list");

                if (!String.IsNullOrEmpty(notifyList))
                {
                    NotifyClient.Instance.SendAboutCreateNewContact(
                        notifyList
                        .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                        .Select(item => new Guid(item)).ToList(), contact.ID, contact.GetTitle(), fieldCollector);
                }

                var managersList = GetValue("managers_list");
                SetPermission(contact, managersList);

                if (contact is Person && !String.IsNullOrEmpty(companyName))
                {
                    AssignPersonToCompany((Person)contact, companyName, managersList);
                }

                if (contact is Company && !String.IsNullOrEmpty(firstName) && !String.IsNullOrEmpty(lastName))
                {
                    AssignCompanyToPerson((Company)contact, firstName, lastName, managersList);
                }

                SecurityContext.Logout();

                var newURL = new UriBuilder(GetValue("return_url")).Uri.AbsoluteUri;
                context.Response.Buffer = true;
                context.Response.Status = "302 Object moved";
                context.Response.AddHeader("Location", newURL);
                context.Response.Write("<HTML><Head>");
                context.Response.Write(String.Format("<META HTTP-EQUIV=Refresh CONTENT=\"0;URL={0}\">", newURL));
                context.Response.Write(String.Format("<Script>window.location='{0}';</Script>", newURL));
                context.Response.Write("</Head>");
                context.Response.Write("</HTML>");
            }
            catch (Exception error)
            {
                LogManager.GetLogger("ASC.CRM").Error(error);
                context.Response.StatusCode = 400;
                context.Response.Write(HttpUtility.HtmlEncode(error.Message));
            }
        }
Exemplo n.º 8
0
 public FeedModule(TenantManager tenantManager, WebItemSecurity webItemSecurity)
 {
     TenantManager   = tenantManager;
     WebItemSecurity = webItemSecurity;
 }
Exemplo n.º 9
0
        private void LoadControls()
        {
            var feedList = (FeedList)LoadControl(FeedList.Location);

            loaderHolder.Controls.Add(LoadControl(LoaderPage.Location));
            controlsHolder.Controls.Add(feedList);

            var emptyScreen = new EmptyScreenControl
            {
                ID       = "emptyFeedScr",
                ImgSrc   = WebPath.GetPath("UserControls/Feed/images/empty_screen_feed.png"),
                Header   = UserControlsCommonResource.NewsNotFound,
                Describe = UserControlsCommonResource.NewsNotFoundDescription
            };

            emptyScreensHolder.Controls.Add(emptyScreen);

            var emptyFilterScreen = new EmptyScreenControl
            {
                ID         = "emptyFeedFilterScr",
                ImgSrc     = WebPath.GetPath("UserControls/Feed/images/empty_filter.png"),
                Header     = UserControlsCommonResource.FilterNoNews,
                Describe   = UserControlsCommonResource.FilterNoNewsDescription,
                ButtonHTML =
                    string.Format("<a href='javascript:void(0)' class='baseLinkAction clearFilterButton'>{0}</a>",
                                  UserControlsCommonResource.ResetFilter)
            };

            emptyScreensHolder.Controls.Add(emptyFilterScreen);

            var managerEmptyScreen = (ManagerDashboardEmptyScreen)Page.LoadControl(ManagerDashboardEmptyScreen.Location);

            emptyScreensHolder.Controls.Add(managerEmptyScreen);

            var userId    = SecurityContext.CurrentAccount.ID;
            var isVisitor = CoreContext.UserManager.GetUsers(userId).IsVisitor();

            emptyScreensHolder.Controls.Add(new EmptyScreenControl
            {
                ID         = "emptyListCommunity",
                ImgSrc     = WebImageSupplier.GetAbsoluteWebPath("community150.png"),
                Header     = UserControlsCommonResource.FeedEmptyCommunityHeader,
                Describe   = isVisitor ? string.Empty : UserControlsCommonResource.FeedEmptyCommunityDescription,
                ButtonHTML = isVisitor
                                     ? string.Empty
                                     : string.Format("<a class='link underline plus' href='{0}'>{1}</a>" +
                                                     "<br/><a class='link underline plus' href='{2}'>{3}</a>" +
                                                     "<br/><a class='link underline plus' href='{4}'>{5}</a>",
                                                     VirtualPathUtility.ToAbsolute("~/Products/Community/Modules/Blogs/AddBlog.aspx"),
                                                     UserControlsCommonResource.FeedBlogsModuleLink,
                                                     VirtualPathUtility.ToAbsolute("~/Products/Community/Modules/News/EditNews.aspx"),
                                                     UserControlsCommonResource.FeedEventsModuleLink,
                                                     VirtualPathUtility.ToAbsolute("~/Products/Community/Modules/Bookmarking/CreateBookmark.aspx"),
                                                     UserControlsCommonResource.FeedBookmarkModuleLink)
            });

            emptyScreensHolder.Controls.Add(new EmptyScreenControl
            {
                ID         = "emptyListCrm",
                ImgSrc     = WebImageSupplier.GetAbsoluteWebPath("empty_screen_persons.png", WebItemManager.CRMProductID),
                Header     = UserControlsCommonResource.FeedEmptyContactListHeader,
                Describe   = UserControlsCommonResource.FeedEmptyContactListDescription,
                ButtonHTML = string.Format("<a class='link underline plus' href='{0}?action=manage'>{1}</a><br/>" +
                                           "<a class='link underline plus' href='{0}?action=manage&type=people'>{2}</a>",
                                           VirtualPathUtility.ToAbsolute("~/Products/CRM/Default.aspx"),
                                           UserControlsCommonResource.FeedCreateFirstCompany,
                                           UserControlsCommonResource.FeedCreateFirstPerson)
            });

            var canCreateProjects =
                !isVisitor &&
                (CoreContext.UserManager.IsUserInGroup(userId, Constants.GroupAdmin.ID) ||
                 WebItemSecurity.IsProductAdministrator(WebItemManager.ProjectsProductID, userId));

            emptyScreensHolder.Controls.Add(new EmptyScreenControl
            {
                Header     = UserControlsCommonResource.FeedEmptyListProjHeader,
                ImgSrc     = WebImageSupplier.GetAbsoluteWebPath("projects_logo.png", WebItemManager.ProjectsProductID),
                Describe   = canCreateProjects ? UserControlsCommonResource.FeedEmptyListProjDescribe : string.Empty,
                ID         = "emptyListProjects",
                ButtonHTML = canCreateProjects
                                     ? string.Format("<a href='{0}' class='link underline addFirstElement'>{1}<a>",
                                                     VirtualPathUtility.ToAbsolute("~/Products/Projects/Projects.aspx?action=add"),
                                                     UserControlsCommonResource.FeedCreateFirstProject)
                                     : string.Empty
            });

            emptyScreensHolder.Controls.Add(new EmptyScreenControl
            {
                ID         = "emptyListDocuments",
                ImgSrc     = WebImageSupplier.GetAbsoluteWebPath("documents150.png"),
                Header     = UserControlsCommonResource.FeedCorporateFiles,
                Describe   = UserControlsCommonResource.FeedEmptyScreenDescrCorporate,
                ButtonHTML = string.Format("<a href=\"{0}\" class=\"link underline up\">{1}</a>",
                                           VirtualPathUtility.ToAbsolute("~/Products/Files/"),
                                           UserControlsCommonResource.FeedButtonGotoDocuments)
            });
        }
Exemplo n.º 10
0
        private List <Item> GetDataSource()
        {
            var data    = new List <Item>();
            var modules = WebItemManager.Instance.GetItems(WebZoneType.All, ItemAvailableState.All).Where(item => !item.IsSubItem()).ToList();

            foreach (var p in Products)
            {
                foreach (var m in modules)
                {
                    if (Guid.Equals(m.ID, p.ID))
                    {
                        modules.Remove(m);
                        break;
                    }
                }

                var item = new Item
                {
                    ID                     = p.ID,
                    Name                   = p.Name,
                    IconUrl                = p.GetIconAbsoluteURL(),
                    DisabledIconUrl        = p.GetDisabledIconAbsoluteURL(),
                    SubItems               = new List <Item>(),
                    ItemName               = p.GetSysName(),
                    UserOpportunitiesLabel = String.Format(Resources.Resource.AccessRightsProductUsersCan, p.Name),
                    UserOpportunities      = p.GetUserOpportunities(),
                    HasPermissionSettings  = true,
                    CanNotBeDisabled       = p.CanNotBeDisabled()
                };

                if (p.HasComplexHierarchyOfAccessRights())
                {
                    item.UserOpportunitiesLabel = String.Format(Resources.Resource.AccessRightsProductUsersWithRightsCan, item.Name);
                }

                var productInfo = WebItemSecurity.GetSecurityInfo(item.ID.ToString());
                item.Disabled       = !productInfo.Enabled;
                item.SelectedGroups = productInfo.Groups.ToList();
                item.SelectedUsers  = productInfo.Users.ToList();

                foreach (var m in p.Modules)
                {
                    if ((m as Module) != null && (m as IWebItem) != null)
                    {
                        var subItem = new Item
                        {
                            Name            = m.Name,
                            ID              = m.ID,
                            DisplayedAlways = (m as Module).DisplayedAlways,
                            ItemName        = m.GetSysName()
                        };

                        var moduleInfo = WebItemSecurity.GetSecurityInfo(subItem.ID.ToString());
                        subItem.Disabled       = !moduleInfo.Enabled;
                        subItem.SelectedGroups = moduleInfo.Groups.ToList();
                        subItem.SelectedUsers  = moduleInfo.Users.ToList();

                        item.SubItems.Add(subItem);
                    }
                }

                data.Add(item);
            }

            foreach (var m in modules)
            {
                var item = new Item
                {
                    ID              = m.ID,
                    Name            = m.Name,
                    IconUrl         = m.GetIconAbsoluteURL(),
                    DisabledIconUrl = m.GetDisabledIconAbsoluteURL(),
                    SubItems        = new List <Item>(),
                    ItemName        = m.GetSysName()
                };

                var moduleInfo = WebItemSecurity.GetSecurityInfo(item.ID.ToString());
                item.Disabled       = !moduleInfo.Enabled;
                item.SelectedGroups = moduleInfo.Groups.ToList();
                item.SelectedUsers  = moduleInfo.Users.ToList();

                data.Add(item);
            }

            return(data);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Search emails in Accounts, Mail, CRM, Peaople Contact System
        /// </summary>
        /// <param name="tenant">Tenant id</param>
        /// <param name="userName">User id</param>
        /// <param name="term">Search word</param>
        /// <param name="maxCountPerSystem">limit result per Contact System</param>
        /// <param name="timeout">Timeout in milliseconds</param>
        /// <param name="httpContextScheme"></param>
        /// <returns></returns>
        public List <string> SearchEmails(int tenant, string userName, string term, int maxCountPerSystem, string httpContextScheme, int timeout = -1)
        {
            var equality = new ContactEqualityComparer();
            var contacts = new List <string>();
            var userGuid = new Guid(userName);

            var watch = new Stopwatch();

            watch.Start();

            var apiHelper = new ApiHelper(httpContextScheme);

            var taskList = new List <Task <List <string> > >()
            {
                Task.Run(() =>
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant);
                    SecurityContext.AuthenticateMe(userGuid);

                    return(SearchMailContacts(tenant, userName, term, maxCountPerSystem).ToList());
                }),

                Task.Run(() =>
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant);
                    SecurityContext.AuthenticateMe(userGuid);

                    return(SearchAccountEmails(tenant, userName, term));
                }),

                Task.Run(() =>
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant);
                    SecurityContext.AuthenticateMe(userGuid);

                    return(WebItemSecurity.IsAvailableForUser(WebItemManager.CRMProductID.ToString(),
                                                              SecurityContext.CurrentAccount.ID)
                        ? apiHelper.SearchCrmEmails(term, maxCountPerSystem)
                        : new List <string>());
                }),

                Task.Run(() =>
                {
                    CoreContext.TenantManager.SetCurrentTenant(tenant);
                    SecurityContext.AuthenticateMe(userGuid);

                    return(WebItemSecurity.IsAvailableForUser(WebItemManager.PeopleProductID.ToString(),
                                                              SecurityContext.CurrentAccount.ID)
                        ? apiHelper.SearchPeopleEmails(term, 0, maxCountPerSystem)
                        : new List <string>());
                })
            };

            try
            {
                var taskArray = taskList.ToArray <Task>();

                Task.WaitAll(taskArray, timeout);

                watch.Stop();
            }
            catch (AggregateException e)
            {
                watch.Stop();

                var errorText =
                    new StringBuilder("SearchEmails: \nThe following exceptions have been thrown by WaitAll():");

                foreach (var t in e.InnerExceptions)
                {
                    errorText
                    .AppendFormat("\n-------------------------------------------------\n{0}", t);
                }

                _log.Error(errorText.ToString());
            }

            contacts =
                taskList.Aggregate(contacts,
                                   (current, task) => !task.IsFaulted &&
                                   task.IsCompleted &&
                                   !task.IsCanceled
                        ? current.Concat(task.Result).ToList()
                        : current)
                .Distinct(equality)
                .ToList();

            _log.Debug("SearchEmails (term = '{0}'): {1} sec / {2} items", term, watch.Elapsed.TotalSeconds, contacts.Count);

            return(contacts);
        }
        public static List <string> GetListAdminModules(this UserInfo ui, Tenant tenant)
        {
            var products = WebItemManager.Instance.GetItemsAll().Where(i => i is IProduct || i.ID == WebItemManager.MailProductID);

            return((from product in products where WebItemSecurity.IsProductAdministrator(tenant, product.ID, ui.ID) select product.ProductClassName).ToList());
        }
Exemplo n.º 13
0
 protected bool IsAdmin()
 {
     return(WebItemSecurity.IsProductAdministrator(WebItemManager.PeopleProductID, SecurityContext.CurrentAccount.ID));
 }
Exemplo n.º 14
0
        public object IsProductAdministrator(Guid productid, Guid userid)
        {
            var result = WebItemSecurity.IsProductAdministrator(productid, userid);

            return(new { ProductId = productid, UserId = userid, Administrator = result, });
        }
Exemplo n.º 15
0
 public static bool IsAdministrator(Guid userId)
 {
     return(CoreContext.UserManager.IsUserInGroup(userId, Constants.GroupAdmin.ID) ||
            WebItemSecurity.IsProductAdministrator(EngineFactory.ProductId, userId));
 }
Exemplo n.º 16
0
 public static bool IsCrmAvailable()
 {
     return(WebItemSecurity.IsAvailableForMe(WebItemManager.CRMProductID));
 }
Exemplo n.º 17
0
        public IEnumerable <EmployeeWraperFull> GetByFilter(EmployeeStatus?employeeStatus, Guid?groupId, EmployeeActivationStatus?activationStatus, EmployeeType?employeeType, bool?isAdministrator)
        {
            if (CoreContext.Configuration.Personal)
            {
                throw new MethodAccessException("Method not available on personal.onlyoffice.com");
            }
            var isAdmin = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsAdmin() ||
                          WebItemSecurity.IsProductAdministrator(WebItemManager.PeopleProductID, SecurityContext.CurrentAccount.ID);
            var status = isAdmin ? EmployeeStatus.All : EmployeeStatus.Default;

            if (employeeStatus != null)
            {
                switch (employeeStatus)
                {
                case EmployeeStatus.Terminated:
                case EmployeeStatus.All:
                    status = isAdmin ? (EmployeeStatus)employeeStatus : EmployeeStatus.Default;
                    break;

                default:
                    status = (EmployeeStatus)employeeStatus;
                    break;
                }
            }

            var users = String.IsNullOrEmpty(_context.FilterValue) ?
                        CoreContext.UserManager.GetUsers(status).AsEnumerable() :
                        CoreContext.UserManager.Search(_context.FilterValue, status).AsEnumerable();

            if (groupId != null && !groupId.Equals(Guid.Empty))
            {
                users = users.Where(x => CoreContext.UserManager.IsUserInGroup(x.ID, (Guid)groupId));
            }
            if (activationStatus != null)
            {
                users = activationStatus == EmployeeActivationStatus.Activated ?
                        users.Where(x => x.ActivationStatus == EmployeeActivationStatus.Activated) :
                        users.Where(x => x.ActivationStatus == EmployeeActivationStatus.NotActivated ||
                                    x.ActivationStatus == EmployeeActivationStatus.Pending);
            }
            if (employeeType != null)
            {
                switch (employeeType)
                {
                case EmployeeType.User:
                    users = users.Where(x => !x.IsVisitor());
                    break;

                case EmployeeType.Visitor:
                    users = users.Where(x => x.IsVisitor());
                    break;
                }
            }

            if (isAdministrator.HasValue && isAdministrator.Value)
            {
                users = users.Where(x => x.IsAdmin() || x.GetListAdminModules().Any());
            }

            _context.TotalCount = users.Count();

            users = _context.SortDescending ? users.OrderByDescending(r => r.DisplayUserName()) : users.OrderBy(r => r.DisplayUserName());
            users = users.Skip((int)_context.StartIndex).Take((int)_context.Count - 1);

            _context.SetDataSorted();
            _context.SetDataPaginated();

            return(users.Select(x => new EmployeeWraperFull(x, _context)).ToSmartList());
        }
Exemplo n.º 18
0
 public static bool IsPeopleAvailable()
 {
     return(WebItemSecurity.IsAvailableForMe(WebItemManager.PeopleProductID));
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            CurrentUser = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID);

            Page.RegisterStyle("~/skins/page_default.less");

            var defaultPageSettings = SettingsManager.Instance.LoadSettings <StudioDefaultPageSettings>(TenantProvider.CurrentTenantID);

            if (defaultPageSettings != null && defaultPageSettings.DefaultProductID != Guid.Empty)
            {
                if (defaultPageSettings.DefaultProductID == defaultPageSettings.FeedModuleID && !CurrentUser.IsOutsider())
                {
                    Context.Response.Redirect("feed.aspx");
                }

                var products = WebItemManager.Instance.GetItemsAll <IProduct>();
                foreach (var p in products)
                {
                    if (p.ID.Equals(defaultPageSettings.DefaultProductID))
                    {
                        var productInfo = WebItemSecurity.GetSecurityInfo(p.ID.ToString());
                        if (productInfo.Enabled && WebItemSecurity.IsAvailableForUser(p.ID.ToString(), CurrentUser.ID))
                        {
                            Context.Response.Redirect(p.StartURL);
                        }
                    }
                }
            }

            Master.DisabledSidePanel = true;

            Title = Resources.Resource.MainPageTitle.HtmlEncode();
            defaultListProducts = WebItemManager.Instance.GetItems(Web.Core.WebZones.WebZoneType.StartProductList);
            _showDocs           = (Product)defaultListProducts.Find(r => r.ID == WebItemManager.DocumentsProductID);
            if (_showDocs != null)
            {
                defaultListProducts.RemoveAll(r => r.ID == _showDocs.ProductID);
            }


            var mailProduct = WebItemManager.Instance[WebItemManager.MailProductID];

            if (mailProduct != null && !mailProduct.IsDisabled())
            {
                mailProduct.Context.LargeIconFileName = "product_logolarge.png";
                defaultListProducts.Add(mailProduct);
            }

            var priority = new Dictionary <Guid, Int32>()
            {
                { WebItemManager.ProjectsProductID, 0 },
                { WebItemManager.CRMProductID, 1 },
                { WebItemManager.MailProductID, 2 },
                { WebItemManager.PeopleProductID, 3 },
                { WebItemManager.CommunityProductID, 4 }
            };

            defaultListProducts = defaultListProducts.OrderBy(p => (priority.Keys.Contains(p.ID) ? priority[p.ID] : 10)).ToList();

            if (CoreContext.Configuration.PartnerHosted)
            {
                IsAutorizePartner = false;
                var partner = CoreContext.PaymentManager.GetApprovedPartner();
                if (partner != null)
                {
                    IsAutorizePartner = !string.IsNullOrEmpty(partner.AuthorizedKey);
                    Partner           = partner;
                }
            }
        }
Exemplo n.º 20
0
 public static bool IsCalndarAvailable()
 {
     return(WebItemSecurity.IsAvailableForMe(WebItemManager.CalendarProductID));
 }
Exemplo n.º 21
0
        protected void Page_Load(object sender, EventArgs e)
        {
            CurrentUser = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID);

            Page.RegisterStyle("~/skins/page_default.less");

            var defaultPageSettings = StudioDefaultPageSettings.Load();

            if (defaultPageSettings != null && defaultPageSettings.DefaultProductID != Guid.Empty)
            {
                if (defaultPageSettings.DefaultProductID == defaultPageSettings.FeedModuleID && !CurrentUser.IsOutsider())
                {
                    Response.Redirect("Feed.aspx", true);
                }

                var webItem = WebItemManager.Instance[defaultPageSettings.DefaultProductID];
                if (webItem != null && webItem.Visible)
                {
                    var securityInfo = WebItemSecurity.GetSecurityInfo(defaultPageSettings.DefaultProductID.ToString());
                    if (securityInfo.Enabled && WebItemSecurity.IsAvailableForMe(defaultPageSettings.DefaultProductID))
                    {
                        var url = webItem.StartURL;
                        if (Request.DesktopApp())
                        {
                            url += "?desktop=true";
                            if (!string.IsNullOrEmpty(Request["first"]))
                            {
                                url += "&first=true";
                            }
                        }
                        Response.Redirect(url, true);
                    }
                }
            }

            Master.DisabledSidePanel = true;

            Title = Resource.MainPageTitle;
            defaultListProducts = WebItemManager.Instance.GetItems(Web.Core.WebZones.WebZoneType.StartProductList);
            _showDocs           = (Product)defaultListProducts.Find(r => r.ID == WebItemManager.DocumentsProductID);
            if (_showDocs != null)
            {
                defaultListProducts.RemoveAll(r => r.ID == _showDocs.ProductID);
            }

            var mailProduct = WebItemManager.Instance[WebItemManager.MailProductID];

            if (mailProduct != null && !mailProduct.IsDisabled())
            {
                defaultListProducts.Add(mailProduct);
            }

            var calendarProduct = WebItemManager.Instance[WebItemManager.CalendarProductID];

            if (calendarProduct != null && !calendarProduct.IsDisabled())
            {
                defaultListProducts.Add(calendarProduct);
            }

            var talkProduct = WebItemManager.Instance[WebItemManager.TalkProductID];

            if (talkProduct != null && !talkProduct.IsDisabled())
            {
                defaultListProducts.Add(talkProduct);
            }

            var priority = GetStartProductsPriority();

            defaultListProducts = defaultListProducts
                                  .Where(p => priority.Keys.Contains(p.ID))
                                  .OrderBy(p => priority[p.ID])
                                  .ToList();

            CustomNavigationItems = CustomNavigationSettings.Load().Items.Where(x => x.ShowOnHomePage);

            ProductsCount = defaultListProducts.Count() + CustomNavigationItems.Count() + (TenantExtra.EnableControlPanel ? 1 : 0);

            ResetCacheKey = ConfigurationManagerExtension.AppSettings["web.client.cache.resetkey"] ?? "";
        }
 public static bool IsAdministrator()
 {
     return(CoreContext.UserManager.IsUserInGroup(SecurityContext.CurrentAccount.ID, ASC.Core.Users.Constants.GroupAdmin.ID) ||
            WebItemSecurity.IsProductAdministrator(CommunityProduct.ID, SecurityContext.CurrentAccount.ID));
 }
        public List <MailTag> GetTagsList(int id_tenant, string id_user, bool mail_only)
        {
            var tags = new Dictionary <int, MailTag>();

            using (var db = GetDb())
            {
                db.ExecuteList(new SqlQuery(MAIL_TAG)
                               .Select(TagFields.id, TagFields.name, TagFields.style, TagFields.addresses, TagFields.count, TagFields.crm_id)
                               .Where(GetUserWhere(id_user, id_tenant)))
                .ForEach(r =>
                         tags.Add(0 < Convert.ToInt32(r[5]) ? -Convert.ToInt32(r[5]) : Convert.ToInt32(r[0]),
                                  new MailTag((0 < Convert.ToInt32(r[5]) && !mail_only) ? -Convert.ToInt32(r[5]) : Convert.ToInt32(r[0])
                                              , (string)r[1]
                                              , !string.IsNullOrEmpty(r[3].ToString()) ? r[3].ToString().Split(';').ToList() : new List <string>()
                                              , ConvertToString(r[2])
                                              , Convert.ToInt32(r[4])))
                         );
            }

            if (mail_only)
            {
                return(tags.Values.Where(p => p.Name != "").OrderByDescending(p => p.Id).ToList());
            }

            #region Set up connection to CRM sequrity
            CoreContext.TenantManager.SetCurrentTenant(id_tenant);
            SecurityContext.AuthenticateMe(CoreContext.Authentication.GetAccountByID(new Guid(id_user)));

            if (!WebItemSecurity.IsAvailableForUser(WebItemManager.CRMProductID.ToString(),
                                                    SecurityContext.CurrentAccount.ID))
            {
                return(tags.Values.Where(p => p.Name != "").OrderByDescending(p => p.Id).ToList());
            }

            #endregion

            using (var db = new DbManager("crm"))
            {
                var q = new SqlQuery(CRM_TAG + " t")
                        .Select("t." + CrmTagFields.id, "t." + CrmTagFields.title)
                        .Where(Exp.Eq("t." + CrmTagFields.tenant_id, id_tenant))
                        .Where(Exp.Eq("t." + CrmTagFields.entity_type, CRM_CONTACT_ENTITY_TYPE));

                var crm_tags = db.ExecuteList(q)
                               .ConvertAll(r =>
                                           new MailTag(-Convert.ToInt32(r[0])
                                                       , (string)r[1]
                                                       , new List <string>()
                                                       , ""
                                                       , 0));

                foreach (var tag in crm_tags)
                {
                    if (tags.ContainsKey(tag.Id))
                    {
                        tags[tag.Id].Name = tag.Name;
                    }
                    else
                    {
                        tags.Add(tag.Id, tag);
                    }
                }
            }

            return(tags.Values.Where(t => t.Name != "").OrderByDescending(p => p.Id).ToList());
        }
Exemplo n.º 24
0
        private void RegisterClientScript()
        {
            var isRetina = TenantLogoManager.IsRetina(HttpContext.Current.Request);

            Page.RegisterBodyScripts("~/UserControls/Management/AccessRights/js/accessrights.js")
            .RegisterStyle("~/UserControls/Management/AccessRights/css/accessrights.less");

            var curTenant    = CoreContext.TenantManager.GetCurrentTenant();
            var currentOwner = CoreContext.UserManager.GetUsers(curTenant.OwnerId);

            var admins = WebItemSecurity.GetProductAdministrators(Guid.Empty).ToList();

            admins = admins
                     .GroupBy(admin => admin.ID)
                     .Select(group => group.First())
                     .Where(admin => admin.ID != currentOwner.ID)
                     .SortByUserName();

            InitLdapRights();

            var sb = new StringBuilder();

            sb.AppendFormat("ownerId = \"{0}\";", curTenant.OwnerId);

            sb.AppendFormat("adminList = {0};", JsonConvert.SerializeObject(admins.ConvertAll(u => new
            {
                id           = u.ID,
                smallFotoUrl = u.GetSmallPhotoURL(),
                bigFotoUrl   = isRetina ? u.GetBigPhotoURL() : "",
                displayName  = u.DisplayUserName(),
                title        = u.Title.HtmlEncode(),
                userUrl      = CommonLinkUtility.GetUserProfile(u.ID),
                accessList   = GetAccessList(u.ID, WebItemSecurity.IsProductAdministrator(Guid.Empty, u.ID)),
                ldap         = LdapRights.Contains(u.ID.ToString())
            })));

            sb.AppendFormat("imageHelper = {0};", JsonConvert.SerializeObject(new
            {
                PeopleImgSrc  = WebImageSupplier.GetAbsoluteWebPath("user_12.png"),
                GroupImgSrc   = WebImageSupplier.GetAbsoluteWebPath("group_12.png"),
                TrashImgSrc   = WebImageSupplier.GetAbsoluteWebPath("trash_12.png"),
                TrashImgTitle = Resource.DeleteButton
            }));

            var managementPage = Page as Studio.Management;
            var tenantAccess   = managementPage != null ? managementPage.TenantAccess : TenantAccessSettings.Load();

            if (!tenantAccess.Anyone)
            {
                var productItemList = GetProductItemListForSerialization();

                foreach (var productItem in productItemList.Where(productItem => !productItem.CanNotBeDisabled))
                {
                    sb.AppendFormat("ASC.Settings.AccessRights.initProduct('{0}');", Convert.ToBase64String(
                                        Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(productItem))));
                }
            }

            sb.AppendFormat("ASC.Settings.AccessRights.init({0});",
                            JsonConvert.SerializeObject(Products.Select(p => p.GetSysName()).ToArray()));

            Page.RegisterInlineScript(sb.ToString());
        }
        private static void NotifyClientRegisterCallback(Context context, INotifyClient client)
        {
            #region url correction

            var absoluteUrl = new SendInterceptorSkeleton(
                "Web.UrlAbsoluter",
                InterceptorPlace.MessageSend,
                InterceptorLifetime.Global,
                (r, p) =>
            {
                if (r != null && r.CurrentMessage != null && r.CurrentMessage.ContentType == Pattern.HTMLContentType)
                {
                    var body = r.CurrentMessage.Body;

                    body = urlReplacer.Replace(body, m =>
                    {
                        var url = m.Groups["url"].Value;
                        var ind = m.Groups["url"].Index - m.Index;
                        return(string.IsNullOrEmpty(url) && ind > 0 ?
                               m.Value.Insert(ind, CommonLinkUtility.GetFullAbsolutePath(string.Empty)) :
                               m.Value.Replace(url, CommonLinkUtility.GetFullAbsolutePath(url)));
                    });

                    body = textileLinkReplacer.Replace(body, m =>
                    {
                        var url = m.Groups["link"].Value;
                        var ind = m.Groups["link"].Index - m.Index;
                        return(string.IsNullOrEmpty(url) && ind > 0 ?
                               m.Value.Insert(ind, CommonLinkUtility.GetFullAbsolutePath(string.Empty)) :
                               m.Value.Replace(url, CommonLinkUtility.GetFullAbsolutePath(url)));
                    });

                    r.CurrentMessage.Body = body;
                }
                return(false);
            });
            client.AddInterceptor(absoluteUrl);

            #endregion

            #region security and culture

            var securityAndCulture = new SendInterceptorSkeleton(
                "ProductSecurityInterceptor",
                InterceptorPlace.DirectSend,
                InterceptorLifetime.Global,
                (r, p) =>
            {
                try
                {
                    // culture
                    var u = ASC.Core.Users.Constants.LostUser;

                    if (32 <= r.Recipient.ID.Length)
                    {
                        var guid = default(Guid);
                        try
                        {
                            guid = new Guid(r.Recipient.ID);
                        }
                        catch (FormatException) { }
                        catch (OverflowException) { }

                        if (guid != default(Guid))
                        {
                            u = CoreContext.UserManager.GetUsers(guid);
                        }
                    }

                    if (ASC.Core.Users.Constants.LostUser.Equals(u))
                    {
                        u = CoreContext.UserManager.GetUserByEmail(r.Recipient.ID);
                    }

                    if (ASC.Core.Users.Constants.LostUser.Equals(u))
                    {
                        u = CoreContext.UserManager.GetUserByUserName(r.Recipient.ID);
                    }

                    if (!ASC.Core.Users.Constants.LostUser.Equals(u))
                    {
                        var culture = !string.IsNullOrEmpty(u.CultureName) ? u.GetCulture() : CoreContext.TenantManager.GetCurrentTenant().GetCulture();
                        Thread.CurrentThread.CurrentCulture   = culture;
                        Thread.CurrentThread.CurrentUICulture = culture;

                        // security
                        var tag       = r.Arguments.Find(a => a.Tag == CommonTags.ModuleID);
                        var productId = tag != null ? (Guid)tag.Value : Guid.Empty;
                        if (productId == Guid.Empty)
                        {
                            tag       = r.Arguments.Find(a => a.Tag == CommonTags.ProductID);
                            productId = tag != null ? (Guid)tag.Value : Guid.Empty;
                        }
                        if (productId == Guid.Empty)
                        {
                            productId = (Guid)(CallContext.GetData("asc.web.product_id") ?? Guid.Empty);
                        }
                        if (productId != Guid.Empty && productId != new Guid("f4d98afdd336433287783c6945c81ea0") /* ignore people product */)
                        {
                            return(!WebItemSecurity.IsAvailableForUser(productId.ToString(), u.ID));
                        }
                    }

                    var tagCulture = r.Arguments.FirstOrDefault(a => a.Tag == CommonTags.Culture);
                    if (tagCulture != null)
                    {
                        var culture = CultureInfo.GetCultureInfo((string)tagCulture.Value);
                        Thread.CurrentThread.CurrentCulture   = culture;
                        Thread.CurrentThread.CurrentUICulture = culture;
                    }
                }
                catch (Exception error)
                {
                    LogManager.GetLogger(typeof(NotifyConfiguration)).Error(error);
                }
                return(false);
            });
            client.AddInterceptor(securityAndCulture);

            #endregion

            #region white label correction

            var whiteLabel = new SendInterceptorSkeleton(
                "WhiteLabelInterceptor",
                InterceptorPlace.MessageSend,
                InterceptorLifetime.Global,
                (r, p) =>
            {
                try
                {
                    var tags = r.Arguments;

                    var logoTextTag = tags.FirstOrDefault(a => a.Tag == Constants.LetterLogoText);
                    var logoText    = logoTextTag != null ? (String)logoTextTag.Value : string.Empty;

                    if (!string.IsNullOrEmpty(logoText))
                    {
                        var body = r.CurrentMessage.Body
                                   .Replace(string.Format("${{{0}}}", Constants.LetterLogoTextTM), logoText)
                                   .Replace(string.Format("${{{0}}}", Constants.LetterLogoText), logoText);
                        r.CurrentMessage.Body = body;
                    }
                }
                catch (Exception error)
                {
                    LogManager.GetLogger(typeof(NotifyConfiguration)).Error(error);
                }
                return(false);
            });
            client.AddInterceptor(whiteLabel);

            #endregion
        }
        public object SaveSettings(bool anyone, bool registerUsers)
        {
            try
            {
                SecurityContext.DemandPermissions(SecutiryConstants.EditPortalSettings);

                var currentTenantQuota = CoreContext.TenantManager.GetTenantQuota(TenantProvider.CurrentTenantID);

                var enabled = SetupInfo.IsVisibleSettings("PublicPortal") &&
                              (currentTenantQuota.Free || currentTenantQuota.NonProfit || currentTenantQuota.Trial) && !currentTenantQuota.Open;

                if (!enabled)
                {
                    throw new SecurityException(Resource.PortalAccessSettingsTariffException);
                }

                var tenant = CoreContext.TenantManager.GetCurrentTenant();

                var currentSettings = TenantAccessSettings.Load();

                //do nothing if no changes detected
                if (currentSettings.Anyone != anyone)
                {
                    var items = WebItemManager.Instance.GetItemsAll();

                    if (anyone)
                    {
                        var openQuota = CoreContext.TenantManager.GetTenantQuotas(true).FirstOrDefault(q => q.Open);
                        SetQuota(openQuota);

                        foreach (var item in items)
                        {
                            WebItemSecurity.SetSecurity(item.ID.ToString(), item.ID != WebItemManager.CRMProductID, null); //disable crm product
                        }

                        new TenantAccessSettings {
                            Anyone = true, RegisterUsersImmediately = registerUsers
                        }.Save();
                        new StudioTrustedDomainSettings {
                            InviteUsersAsVisitors = false
                        }.Save();
                        new StudioAdminMessageSettings {
                            Enable = true
                        }.Save();

                        IPRestrictionsService.Save(new List <string>(), TenantProvider.CurrentTenantID);

                        tenant.TrustedDomainsType = registerUsers ? TenantTrustedDomainsType.All : TenantTrustedDomainsType.None;
                        CoreContext.TenantManager.SaveTenant(tenant);
                    }
                    else
                    {
                        var freeQuota = CoreContext.TenantManager.GetTenantQuotas(true).FirstOrDefault(q => q.Id == Tariff.CreateDefault().QuotaId);
                        SetQuota(freeQuota);

                        new TenantAccessSettings {
                            Anyone = false, RegisterUsersImmediately = false
                        }.Save();
                        new StudioTrustedDomainSettings {
                            InviteUsersAsVisitors = false
                        }.Save();
                        new StudioAdminMessageSettings {
                            Enable = false
                        }.Save();

                        foreach (var item in items)
                        {
                            WebItemSecurity.SetSecurity(item.ID.ToString(), true, null);
                        }

                        tenant.TrustedDomainsType = TenantTrustedDomainsType.None;
                        CoreContext.TenantManager.SaveTenant(tenant);
                    }

                    MessageService.Send(HttpContext.Current.Request, MessageAction.PortalAccessSettingsUpdated);
                }
                else if (anyone && currentSettings.RegisterUsersImmediately != registerUsers)
                {
                    new TenantAccessSettings {
                        Anyone = true, RegisterUsersImmediately = registerUsers
                    }.Save();
                    tenant.TrustedDomainsType = registerUsers ? TenantTrustedDomainsType.All : TenantTrustedDomainsType.None;
                    CoreContext.TenantManager.SaveTenant(tenant);
                }

                return(new
                {
                    Status = 1,
                    Message = Resource.SuccessfullySaveSettingsMessage
                });
            }
            catch (Exception e)
            {
                return(new
                {
                    Status = 0,
                    Message = e.Message.HtmlEncode()
                });
            }
        }
Exemplo n.º 27
0
 public FileSecurityCommon(UserManager userManager, WebItemSecurity webItemSecurity)
 {
     UserManager     = userManager;
     WebItemSecurity = webItemSecurity;
 }
Exemplo n.º 28
0
        public List <MailTag> GetTags(int tenant, string user, bool mailOnly)
        {
            var tags = new Dictionary <int, MailTag>();

            using (var db = GetDb())
            {
                db.ExecuteList(new SqlQuery(TagTable.name)
                               .Select(TagTable.Columns.id, TagTable.Columns.name, TagTable.Columns.style,
                                       TagTable.Columns.addresses, TagTable.Columns.count, TagTable.Columns.crm_id)
                               .Where(GetUserWhere(user, tenant)))
                .ForEach(r =>
                         tags.Add(0 < Convert.ToInt32(r[5]) ? -Convert.ToInt32(r[5]) : Convert.ToInt32(r[0]),
                                  new MailTag(
                                      (0 < Convert.ToInt32(r[5]) && !mailOnly)
                                            ? -Convert.ToInt32(r[5])
                                            : Convert.ToInt32(r[0])
                                      , (string)r[1]
                                      ,
                                      !string.IsNullOrEmpty(r[3].ToString())
                                            ? r[3].ToString().Split(';').ToList()
                                            : new List <string>()
                                      , ConvertToString(r[2])
                                      , Convert.ToInt32(r[4])))
                         );
            }

            if (mailOnly)
            {
                return(tags.Values.Where(p => p.Name != "").OrderByDescending(p => p.Id).ToList());
            }

            //TODO: Move to crm api

            if (!WebItemSecurity.IsAvailableForUser(WebItemManager.CRMProductID.ToString(),
                                                    SecurityContext.CurrentAccount.ID))
            {
                return(tags.Values.Where(p => p.Name != "").OrderByDescending(p => p.Id).ToList());
            }

            const string crm_tag_alias = "t";

            using (var db = new DbManager("crm"))
            {
                var q = new SqlQuery(CrmTagTable.name.Alias(crm_tag_alias))
                        .Select(CrmTagTable.Columns.id.Prefix(crm_tag_alias), CrmTagTable.Columns.title.Prefix(crm_tag_alias))
                        .Where(CrmTagTable.Columns.tenant_id.Prefix(crm_tag_alias), tenant)
                        .Where(CrmTagTable.Columns.entity_type.Prefix(crm_tag_alias), CRM_CONTACT_ENTITY_TYPE);

                var crmTags = db.ExecuteList(q)
                              .ConvertAll(r =>
                                          new MailTag(-Convert.ToInt32(r[0])
                                                      , (string)r[1]
                                                      , new List <string>()
                                                      , ""
                                                      , 0));

                foreach (var tag in crmTags)
                {
                    if (tags.ContainsKey(tag.Id))
                    {
                        tags[tag.Id].Name = tag.Name;
                    }
                    else
                    {
                        tags.Add(tag.Id, tag);
                    }
                }
            }

            return(tags.Values.Where(t => t.Name != "").OrderByDescending(p => p.Id).ToList());
        }
Exemplo n.º 29
0
 public virtual bool VisibleFor(Feed feed, object data, Guid userId)
 {
     return(WebItemSecurity.IsAvailableForUser(ProductID, userId));
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (UserProfileHelper == null)
            {
                UserProfileHelper = new ProfileHelper(SecurityContext.CurrentAccount.ID.ToString());
            }
            UserInfo         = UserProfileHelper.UserInfo;
            ShowSocialLogins = UserInfo.IsMe();

            IsAdmin = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsAdmin() ||
                      WebItemSecurity.IsProductAdministrator(WebItemManager.PeopleProductID, SecurityContext.CurrentAccount.ID);

            IsVisitor = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsVisitor();

            if (!IsAdmin && (UserInfo.Status != EmployeeStatus.Active))
            {
                Response.Redirect(CommonLinkUtility.GetFullAbsolutePath("~/products/people/"), true);
            }

            Role = GetRole();

            Actions = new AllowedActions(UserInfo);

            LdapFields = ASC.ActiveDirectory.Base.Settings.LdapSettings.GetImportedFields;

            HappyBirthday = CheckHappyBirthday();

            ContactPhones.DataSource = UserProfileHelper.Phones;
            ContactPhones.DataBind();

            ContactEmails.DataSource = UserProfileHelper.Emails;
            ContactEmails.DataBind();

            ContactMessengers.DataSource = UserProfileHelper.Messengers;
            ContactMessengers.DataBind();

            ContactSoccontacts.DataSource = UserProfileHelper.Contacts;
            ContactSoccontacts.DataBind();

            _deleteProfileContainer.Options.IsPopup = true;

            Page.RegisterStyle("~/UserControls/Users/UserProfile/css/userprofilecontrol_style.less")
            .RegisterBodyScripts(VirtualPathUtility.ToAbsolute("~/UserControls/Users/UserProfile/js/userprofilecontrol.js"));

            if (Actions.AllowEdit)
            {
                _editControlsHolder.Controls.Add(LoadControl(PwdTool.Location));
            }
            if (Actions.AllowEdit || (UserInfo.IsOwner() && IsAdmin))
            {
                var control = (UserEmailChange)LoadControl(UserEmailChange.Location);
                control.UserInfo = UserInfo;
                control.RegisterStylesAndScripts = false;
                userEmailChange.Controls.Add(control);
            }

            if (ShowSocialLogins && AccountLinkControl.IsNotEmpty)
            {
                var accountLink = (AccountLinkControl)LoadControl(AccountLinkControl.Location);
                accountLink.ClientCallback = "loginCallback";
                accountLink.SettingsView   = true;
                _accountPlaceholder.Controls.Add(accountLink);
            }

            var emailControl = (UserEmailControl)LoadControl(UserEmailControl.Location);

            emailControl.User   = UserInfo;
            emailControl.Viewer = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID);
            _phEmailControlsHolder.Controls.Add(emailControl);

            var photoControl = (LoadPhotoControl)LoadControl(LoadPhotoControl.Location);

            photoControl.User = UserInfo;
            loadPhotoWindow.Controls.Add(photoControl);

            if (UserInfo.IsMe() && SetupInfo.EnabledCultures.Count > 1)
            {
                _phLanguage.Controls.Add(LoadControl(UserLanguage.Location));
            }

            if ((UserInfo.IsLDAP() && !String.IsNullOrEmpty(UserInfo.MobilePhone)) ||
                !String.IsNullOrEmpty(UserInfo.MobilePhone) ||
                UserInfo.IsMe())
            {
                ShowPrimaryMobile = true;
                if (Actions.AllowEdit && (!UserInfo.IsLDAP() || UserInfo.IsLDAP() && !LdapFields.Contains(LdapMapping.MobilePhoneAttribute)))
                {
                    var changeMobile = (ChangeMobileNumber)LoadControl(ChangeMobileNumber.Location);
                    changeMobile.User = UserInfo;
                    ChangeMobileHolder.Controls.Add(changeMobile);
                }
            }

            if (TfaAppAuthSettings.IsVisibleSettings && TfaAppAuthSettings.Enable && TfaAppUserSettings.EnableForUser(UserInfo.ID) && (UserInfo.IsMe() || IsAdmin))
            {
                ShowTfaAppSettings = true;

                if (UserInfo.IsMe() || IsAdmin)
                {
                    var resetApp = (ResetAppDialog)LoadControl(ResetAppDialog.Location);
                    resetApp.User = UserInfo;
                    _backupCodesPlaceholder.Controls.Add(resetApp);
                }
                if (UserInfo.IsMe())
                {
                    var showBackup = (ShowBackupCodesDialog)LoadControl(ShowBackupCodesDialog.Location);
                    showBackup.User = UserInfo;
                    _backupCodesPlaceholder.Controls.Add(showBackup);
                }
            }

            if (UserInfo.BirthDate.HasValue)
            {
                switch (HappyBirthday)
                {
                case 0:
                    BirthDayText = Resource.DrnToday;
                    break;

                case 1:
                    BirthDayText = Resource.DrnTomorrow;
                    break;

                case 2:
                    BirthDayText = Resource.In + " " + DateTimeExtension.Yet(2);
                    break;

                case 3:
                    BirthDayText = Resource.In + " " + DateTimeExtension.Yet(3);
                    break;

                default:
                    BirthDayText = String.Empty;
                    break;
                }
            }

            if (UserInfo.Status != EmployeeStatus.Terminated)
            {
                Groups = CoreContext.UserManager.GetUserGroups(UserInfo.ID).ToList();
            }
        }