#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        public async Task TestOnBehalfOfConstructorNoDIWithCertificate_NullClientId_NullTenantId()
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            if (TestCommon.RunningInGitHubWorkflow())
            {
                Assert.Inconclusive("Skipping test because we're running inside a GitHub action and we don't have access to the certificate store");
            }

            var configuration = TestCommon.GetConfigurationSettings();
            var storeName     = configuration.GetValue <StoreName>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:OnBehalfOf:StoreName");
            var storeLocation = configuration.GetValue <StoreLocation>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:OnBehalfOf:StoreLocation");
            var thumbprint    = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:OnBehalfOf:Thumbprint");

            var provider = new OnBehalfOfAuthenticationProvider(
                null,
                null,
                storeName,
                storeLocation,
                thumbprint,
                // We get the consumer access token using an InteractiveAuthenticationProvider
                () => GetUserAccessToken().GetAwaiter().GetResult());

            Assert.IsNotNull(provider);
            Assert.IsNotNull(provider.ClientId);
            Assert.IsNotNull(provider.TenantId);
            Assert.IsNotNull(provider.Certificate);
        }
Ejemplo n.º 2
0
        private static async Task <PnPContext> GetTestSiteExternalContext()
        {
            var configuration = TestCommon.GetConfigurationSettings();
            var siteUrl       = configuration.GetValue <Uri>($"{TestGlobals.SitesConfigurationBasePath}:{TestCommon.TestSiteExternal}:SiteUrl");

            return(await TestCommon.Instance.GetContextAsync(siteUrl, PrepareExternalAuthenticationProvider()));
        }
        private static OnBehalfOfAuthenticationProvider PrepareOnBehalfOfAuthenticationProviderWithCertificate()
        {
            if (TestCommon.RunningInGitHubWorkflow())
            {
                Assert.Inconclusive("Skipping test because we're running inside a GitHub action and we don't have access to the certificate store");
            }

            var configuration = TestCommon.GetConfigurationSettings();
            var clientId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:ClientId");
            var tenantId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:TenantId");
            var storeName     = configuration.GetValue <StoreName>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:OnBehalfOf:StoreName");
            var storeLocation = configuration.GetValue <StoreLocation>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:OnBehalfOf:StoreLocation");
            var thumbprint    = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:OnBehalfOf:Thumbprint");

            var provider = new OnBehalfOfAuthenticationProvider(
                clientId,
                tenantId,
                storeName,
                storeLocation,
                thumbprint,
                // We get the consumer access token using an InteractiveAuthenticationProvider
                () => GetUserAccessToken().GetAwaiter().GetResult());

            return(provider);
        }
Ejemplo n.º 4
0
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        public async Task TestCredentialManagerConstructorNoDI_NullCredentialManagerName()
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            var configuration = TestCommon.GetConfigurationSettings();
            var clientId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{credentialManagerConfigurationPath}:ClientId");
            var tenantId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{credentialManagerConfigurationPath}:TenantId");

            var provider = new CredentialManagerAuthenticationProvider(
                clientId,
                tenantId,
                credentialManagerName: null);
        }
Ejemplo n.º 5
0
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        public async Task TestX509CertificateConstructorNoDI_NullThumbprint()
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            var configuration = TestCommon.GetConfigurationSettings();
            var storeName     = configuration.GetValue <StoreName>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:X509Certificate:StoreName");
            var storeLocation = configuration.GetValue <StoreLocation>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:X509Certificate:StoreLocation");

            var provider = new X509CertificateAuthenticationProvider(
                AuthGlobals.DefaultClientId,
                AuthGlobals.OrganizationsTenantId,
                storeName,
                storeLocation,
                null);
        }
        private static InteractiveAuthenticationProvider PrepareInteractiveAuthenticationProvider()
        {
            var configuration = TestCommon.GetConfigurationSettings();
            var clientId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{interactiveConfigurationPath}:ClientId");
            var tenantId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{interactiveConfigurationPath}:TenantId");
            var redirectUri   = configuration.GetValue <Uri>($"{TestGlobals.CredentialsConfigurationBasePath}:{interactiveConfigurationPath}:Interactive:RedirectUri");

            var provider = new InteractiveAuthenticationProvider(
                clientId,
                tenantId,
                redirectUri);

            return(provider);
        }
