private string CreateOrganizationInternal(string organizationId, string sipDomain, bool enableConferencing, bool enableConferencingVideo, int maxConferenceSize, bool enabledFederation, bool enabledEnterpriseVoice) { sipDomain = sipDomain.ToLower(); HostedSolutionLog.LogStart("CreateOrganizationInternal"); HostedSolutionLog.DebugInfo("organizationId: {0}", organizationId); HostedSolutionLog.DebugInfo("sipDomain: {0}", sipDomain); string TenantId = string.Empty; LyncTransaction transaction = StartTransaction(); Runspace runSpace = null; try { runSpace = OpenRunspace(); // create sip domain Command cmd = new Command("New-CsSipDomain"); cmd.Parameters.Add("Identity", sipDomain); ExecuteShellCommand(runSpace, cmd, false); transaction.RegisterNewSipDomain(sipDomain); //set the msRTCSIP-Domains, TenantID, ObjectID Guid id = Guid.NewGuid(); string path = AddADPrefix(GetOrganizationPath(organizationId)); DirectoryEntry ou = ActiveDirectoryUtils.GetADObject(path); ActiveDirectoryUtils.SetADObjectPropertyValue(ou, "msRTCSIP-Domains", sipDomain); ActiveDirectoryUtils.SetADObjectPropertyValue(ou, "msRTCSIP-TenantId", id); ActiveDirectoryUtils.SetADObjectPropertyValue(ou, "msRTCSIP-ObjectId", id); ou.CommitChanges(); //Create simpleurls CreateSimpleUrl(runSpace, sipDomain, id); transaction.RegisterNewSimpleUrl(sipDomain, id.ToString()); //create conferencing policy cmd = new Command("New-CsConferencingPolicy"); cmd.Parameters.Add("Identity", organizationId); cmd.Parameters.Add("MaxMeetingSize", ((maxConferenceSize == -1) | (maxConferenceSize > 250)) ? 250 : maxConferenceSize); cmd.Parameters.Add("AllowIPVideo", enableConferencingVideo); ExecuteShellCommand(runSpace, cmd, false); transaction.RegisterNewConferencingPolicy(organizationId); //create external access policy cmd = new Command("New-CsExternalAccessPolicy"); cmd.Parameters.Add("Identity", organizationId); cmd.Parameters.Add("EnableFederationAccess", true); cmd.Parameters.Add("EnableOutsideAccess", true); cmd.Parameters.Add("EnablePublicCloudAccess", false); cmd.Parameters.Add("EnablePublicCloudAudioVideoAccess", false); ExecuteShellCommand(runSpace, cmd, false); transaction.RegisterNewCsExternalAccessPolicy(organizationId); //Enable for federation AllowList allowList = new AllowList(); DomainPattern domain = new DomainPattern(sipDomain); allowList.AllowedDomain.Add(domain); cmd = new Command("Set-CsTenantFederationConfiguration"); cmd.Parameters.Add("Tenant", id); cmd.Parameters.Add("AllowFederatedUsers", true); cmd.Parameters.Add("AllowedDomains", allowList); ExecuteShellCommand(runSpace, cmd, false); //create mobility policy cmd = new Command("New-CsMobilityPolicy"); cmd.Parameters.Add("Identity", organizationId + " EnableOutSideVoice"); cmd.Parameters.Add("EnableMobility", true); cmd.Parameters.Add("EnableOutsideVoice", true); ExecuteShellCommand(runSpace, cmd, false); transaction.RegisterNewCsMobilityPolicy(organizationId + " EnableOutSideVoice"); cmd = new Command("New-CsMobilityPolicy"); cmd.Parameters.Add("Identity", organizationId + " DisableOutSideVoice"); cmd.Parameters.Add("EnableMobility", true); cmd.Parameters.Add("EnableOutsideVoice", false); ExecuteShellCommand(runSpace, cmd, false); transaction.RegisterNewCsMobilityPolicy(organizationId + " DisableOutSideVoice"); cmd = new Command("Invoke-CsManagementStoreReplication"); ExecuteShellCommand(runSpace, cmd, false); TenantId = id.ToString(); } catch (Exception ex) { HostedSolutionLog.LogError("CreateOrganizationInternal", ex); RollbackTransaction(transaction); throw; } finally { CloseRunspace(runSpace); } HostedSolutionLog.LogEnd("CreateOrganizationInternal"); return TenantId; }
/// <summary> Creates organization. </summary> /// <param name="organizationId"> The organization identifier. </param> /// <param name="sipDomain"> The sip domain. </param> /// <param name="enableConferencingVideo"> True - if conferencing video should be enabled.</param> /// <param name="maxConferenceSize"> The max conference size.</param> /// <param name="enabledFederation"> True - if federations should be enabled.</param> /// <param name="enabledEnterpriseVoice"> True - if enterprise voice should be enabled.</param> /// <returns> The tenant identifier. </returns> internal override string CreateOrganizationInternal(string organizationId, string sipDomain, bool enableConferencingVideo, int maxConferenceSize, bool enabledFederation, bool enabledEnterpriseVoice) { sipDomain = sipDomain.ToLower(); HostedSolutionLog.LogStart("CreateOrganizationInternal"); HostedSolutionLog.DebugInfo("organizationId: {0}", organizationId); HostedSolutionLog.DebugInfo("sipDomain: {0}", sipDomain); string tenantId; SfBTransaction transaction = StartTransaction(); Runspace runspace = null; try { runspace = OpenRunspace(); var command = new Command("New-CsSipDomain"); command.Parameters.Add("Identity", sipDomain); ExecuteShellCommand(runspace, command, false); transaction.RegisterNewSipDomain(sipDomain); Guid id = Guid.NewGuid(); AddAdDomainName(organizationId, sipDomain); CreateSimpleUrl(runspace, id); transaction.RegisterNewSimpleUrl(sipDomain, id.ToString()); command = new Command("New-CsConferencingPolicy"); command.Parameters.Add("Identity", organizationId); command.Parameters.Add("MaxMeetingSize", ((maxConferenceSize == -1) | (maxConferenceSize > 250)) ? 250 : maxConferenceSize); command.Parameters.Add("AllowIPVideo", enableConferencingVideo); ExecuteShellCommand(runspace, command, false); transaction.RegisterNewConferencingPolicy(organizationId); command = new Command("New-CsExternalAccessPolicy"); command.Parameters.Add("Identity", organizationId); command.Parameters.Add("EnableFederationAccess", true); command.Parameters.Add("EnableOutsideAccess", true); command.Parameters.Add("EnablePublicCloudAccess", false); command.Parameters.Add("EnablePublicCloudAudioVideoAccess", false); ExecuteShellCommand(runspace, command, false); transaction.RegisterNewCsExternalAccessPolicy(organizationId); var allowList = new AllowList(); var domain = new DomainPattern(sipDomain); allowList.AllowedDomain.Add(domain); AddFederationDomainInternal("", domain.Domain, PoolFQDN); command = new Command("New-CsMobilityPolicy"); command.Parameters.Add("Identity", organizationId + " EnableOutSideVoice"); command.Parameters.Add("EnableMobility", true); command.Parameters.Add("EnableOutsideVoice", true); ExecuteShellCommand(runspace, command, false); transaction.RegisterNewCsMobilityPolicy(organizationId + " EnableOutSideVoice"); command = new Command("New-CsMobilityPolicy"); command.Parameters.Add("Identity", organizationId + " DisableOutSideVoice"); command.Parameters.Add("EnableMobility", true); command.Parameters.Add("EnableOutsideVoice", false); ExecuteShellCommand(runspace, command, false); transaction.RegisterNewCsMobilityPolicy(organizationId + " DisableOutSideVoice"); command = new Command("Invoke-CsManagementStoreReplication"); ExecuteShellCommand(runspace, command, false); tenantId = id.ToString(); } catch (Exception ex) { HostedSolutionLog.LogError("CreateOrganizationInternal", ex); RollbackTransaction(transaction); throw; } finally { CloseRunspace(runspace); } HostedSolutionLog.LogEnd("CreateOrganizationInternal"); return(tenantId); }
private bool AddFederationDomainInternal(string organizationId, string domainName, string proxyFqdn) { HostedSolutionLog.LogStart("AddFederationDomainInternal"); HostedSolutionLog.DebugInfo("organizationId: {0}", organizationId); HostedSolutionLog.DebugInfo("domainName: {0}", domainName); domainName = domainName.ToLower(); proxyFqdn = proxyFqdn.ToLower(); Runspace runSpace = null; try { runSpace = OpenRunspace(); Guid tenantId = Guid.Empty; Command cmd = new Command("Get-CsTenant"); cmd.Parameters.Add("Identity", GetOrganizationPath(organizationId)); Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd, false); if ((result != null) && (result.Count > 0)) { tenantId = (Guid)GetPSObjectProperty(result[0], "TenantId"); //Get-CSTenantFederationConfiguration (AllowedDomains) cmd = new Command("Get-CsTenantFederationConfiguration"); cmd.Parameters.Add("Tenant", tenantId); result = ExecuteShellCommand(runSpace, cmd, false); if ((result != null) && (result.Count > 0)) { AllowList allowList = null; if (GetPSObjectProperty(result[0], "AllowedDomains").GetType().ToString() == "Microsoft.Rtc.Management.WritableConfig.Settings.Edge.AllowList") { allowList = (AllowList)GetPSObjectProperty(result[0], "AllowedDomains"); DomainPattern domain = new DomainPattern(domainName); allowList.AllowedDomain.Add(domain); } else { allowList = new AllowList(); DomainPattern domain = new DomainPattern(domainName); allowList.AllowedDomain.Add(domain); } cmd = new Command("Set-CsTenantFederationConfiguration"); cmd.Parameters.Add("Tenant", tenantId); cmd.Parameters.Add("AllowedDomains", allowList); ExecuteShellCommand(runSpace, cmd, false); } } } catch (Exception ex) { HostedSolutionLog.LogError("AddFederationDomainInternal", ex); throw; } finally { CloseRunspace(runSpace); } HostedSolutionLog.LogEnd("AddFederationDomainInternal"); return true; }