Example #1
0
        /// <summary>
        /// Used to set External Sharing
        /// </summary>
        /// <param name="siteInfo"></param>
        public override void SetExternalSharing(SiteInformation siteInfo)
        {
            UsingContext(ctx =>
            {
                try
                {
                    Stopwatch _timespan = Stopwatch.StartNew();

                    Tenant _tenant = new Tenant(ctx);

                    //_tenant.SetSiteProperties(siteInfo.Url, null, null, SharingCapabilities.ExternalUserSharingOnly, null, null, null, null);
                    SiteProperties _siteProps = _tenant.GetSitePropertiesByUrl(siteInfo.Url, false);
                    ctx.Load(_tenant);
                    ctx.Load(_siteProps);
                    ctx.ExecuteQuery();

                    var _tenantSharingCapability = _tenant.SharingCapability;
                    var _siteSharingCapability   = _siteProps.SharingCapability;
                    var _targetSharingCapability = SharingCapabilities.Disabled;

                    if (!siteInfo.EnableExternalSharing && _tenantSharingCapability != SharingCapabilities.Disabled)
                    {
                        _targetSharingCapability = SharingCapabilities.Disabled;

                        _siteProps.SharingCapability = _targetSharingCapability;
                        _siteProps.Update();
                        ctx.ExecuteQuery();
                        Log.Info("Provisioning.Common.Office365SiteProvisioningService.SetExternalSharing", PCResources.ExternalSharing_Successful, siteInfo.Url);
                    }
                    if (siteInfo.EnableExternalSharing && _tenantSharingCapability != SharingCapabilities.Disabled)
                    {
                        _targetSharingCapability = SharingCapabilities.ExternalUserSharingOnly;

                        _siteProps.SharingCapability = _targetSharingCapability;
                        _siteProps.Update();
                        ctx.ExecuteQuery();
                        Log.Info("Provisioning.Common.Office365SiteProvisioningService.SetExternalSharing", PCResources.ExternalSharing_Successful, siteInfo.Url);
                    }

                    _timespan.Stop();
                    Log.TraceApi("SharePoint", "Office365SiteProvisioningService.SetExternalSharing", _timespan.Elapsed, "SiteUrl={0}", siteInfo.Url);
                }
                catch (ServerException _ex)
                {
                    Log.Info("Provisioning.Common.Office365SiteProvisioningService.SetExternalSharing", PCResources.ExternalSharing_Exception, siteInfo.Url, _ex);
                }
                catch (Exception _ex)
                {
                    Log.Info("Provisioning.Common.Office365SiteProvisioningService.SetExternalSharing", PCResources.ExternalSharing_Exception, siteInfo.Url, _ex);
                }
            });
        }
        protected void btnUpdateSiteCollectionStatus_Click(object sender, EventArgs e)
        {
            string siteUrl = sitecollections.SelectedValue;

            using (var ctx = GetAdminContext())
            {
                // get site collections.
                Tenant         tenant   = new Tenant(ctx);
                SiteProperties siteProp = tenant.GetSitePropertiesByUrl(siteUrl, true);
                ctx.Load(siteProp);
                ctx.ExecuteQuery();

                switch (rblSharingOptions.SelectedValue)
                {
                case "Disabled":
                    siteProp.SharingCapability = SharingCapabilities.Disabled;
                    lblStatus.Text             = "External sharing is for authenticated and guest users.";
                    break;

                case "ExternalUserAndGuestSharing":
                    siteProp.SharingCapability = SharingCapabilities.ExternalUserAndGuestSharing;
                    lblStatus.Text             = "External sharing is for authenticated and guest users.";
                    break;

                case "ExternalUserSharingOnly":
                    siteProp.SharingCapability = SharingCapabilities.ExternalUserSharingOnly;
                    lblStatus.Text             = "External sharing is for authenticated and guest users.";
                    break;
                }
                // Update based on applied setting
                siteProp.Update();
                ctx.ExecuteQuery();
                lblStatus.Text = string.Format("Sharing status updated for site collection at URL: {0}", siteUrl);
            }
        }