Ejemplo n.º 7
0
        private static CredentialManagerAuthenticationProvider PrepareCredentialManagerAuthenticationProvider()
        {
            var configuration         = TestCommon.GetConfigurationSettings();
            var clientId              = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{credentialManagerConfigurationPath}:ClientId");
            var tenantId              = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{credentialManagerConfigurationPath}:TenantId");
            var credentialManagerName = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{credentialManagerConfigurationPath}:CredentialManager:CredentialManagerName");

            var provider = new CredentialManagerAuthenticationProvider(
                clientId,
                tenantId,
                credentialManagerName);

            return(provider);
        }
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        public async Task TestOnBehalfOfConstructorNoDIWithClientSecret_NullClientSecret()
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            var configuration = TestCommon.GetConfigurationSettings();
            var storeName     = configuration.GetValue <StoreName>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:OnBehalfOf:StoreName");
            var storeLocation = configuration.GetValue <StoreLocation>($"{TestGlobals.CredentialsConfigurationBasePath}:{onBehalfOfConfigurationPath}:OnBehalfOf:StoreLocation");

            var provider = new OnBehalfOfAuthenticationProvider(
                AuthGlobals.DefaultClientId,
                AuthGlobals.OrganizationsTenantId,
                clientSecret: null,
                // We get the consumer access token using an InteractiveAuthenticationProvider
                () => GetUserAccessToken().GetAwaiter().GetResult());
        }
        private static DeviceCodeAuthenticationProvider PrepareDeviceCodeAuthenticationProvider()
        {
            var configuration = TestCommon.GetConfigurationSettings();
            var clientId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{deviceCodeConfigurationPath}:ClientId");
            var tenantId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{deviceCodeConfigurationPath}:TenantId");
            var redirectUri   = configuration.GetValue <Uri>($"{TestGlobals.CredentialsConfigurationBasePath}:{deviceCodeConfigurationPath}:DeviceCode:RedirectUri");

            var provider = new DeviceCodeAuthenticationProvider(
                clientId,
                tenantId,
                redirectUri,
                DeviceCodeVerificationCallback);

            return(provider);
        }
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        public async Task TestInteractiveConstructorNoDI_NullRedirectUri()
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            var configuration = TestCommon.GetConfigurationSettings();
            var clientId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{interactiveConfigurationPath}:ClientId");
            var tenantId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{interactiveConfigurationPath}:TenantId");

            var provider = new InteractiveAuthenticationProvider(
                clientId,
                tenantId,
                redirectUri: null);

            Assert.IsNotNull(provider);
            Assert.IsNotNull(provider.ClientId);
            Assert.IsNotNull(provider.TenantId);
            Assert.IsNotNull(provider.RedirectUri);
        }
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        public async Task TestDeviceCodeConstructorNoDI_NullRedirectUri()
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            var configuration = TestCommon.GetConfigurationSettings();
            var clientId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{deviceCodeConfigurationPath}:ClientId");
            var tenantId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{deviceCodeConfigurationPath}:TenantId");

            var provider = new DeviceCodeAuthenticationProvider(
                clientId,
                tenantId,
                redirectUri: null,
                n => { }); // Fake notification, we don't care of it in this test

            Assert.IsNotNull(provider);
            Assert.IsNotNull(provider.ClientId);
            Assert.IsNotNull(provider.TenantId);
            Assert.IsNotNull(provider.RedirectUri);
            Assert.IsNotNull(provider.DeviceCodeVerification);
        }
