/// <summary> /// Serializes the SharePointProvisioningData object to XML to allow it to be passed to the worker role /// </summary> /// <param name="sharePointProvisioningData">SharePointProvisioningData object</param> /// <returns>XML representation as a string</returns> private static string SerializeData(SharePointProvisioningData sharePointProvisioningData) { string serializedSharePointProvisioningaData = ""; using (Stream stream = new MemoryStream()) { new XmlSerializer(typeof(SharePointProvisioningData)).Serialize(stream, sharePointProvisioningData); stream.Position = 0; serializedSharePointProvisioningaData = new StreamReader(stream).ReadToEnd(); } return serializedSharePointProvisioningaData; }
public bool ProvisionSiteCollection(SharePointProvisioningData sharePointProvisioningData) { bool success = false; try { // submit provisioning data to queue CloudQueue queue = queueStorage.GetQueueReference(queueName); CloudQueueMessage message = new CloudQueueMessage(SerializeData(sharePointProvisioningData)); queue.AddMessage(message); success = true; } catch (Exception) { //Log error throw; } return success; }
public void CreateSiteCollectionOnPremises(Contract.SharePointProvisioningData sharePointProvisioningData) { //On-Prem settings string generalOnPremUserName = GetConfiguration("General.OnPremUserName"); string generalOnPremUserPassword = EncryptionUtility.Decrypt(GetConfiguration("General.OnPremUserPassword"), GetConfiguration("General.EncryptionThumbPrint")); string generalOnPremUserDomain = GetConfiguration("General.OnPremUserDomain"); string generalOnPremWebApplication = GetConfiguration("General.OnPremWebApplication"); SiteManager.SiteData siteData = new SiteManager.SiteData(); siteData.Url = sharePointProvisioningData.Url.Substring(sharePointProvisioningData.Url.IndexOf("/sites")); siteData.Title = sharePointProvisioningData.Title; siteData.LcId = sharePointProvisioningData.Lcid.ToString(); siteData.OwnerLogin = GetOwnerLogin(sharePointProvisioningData, generalOnPremUserDomain); siteData.SecondaryContactLogin = string.Format(@"{0}\{1}", generalOnPremUserDomain, generalOnPremUserName); siteData.WebTemplate = sharePointProvisioningData.Template; using (SiteManager.SiteManagerClient siteManager = GetSiteManagerClient(generalOnPremWebApplication, generalOnPremUserName, generalOnPremUserPassword, generalOnPremUserDomain)) { siteManager.CreateSiteCollection(siteData); } }
public bool ProvisionSiteCollection(Contract.SharePointProvisioningData sharePointProvisioningData) { bool processed = false; try { SiteProvisioningBase siteToProvision = null; switch (sharePointProvisioningData.Template) { case SiteProvisioningTypes.ContosoCollaboration: siteToProvision = new ContosoCollaboration(); break; case SiteProvisioningTypes.ContosoProject: siteToProvision = new ContosoProject(); break; } siteToProvision.SharePointProvisioningData = sharePointProvisioningData; HookupAuthentication(siteToProvision); // Hookup class that will hold the on-prem overrides SiteProvisioningOnPremises spo = new SiteProvisioningOnPremises(); siteToProvision.SiteProvisioningOnPremises = spo; // Provision the site collection processed = siteToProvision.Execute(); } catch (Exception ex) { Console.WriteLine(ex.Message); //log error } return(processed); }
private string GetOwnerLogin(Contract.SharePointProvisioningData sharePointProvisioningData, string domain) { string ownerLogin = sharePointProvisioningData.Owners[0].Login.Split(new string[] { "@" }, StringSplitOptions.RemoveEmptyEntries)[0]; return(string.Format(@"{0}\{1}", domain, ownerLogin)); }
static void Main(string[] args) { // Determine the system connectivity mode based on the command line // arguments: -http, -tcp or -auto (defaults to auto) ServiceBusEnvironment.SystemConnectivity.Mode = GetConnectivityMode(args); string serviceNamespace = ConfigurationManager.AppSettings["General.SBServiceNameSpace"]; string issuerName = ConfigurationManager.AppSettings["General.SBIssuerName"]; string issuerSecret = EncryptionUtility.Decrypt(ConfigurationManager.AppSettings["SBIssuerSecret"], ConfigurationManager.AppSettings["General.EncryptionThumbPrint"]); // create the service URI based on the service namespace Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "SharePointProvisioning"); // create the credentials object for the endpoint TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior(); sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret); // create the channel factory loading the configuration ChannelFactory<ISharePointProvisioningChannel> channelFactory = new ChannelFactory<ISharePointProvisioningChannel>("RelayEndpoint", new EndpointAddress(serviceUri)); // apply the Service Bus credentials channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential); // create and open the client channel ISharePointProvisioningChannel channel = channelFactory.CreateChannel(); channel.Open(); SharePointProvisioningData sharePointProvisioningData = new SharePointProvisioningData(); sharePointProvisioningData.Title = "Test site on-premises"; sharePointProvisioningData.Url = String.Format("{0}{1}", "https://bertonline.sharepoint.com/sites/", Guid.NewGuid().ToString()); sharePointProvisioningData.Template = "ContosoCollaboration"; sharePointProvisioningData.Name = ""; sharePointProvisioningData.DataClassification = "HBI"; SharePointUser[] owners = new SharePointUser[1]; SharePointUser owner = new SharePointUser(); owner.Login = "******"; owner.Name = "Kevin Cook"; owner.Email = "*****@*****.**"; owners[0] = owner; sharePointProvisioningData.Owners = owners; channel.ProvisionSiteCollection(sharePointProvisioningData); //Console.WriteLine("Enter text to echo (or [Enter] to exit):"); //string input = Console.ReadLine(); //while (input != String.Empty) //{ // try // { // Console.WriteLine("Server echoed: {0}", channel.Echo(input)); // } // catch (Exception e) // { // Console.WriteLine("Error: " + e.Message); // } // input = Console.ReadLine(); //} Console.ReadLine(); channel.Close(); channelFactory.Close(); }
private void ProcessSiteRequest() { try { string generalSiteDirectoryUrl = RoleEnvironment.GetConfigurationSettingValue("General.SiteDirectoryUrl"); string generalSiteDirectoryListName = RoleEnvironment.GetConfigurationSettingValue("General.SiteDirectoryListName"); string generalSiteDirectoryProvisioningPage = RoleEnvironment.GetConfigurationSettingValue("General.SiteDirectoryProvisioningPage"); string generalSiteCollectionUrl = RoleEnvironment.GetConfigurationSettingValue("General.SiteCollectionUrl"); string generalMailSMTPServer = RoleEnvironment.GetConfigurationSettingValue("General.MailSMTPServer"); string generalMailUser = RoleEnvironment.GetConfigurationSettingValue("General.MailUser"); string generalMailUserPassword = RoleEnvironment.GetConfigurationSettingValue("General.MailUserPassword"); string generalMailSiteRequested = RoleEnvironment.GetConfigurationSettingValue("General.MailSiteRequested"); string generalEncryptionThumbPrint = RoleEnvironment.GetConfigurationSettingValue("General.EncryptionThumbPrint"); //Manager initiation SiteDirectoryManager siteDirectoryManager = new SiteDirectoryManager(); //Decrypt mail password generalMailUserPassword = EncryptionUtility.Decrypt(generalMailUserPassword, generalEncryptionThumbPrint); // SharePoint context for the host web var spContext = SharePointContextProvider.Current.GetSharePointContext(Context); ClientContext hostWebClientContext = spContext.CreateAppOnlyClientContextForSPHost(); // Object that contains data about the site collection we're gonna provision SharePointProvisioningData siteData = new SharePointProvisioningData(); siteData.Url = String.Format("{0}{1}", generalSiteCollectionUrl, Guid.NewGuid().ToString()); // Deal with the Title siteData.Title = txtTitle.Text; // Deal with the template siteData.Template = drlTemplate.SelectedItem.Value; // Deal with the data classification siteData.DataClassification = drlClassification.SelectedItem.Value; // Deal with the site name (empty for root) siteData.Name = ""; // Deal with the site owners List<SharePointUser> ownersList = JsonUtility.Deserialize<List<SharePointUser>>(hdnAdministrators.Value); SharePointUser[] owners = new SharePointUser[ownersList.Count]; List<String> mailTo = new List<string>(ownersList.Count); string ownerNames = ""; string ownerAccounts = ""; int i = 0; foreach (SharePointUser owner in ownersList) { owner.Login = StripUPN(owner.Login); owners[i] = owner; mailTo.Add(owner.Email); if (ownerNames.Length > 0) { ownerNames = ownerNames + ", "; ownerAccounts = ownerAccounts + ", "; } ownerNames = ownerNames + owner.Name; ownerAccounts = ownerAccounts + owner.Login; i++; } siteData.Owners = owners; #if (DEBUG) //In debug mode have the WCF call ignore certificate errors System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => { return true; }; #endif // Provision site collection on the using (SharePointProvisioning.SharePointProvisioningServiceClient service = new SharePointProvisioning.SharePointProvisioningServiceClient()) { if (service.ProvisionSiteCollection(siteData)) { string[] ownerLogins = new string[owners.Length]; int j = 0; foreach (SharePointUser owner in owners) { ownerLogins[j] = owner.Login; j++; } siteDirectoryManager.AddSiteDirectoryEntry(hostWebClientContext, hostWebClientContext.Web, generalSiteDirectoryUrl, generalSiteDirectoryProvisioningPage, generalSiteDirectoryListName, siteData.Title, siteData.Url, siteData.Template, ownerLogins); string mailBody = String.Format(generalMailSiteRequested, siteData.Title, ownerNames, ownerAccounts); MailUtility.SendEmail(generalMailSMTPServer, generalMailUser, generalMailUserPassword, mailTo, null, "Your SharePoint site request has been registered", mailBody); } } if (Page.Request["IsDlg"].Equals("0", StringComparison.InvariantCultureIgnoreCase)) { // redirect to host web home page Response.Redirect(Page.Request["SPHostUrl"]); } else { // refresh the page from which the dialog was opened. Normally this is always the SPHostUrl ClientScript.RegisterStartupScript(typeof(Default), "RedirectToSite", "navigateParent('" + Page.Request["SPHostUrl"] + "');", true); } } catch (Exception ex) { lblErrors.Text = String.Format("Error: {0} \n\r Stacktrace: {1}", ex.Message, ex.StackTrace); } }
/// <summary> /// Launches a site collection creation and waits for the creation to finish /// </summary> /// <param name="properties">Describes the site collection to be created</param> public void AddSiteCollection(SharePointProvisioningData properties) { if (this.CreateOnPremises) { this.SiteProvisioningOnPremises.CreateSiteCollectionOnPremises(this.SharePointProvisioningData); this.createdSiteContext = this.SiteProvisioningOnPremises.SpOnPremiseAuthentication(this.SharePointProvisioningData.Url); } else { SiteEntity newSite = new SiteEntity { Description = properties.Description, Title = properties.Title, Url = properties.Url, Template = properties.Template, Lcid = properties.Lcid, SiteOwnerLogin = properties.SiteOwner.Login, StorageMaximumLevel = properties.StorageMaximumLevel, StorageWarningLevel = properties.StorageWarningLevel, TimeZoneId = properties.TimeZoneId, UserCodeMaximumLevel = properties.UserCodeMaximumLevel, UserCodeWarningLevel = properties.UserCodeWarningLevel, }; Tenant tenant = new Tenant(this.AppOnlyClientContext); tenant.CreateSiteCollection(newSite); InstantiateCreatedSiteClientContext(newSite.Url); } }