private static User[] ResolveGroups(PnPClientContext context, string[] groupNames) { List <User> groups = new List <User>(); foreach (var groupName in groupNames) { var groupCache = MEM_CACHE_GROUPS.FirstOrDefault(g => g.Key == groupName); if (groupCache.Value == null) { try { var group = context.Web.EnsureUser(groupName); context.Load(group); context.ExecuteQueryRetry(); groups.Add(group); MEM_CACHE_GROUPS.Add(groupName, group); } catch (Exception ex) { LogError($"Unable to resolve group: {groupName}", ex); } } else { groups.Add(groupCache.Value); } } return(groups.ToArray()); }
internal static PnPConnection InstantiateSPOnlineConnection(Uri url, PSCredential credentials, string tenantAdminUrl, bool disableTelemetry, AzureEnvironment azureEnvironment = AzureEnvironment.Production) { var context = new PnPClientContext(url.AbsoluteUri) { ApplicationName = Resources.ApplicationName, DisableReturnValueCache = true }; var tenantId = string.Empty; try { using (var authManager = new PnP.Framework.AuthenticationManager(credentials.UserName, credentials.Password)) { context = PnPClientContext.ConvertFrom(authManager.GetContext(url.ToString())); context.ExecuteQueryRetry(); var accessToken = authManager.GetAccessTokenAsync(url.ToString()).GetAwaiter().GetResult(); var parsedToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(accessToken); tenantId = parsedToken.Claims.FirstOrDefault(c => c.Type == "tid").Value; } } catch (ClientRequestException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } catch (ServerException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } var connectionType = ConnectionType.O365; if (url.Host.ToLowerInvariant().EndsWith($"sharepoint.{PnP.Framework.AuthenticationManager.GetSharePointDomainSuffix(azureEnvironment)}")) { connectionType = ConnectionType.O365; } if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } var spoConnection = new PnPConnection(context, connectionType, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag, disableTelemetry, InitializationType.Credentials) { ConnectionMethod = Model.ConnectionMethod.Credentials, AzureEnvironment = azureEnvironment, Tenant = tenantId }; return(spoConnection); }
internal static SPOnlineConnection InstantiateSPOnlineConnection(Uri url, PSCredential credentials, PSHost host, bool currentCredentials, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, bool skipAdminCheck = false) { var context = new PnPClientContext(url.AbsoluteUri); context.RetryCount = retryCount; context.Delay = retryWait * 1000; context.ApplicationName = Properties.Resources.ApplicationName; context.RequestTimeout = requestTimeout; if (!currentCredentials) { try { SharePointOnlineCredentials onlineCredentials = new SharePointOnlineCredentials(credentials.UserName, credentials.Password); context.Credentials = onlineCredentials; try { context.ExecuteQueryRetry(); } catch (ClientRequestException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } catch (ServerException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } } catch (ArgumentException) { // OnPrem? context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); try { context.ExecuteQueryRetry(); } catch (ClientRequestException ex) { throw new Exception("Error establishing a connection", ex); } catch (ServerException ex) { throw new Exception("Error establishing a connection", ex); } } } else { if (credentials != null) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } } var connectionType = ConnectionType.OnPrem; if (url.Host.ToUpperInvariant().EndsWith("SHAREPOINT.COM")) { connectionType = ConnectionType.O365; } if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } return(new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, credentials, url.ToString())); }
private static void AddOrUpdateRepostPage(PnPClientContext context, NewsPost post) { string pageName = $"{post.UrlSlug}.aspx"; var repostPage = EnsureRepostPage(context, pageName); string postUrl = post.PermaLink ?? String.Format(Program.CONFIG.CustomNewsLinkStringTemplate, post.PostId); if (postUrl.Length > 255) { LogWarning(" Repost URL exceeds the maximum allowed length of 255 characters. URL will be truncated to 255 characters."); postUrl = postUrl.Substring(0, 255); } string imageUrl = post.Images.Box960.Url; bool hasChanges = false; ListItem repostItem = repostPage.PageListItem; // Audience Targeting var audienceGroupNames = MapCategoriesToGroupNames(post.Categories.Select(c => c.Name).Distinct().ToArray()); var resolvedGroups = ResolveGroups(context, audienceGroupNames); var groupFieldValues = resolvedGroups.Select(rg => new FieldUserValue() { LookupId = rg.Id }).ToList(); if (SetFieldValue(ref repostItem, "_ModernAudienceTargetUserField", groupFieldValues)) { hasChanges = true; } // Set Custom Repost Content Type if (SetFieldValue(ref repostItem, ClientSidePage.ContentTypeId, Program.CONFIG.CustomRepostContentTypeId)) { hasChanges = true; } // Set Core Fields if (SetFieldValue(ref repostItem, ClientSidePage.Title, post.Title)) { hasChanges = true; } if (SetFieldValue(ref repostItem, ClientSidePage.DescriptionField, post.Description)) { hasChanges = true; } if (SetFieldValue(ref repostItem, ClientSidePage.FirstPublishedDate, DateTime.UtcNow, overwrite: false)) { hasChanges = true; } if (SetFieldValue(ref repostItem, ClientSidePage.PromotedStateField, (int)PromotedState.Promoted)) { hasChanges = true; } if (SetFieldValue(ref repostItem, ClientSidePage._OriginalSourceUrl, postUrl)) { hasChanges = true; } if (SetFieldValue(ref repostItem, ClientSidePage._OriginalSourceSiteId, Guid.Empty)) { hasChanges = true; } if (SetFieldValue(ref repostItem, ClientSidePage._OriginalSourceWebId, Guid.Empty)) { hasChanges = true; } if (SetFieldValue(ref repostItem, ClientSidePage._OriginalSourceListId, Guid.Empty)) { hasChanges = true; } if (SetFieldValue(ref repostItem, ClientSidePage._OriginalSourceItemId, Guid.Empty)) { hasChanges = true; } if (SetFieldValue(ref repostItem, ClientSidePage.BannerImageUrl, new FieldUrlValue() { Description = imageUrl, Url = imageUrl })) { hasChanges = true; } // Set Core Repost Content string layoutsWebpartContent = GetRepostLayoutWebpartsContent(postUrl, imageUrl, post); if (SetFieldValue(ref repostItem, ClientSidePage.PageLayoutContentField, layoutsWebpartContent)) { hasChanges = true; } if (hasChanges) { LogInfo(" Updating news link core fields"); repostItem.Update(); context.ExecuteQueryRetry(); } // Set Extra Metadata var terms = GetManagedMetadataTerms(context, post.Categories.Select(c => c.Name).Distinct().ToArray()); if (SetFieldValue(ref repostItem, "SourceCategories", terms)) { hasChanges = true; } if (SetFieldValue(ref repostItem, "SourcePostSourceType", post.PostSourceType)) { hasChanges = true; } if (SetFieldValue(ref repostItem, "SourceProvider", post.Provider)) { hasChanges = true; } if (SetFieldValue(ref repostItem, "SourceModifiedDate", post.ModifiedDate)) { hasChanges = true; } if (SetFieldValue(ref repostItem, "SourcePublishDate", post.PublishDate)) { hasChanges = true; } if (hasChanges) { LogInfo(" Updating news link metadata"); repostItem.Update(); context.ExecuteQueryRetry(); repostPage.Publish(); } else { LogInfo(" News link is up-to-date; no changes made"); } }
internal static SPOnlineConnection InstantiateSPOnlineConnection(Uri url, PSCredential credentials, PSHost host, bool currentCredentials, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool skipAdminCheck = false, ClientAuthenticationMode authenticationMode = ClientAuthenticationMode.Default) { var context = new PnPClientContext(url.AbsoluteUri); context.RetryCount = retryCount; context.Delay = retryWait * 1000; context.ApplicationName = Properties.Resources.ApplicationName; #if !ONPREMISES context.DisableReturnValueCache = true; #elif SP2016 context.DisableReturnValueCache = true; #endif context.RequestTimeout = requestTimeout; context.AuthenticationMode = authenticationMode; if (authenticationMode == ClientAuthenticationMode.FormsAuthentication) { var formsAuthInfo = new FormsAuthenticationLoginInfo(credentials.UserName, EncryptionUtility.ToInsecureString(credentials.Password)); context.FormsAuthenticationLoginInfo = formsAuthInfo; } if (!currentCredentials) { try { SharePointOnlineCredentials onlineCredentials = new SharePointOnlineCredentials(credentials.UserName, credentials.Password); context.Credentials = onlineCredentials; try { context.ExecuteQueryRetry(); } catch (ClientRequestException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } catch (ServerException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } } catch (ArgumentException) { // OnPrem? context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); try { context.ExecuteQueryRetry(); } catch (ClientRequestException ex) { throw new Exception("Error establishing a connection", ex); } catch (ServerException ex) { throw new Exception("Error establishing a connection", ex); } } } else { if (credentials != null) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } } var connectionType = ConnectionType.OnPrem; if (url.Host.ToUpperInvariant().EndsWith("SHAREPOINT.COM")) { connectionType = ConnectionType.O365; } if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag); spoConnection.ConnectionMethod = Model.ConnectionMethod.Credentials; return(spoConnection); }
internal static PnPConnection CreateWithCredentials(Cmdlet cmdlet, Uri url, PSCredential credentials, bool currentCredentials, string tenantAdminUrl, AzureEnvironment azureEnvironment = AzureEnvironment.Production, string clientId = null, string redirectUrl = null, bool onPrem = false, InitializationType initializationType = InitializationType.Credentials) { var context = new PnPClientContext(url.AbsoluteUri) { ApplicationName = Resources.ApplicationName, DisableReturnValueCache = true }; PnPConnection spoConnection = null; if (!onPrem) { var tenantId = string.Empty; try { if (!string.IsNullOrWhiteSpace(clientId)) { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { authManager = PnP.Framework.AuthenticationManager.CreateWithCredentials(clientId, credentials.UserName, credentials.Password, redirectUrl, azureEnvironment); } using (authManager) { context = PnPClientContext.ConvertFrom(authManager.GetContext(url.ToString())); context.ExecuteQueryRetry(); cmdlet.WriteVerbose("Acquiring token"); var accesstoken = authManager.GetAccessTokenAsync(url.ToString()).GetAwaiter().GetResult(); cmdlet.WriteVerbose("Token acquired"); var parsedToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(accesstoken); tenantId = parsedToken.Claims.FirstOrDefault(c => c.Type == "tid").Value; } } else { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; } else { authManager = PnP.Framework.AuthenticationManager.CreateWithCredentials(credentials.UserName, credentials.Password, azureEnvironment); } using (authManager) { context = PnPClientContext.ConvertFrom(authManager.GetContext(url.ToString())); context.ExecuteQueryRetry(); var accessToken = authManager.GetAccessTokenAsync(url.ToString()).GetAwaiter().GetResult(); var parsedToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(accessToken); tenantId = parsedToken.Claims.FirstOrDefault(c => c.Type == "tid").Value; } } } catch (ClientRequestException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } catch (ServerException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } var connectionType = ConnectionType.O365; if (url.Host.ToLowerInvariant().EndsWith($"sharepoint.{PnP.Framework.AuthenticationManager.GetSharePointDomainSuffix(azureEnvironment)}")) { connectionType = ConnectionType.O365; } if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } spoConnection = new PnPConnection(context, connectionType, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag, initializationType) { ConnectionMethod = Model.ConnectionMethod.Credentials, AzureEnvironment = azureEnvironment, Tenant = tenantId }; } else { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; } else { authManager = new PnP.Framework.AuthenticationManager(); } using (authManager) { if (currentCredentials) { context = PnPClientContext.ConvertFrom(authManager.GetOnPremisesContext(url.ToString())); } else { context = PnPClientContext.ConvertFrom(authManager.GetOnPremisesContext(url.ToString(), credentials.UserName, credentials.Password)); } } spoConnection = new PnPConnection(context, ConnectionType.O365, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag, initializationType) { ConnectionMethod = Model.ConnectionMethod.Credentials, AzureEnvironment = azureEnvironment, }; } return(spoConnection); }
internal static SPOnlineConnection InstantiateSPOnlineConnection(Uri url, PSCredential credentials, PSHost host, bool currentCredentials, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool disableTelemetry, bool skipAdminCheck = false, ClientAuthenticationMode authenticationMode = ClientAuthenticationMode.Default) { var context = new PnPClientContext(url.AbsoluteUri); context.RetryCount = retryCount; context.Delay = retryWait * 1000; context.ApplicationName = Properties.Resources.ApplicationName; #if !ONPREMISES context.DisableReturnValueCache = true; #elif SP2016 || SP2019 context.DisableReturnValueCache = true; #endif context.RequestTimeout = requestTimeout; context.AuthenticationMode = authenticationMode; if (authenticationMode == ClientAuthenticationMode.FormsAuthentication) { var formsAuthInfo = new FormsAuthenticationLoginInfo(credentials.UserName, EncryptionUtility.ToInsecureString(credentials.Password)); context.FormsAuthenticationLoginInfo = formsAuthInfo; } if (!currentCredentials) { try { SharePointOnlineCredentials onlineCredentials = new SharePointOnlineCredentials(credentials.UserName, credentials.Password); context.Credentials = onlineCredentials; try { context.ExecuteQueryRetry(); } #if !ONPREMISES catch (NotSupportedException nox) { #if NETSTANDARD2_1 // Legacy auth is not supported with .NET Standard throw nox; #else // legacy auth? var authManager = new OfficeDevPnP.Core.AuthenticationManager(); context = PnPClientContext.ConvertFrom(authManager.GetAzureADCredentialsContext(url.ToString(), credentials.UserName, credentials.Password)); context.ExecuteQueryRetry(); #endif } #endif catch (ClientRequestException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } catch (ServerException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } } catch (ArgumentException) { // OnPrem? context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); try { context.ExecuteQueryRetry(); } catch (ClientRequestException ex) { throw new Exception("Error establishing a connection", ex); } catch (ServerException ex) { throw new Exception("Error establishing a connection", ex); } } } else { if (credentials != null) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } else { // If current credentials should be used, use the DefaultNetworkCredentials of the CredentialCache. This has the same effect // as using "UseDefaultCredentials" in a HttpClient. context.Credentials = CredentialCache.DefaultNetworkCredentials; } } #if SP2013 || SP2016 || SP2019 var connectionType = ConnectionType.OnPrem; #else var connectionType = ConnectionType.O365; #endif if (url.Host.ToUpperInvariant().EndsWith("SHAREPOINT.COM")) { connectionType = ConnectionType.O365; } if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag, host, disableTelemetry, InitializationType.Credentials); spoConnection.ConnectionMethod = Model.ConnectionMethod.Credentials; return(spoConnection); }