Ejemplo n.º 12
0
        private static X509CertificateAuthenticationProvider PrepareX509CertificateAuthenticationProvider()
        {
            //if (TestCommon.RunningInGitHubWorkflow()) Assert.Inconclusive("Skipping test because we're running inside a GitHub action and we don't have access to the certificate store");

            var configuration = TestCommon.GetConfigurationSettings();
            var clientId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:ClientId");
            var tenantId      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:TenantId");
            var storeName     = configuration.GetValue <StoreName>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:X509Certificate:StoreName");
            var storeLocation = configuration.GetValue <StoreLocation>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:X509Certificate:StoreLocation");
            var thumbprint    = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:X509Certificate:Thumbprint");

            var provider = new X509CertificateAuthenticationProvider(
                clientId,
                tenantId,
                storeName,
                storeLocation,
                thumbprint);

            return(provider);
        }
Ejemplo n.º 13
0
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        public async Task TestCredentialManagerConstructorNoDI_NullClientId_NullTenantId()
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            // Credentialmanager does not work on Linux
            if (TestCommon.RunningInGitHubWorkflow())
            {
                Assert.Inconclusive("Skipping live test because we're running inside a GitHub action");
            }

            var configuration         = TestCommon.GetConfigurationSettings();
            var credentialManagerName = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{credentialManagerConfigurationPath}:CredentialManager:CredentialManagerName");

            var provider = new CredentialManagerAuthenticationProvider(
                null,
                null,
                credentialManagerName);

            Assert.IsNotNull(provider);
            Assert.IsNotNull(provider.ClientId);
            Assert.IsNotNull(provider.TenantId);
            Assert.IsNotNull(provider.CredentialManagerName);
        }
Ejemplo n.º 14
0
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        public async Task TestX509CertificateConstructorNoDI_NullClientId_NullTenantId()
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            //if (TestCommon.RunningInGitHubWorkflow()) Assert.Inconclusive("Skipping test because we're running inside a GitHub action and we don't have access to the certificate store");

            var configuration = TestCommon.GetConfigurationSettings();
            var storeName     = configuration.GetValue <StoreName>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:X509Certificate:StoreName");
            var storeLocation = configuration.GetValue <StoreLocation>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:X509Certificate:StoreLocation");
            var thumbprint    = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{x509CertificateConfigurationPath}:X509Certificate:Thumbprint");

            var provider = new X509CertificateAuthenticationProvider(
                null,
                null,
                storeName,
                storeLocation,
                thumbprint);

            Assert.IsNotNull(provider);
            Assert.IsNotNull(provider.ClientId);
            Assert.IsNotNull(provider.TenantId);
            Assert.IsNotNull(provider.Certificate);
        }
Ejemplo n.º 15
0
        public async Task TestUsernamePasswordGetAccessTokenAsyncCorrect()
        {
            if (TestCommon.RunningInGitHubWorkflow())
            {
                Assert.Inconclusive("Skipping live test because we're running inside a GitHub action");
            }

            var configuration = TestCommon.GetConfigurationSettings();
            var username      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{usernamePasswordConfigurationPath}:UsernamePassword:Username");
            var password      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{usernamePasswordConfigurationPath}:UsernamePassword:Password");

            var provider = new UsernamePasswordAuthenticationProvider(
                AuthGlobals.DefaultClientId,
                AuthGlobals.OrganizationsTenantId,
                username,
                password.ToSecureString());

            var accessToken = await provider.GetAccessTokenAsync(TestGlobals.GraphResource);

            Assert.IsNotNull(accessToken);
            Assert.IsTrue(accessToken.Length > 0);
        }
