Esempio n. 1
0
        public async Task RestoreSession_DisablesCertificateValidator_IfWebExceptionIsTrustFailureAndUserContinues()
        {
            var mattermost    = new Mock <IClient>();
            var session       = new Mock <ISession>();
            var clientfactory = SetupClientFactoryMock(mattermost);
            var exception     = new WebException("", new Exception("invalid ssl"), WebExceptionStatus.TrustFailure,
                                                 It.IsAny <HttpWebResponse>());
            var certValidator = new Mock <IServerCertificateValidator>();

            mattermost.SetupSequence(
                x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(),
                                       It.IsAny <string>()))
            .Throws(exception)
            .Returns(session.Object);
            var settingsLoadService = new Mock <ISettingsLoadService>();
            var settings            = new AddInSettings("myUrl", "testTeamId", "Donald Duck", "channels",
                                                        MattermostVersion.ApiVersionFour);

            settingsLoadService.Setup(x => x.Load()).Returns(settings);
            var invalidSslQuestion = new Mock <ITrustInvalidSslQuestion>();

            invalidSslQuestion.Setup(x => x.GetAnswer(settings.MattermostUrl, exception.InnerException.Message))
            .Returns(true);
            var cut = new SingleSignOnSessionRepository(clientfactory.Object, settingsLoadService.Object,
                                                        new Mock <IPasswordProvider>().Object, invalidSslQuestion.Object,
                                                        certValidator.Object);

            var result = await cut.RestoreSession();

            result.ShouldBeEquivalentTo(session.Object);
            certValidator.Verify(x => x.DisableValidation());
        }
        public async Task RestoreSession_CreatesNewSession_IfCacheInvalidated()
        {
            var mattermost          = new Mock <IClient>();
            var session1            = new Mock <ISession>();
            var session2            = new Mock <ISession>();
            var settingsLoadService = new Mock <ISettingsLoadService>();
            var settings            = new AddInSettings("myUrl", "testTeamId", "Donald Duck", "channels", MattermostVersion.ApiVersionOne);

            settingsLoadService.Setup(x => x.Load()).Returns(settings);
            var clientFactory = SetupClientFactoryMock(mattermost);

            mattermost.SetupSequence(
                x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Returns(session1.Object)
            .Returns(session2.Object);
            var classUnderTest = new SingleSignOnSessionRepository(clientFactory.Object,
                                                                   settingsLoadService.Object,
                                                                   Mock.Of <IPasswordProvider>());

            var result1 = await classUnderTest.RestoreSession();

            classUnderTest.Invalidate();
            var result2 = await classUnderTest.RestoreSession();

            result1.Should().Be(session1.Object);
            result2.Should().Be(session2.Object);
        }
Esempio n. 3
0
        protected override Office.IRibbonExtensibility CreateRibbonExtensibilityObject()
        {
            var httpClient               = new DotNetHttpClient();
            var clientFactory            = new MattermostClientFactory(httpClient);
            var passwordDialog           = new PasswordDialogShell();
            var caches                   = new CompositeCache();
            var settingsService          = new ApplicationSettingsService(caches);
            var invalidCertificateDialog = new InvalidCertificateDialogShell();
            var staticValidationManager  = new StaticServicePointManager();
            var sessionRepository        = new SingleSignOnSessionRepository(clientFactory, settingsService, passwordDialog, invalidCertificateDialog, staticValidationManager);

            caches.Add(sessionRepository);
            var explorerService = new OutlookExplorerService();
            var mailExplorer    = new OutlookMailExplorer(explorerService);
            var errorDisplay    = new MessageBoxErrorDisplay();
            var settingsUi      = new WpfSettingsUserInterface(settingsService, settingsService);
            var permalinkUi     = new PermalinkDialogShell();
            var postIdFilter    = new PostIdFromPermalinkFilter(permalinkUi);

            return(new MailItemContextMenuEntry(
                       mailExplorer,
                       settingsService,
                       settingsService,
                       errorDisplay,
                       settingsUi,
                       sessionRepository,
                       postIdFilter));
        }
Esempio n. 4
0
        public void RestoreSession_ThrowsUserAbortException_IfUserAbortsOnTrustFailureException()
        {
            var mattermost    = new Mock <IClient>();
            var session       = new Mock <ISession>();
            var clientfactory = SetupClientFactoryMock(mattermost);
            var exception     = new WebException("", new Exception("invalid ssl"), WebExceptionStatus.TrustFailure,
                                                 It.IsAny <HttpWebResponse>());

            mattermost.SetupSequence(
                x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(),
                                       It.IsAny <string>()))
            .Throws(exception)
            .Returns(session.Object);
            var settingsLoadService = new Mock <ISettingsLoadService>();
            var settings            = new AddInSettings("myUrl", "testTeamId", "Donald Duck", "channels",
                                                        MattermostVersion.ApiVersionFour);

            settingsLoadService.Setup(x => x.Load()).Returns(settings);
            var invalidSslQuestion = new Mock <ITrustInvalidSslQuestion>();

            invalidSslQuestion.Setup(x => x.GetAnswer(settings.MattermostUrl, exception.InnerException.Message))
            .Returns(false);
            var cut = new SingleSignOnSessionRepository(clientfactory.Object, settingsLoadService.Object,
                                                        new Mock <IPasswordProvider>().Object, invalidSslQuestion.Object,
                                                        new Mock <IServerCertificateValidator>().Object);

            Func <Task> func = async() => { await cut.RestoreSession(); };

            func.ShouldThrow <UserAbortException>();
        }
