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 UpdateCompanyPlan(string companyCode, int planID) { CPDatabase database = null; try { database = new CPDatabase(); var foundCompany = (from c in database.Companies where !c.IsReseller where c.CompanyCode == companyCode select c).FirstOrDefault(); if (foundCompany != null) { foundCompany.OrgPlanID = planID; database.SaveChanges(); } } catch (Exception ex) { this.logger.Error("Error changing company " + companyCode + "'s plan ID to " + planID.ToString(), ex); ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message); } finally { if (database != null) { database.Dispose(); } } }
private void Delete_CompanyFromDatabase(string companyCode) { CPDatabase database = null; try { database = new CPDatabase(); var foundCompany = (from c in database.Companies where !c.IsReseller where c.CompanyCode == companyCode select c).FirstOrDefault(); if (foundCompany != null) { database.Companies.Remove(foundCompany); database.SaveChanges(); } } catch (Exception ex) { this.logger.Error("Failed to roll back action... Deleting company from database " + companyCode, ex); } finally { if (database != null) { database.Dispose(); } } }
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 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 bool UpdatePlan(MailboxPlanObject obj) { CPDatabase database = null; try { database = new CPDatabase(); var plan = (from p in database.Plans_ExchangeMailbox where p.MailboxPlanID == obj.MailboxPlanID select p).First(); 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.SaveChanges(); return(true); } catch (Exception ex) { this.logger.Error("Error saving mailbox plan id " + obj.MailboxPlanID, ex); ThrowEvent(AlertID.FAILED, ex.Message); return(false); } finally { if (database != null) { database.Dispose(); } } }
public void NewContact(string companyCode, MailContactObject mailContact) { ExchangePowershell powershell = null; CPDatabase database = null; try { // Get company distinguished name database = new CPDatabase(); var dn = (from c in database.Companies where !c.IsReseller where c.CompanyCode == companyCode select c.DistinguishedName).First(); powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC); string distinguishedName = powershell.NewContact(mailContact.DisplayName, mailContact.Email, mailContact.Hidden, companyCode, "OU=Exchange," + dn); // Add contact to database Contact newContact = new Contact(); newContact.DisplayName = mailContact.DisplayName; newContact.CompanyCode = companyCode; newContact.DistinguishedName = distinguishedName; newContact.Email = mailContact.Email; newContact.Hidden = mailContact.Hidden; database.Contacts.Add(newContact); database.SaveChanges(); } catch (Exception ex) { ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message); } finally { if (database != null) { database.Dispose(); } if (powershell != null) { powershell.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 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(); } } }
/// <summary> /// Updates a reseller /// </summary> /// <param name="reseller"></param> public void UpdateReseller(ResellerObject reseller) { CPDatabase database = null; try { database = new CPDatabase(); var dbObj = (from r in database.Companies where r.CompanyCode == reseller.CompanyCode where r.IsReseller select r).First(); dbObj.CompanyName = reseller.CompanyName; dbObj.AdminName = reseller.AdminName; dbObj.AdminEmail = reseller.AdminEmail; dbObj.PhoneNumber = reseller.Telephone; dbObj.Street = reseller.Street; dbObj.City = reseller.City; dbObj.State = reseller.State; dbObj.ZipCode = reseller.ZipCode; dbObj.Country = reseller.Country; database.SaveChanges(); } catch (Exception ex) { ThrowEvent(AlertID.FAILED, ex.Message); } 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(); } } }
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(); } } }
/// <summary> /// Creates a new reseller /// </summary> /// <param name="reseller"></param> /// <param name="baseOrganizationalUnit"></param> public void NewReseller(ResellerObject reseller, string baseOrganizationalUnit) { CPDatabase database = null; // Rollback class in case something goes wrong we can undo changes CloudPanelTransaction events = new CloudPanelTransaction(); try { database = new CPDatabase(); // Generate the company code string companyCode = ResellerObject.GenerateCompanyCode(reseller.CompanyName); // Loop and make sure one does exist or find one that does int count = 0; for (int i = 0; i < 1000; i++) { if (Validation.DoesCompanyCodeExist(companyCode)) { this.logger.Info("Tried to create a new reseller with company code " + companyCode + " but it already existed... trying another code"); companyCode = companyCode + count.ToString(); count++; } else { reseller.CompanyCode = companyCode; // Assign company code to object break; } } // Create the reseller in Active Directory ADOrganizationalUnit adOrg = new ADOrganizationalUnit(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC); string distinguishedName = adOrg.CreateReseller(StaticSettings.HostingOU, reseller); events.NewOrganizationalUnitEvent(distinguishedName); // Create the security group ADGroup adGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC); adGroup.Create(distinguishedName, "GPOAccess@" + companyCode, "", true, false); events.NewSecurityGroup("GPOAccess@" + companyCode); // Add the new group to the GPOAccess@Hosting group for group policy permissions adGroup.AddMember("GPOAccess@Hosting", "GPOAccess@" + companyCode, "name"); // Add access rights adOrg.AddAccessRights(distinguishedName, "GPOAccess@" + companyCode); // Insert into database Company company = new Company(); company.IsReseller = true; company.CompanyName = reseller.CompanyName; company.CompanyCode = companyCode; company.Street = reseller.Street; company.City = reseller.City; company.State = reseller.State; company.ZipCode = reseller.ZipCode; company.Country = reseller.Country; company.PhoneNumber = reseller.Telephone; company.AdminName = reseller.AdminName; company.AdminEmail = reseller.AdminEmail; company.Created = DateTime.Now; company.DistinguishedName = distinguishedName; database.Companies.Add(company); database.SaveChanges(); // Notify success ThrowEvent(AlertID.SUCCESS, "Successfully created new reseller " + reseller.CompanyName); } catch (Exception ex) { ThrowEvent(AlertID.FAILED, ex.Message); // Rollback on error events.RollBack(); } finally { if (database != null) { database.Dispose(); } } }
public void DeleteDomain(string domainName, string companyCode) { CPDatabase database = null; ADOrganizationalUnit adOrg = null; ExchangePowershell powershell = null; try { database = new CPDatabase(); // Make sure no users groups or anything is using this domain var usersUsing = (from u in database.Users where (u.UserPrincipalName.EndsWith("@" + domainName) || u.Email.EndsWith("@" + domainName)) select u).Count(); if (usersUsing > 0) { ThrowEvent(AlertID.FAILED, "The domain is in use " + domainName); } else { // Make sure no groups are using this domain var groupsUsing = (from g in database.DistributionGroups where g.Email.EndsWith("@" + domainName) select g).Count(); if (groupsUsing > 0) { ThrowEvent(AlertID.FAILED, "The domain is in use " + domainName); } else { // Since users & groups are not using this domain we can continue and remove it // Get company distinguished name var dn = (from d in database.Companies where !d.IsReseller where d.CompanyCode == companyCode select d.DistinguishedName).First(); // Delete domain from Active Directory adOrg = new ADOrganizationalUnit(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC); adOrg.RemoveDomain(dn, domainName); // Get domain from SQL var domain = (from d in database.Domains where d.Domain1 == domainName where d.CompanyCode == companyCode select d).First(); // Check if it was enabled for Exchange if (domain.IsAcceptedDomain) { powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC); powershell.DeleteDomain(domain.Domain1); } database.Domains.Remove(domain); database.SaveChanges(); } } } catch (Exception ex) { this.logger.Error("Failed to remove domain " + domainName + " from company " + companyCode, ex); ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message); } finally { if (powershell != null) { powershell.Dispose(); } if (database != null) { database.Dispose(); } } }
public void UpdateDomain(string domainName, string companyCode, bool isDefault, bool isExchangeEnabled, DomainType domainType) { CPDatabase database = null; ExchangePowershell powershell = null; try { // Remove any whitespace characters at the beginning and end domainName = domainName.Trim(); database = new CPDatabase(); var defaultDomains = from d in database.Domains where d.CompanyCode == companyCode select d; foreach (Domain d in defaultDomains) { if (d.Domain1.Equals(domainName, StringComparison.CurrentCultureIgnoreCase)) { // This is the domain we are updating d.IsDefault = isDefault; d.DomainType = (int)domainType; // Check if it wasn't an Exchange domain and we are making it an Exchange domain if (!d.IsAcceptedDomain && isExchangeEnabled) { // Create accepted domain powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC); powershell.NewDomain(domainName, domainType); d.IsAcceptedDomain = true; } else if (d.IsAcceptedDomain && !isExchangeEnabled) { // Delete accepted domain powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC); powershell.DeleteDomain(domainName); d.IsAcceptedDomain = false; } else if (d.IsAcceptedDomain && isExchangeEnabled) { // Update accepted domain powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC); powershell.UpdateDomain(domainName, domainType); d.IsAcceptedDomain = true; } } else { if (isDefault) { d.IsDefault = false; } } } database.SaveChanges(); } catch (Exception ex) { this.logger.Error("Failed to update domain " + domainName + " for company " + companyCode, ex); ThrowEvent(AlertID.FAILED, ex.Message); } finally { if (database != null) { database.Dispose(); } } }
public void AddDomain(string domainName, string companyCode, bool isDefault, bool isExchangeEnabled, DomainType domainType) { CPDatabase database = null; ADOrganizationalUnit adOrg = null; ExchangePowershell powershell = null; CloudPanelTransaction transaction = new CloudPanelTransaction(); try { // Get company distinguished name database = new CPDatabase(); var dn = (from d in database.Companies where !d.IsReseller where d.CompanyCode == companyCode select d.DistinguishedName).First(); // Remove any whitespace characters at the beginning and end domainName = domainName.Trim(); // Check if domain is already in database bool alreadyExist = IsDomainInUse(domainName); if (alreadyExist) { ThrowEvent(Base.Enumerations.AlertID.FAILED, "Domain already exists"); } else { // Add domain to Active Directory adOrg = new ADOrganizationalUnit(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC); adOrg.AddDomain(dn, domainName); transaction.NewDomain(dn, domainName); // If it is default we need to remove default from all others if (isDefault) { var defaultDomains = from d in database.Domains where d.CompanyCode == companyCode select d; foreach (Domain d in defaultDomains) { if (d.IsDefault) { d.IsDefault = false; } } } // // Check if it is Exchange enabled // if (isExchangeEnabled) { powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC); powershell.NewDomain(domainName, domainType); transaction.NewExchangeDomain(domainName); } // Add new domain Domain newDomain = new Domain(); newDomain.IsDefault = isDefault; newDomain.CompanyCode = companyCode; newDomain.Domain1 = domainName; newDomain.IsSubDomain = false; newDomain.IsAcceptedDomain = isExchangeEnabled; newDomain.IsLyncDomain = false; newDomain.DomainType = (int)domainType; database.Domains.Add(newDomain); // Save all changes database.SaveChanges(); } } catch (Exception ex) { this.logger.Error("Failed to add domain " + domainName + " to company " + companyCode, ex); ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message); // Rollback transaction.RollBack(); } finally { if (powershell != null) { powershell.Dispose(); } if (database != null) { database.Dispose(); } } }
/// <summary> /// Commits the current static settings to the database /// </summary> /// <param name="securityKey"></param> public static void CommitSettings(string securityKey) { CPDatabase database = null; try { database = new CPDatabase(); var newSettings = (from s in database.Settings select s).FirstOrDefault(); if (newSettings == null) { // No settings found.. insert new newSettings = new Setting(); #region General newSettings.CompanysName = HostersName; newSettings.ResellersEnabled = ResellersEnabled; #endregion #region Active Directory newSettings.BaseOU = HostingOU; newSettings.UsersOU = UsersOU; newSettings.PrimaryDC = PrimaryDC; newSettings.Username = Username; newSettings.Password = EncryptedPassword; #endregion #region Security Groups newSettings.SuperAdmins = SuperAdmins; newSettings.BillingAdmins = BillingAdmins; #endregion #region Billing #endregion #region Exchange newSettings.ExchangeConnectionType = ExchangeConnectionType; newSettings.ExchangeVersion = ExchangeVersion; newSettings.ExchangeFqdn = ExchangeServer; newSettings.ExchangePFServer = ExchangePublicFolderServer; newSettings.ExchDatabases = ExchangeDatabases; newSettings.PublicFolderEnabled = PublicFoldersEnabled; newSettings.ExchangeSSLEnabled = ExchangeSSLEnabled; #endregion #region Modules newSettings.CitrixEnabled = CitrixEnabled; newSettings.LyncEnabled = LyncEnabled; #endregion #region Other newSettings.LockdownEnabled = LockdownEnabled; newSettings.AllowCustomNameAttrib = AllowCustomNameAttribute; newSettings.IPBlockingEnabled = IPBlockingEnabled; newSettings.IPBlockingFailedCount = IPBlockingFailedCount; newSettings.IPBlockingLockedMinutes = IPBlockingLockedInMinutes; newSettings.CurrencySymbol = CurrencySymbol; #endregion // Insert database.Settings.Add(newSettings); database.SaveChanges(); } else { #region General newSettings.CompanysName = HostersName; newSettings.ResellersEnabled = ResellersEnabled; #endregion #region Active Directory newSettings.BaseOU = HostingOU; newSettings.UsersOU = UsersOU; newSettings.PrimaryDC = PrimaryDC; newSettings.Username = Username; newSettings.Password = EncryptedPassword; #endregion #region Security Groups newSettings.SuperAdmins = SuperAdmins; newSettings.BillingAdmins = BillingAdmins; #endregion #region Billing #endregion #region Exchange newSettings.ExchangeConnectionType = ExchangeConnectionType; newSettings.ExchangeVersion = ExchangeVersion; newSettings.ExchangeFqdn = ExchangeServer; newSettings.ExchangePFServer = ExchangePublicFolderServer; newSettings.ExchDatabases = ExchangeDatabases; newSettings.PublicFolderEnabled = PublicFoldersEnabled; newSettings.ExchangeSSLEnabled = ExchangeSSLEnabled; #endregion #region Modules newSettings.CitrixEnabled = CitrixEnabled; newSettings.LyncEnabled = LyncEnabled; #endregion #region Other newSettings.LockdownEnabled = LockdownEnabled; newSettings.AllowCustomNameAttrib = AllowCustomNameAttribute; newSettings.IPBlockingEnabled = IPBlockingEnabled; newSettings.IPBlockingFailedCount = IPBlockingFailedCount; newSettings.IPBlockingLockedMinutes = IPBlockingLockedInMinutes; newSettings.CurrencySymbol = CurrencySymbol; #endregion // Save database.SaveChanges(); } } catch (Exception) { throw; } 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 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(); } } }
/// <summary> /// Creates a new company /// </summary> /// <param name="company"></param> /// <param name="resellerCode"></param> public void NewCompany(CompanyObject company, string resellerCode) { CPDatabase database = null; // Rollback class in case something goes wrong we can undo changes CloudPanelTransaction events = new CloudPanelTransaction(); try { database = new CPDatabase(); // Generate the company code string companyCode = CompanyObject.GenerateCompanyCode(company.CompanyName, company.UseCompanyNameInsteadofCompanyCode); // Loop and make sure one does exist or find one that does int count = 0; for (int i = 0; i < 1000; i++) { if (Validation.DoesCompanyCodeExist(companyCode)) { this.logger.Info("Tried to create a new company with company code " + companyCode + " but it already existed... trying another code"); companyCode = companyCode + count.ToString(); count++; } else { company.CompanyCode = companyCode; // Assign company code to object break; } } // Get the resellers distinguished name var resellerDistinguishedName = (from r in database.Companies where r.IsReseller where r.CompanyCode == resellerCode select r.DistinguishedName).First(); #region Create Organizational Units // // Create organizational units // ADOrganizationalUnit adOrg = new ADOrganizationalUnit(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC); // Check if resellers are enabled and create the organizational unit in the correct place string newCompanyDistinguishedName = string.Empty; if (!StaticSettings.ResellersEnabled) { newCompanyDistinguishedName = adOrg.CreateCompany(StaticSettings.HostingOU, company); } else { newCompanyDistinguishedName = adOrg.CreateCompany(resellerDistinguishedName, company); } events.NewOrganizationalUnitEvent(newCompanyDistinguishedName); adOrg.RemoveAuthUsersRights(newCompanyDistinguishedName); // Removes authenticated users from the OU; // Create the Exchange OU string exchangeOU = adOrg.CreateOU(newCompanyDistinguishedName, "Exchange", company.Domains[0]); events.NewOrganizationalUnitEvent(exchangeOU); adOrg.RemoveAuthUsersRights(exchangeOU); // Removes authenticated users from the OU; // Create the Applications OU string applicationsOU = adOrg.CreateOU(newCompanyDistinguishedName, "Applications", company.Domains[0]); events.NewOrganizationalUnitEvent(applicationsOU); adOrg.RemoveAuthUsersRights(applicationsOU); // Removes authenticated users from the OU; // Create the custom users OU if there is one string customUsersOU = string.Empty; if (!string.IsNullOrEmpty(StaticSettings.UsersOU)) { customUsersOU = adOrg.CreateOU(newCompanyDistinguishedName, StaticSettings.UsersOU, company.Domains[0]); events.NewOrganizationalUnitEvent(customUsersOU); adOrg.RemoveAuthUsersRights(customUsersOU); // Removes authenticated users from the OU; } #endregion #region Create Security Groups // // Create Security Groups // ADGroup adGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC); // Create the Admins security group adGroup.Create(newCompanyDistinguishedName, "Admins@" + companyCode, "", true, false); events.NewSecurityGroup("Admins@" + companyCode); // Create the All Users security group adGroup.Create(newCompanyDistinguishedName, "AllUsers@" + companyCode, "", true, false); events.NewSecurityGroup("AllUsers@" + companyCode); // Create the AllTSUsers security groups adGroup.Create(newCompanyDistinguishedName, "AllTSUsers@" + companyCode, "", true, false); events.NewSecurityGroup("AllTSUsers@" + companyCode); // Add AllTSUsers to the AllTSUsers@Hosting group adGroup.AddMember("AllTSUsers@Hosting", "AllTSUsers@" + companyCode, "name"); // Check the GPOAccess and see if we are using resellers or not. Then add the group to the GPOAccess security group if (StaticSettings.ResellersEnabled) { adGroup.AddMember("GPOAccess@" + resellerCode, "AllTSUsers@" + companyCode, "name"); } else { adGroup.AddMember("GPOAccess@Hosting", "AllTSUsers@" + companyCode, "name"); } #endregion #region Add read rights to organizational units // // Now add read rights // adOrg.AddAccessRights(newCompanyDistinguishedName, "AllUsers@ " + companyCode); adOrg.AddAccessRights(exchangeOU, "AllUsers@" + companyCode); adOrg.AddAccessRights(applicationsOU, "AllUsers@" + companyCode); if (!string.IsNullOrEmpty(StaticSettings.UsersOU)) { adOrg.AddAccessRights(customUsersOU, "AllUsers@" + companyCode); } #endregion // Insert into database Company newCompanyDb = new Company(); newCompanyDb.IsReseller = false; newCompanyDb.CompanyName = company.CompanyName; newCompanyDb.CompanyCode = company.CompanyCode; newCompanyDb.ResellerCode = resellerCode; newCompanyDb.Street = company.Street; newCompanyDb.City = company.City; newCompanyDb.State = company.State; newCompanyDb.ZipCode = company.ZipCode; newCompanyDb.Country = company.Country; newCompanyDb.PhoneNumber = company.Telephone; newCompanyDb.AdminName = company.AdminName; newCompanyDb.AdminEmail = company.AdminEmail; newCompanyDb.DistinguishedName = newCompanyDistinguishedName; newCompanyDb.Created = DateTime.Now; database.Companies.Add(newCompanyDb); database.SaveChanges(); events.InsertCompanyToDatabase(newCompanyDb.CompanyCode); // Insert domain into database Domain newDomain = new Domain(); newDomain.CompanyCode = newCompanyDb.CompanyCode; newDomain.Domain1 = company.Domains[0]; newDomain.IsAcceptedDomain = false; newDomain.IsLyncDomain = false; newDomain.IsSubDomain = false; database.Domains.Add(newDomain); database.SaveChanges(); // Notify success ThrowEvent(AlertID.SUCCESS, "Successfully created new company " + newCompanyDb.CompanyName); } catch (Exception ex) { ThrowEvent(AlertID.FAILED, ex.Message); // Rollback on error events.RollBack(); } finally { if (database != null) { database.Dispose(); } } }
public void EnableExchange(string companyCode) { ExchangePowershell powershell = null; CPDatabase database = null; CloudPanelTransaction newTransaction = new CloudPanelTransaction(); try { powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC); // Enable Exchange objects for company powershell.NewGlobalAddressList(RecipientFilters.GetGALName(companyCode), RecipientFilters.GetGALFilter(companyCode)); newTransaction.NewExchangeGAL(RecipientFilters.GetGALName(companyCode)); powershell.NewAddressList(RecipientFilters.GetUsersName(companyCode), RecipientFilters.GetUsersFilter(companyCode)); newTransaction.NewExchangeAddressList(RecipientFilters.GetUsersName(companyCode)); powershell.NewAddressList(RecipientFilters.GetGroupsName(companyCode), RecipientFilters.GetGroupsFilter(companyCode)); newTransaction.NewExchangeAddressList(RecipientFilters.GetGroupsName(companyCode)); powershell.NewAddressList(RecipientFilters.GetContactsName(companyCode), RecipientFilters.GetContactsFilter(companyCode)); newTransaction.NewExchangeAddressList(RecipientFilters.GetContactsName(companyCode)); powershell.NewAddressList(RecipientFilters.GetRoomName(companyCode), RecipientFilters.GetRoomFilter(companyCode)); newTransaction.NewExchangeAddressList(RecipientFilters.GetRoomName(companyCode)); powershell.NewOfflineAddressBook(RecipientFilters.GetOALName(companyCode), RecipientFilters.GetGALName(companyCode), "AllUsers@ " + companyCode); newTransaction.NewExchangeOAB(RecipientFilters.GetOALName(companyCode)); powershell.NewAddressBookPolicy(RecipientFilters.GetABPName(companyCode), RecipientFilters.GetGALName(companyCode), RecipientFilters.GetOALName(companyCode), RecipientFilters.GetRoomName(companyCode), RecipientFilters.GetABPAddressLists(companyCode)); newTransaction.NewExchangeABP(RecipientFilters.GetABPName(companyCode)); database = new CPDatabase(); var dn = (from c in database.Companies where !c.IsReseller where c.CompanyCode == companyCode select c).First(); powershell.NewSecurityDistributionGroup("ExchangeSecurity@" + companyCode, "AllUsers@" + companyCode, companyCode, "OU=Exchange," + dn.DistinguishedName); newTransaction.NewExchangeGroup("ExchangeSecurity@" + companyCode); // Set Exchange is enabled dn.ExchEnabled = true; dn.ExchPermFixed = true; database.SaveChanges(); } catch (Exception ex) { this.logger.Error("Error disabling Exchange for company " + companyCode, ex); newTransaction.RollBack(); ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message); } finally { if (database != null) { database.Dispose(); } if (powershell != null) { powershell.Dispose(); } } }