Ejemplo n.º 16
0
        public async Task TestUsernamePasswordAuthenticateRequestAsyncCorrect()
        {
            if (TestCommon.RunningInGitHubWorkflow())
            {
                Assert.Inconclusive("Skipping live test because we're running inside a GitHub action");
            }

            var configuration = TestCommon.GetConfigurationSettings();
            var username      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{usernamePasswordConfigurationPath}:UsernamePassword:Username");
            var password      = configuration.GetValue <string>($"{TestGlobals.CredentialsConfigurationBasePath}:{usernamePasswordConfigurationPath}:UsernamePassword:Password");

            var provider = new UsernamePasswordAuthenticationProvider(
                AuthGlobals.DefaultClientId,
                AuthGlobals.OrganizationsTenantId,
                username,
                password.ToSecureString());

            var request = new HttpRequestMessage(HttpMethod.Get, TestGlobals.GraphMeRequest);
            await provider.AuthenticateRequestAsync(TestGlobals.GraphResource, request);

            Assert.IsNotNull(request.Headers.Authorization);
            Assert.AreEqual(request.Headers.Authorization.Scheme.ToLower(), "bearer");
        }
Ejemplo n.º 17
0
        public async Task SharePointTransformAsync()
        {
            var config = TestCommon.GetConfigurationSettings();

            var services = new ServiceCollection();

            services.AddTestPnPCore();

            // You can use the default settings
            // services.AddPnPSharePointTransformation();

            // Or you can provide a set of custom settings
            services.AddPnPSharePointTransformation(
                pnpOptions => // Global settings
            {
                pnpOptions.DisableTelemetry = false;
                pnpOptions.PersistenceProviderConnectionString = config["PersistenceProviderConnectionString"];
            },
                pageOptions => // Target modern page creation settings
            {
                pageOptions.CopyPageMetadata = true;
                pageOptions.KeepPageCreationModificationInformation = true;
                pageOptions.PostAsNews                  = false;
                pageOptions.PublishPage                 = false;
                pageOptions.DisablePageComments         = false;
                pageOptions.KeepPageSpecificPermissions = true;
                pageOptions.Overwrite = true;
                pageOptions.ReplaceHomePageWithDefaultHomePage = true;
                pageOptions.SetAuthorInPageHeader         = true;
                pageOptions.TargetPageFolder              = "";
                pageOptions.TargetPageName                = "";
                pageOptions.TargetPagePrefix              = "Migrated_";
                pageOptions.TargetPageTakesSourcePageName = true;
            },
                spOptions => // SharePoint classic source settings
            {
                // spOptions.WebPartMappingFile = config["WebPartMappingFile"];
                // spOptions.PageLayoutMappingFile = config["PageLayoutMappingFile"];
                spOptions.RemoveEmptySectionsAndColumns = true;
                spOptions.ShouldMapUsers                  = true;
                spOptions.HandleWikiImagesAndVideos       = true;
                spOptions.AddTableListImageAsImageWebPart = true;
                spOptions.IncludeTitleBarWebPart          = true;
                spOptions.MappingProperties               = null;
                spOptions.SkipHiddenWebParts              = true;
                spOptions.SkipUrlRewrite                  = true;
                spOptions.UrlMappings  = null;
                spOptions.UserMappings = null;
            }
                );

            var provider = services.BuildServiceProvider();

            var pnpContextFactory = provider.GetRequiredService <IPnPContextFactory>();
            var pageTransformator = provider.GetRequiredService <IPageTransformator>();

            var sourceContext = provider.GetRequiredService <ClientContext>();
            var targetContext = await pnpContextFactory.CreateAsync(TestCommon.TargetTestSite);

            var sourceUri = new Uri(config["SourceUri"]);

            var result = await pageTransformator.TransformSharePointAsync(sourceContext, targetContext, sourceUri);

            Assert.IsNotNull(result);
            var expectedUri = new Uri($"{targetContext.Web.Url}/SitePages/Migrated_{sourceUri.Segments[sourceUri.Segments.Length - 1]}");

            Assert.AreEqual(expectedUri.AbsoluteUri, result.AbsoluteUri, ignoreCase: true);
        }