Esempio n. 5
0
        public async Task RestoreSession_ReturnsNewSessionFromClient()
        {
            var settingsLoadService = new Mock <ISettingsLoadService>();
            var settings            = new AddInSettings("myUrl", "testTeamId", "Donald Duck", "channels",
                                                        It.IsAny <MattermostVersion>());

            settingsLoadService.Setup(x => x.Load()).Returns(settings);
            var mattermost    = new Mock <IClient>();
            var clientFactory = SetupClientFactoryMock(mattermost);
            var session       = new Mock <ISession>();

            mattermost.Setup(
                x => x.LoginByUsername(settings.MattermostUrl, settings.TeamId, settings.Username,
                                       It.IsAny <string>()))
            .Returns(session.Object);
            var classUnderTest = new SingleSignOnSessionRepository(clientFactory.Object,
                                                                   settingsLoadService.Object,
                                                                   Mock.Of <IPasswordProvider>(),
                                                                   Mock.Of <ITrustInvalidSslQuestion>(),
                                                                   Mock.Of <IServerCertificateValidator>());

            var result = await classUnderTest.RestoreSession();

            result.Should().Be(session.Object);
        }
Esempio n. 6
0
        public async Task RestoreSession_HasCachingSemantics()
        {
            var mattermost    = new Mock <IClient>();
            var session1      = new Mock <ISession>();
            var session2      = new Mock <ISession>();
            var clientFactory = SetupClientFactoryMock(mattermost);

            mattermost.SetupSequence(
                x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(),
                                       It.IsAny <string>()))
            .Returns(session1.Object)
            .Returns(session2.Object);
            var classUnderTest = new SingleSignOnSessionRepository(clientFactory.Object,
                                                                   DefaultSettingsLoadService,
                                                                   Mock.Of <IPasswordProvider>(),
                                                                   Mock.Of <ITrustInvalidSslQuestion>(),
                                                                   Mock.Of <IServerCertificateValidator>());

            var result1 = await classUnderTest.RestoreSession();

            var result2 = await classUnderTest.RestoreSession();

            result1.Should().Be(session1.Object);
            result2.Should().Be(session1.Object);
        }
Esempio n. 7
0
        public void Invalidate_EnablesCertificationValidator()
        {
            var certValidator = new Mock <IServerCertificateValidator>();
            var cut           = new SingleSignOnSessionRepository(new Mock <IClientFactory>().Object,
                                                                  new Mock <ISettingsLoadService>().Object, new Mock <IPasswordProvider>().Object,
                                                                  new Mock <ITrustInvalidSslQuestion>().Object, certValidator.Object);

            cut.Invalidate();

            certValidator.Verify(x => x.EnableValidation());
        }
        public async Task RestoreSession_UsesProvidedPassword()
        {
            const string password         = "******";
            var          passwordProvider = new Mock <IPasswordProvider>();

            passwordProvider.Setup(x => x.GetPassword(It.IsAny <string>())).Returns(password);
            var mattermost    = new Mock <IClient>();
            var session       = new Mock <ISession>();
            var clientFactory = SetupClientFactoryMock(mattermost);

            mattermost.Setup(
                x => x.LoginByUsername(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), password))
            .Returns(session.Object);
            var classUnderTest = new SingleSignOnSessionRepository(clientFactory.Object,
                                                                   DefaultSettingsLoadService,
                                                                   passwordProvider.Object);

            var result = await classUnderTest.RestoreSession();

            result.Should().Be(session.Object);
        }
Esempio n. 9
0
        public async Task OnPostIntoChannelClick_CanHandleUserPasswordAbort()
        {
            var control          = MockOfRibbonControl();
            var passwordProvider = new Mock <IPasswordProvider>();

            passwordProvider.Setup(x => x.GetPassword(It.IsAny <string>())).Throws <Exception>();
            var sessionCache = new SingleSignOnSessionRepository(Mock.Of <IClientFactory>(),
                                                                 DefaultSettingsLoadService,
                                                                 passwordProvider.Object);

            var classUnderTest = new MailItemContextMenuEntry(
                MockOfMailExplorer(),
                DefaultSettingsLoadService,
                Mock.Of <ISettingsSaveService>(),
                Mock.Of <IErrorDisplay>(),
                Mock.Of <ISettingsUserInterface>(),
                sessionCache,
                Mock.Of <IStringProvider>());

            await classUnderTest.OnPostIntoChannelClick(control);
        }