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(); } }
/// <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(); } }
/// <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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
/// <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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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; } }
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(); } }
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(); } }
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(); } }
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(); } }