Example #3
0
        /// <summary>
        /// Sets the Site Collection External Sharing Setting using the SharePoint Tenant API
        /// </summary>
        /// <param name="adminCC"></param>
        /// <param name="siteCollectionURl"></param>
        /// <param name="shareSettings"></param>
        public static void SetSiteSharing(ClientContext adminCC, string siteCollectionURl, SharingCapabilities shareSettings)
        {
            var            _tenantAdmin = new Tenant(adminCC);
            SiteProperties _siteprops   = _tenantAdmin.GetSitePropertiesByUrl(siteCollectionURl, true);

            adminCC.Load(_tenantAdmin);
            adminCC.Load(_siteprops);
            adminCC.ExecuteQuery();

            SharingCapabilities _tenantSharing = _tenantAdmin.SharingCapability;
            var  _currentShareSettings         = _siteprops.SharingCapability;
            bool _isUpdatable = false;

            if (_tenantSharing == SharingCapabilities.Disabled)
            {
                Console.WriteLine("Sharing is currently disabled in your tenant! I am unable to work on it.");
            }
            else
            {
                if (shareSettings == SharingCapabilities.Disabled)
                {
                    _isUpdatable = true;
                }
                else if (shareSettings == SharingCapabilities.ExternalUserSharingOnly)
                {
                    _isUpdatable = true;
                }
                else if (shareSettings == SharingCapabilities.ExternalUserAndGuestSharing)
                {
                    if (_tenantSharing == SharingCapabilities.ExternalUserAndGuestSharing)
                    {
                        _isUpdatable = true;
                    }
                    else
                    {
                        Console.WriteLine("ExternalUserAndGuestSharing is currently disabled in your tenant! I am unable to work on it.");
                    }
                }
            }
            if (_currentShareSettings != shareSettings && _isUpdatable)
            {
                _siteprops.SharingCapability = shareSettings;
                _siteprops.Update();
                adminCC.ExecuteQuery();
                Console.WriteLine("Set Sharing on site {0} to {1}.", siteCollectionURl, shareSettings);
            }
        }
