Пример #1
0
        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;
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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;
        }