public void Create(CompanyPlanObject plan)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                Plans_Organization newPlan = new Plans_Organization();
                newPlan.OrgPlanName = plan.CompanyPlanName;
                newPlan.MaxUsers = plan.MaxUser;
                newPlan.MaxDomains = plan.MaxDomains;
                newPlan.MaxExchangeMailboxes = plan.MaxExchangeMailboxes;
                newPlan.MaxExchangeContacts = plan.MaxExchangeContacts;
                newPlan.MaxExchangeDistLists = plan.MaxExchangeDistributionGroups;
                newPlan.MaxExchangeResourceMailboxes = plan.MaxExchangeResourceMailboxes;
                newPlan.MaxExchangeMailPublicFolders = plan.MaxExchangeMailPublicFolders;

                database.Plans_Organization.Add(newPlan);
                database.SaveChanges();
            }
            catch (Exception ex)
            {
                this.logger.Error("Error saving new company plan " + plan.CompanyPlanName + " to the database.", ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
        public MailContactObject GetContact(string distinguishedName)
        {
            CPDatabase database = null;

            try
            {
                // Get all contacts for company
                database = new CPDatabase();

                var contact = (from c in database.Contacts
                               where c.DistinguishedName == distinguishedName
                               orderby c.DisplayName
                               select new MailContactObject()
                               {
                                   DisplayName = c.DisplayName,
                                   CompanyCode = c.CompanyCode,
                                   DistinguishedName = c.DistinguishedName,
                                   Email = c.Email,
                                   Hidden = c.Hidden
                               }).First();

                return contact;
            }
            catch (Exception ex)
            {
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Gets a list of companies from the database
        /// </summary>
        /// <returns></returns>
        public List<CompanyObject> GetCompanies(string resellerCode)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var companyDb = from r in database.Companies
                                where !r.IsReseller
                                where r.ResellerCode == resellerCode
                                orderby r.CompanyName
                                select r;

                List<CompanyObject> companies = new List<CompanyObject>();

                if (companyDb != null)
                {
                    foreach (var company in companyDb)
                    {
                        var domainsDb = from d in database.Domains
                                        where d.CompanyCode == company.CompanyCode
                                        select d.Domain1;

                        CompanyObject tmp = new CompanyObject();
                        tmp.CompanyID = company.CompanyId;
                        tmp.CompanyName = company.CompanyName;
                        tmp.CompanyCode = company.CompanyCode;
                        tmp.Street = company.Street;
                        tmp.City = company.City;
                        tmp.State = company.State;
                        tmp.ZipCode = company.ZipCode;
                        tmp.Country = company.Country;
                        tmp.Telephone = company.PhoneNumber;
                        tmp.Description = company.Description;
                        tmp.AdminName = company.AdminName;
                        tmp.AdminEmail = company.AdminEmail;
                        tmp.DistinguishedName = company.DistinguishedName;
                        tmp.Created = company.Created;
                        tmp.Domains = domainsDb.ToArray();

                        companies.Add(tmp);
                    }
                }

                return companies;
            }
            catch (Exception ex)
            {
                this.logger.Error("Error retrieving companies for reseller " + resellerCode, ex);

                ThrowEvent(AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Checks if a company code exists in the database (reseller or company)
        /// </summary>
        /// <param name="companyCode"></param>
        /// <returns></returns>
        public static bool DoesCompanyCodeExist(string companyCode)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var exists = (from c in database.Companies
                              where c.CompanyCode == companyCode
                              select c.CompanyCode).FirstOrDefault();

                if (!string.IsNullOrEmpty(exists))
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 5
0
        public static bool IsExchangeEnabled(string companyCode)
        {
            CPDatabase database = null;

            try
            {
                if (string.IsNullOrEmpty(companyCode))
                    return false;
                else
                {
                    database = new CPDatabase();

                    var isEnabled = (from c in database.Companies
                                     where !c.IsReseller
                                     where c.CompanyCode == companyCode
                                     where c.ExchEnabled
                                     select c.ExchEnabled).Count();

                    if (isEnabled > 0)
                        return true;
                    else
                        return false;
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error checking if compay " + companyCode + " is enabled for Exchange", ex);
                return false;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
        public void DeleteContact(string distinguishedName, string companyCode)
        {
            ExchangePowershell powershell = null;
            CPDatabase database = null;

            try
            {
                // Get company distinguished name
                database = new CPDatabase();
                var contact = (from c in database.Contacts
                               where c.DistinguishedName == distinguishedName
                               select c).First();

                powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);
                powershell.DeleteContact(distinguishedName);

                database.Contacts.Remove(contact);
                database.SaveChanges();
            }
            catch (Exception ex)
            {
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                    database.Dispose();

                if (powershell != null)
                    powershell.Dispose();
            }
        }
Esempio n. 7
0
        public static void AddAudit(string companyCode, string username, ActionID actionID, string variable1, string variable2 = null)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                Audit newAudit = new Audit();
                newAudit.CompanyCode = companyCode;
                newAudit.Username = username;
                newAudit.Date = DateTime.Now;
                newAudit.ActionID = (int)actionID;
                newAudit.Variable1 = variable1;
                newAudit.Variable2 = variable2;

                database.Audits.Add(newAudit);
                database.SaveChanges();
            }
            catch (Exception ex)
            {
                logger.Info("Failed to add audit to database: " + actionID.ToString(), ex);
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
        public void DisableExchange(string companyCode)
        {
            ExchangePowershell powershell = null;
            CPDatabase database = null;

            try
            {
                powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);

                // Disable all exchange objects
                powershell.DeleteAllMailboxes(companyCode);
                powershell.DeleteAllContacts(companyCode);
                powershell.DeleteAllGroups(companyCode);
                powershell.DeleteAddressBookPolicy(companyCode + " ABP");
                powershell.DeleteOfflineAddressBook(companyCode + " OAL");
                powershell.DeleteAddressList(companyCode + " - All Rooms");
                powershell.DeleteAddressList(companyCode + " - All Contacts");
                powershell.DeleteAddressList(companyCode + " - All Groups");
                powershell.DeleteAddressList(companyCode + " - All Users");
                powershell.DeleteGlobalAddressList(companyCode + " - GAL");

                // Get all accepted domains
                this.logger.Debug("Retrieving list of accepted domains for " + companyCode);

                database = new CPDatabase();
                var domains = from d in database.Domains
                              where d.IsAcceptedDomain
                              where d.CompanyCode == companyCode
                              select d;

                if (domains != null)
                {
                    foreach (Domain d in domains)
                        powershell.DeleteDomain(d.Domain1);
                }

                // Now update the database
                int r = database.DisableExchange(companyCode);
                this.logger.Debug("Total count returned when calling DisableExchange stored procedure: " + r.ToString());

            }
            catch (Exception ex)
            {
                this.logger.Error("Error disabling Exchange for company " + companyCode, ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                    database.Dispose();

                if (powershell != null)
                    powershell.Dispose();
            }
        }
Esempio n. 9
0
        public static List<Audits> RetrieveAudits(string companyCode)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                List<Audit> audits = null;

                if (string.IsNullOrEmpty(companyCode))
                    audits = (from a in database.Audits
                              orderby a.Date descending
                              select a).ToList();
                else
                    audits = (from a in database.Audits
                              where a.CompanyCode == companyCode
                              orderby a.Date descending
                              select a).ToList();

                if (audits == null)
                    return null;
                else
                {
                    List<Audits> foundAudits = new List<Audits>();
                    foreach (var a in audits)
                    {
                        foundAudits.Add(new Audits()
                        {
                            AuditID = a.AuditID,
                            Username = a.Username,
                            WhenEntered = a.Date,
                            CompanyCode = a.CompanyCode,
                            Action = (ActionID)a.ActionID,
                            Variable1 = a.Variable1,
                            Variable2 = a.Variable2
                        });
                    }

                    return foundAudits;
                }
            }
            catch (Exception ex)
            {
                logger.Error("Failed to retrieve audits from the database", ex);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 10
0
        public bool CreatePlan(MailboxPlanObject obj)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                Plans_ExchangeMailbox plan = new Plans_ExchangeMailbox();
                plan.MailboxPlanName = obj.MailboxPlanName;
                plan.CompanyCode = obj.CompanyCode;
                plan.MailboxPlanDesc = obj.MailboxPlanDescription;
                plan.MaxRecipients = obj.MaxRecipients;
                plan.MaxKeepDeletedItems = obj.MaxKeepDeletedItemsInDays;
                plan.MailboxSizeMB = obj.MailboxSizeInMB;
                plan.MaxMailboxSizeMB = obj.MaxMailboxSizeInMB;
                plan.MaxSendKB = obj.MaxSendInKB;
                plan.MaxReceiveKB = obj.MaxReceiveInKB;
                plan.EnablePOP3 = obj.EnablePOP3;
                plan.EnableIMAP = obj.EnableIMAP;
                plan.EnableOWA = obj.EnableOWA;
                plan.EnableMAPI = obj.EnableMAPI;
                plan.EnableAS = obj.EnableAS;
                plan.EnableECP = obj.EnableECP;
                plan.Cost = obj.Cost;
                plan.Price = obj.Price;
                plan.AdditionalGBPrice = obj.AdditionalGBPrice;

                database.Plans_ExchangeMailbox.Add(plan);
                database.SaveChanges();

                return true;
            }
            catch (Exception ex)
            {
                this.logger.Error("Error creating new mailbox plan", ex);
                ThrowEvent(AlertID.FAILED, ex.Message);

                return false;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 11
0
        public UsersObject[] Search(string searchResult)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                // Compile a list of companies
                var companies = from c in database.Companies
                                select c;

                // Compile a list of users
                var users = from u in database.Users
                            from c in database.Companies.Where(cc => cc.CompanyCode == u.CompanyCode).DefaultIfEmpty()
                            where u.UserPrincipalName.Contains(searchResult) || u.Firstname.Contains(searchResult) || u.Lastname.Contains(searchResult)
                            select new UsersObject
                            {
                                UserPrincipalName = u.UserPrincipalName,
                                Firstname = u.Firstname,
                                Lastname = u.Lastname,
                                CompanyCode = u.CompanyCode,
                                CompanyName = c.CompanyName,
                                ResellerCode = c.ResellerCode
                            };

                if (users != null)
                    return users.ToArray();
                else
                    return null;
            }
            catch (Exception ex)
            {
                ThrowEvent(AlertID.FAILED, ex.Message);
                this.logger.Error("Error searching for " + searchResult, ex);

                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Gets a specific reseller
        /// </summary>
        /// <param name="companyCode"></param>
        /// <returns></returns>
        public ResellerObject GetReseller(string companyCode)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var reseller = (from r in database.Companies
                                where r.IsReseller
                                where r.CompanyCode == companyCode
                                orderby r.CompanyName
                                select r).FirstOrDefault();

                ResellerObject tmp = new ResellerObject();
                tmp.CompanyID = reseller.CompanyId;
                tmp.CompanyName = reseller.CompanyName;
                tmp.CompanyCode = reseller.CompanyCode;
                tmp.Street = reseller.Street;
                tmp.City = reseller.City;
                tmp.State = reseller.State;
                tmp.ZipCode = reseller.ZipCode;
                tmp.Country = reseller.Country;
                tmp.Telephone = reseller.PhoneNumber;
                tmp.Description = reseller.Description;
                tmp.AdminName = reseller.AdminName;
                tmp.AdminEmail = reseller.AdminEmail;
                tmp.DistinguishedName = reseller.DistinguishedName;
                tmp.Created = reseller.Created;

                return tmp;
            }
            catch (Exception ex)
            {
                ThrowEvent(AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 13
0
        public bool DeletePlan(int planID)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var usingPlan = (from u in database.Users
                                 where u.MailboxPlan == planID
                                 select u).Count();

                if (usingPlan > 0)
                {
                    ThrowEvent(AlertID.FAILED, "The plan is in use " + planID.ToString());
                    return false;
                }
                else
                {
                    var plan = (from p in database.Plans_ExchangeMailbox
                                where p.MailboxPlanID == planID
                                select p).First();

                    database.Plans_ExchangeMailbox.Remove(plan);
                    database.SaveChanges();

                    return true;
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Error deleting mailbox plan id " + planID, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);

                return false;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
        public List<ApplicationsObject> GetCitrixApplications(string companyCode)
        {
            CPDatabase database = null;

               try
               {
               database = new CPDatabase();

               var foundApplications = (from a in database.Plans_Citrix
                                        where a.CompanyCode == null || a.CompanyCode == companyCode
                                        orderby a.Name
                                        select new ApplicationsObject()
                                        {
                                            CitrixPlanID = a.CitrixPlanID,
                                            DisplayName = a.Name,
                                            GroupName = a.GroupName,
                                            Description = a.Description,
                                            IsServer = a.IsServer,
                                            CompanyCode = a.CompanyCode,
                                            Price = a.Price,
                                            Cost = a.Cost,
                                            PictureURL = a.PictureURL
                                        });

               if (foundApplications != null)
                   return foundApplications.ToList();
               else
                   return null;
               }
               catch (Exception ex)
               {
               this.logger.Error("Error retrieving Citrix applications for company " + companyCode, ex);
               ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
               return null;
               }
               finally
               {
               if (database != null)
                   database.Dispose();
               }
        }
Esempio n. 15
0
        public void Delete(int planID)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                // Find out if it is in use
                int? inUseNumber = NumberOfTimesPlanInUse(planID);
                if (inUseNumber != null && inUseNumber > 0)
                    ThrowEvent(Base.Enumerations.AlertID.WARNING, inUseNumber == null ? "-1" : inUseNumber.ToString());
                else
                {
                    var deletePlan = (from p in database.Plans_Organization
                                      where p.OrgPlanID == planID
                                      select p).FirstOrDefault();

                    if (deletePlan != null)
                    {
                        database.Plans_Organization.Remove(deletePlan);
                        database.SaveChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Error deleting company plan " + planID.ToString(), ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 16
0
        public List<CompanyPlanObject> GetAllPlans()
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var foundPlans = (from a in database.Plans_Organization
                                  orderby a.OrgPlanName
                                  select new CompanyPlanObject()
                                  {
                                       CompanyPlanID = a.OrgPlanID,
                                       CompanyPlanName = a.OrgPlanName,
                                       MaxUser = a.MaxUsers,
                                       MaxDomains = a.MaxDomains,
                                       MaxExchangeMailboxes = a.MaxExchangeMailboxes,
                                       MaxExchangeContacts = a.MaxExchangeContacts,
                                       MaxExchangeDistributionGroups = a.MaxExchangeDistLists,
                                       MaxExchangeMailPublicFolders = a.MaxExchangeMailPublicFolders,
                                       MaxExchangeResourceMailboxes = a.MaxExchangeResourceMailboxes == null ? 0 : (int)a.MaxExchangeResourceMailboxes
                                  });

                if (foundPlans != null)
                    return foundPlans.ToList();
                else
                    return null;
            }
            catch (Exception ex)
            {
                this.logger.Error("Error retrieving organization plans from the database", ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 17
0
        public List<DomainsObject> GetDomains(string companyCode)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var foundDomains = from d in database.Domains
                                   where d.CompanyCode == companyCode
                                   orderby d.Domain1
                                   select new DomainsObject()
                                   {
                                       DomainID = d.DomainID,
                                       CompanyCode = d.CompanyCode,
                                       DomainName = d.Domain1,
                                       IsSubDomain = d.IsSubDomain == null ? false : (bool)d.IsSubDomain,
                                       IsDefault = d.IsDefault,
                                       IsAcceptedDomain = d.IsAcceptedDomain,
                                       TypeOfDomain= d.DomainType == null ? DomainType.Unknown : (DomainType)d.DomainType
                                   };

                if (foundDomains != null)
                    return foundDomains.ToList();
                else
                    return null;
            }
            catch (Exception ex)
            {
                this.logger.Error("Error trying to retrieve domains for company " + companyCode, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 18
0
        public void Update(CompanyPlanObject plan)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var findPlan = (from p in database.Plans_Organization
                                where p.OrgPlanID == plan.CompanyPlanID
                                select p).FirstOrDefault();

                findPlan.OrgPlanName = plan.CompanyPlanName;
                findPlan.MaxUsers = plan.MaxUser;
                findPlan.MaxDomains = plan.MaxDomains;
                findPlan.MaxExchangeMailboxes = plan.MaxExchangeMailboxes;
                findPlan.MaxExchangeContacts = plan.MaxExchangeContacts;
                findPlan.MaxExchangeDistLists = plan.MaxExchangeDistributionGroups;
                findPlan.MaxExchangeMailboxes = plan.MaxExchangeMailboxes;
                findPlan.MaxExchangeMailPublicFolders = plan.MaxExchangeMailPublicFolders;

                database.SaveChanges();
            }
            catch (Exception ex)
            {
                this.logger.Error("Error updating company plan " + plan.CompanyPlanName + " with id " + plan.CompanyPlanID, ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 19
0
        private int? NumberOfTimesPlanInUse(int planID)
        {
            CPDatabase database = null;

            try
            {
                this.logger.Debug("Checking if plan is in use: " + planID.ToString());

                database = new CPDatabase();

                var findPlan = (from p in database.Companies
                                where p.OrgPlanID == planID
                                select p).Count();

                return findPlan;
            }
            catch (Exception ex)
            {
                this.logger.Error("Error counting the number of times plan " + planID.ToString() + " is in use.", ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 20
0
        public void UpdateUser(UsersObject updateUser, bool isSuperOrResellerAdmin)
        {
            CPDatabase database = null;
            ADGroup ldapGroup = null;
            ADUser ldapUser = null;

            try
            {
                database = new CPDatabase();

                // Get the user from the database
                var foundUser = (from u in database.Users
                                 where u.UserPrincipalName == updateUser.UserPrincipalName
                                 select u).FirstOrDefault();

                if (foundUser == null)
                    ThrowEvent(AlertID.FAILED, "Unknown user " + updateUser.UserPrincipalName);
                else
                {
                    this.logger.Debug("Found user " + foundUser.UserPrincipalName + " in the database. Continuing...");

                    // Update the user values
                    foundUser.Firstname = updateUser.Firstname;
                    foundUser.Middlename = updateUser.Middlename;
                    foundUser.Lastname = updateUser.Lastname;
                    foundUser.DisplayName = updateUser.DisplayName;
                    foundUser.Department = updateUser.Department;

                    // Update user in Active Directory
                    ldapUser = new ADUser(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                    ldapUser.UpdateUser(updateUser, StaticSettings.AllowCustomNameAttribute);

                    // Only update these values if super admin or reseller admin is modifying the user
                    if (isSuperOrResellerAdmin)
                    {
                        this.logger.Debug("Super admin or reseller is updating user so we can check comapny admin permissions and reseller permissions");

                        foundUser.IsCompanyAdmin = updateUser.IsCompanyAdmin;
                        foundUser.IsResellerAdmin = updateUser.IsResellerAdmin;

                        // Get permissions from database
                        var userPermissions = (from p in database.UserPermissions
                                               where p.UserID == foundUser.ID
                                               select p).FirstOrDefault();

                        // If the user is no longer a company admin then remove permissions from the database
                        if (userPermissions != null && !updateUser.IsCompanyAdmin)
                        {
                            this.logger.Debug("User " + updateUser.UserPrincipalName + " is no longer a comapny admin. Need to remove rights from database and security group");

                            database.UserPermissions.Remove(userPermissions);

                            // Remove from Admins@ security group
                            ldapGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                            ldapGroup.RemoveMember("Admins@" + updateUser.CompanyCode, updateUser.UserPrincipalName, "upn");
                        }
                        else if (userPermissions != null && updateUser.IsCompanyAdmin)
                        {
                            this.logger.Debug("User " + updateUser.UserPrincipalName + " is a company admin. Need to update company admin rights in database.");

                            // If user permissions was found and the user is company admin then update the values
                            userPermissions.EnableExchange = updateUser.EnableExchangePerm;
                            userPermissions.DisableExchange = updateUser.DisableExchangePerm;
                            userPermissions.AddDomain = updateUser.AddDomainPerm;
                            userPermissions.DeleteDomain = updateUser.DeleteDomainPerm;
                            userPermissions.EnableAcceptedDomain = updateUser.EnableAcceptedDomainPerm;
                            userPermissions.DisableAcceptedDomain = updateUser.DisableAcceptedDomainPerm;
                        }
                        else if (userPermissions == null && updateUser.IsCompanyAdmin)
                        {
                            this.logger.Debug("User " + updateUser.UserPrincipalName + " does not have any existing company admin rights. We need to add them to the database.");

                            // No existing permissions were found and we need to add to database
                            userPermissions = new UserPermission();
                            userPermissions.UserID = foundUser.ID;
                            userPermissions.EnableExchange = updateUser.EnableExchangePerm;
                            userPermissions.DisableExchange = updateUser.DisableExchangePerm;
                            userPermissions.AddDomain = updateUser.AddDomainPerm;
                            userPermissions.DeleteDomain = updateUser.DeleteDomainPerm;
                            userPermissions.EnableAcceptedDomain = updateUser.EnableAcceptedDomainPerm;
                            userPermissions.DisableAcceptedDomain = updateUser.DisableAcceptedDomainPerm;
                            database.UserPermissions.Add(userPermissions);

                            // Add to Admins@ security group
                            ldapGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                            ldapGroup.AddMember("Admins@" + updateUser.CompanyCode, updateUser.UserPrincipalName, "upn");
                        }
                    }
                    else
                        this.logger.Debug("User making changes to " + updateUser.UserPrincipalName + " is not a super admin or reseller admin. We cannot update company admin or reseller admin permissions unless the user making changes is a super or reseller admin.");

                    // Update database
                    database.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                this.logger.Debug("Error updating user " + updateUser.UserPrincipalName, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (ldapUser != null)
                    ldapUser.Dispose();

                if (ldapGroup != null)
                    ldapGroup.Dispose();

                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 21
0
        public void CreateUser(UsersObject newUser)
        {
            CPDatabase database = null;
            ADGroup ldapGroup = null;
            ADUser ldapUser = null;

            CloudPanelTransaction newUserTransaction = new CloudPanelTransaction();
            try
            {
                // Insert into database
                database = new CPDatabase();

                // Make sure the user doesn't already exist
                var foundUser = (from u in database.Users
                                 where u.UserPrincipalName == newUser.UserPrincipalName
                                 select u).FirstOrDefault();

                if (foundUser != null)
                    ThrowEvent(AlertID.FAILED, "User already exists " + newUser.UserPrincipalName);
                else
                {
                    // Get the company's OU where we need to save the user
                    var companyDistinguishedName = (from c in database.Companies
                                                    where !c.IsReseller
                                                    where c.CompanyCode == newUser.CompanyCode
                                                    select c.DistinguishedName).First();

                    // Check if they are using a custom user's OU
                    if (!string.IsNullOrEmpty(StaticSettings.UsersOU))
                        companyDistinguishedName = string.Format("OU={0},{1}", StaticSettings.UsersOU, companyDistinguishedName);

                    ldapUser = new ADUser(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                    UsersObject createdUser = ldapUser.NewUser(newUser, companyDistinguishedName, StaticSettings.AllowCustomNameAttribute);
                    newUserTransaction.NewUser(createdUser.UserPrincipalName);

                    // Add the users to the groups
                    ldapGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                    ldapGroup.AddMember("AllUsers@" + newUser.CompanyCode, createdUser.UserPrincipalName, "upn");

                    if (newUser.IsCompanyAdmin)
                        ldapGroup.AddMember("Admins@" + newUser.CompanyCode, createdUser.UserPrincipalName, "upn");

                    // Insert into database
                    User sqlUser = new User();
                    sqlUser.UserGuid = createdUser.UserGuid;
                    sqlUser.CompanyCode = createdUser.CompanyCode;
                    sqlUser.sAMAccountName = createdUser.sAMAccountName;
                    sqlUser.UserPrincipalName = createdUser.UserPrincipalName;
                    sqlUser.DistinguishedName = createdUser.DistinguishedName;
                    sqlUser.DisplayName = createdUser.DisplayName;
                    sqlUser.Firstname = createdUser.Firstname;
                    sqlUser.Middlename = createdUser.Middlename;
                    sqlUser.Lastname = createdUser.Lastname;
                    sqlUser.Email = string.Empty;
                    sqlUser.Department = createdUser.Department;
                    sqlUser.IsResellerAdmin = createdUser.IsResellerAdmin;
                    sqlUser.IsCompanyAdmin = createdUser.IsCompanyAdmin;
                    sqlUser.MailboxPlan = 0;
                    sqlUser.TSPlan = 0;
                    sqlUser.LyncPlan = 0;
                    sqlUser.Created = DateTime.Now;
                    sqlUser.AdditionalMB = 0;
                    sqlUser.ActiveSyncPlan = 0;
                    database.Users.Add(sqlUser);

                    // Insert permissions into database
                    if (createdUser.IsCompanyAdmin)
                    {
                        UserPermission newPermissions = new UserPermission();
                        newPermissions.UserID = sqlUser.ID;
                        newPermissions.EnableExchange = createdUser.EnableExchangePerm;
                        newPermissions.DisableExchange = createdUser.DisableExchangePerm;
                        newPermissions.AddDomain = createdUser.AddDomainPerm;
                        newPermissions.DeleteDomain = createdUser.DeleteDomainPerm;
                        newPermissions.EnableAcceptedDomain = createdUser.EnableAcceptedDomainPerm;
                        newPermissions.DisableAcceptedDomain = createdUser.DisableAcceptedDomainPerm;
                        database.UserPermissions.Add(newPermissions);
                    }

                    database.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                ThrowEvent(AlertID.FAILED, ex.Message);

                // Rollback on error
                newUserTransaction.RollBack();
            }
            finally
            {
                if (ldapUser != null)
                    ldapUser.Dispose();

                if (ldapGroup != null)
                    ldapGroup.Dispose();

                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 22
0
        public void ResetPassword(string userPrincipalName, string newPassword, string companyCode)
        {
            ADUser user = null;
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var sqlUser = (from u in database.Users
                               where u.UserPrincipalName == userPrincipalName
                               select u).First();

                if (sqlUser.CompanyCode.Equals(companyCode, StringComparison.CurrentCultureIgnoreCase))
                {
                    user = new ADUser(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                    user.ResetPassword(userPrincipalName, newPassword);
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Error resetting password for " + userPrincipalName, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (user != null)
                    user.Dispose();
            }
        }
Esempio n. 23
0
        public List<UsersObject> GetUsers(string companyCode)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var foundUsers = from u in database.Users
                                  where u.CompanyCode == companyCode
                                  orderby u.DisplayName
                                  select new UsersObject()
                                  {
                                      CompanyCode = u.CompanyCode,
                                      sAMAccountName = u.sAMAccountName,
                                      UserPrincipalName = u.UserPrincipalName,
                                      DisplayName = u.DisplayName,
                                      Department = u.Department,
                                      IsEnabled = u.IsEnabled == null ? true : (bool)u.IsEnabled,
                                      IsResellerAdmin = u.IsResellerAdmin == null ? false : (bool)u.IsResellerAdmin,
                                      IsCompanyAdmin = u.IsCompanyAdmin == null ? false : (bool)u.IsCompanyAdmin,
                                      MailboxPlan = u.MailboxPlan == null ? 0 : (int)u.MailboxPlan,
                                      LyncPlan = u.LyncPlan == null ? 0 : (int)u.LyncPlan
                                  };

                if (foundUsers != null)
                    return foundUsers.ToList();
                else
                    return null;
            }
            catch(Exception ex)
            {
                this.logger.Error("Failed to retrieve users for company " + companyCode, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 24
0
        public UsersObject GetUser(string userPrincipalName)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                // Get from the database
                var findUser = (from u in database.Users
                                from p in database.UserPermissions.Where(m => m.UserID == u.ID).DefaultIfEmpty()
                                where u.UserPrincipalName == userPrincipalName
                                orderby u.DisplayName
                                select new UsersObject()
                                {
                                    UserGuid = u.UserGuid,
                                    CompanyCode = u.CompanyCode,
                                    sAMAccountName = u.sAMAccountName,
                                    UserPrincipalName = u.UserPrincipalName,
                                    Firstname = u.Firstname,
                                    Middlename = u.Middlename,
                                    Lastname = u.Lastname,
                                    DisplayName = u.DisplayName,
                                    Department = u.Department,
                                    DistinguishedName = u.DistinguishedName,
                                    Created = u.Created,
                                    IsEnabled = u.IsEnabled == null ? true : (bool)u.IsEnabled,
                                    IsCompanyAdmin = u.IsCompanyAdmin == null ? false : (bool)u.IsCompanyAdmin,
                                    IsResellerAdmin = u.IsResellerAdmin == null ? false : (bool)u.IsResellerAdmin,
                                    MailboxPlan = u.MailboxPlan == null ? 0 : (int)u.MailboxPlan,
                                    AdditionalMB = u.AdditionalMB == null ? 0 : (int)u.AdditionalMB,
                                    ActiveSyncPlan = u.ActiveSyncPlan == null ? 0 : (int)u.ActiveSyncPlan,
                                    EnableExchangePerm = p.EnableExchange == null ? false : p.EnableExchange,
                                    DisableExchangePerm = p.DisableExchange == null ? false : p.DisableExchange,
                                    AddDomainPerm = p.AddDomain == null ? false : p.AddDomain,
                                    DeleteDomainPerm = p.DeleteDomain == null ? false : p.DeleteDomain,
                                    EnableAcceptedDomainPerm = p.EnableAcceptedDomain == null ? false : p.EnableAcceptedDomain,
                                    DisableAcceptedDomainPerm = p.DisableAcceptedDomain == null ? false : p.DisableAcceptedDomain
                                }).FirstOrDefault();

                return findUser;
            }
            catch (Exception ex)
            {
                this.logger.Error("Failed to retrieve user " + userPrincipalName, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 25
0
        public List<MailboxPlanObject> GetMailboxPlans(string companyCode)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var foundPlans = from p in database.Plans_ExchangeMailbox
                                 where p.CompanyCode == companyCode || string.IsNullOrEmpty(p.CompanyCode)
                                 orderby p.MailboxPlanName
                                 select new MailboxPlanObject()
                                 {
                                     MailboxPlanID = p.MailboxPlanID,
                                     MailboxPlanName = p.MailboxPlanName,
                                     MailboxPlanDescription = p.MailboxPlanDesc,
                                     CompanyCode = p.CompanyCode,
                                     Cost = string.IsNullOrEmpty(p.Cost) ? "0.00" : p.Cost,
                                     Price = string.IsNullOrEmpty(p.Price) ? "0.00": p.Price,
                                     AdditionalGBPrice = string.IsNullOrEmpty(p.AdditionalGBPrice) ? "0.00" : p.AdditionalGBPrice,
                                     MailboxSizeInMB = p.MailboxSizeMB,
                                     MaxMailboxSizeInMB = p.MaxMailboxSizeMB == null ? p.MailboxSizeMB : (int)p.MaxMailboxSizeMB
                                 };

                if (foundPlans != null)
                    return foundPlans.ToList();
                else
                    return null;
            }
            catch (Exception ex)
            {
                this.logger.Error("Error trying to retrieve mailbox plans for company " + companyCode, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 26
0
        private bool IsBlockedFromBruteForce(string ipAddress)
        {
            CPDatabase database = null;

            try
            {
                if (StaticSettings.IPBlockingEnabled)
                {
                    database = new CPDatabase();

                    var isBlocked = from b in database.AuditLogins
                                    where b.IPAddress == ipAddress
                                    where b.AuditTimeStamp >= DbFunctions.AddMinutes(DateTime.Now, -StaticSettings.IPBlockingLockedInMinutes)
                                    where b.LoginStatus == false
                                    orderby b.AuditTimeStamp descending
                                    select b;

                    if (isBlocked == null)
                        return false;
                    else
                    {
                        logger.Debug("Found a total of " + isBlocked.Count() + " entries in the database for IP Address " + ipAddress);

                        if (isBlocked.Count() >= StaticSettings.IPBlockingFailedCount)
                        {
                            ThrowEvent(AlertID.FAILED, ipAddress + " is blocked due to too many failed login attempts");
                            return true;
                        }
                        else
                            return false;
                    }
                }
                else
                    return false;
            }
            catch (Exception ex)
            {
                ThrowEvent(AlertID.FAILED, ex.Message);
                return true;
            }
        }
Esempio n. 27
0
        private void AuditLogin(string username, string ipAddress, bool isValidLogin)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                // Audit login
                AuditLogin audit = new AuditLogin();
                audit.IPAddress = ipAddress;
                audit.Username = username;
                audit.LoginStatus = isValidLogin;
                audit.AuditTimeStamp = DateTime.Now;

                database.AuditLogins.Add(audit);
                database.SaveChanges();

                this.logger.Debug(username + "attempted to login to CloudPanel. Is valid login? " + isValidLogin.ToString());
            }
            catch (Exception ex)
            {
                this.logger.Error("Error adding entry to the login audit table.", ex);

                throw;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 28
0
        public void CreateMailbox(UsersObject user)
        {
            CPDatabase database = null;
            ExchangePowershell powershell = null;

            CloudPanelTransaction transaction = new CloudPanelTransaction();
            try
            {
                database = new CPDatabase();

                // Get the user from the database
                var foundUser = (from u in database.Users
                                 where u.UserPrincipalName == user.UserPrincipalName
                                 select u).FirstOrDefault();

                powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);

                // Get the selected mailbox plan
                MailboxPlanObject mailboxPlan = GetMailboxPlan(user.MailboxPlan);

                // Create new mailbox and register transaction
                powershell.NewMailbox(user);
                transaction.NewMailbox(user.UserPrincipalName);

                // Update the mailbox values
                powershell.UpdateMailbox(user, mailboxPlan);
                powershell.UpdateCASMailbox(user, mailboxPlan);

                // Set litigation hold settings if enabled for litigation hold
                if (user.LitigationHoldEnabled)
                    powershell.NewLitigationHold(user.UserPrincipalName, user.LitigationHoldComment, user.LitigationHoldUrl, user.LitigationHoldDuration);

                // Set archive settings if enabled for archiving
                if (user.ArchivingEnabled && user.ArchivePlan > 0)
                {
                    powershell.NewArchiveMailbox(user);
                    // Set quota on archive
                }

                foundUser.Email = user.PrimarySmtpAddress;
                foundUser.MailboxPlan = user.MailboxPlan;
                foundUser.AdditionalMB = user.SetMailboxSizeInMB - mailboxPlan.MailboxSizeInMB;
                foundUser.ExchArchivePlan = user.ArchivePlan;
                database.SaveChanges();
            }
            catch (Exception ex)
            {
                this.logger.Error("Error creating mailbox for " + user.UserPrincipalName, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);

                transaction.RollBack();
            }
            finally
            {
                if (powershell != null)
                    powershell.Dispose();

                if (database != null)
                    database.Dispose();
            }
        }
Esempio n. 29
0
        public UsersObject Authenticate(string username, string password, string ipAddress, bool isLocalRequest)
        {
            ADUser ldap = null;
            CPDatabase database = null;

            try
            {
                // Check if IP address is blocked from brute force
                if (IsBlockedFromBruteForce(ipAddress) && !isLocalRequest)
                {
                    ThrowEvent(AlertID.FAILED, "Your IP has been blocked");
                    return null;
                }
                else
                {
                    database = new CPDatabase();

                    // Find the user in SQL first
                    var user = (from d in database.Users
                                where d.UserPrincipalName == username
                                select d).FirstOrDefault();

                    ldap = new ADUser(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);

                    // Authenticate the user
                    UsersObject userObject = ldap.Authenticate(username, password);
                    if (userObject == null)
                    {
                        // Audit the login
                        AuditLogin(username, ipAddress, false);

                        ThrowEvent(AlertID.FAILED, username + " failed to login.");
                        return null;
                    }
                    else
                    {
                        // Audit the login
                        AuditLogin(username, ipAddress, true);

                        // Now check the groups
                        string[] cpGroups = StaticSettings.SuperAdmins.ToLower().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                        // User could be null if it is a domain admin which won't be in the database.
                        if (user != null)
                        {
                            userObject.CompanyCode = user.CompanyCode;
                            userObject.ResellerCode = GetResellerCode(user.CompanyCode);

                            if (user.IsCompanyAdmin != null && (bool)user.IsCompanyAdmin)
                            {
                                userObject.IsCompanyAdmin = true;
                            }

                            if (user.IsResellerAdmin != null && (bool)user.IsResellerAdmin)
                            {
                                userObject.IsResellerAdmin = true;
                            }
                        }

                        // Now check if they are a super admin
                        foreach (string g in cpGroups)
                        {
                            var isFound = userObject.Groups.Where(a => a.ToLower().StartsWith("cn=" + g)).Count();
                            if (isFound > 0)
                            {
                                userObject.IsSuperAdmin = true;
                                break;
                            }
                        }

                        return userObject;
                    }
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Error logging in user " + username, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();

                if (ldap != null)
                    ldap.Dispose();
            }
        }
Esempio n. 30
0
        public MailboxPlanObject GetMailboxPlan(int planID)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var foundPlan = (from p in database.Plans_ExchangeMailbox
                                  where p.MailboxPlanID == planID
                                  orderby p.MailboxPlanName
                                  select new MailboxPlanObject()
                                  {
                                      MailboxPlanID = p.MailboxPlanID,
                                      MailboxPlanName = p.MailboxPlanName,
                                      MailboxPlanDescription = p.MailboxPlanDesc,
                                      CompanyCode = p.CompanyCode,
                                      Cost = string.IsNullOrEmpty(p.Cost) ? "0.00" : p.Cost,
                                      Price = string.IsNullOrEmpty(p.Price) ? "0.00" : p.Price,
                                      AdditionalGBPrice = string.IsNullOrEmpty(p.AdditionalGBPrice) ? "0.00" : p.AdditionalGBPrice,
                                      MailboxSizeInMB = p.MailboxSizeMB,
                                      MaxMailboxSizeInMB = p.MaxMailboxSizeMB == null ? p.MailboxSizeMB : (int)p.MaxMailboxSizeMB,
                                      MaxSendInKB = p.MaxSendKB,
                                      MaxReceiveInKB = p.MaxReceiveKB,
                                      MaxRecipients = p.MaxRecipients,
                                      EnablePOP3 = p.EnablePOP3,
                                      EnableIMAP = p.EnableIMAP,
                                      EnableOWA = p.EnableOWA,
                                      EnableAS = p.EnableAS,
                                      EnableECP = p.EnableECP,
                                      MaxKeepDeletedItemsInDays = p.MaxKeepDeletedItems
                                  }).First();

                return foundPlan;
            }
            catch (Exception ex)
            {
                this.logger.Error("Error trying to retrieve mailbox plan " + planID.ToString(), ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
                return null;
            }
            finally
            {
                if (database != null)
                    database.Dispose();
            }
        }