Example #4
0
        public bool IsSiteCollectionStorageQuotaUpdated(string _strURL, int _intNewQuota)
        {
            bool   isStorageUpdated  = false;
            string siteCollectionUrl = SPOAdminURL;

            try
            {
                ClientContext clientContext;
                using (clientContext = GetClientContext(siteCollectionUrl, clientID, clientSecret))
                {
                    clientContext.ExecuteQuery();
                    Tenant currentO365Tenant = new Tenant(clientContext);
                    clientContext.ExecuteQuery();

                    SiteProperties propertyColl = currentO365Tenant.GetSitePropertiesByUrl(_strURL, true);

                    if (propertyColl != null)
                    {
                        clientContext.Load(propertyColl);
                        clientContext.ExecuteQuery();

                        //propertyColl.Title += "_storage Updated By Bot";
                        propertyColl.StorageMaximumLevel += (_intNewQuota * 1024);
                        propertyColl.Update();

                        clientContext.Load(propertyColl);
                        clientContext.ExecuteQuery();
                        isStorageUpdated = true;
                    }
                }
            }
            catch (Exception ex)
            {
                isStorageUpdated = false;
            }

            return(isStorageUpdated);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="siteInfo"></param>
        public override void SetExternalSharing(SiteInformation siteInfo)
        {
            UsingContext(ctx =>
            {
                try
                {
                    Tenant _tenant            = new Tenant(ctx);
                    SiteProperties _siteProps = _tenant.GetSitePropertiesByUrl(siteInfo.Url, false);
                    ctx.Load(_tenant);
                    ctx.Load(_siteProps);
                    ctx.ExecuteQuery();
                    bool _shouldBeUpdated = false;

                    var _tenantSharingCapability = _tenant.SharingCapability;
                    var _siteSharingCapability   = _siteProps.SharingCapability;
                    var _targetSharingCapability = SharingCapabilities.Disabled;

                    if (siteInfo.EnableExternalSharing && _tenantSharingCapability != SharingCapabilities.Disabled)
                    {
                        _targetSharingCapability = SharingCapabilities.ExternalUserSharingOnly;
                        _shouldBeUpdated         = true;
                    }
                    if (_siteSharingCapability != _targetSharingCapability && _shouldBeUpdated)
                    {
                        _siteProps.SharingCapability = _targetSharingCapability;
                        _siteProps.Update();
                        ctx.ExecuteQuery();
                        Log.Info("Provisioning.Common.Office365SiteProvisioningService.SetExternalSharing", PCResources.ExternalSharing_Successful, siteInfo.Url);
                    }
                }
                catch (Exception _ex)
                {
                    Log.Info("Provisioning.Common.Office365SiteProvisioningService.SetExternalSharing", PCResources.ExternalSharing_Exception, siteInfo.Url, _ex);
                }
            });
        }
Example #6
0
        protected void btnSave_Click(object sender, EventArgs e)
        {
            siteURL = Page.Request["SPHostUrl"];
            var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);

            using (var clientContext = spContext.CreateUserClientContextForSPHost())
            {
                clientContext.Load(clientContext.Site);
                clientContext.ExecuteQuery();
                if (clientContext.Site.ShareByEmailEnabled)
                {
                    initialSharingSetting = _shared;
                }
                else
                {
                    initialSharingSetting = _notshared;
                }
            }

            try
            {
                if (rdbList.SelectedValue == "allowed" && initialSharingSetting == _notshared)
                {
                    Log.LogFileSystem(string.Format("Start enabling external sharing..."));
                    Log.LogFileSystem(string.Format("\t" + "Start getting Context..."));

                    var ctx = GetContext(TenantAdminUrl);
                    using (ctx)
                    {
                        Tenant _tenant = new Tenant(ctx);
                        Log.LogFileSystem(string.Format("\t" + "Loading site properties..."));
                        SiteProperties _siteProps = _tenant.GetSitePropertiesByUrl(siteURL, false);
                        ctx.Load(_tenant);
                        ctx.Load(_siteProps);
                        ctx.ExecuteQuery();
                        bool _shouldBeUpdated = false;

                        var _tenantSharingCapability = _tenant.SharingCapability;
                        var _siteSharingCapability   = _siteProps.SharingCapability;
                        var _targetSharingCapability = SharingCapabilities.Disabled;

                        //if (siteInfo.EnableExternalSharing && _tenantSharingCapability != SharingCapabilities.Disabled)
                        //{
                        _targetSharingCapability = SharingCapabilities.ExternalUserSharingOnly;
                        _shouldBeUpdated         = true;
                        //}
                        if (_siteSharingCapability != _targetSharingCapability && _shouldBeUpdated)
                        {
                            Log.LogFileSystem(string.Format("\t" + "Enabling sharing setting..."));
                            _siteProps.SharingCapability = _targetSharingCapability;
                            ctx.Load(_siteProps);
                            SpoOperation op = _siteProps.Update();
                            ctx.Load(op, i => i.IsComplete);
                            ctx.ExecuteQuery();

                            while (!op.IsComplete)
                            {
                                Log.LogFileSystem(string.Format("\t" + "Refreshing update..."));
                                //wait 30seconds and try again
                                System.Threading.Thread.Sleep(3000);
                                op.RefreshLoad();
                                ctx.ExecuteQuery();
                            }

                            Log.LogFileSystem(string.Format("\t" + "Update completed!"));
                        }
                    }

                    try
                    {
                        Log.LogFileSystem(string.Format("\t" + "Start enabling the banner..."));

                        //Enable Banner
                        var clientContextSC = GetContext(siteURL);
                        using (clientContextSC)
                        {
                            Site site = clientContextSC.Site;
                            clientContextSC.Load(site);
                            clientContextSC.ExecuteQuery();

                            var existingActions = site.UserCustomActions;
                            clientContextSC.Load(existingActions);
                            clientContextSC.ExecuteQuery();

                            UserCustomAction targetAction = existingActions.Add();
                            targetAction.Name        = "External_Sharing_Banner";
                            targetAction.Description = "External_Sharing_Banner";
                            targetAction.Location    = "ScriptLink";

                            targetAction.ScriptBlock = "var headID = document.getElementsByTagName('head')[0]; var externalSharingTag = document.createElement('script'); externalSharingTag.type = 'text/javascript'; externalSharingTag.src = '" + JavaScriptFile + "';headID.appendChild(externalSharingTag);";
                            targetAction.ScriptSrc   = "";
                            targetAction.Update();
                            clientContextSC.ExecuteQuery();

                            Log.LogFileSystem(string.Format("\t" + "Banner successfully enabled!"));
                            EventLog.WriteEntry(source, string.Format("Changing External Sharing Settings is completed successfully.  The Site Collection is externally shared and the banner is enabled."), EventLogEntryType.Information, 6000);
                        }
                    }
                    catch (Exception ex)
                    {
                        EventLog.WriteEntry(source, string.Format("Error occurred in changing External Sharing Settings.  The error is {0}", ex.Message), EventLogEntryType.Error, 6001);
                    }
                }
                else if (rdbList.SelectedValue == "notallowed" && initialSharingSetting == _shared)
                {
                    Log.LogFileSystem(string.Format("Start disabling external sharing..."));
                    Log.LogFileSystem(string.Format("\t" + "Start getting Context..."));

                    var ctx = GetContext(TenantAdminUrl);
                    using (ctx)
                    {
                        Tenant _tenant = new Tenant(ctx);
                        Log.LogFileSystem(string.Format("\t" + "Loading site properties..."));
                        SiteProperties _siteProps = _tenant.GetSitePropertiesByUrl(siteURL, false);
                        ctx.Load(_tenant);
                        ctx.Load(_siteProps);
                        ctx.ExecuteQuery();
                        bool _shouldBeUpdated = false;

                        var _tenantSharingCapability = _tenant.SharingCapability;
                        var _siteSharingCapability   = _siteProps.SharingCapability;
                        var _targetSharingCapability = SharingCapabilities.Disabled;

                        _targetSharingCapability = SharingCapabilities.Disabled;
                        _shouldBeUpdated         = true;

                        if (_siteSharingCapability != _targetSharingCapability && _shouldBeUpdated)
                        {
                            Log.LogFileSystem(string.Format("\t" + "Disabling sharing setting..."));
                            _siteProps.SharingCapability = _targetSharingCapability;
                            ctx.Load(_siteProps);
                            SpoOperation op = _siteProps.Update();
                            ctx.Load(op, i => i.IsComplete);
                            ctx.ExecuteQuery();

                            while (!op.IsComplete)
                            {
                                Log.LogFileSystem(string.Format("\t" + "Refreshing update..."));
                                //wait 30seconds and try again
                                System.Threading.Thread.Sleep(3000);
                                op.RefreshLoad();
                                ctx.ExecuteQuery();
                            }
                        }
                    }

                    try
                    {
                        Log.LogFileSystem(string.Format("\t" + "Start disabling the banner..."));
                        //Disable Banner
                        var clientContextSC = GetContext(siteURL);
                        using (clientContextSC)
                        {
                            Site site = clientContextSC.Site;
                            clientContextSC.Load(site);
                            clientContextSC.ExecuteQuery();

                            var existingActions = site.UserCustomActions;
                            clientContextSC.Load(existingActions);
                            clientContextSC.ExecuteQuery();

                            var actions = existingActions.ToArray();
                            foreach (var action in actions)
                            {
                                if (action.Name == "External_Sharing_Banner" &&
                                    action.Location == "ScriptLink")
                                {
                                    action.DeleteObject();
                                    clientContextSC.ExecuteQuery();
                                    Log.LogFileSystem(string.Format("\t" + "Banner successfully disabled!"));
                                    break;
                                }
                            }
                        }

                        EventLog.WriteEntry(source, string.Format("Changing External Sharing Settings is completed successfully.  The Site Collection is not externally shared and the banner is disabled."), EventLogEntryType.Information, 6000);
                    }
                    catch (Exception ex)
                    {
                        EventLog.WriteEntry(source, string.Format("Error occurred in changing External Sharing Settings.  The error is {0}", ex.Message), EventLogEntryType.Error, 6001);
                    }
                }

                Log.LogFileSystem(string.Format(string.Format("External Sharing is now {0}  ", rdbList.SelectedValue)));
                Log.LogFileSystem(string.Format("External Sharing setting is changed successfully for Site Collection - {0}  ", Page.Request["SPHostUrl"]));
                Log.LogFileSystem(string.Empty);

                //Response.Redirect((string.IsNullOrEmpty(siteURL) ? Page.Request["SPHostUrl"] : siteURL) + "/_layouts/15/settings.aspx");
                ScriptManager.RegisterStartupScript(this, this.GetType(), "successMessageBanner", "alert('External Sharing setting is changed successfully!!'); window.location='" +
                                                    (string.IsNullOrEmpty(siteURL) ? Page.Request["SPHostUrl"] : siteURL) + "/_layouts/15/settings.aspx';", true);
            }
            catch (System.Threading.ThreadAbortException ex)
            {
                Response.Redirect((string.IsNullOrEmpty(siteURL) ? Page.Request["SPHostUrl"] : siteURL) + "/_layouts/15/settings.aspx", false);
            }
            catch (Exception ex)
            {
                Log.LogFileSystem(string.Format("Error occured in changing External Sharing Settings for Site Collection - {0}, error is {1}  ", (string.IsNullOrEmpty(siteURL) ? Page.Request["SPHostUrl"] : siteURL), ex.Message));
                Log.LogFileSystem(string.Empty);
                EventLog.WriteEntry(source, string.Format("Error occured in changing External Sharing Settings.  The error is {0}", ex.Message), EventLogEntryType.Error, 6001);
                ScriptManager.RegisterStartupScript(this, GetType(), "ErrorMessageBanner", "document.getElementById('spanErrorMsg').style.display = 'block';", true);
                ScriptManager.RegisterStartupScript(this, GetType(), "ErrorCursor", "  document.body.style.cursor = 'default';", true);
            }
        }