public void Should_Not_Save_When_Duplicate_Name()
        {
            // arrange
            IConnectionRepository connectionRepository = this.GetConnectionRepository();

            ConnectionModel connection1 = new ConnectionModel();

            connection1.Name = "connection1";
            connectionRepository.AddConnection(connection1);

            ConnectionModel connection2 = new ConnectionModel();

            connection2.Name = "connection1";
            connectionRepository.AddConnection(connection2);

            // act
            bool exceptionThrown = false;

            try
            {
                connectionRepository.Save();
            }
            catch
            {
                exceptionThrown = true;
            }

            // assert
            Assert.IsTrue(exceptionThrown);
        }
Exemple #2
0
        public async Task SwitchAccountConnection(string username, string instance, bool connect,
                                                  CancellationToken cancellationToken)
        {
            var id = new AccountIdentifier(new Username(username), new Instance(instance));

            var mastodonAccount = await _mastodonAccountRepository.FindMastodonAccount(id, cancellationToken);

            if (mastodonAccount is not null)
            {
                if (connect)
                {
                    var connection = _makeMastodonConnection.MakeConnection(mastodonAccount.Username.Value, mastodonAccount.Instance.Value,
                                                                            mastodonAccount.AccessToken.Token);
                    _connectionRepository.AddConnection(new Connection(id, connection));
                }
                else
                {
                    _connectionRepository.StopConnection(id);
                }

                mastodonAccount.IsReadingPostsFromThisAccount = new IsReadingPostsFromThisAccount(connect);
                await _mastodonAccountRepository.SaveMastodonAccount(mastodonAccount, cancellationToken);

                return;
            }

            var misskeyAccount = await _misskeyAccountRepository.FindMisskeyAccount(id, cancellationToken);

            if (misskeyAccount is not null)
            {
                if (connect)
                {
                    var connection = _makeMisskeyConnection.MakeConnection(misskeyAccount.Username.Value,
                                                                           misskeyAccount.Instance.Value, misskeyAccount.AccessToken.Token);
                    _connectionRepository.AddConnection(new Connection(id, connection));
                }
                else
                {
                    _connectionRepository.StopConnection(id);
                }

                misskeyAccount.IsReadingPostsFromThisAccount = new IsReadingPostsFromThisAccount(connect);
                await _misskeyAccountRepository.SaveMisskeyAccount(misskeyAccount, cancellationToken);

                return;
            }
        }
        public void Should_Allow_Add()
        {
            // arrange
            IConnectionRepository connectionRepository = this.GetConnectionRepository();

            // act
            connectionRepository.AddConnection(new ConnectionModel());

            // assert
            Assert.IsTrue(connectionRepository.Count == 1);
        }
        public void Should_Return_Item_For_Valid_Id()
        {
            // arrange
            IConnectionRepository connectionRepository = this.GetConnectionRepository();
            ConnectionModel       connection           = new ConnectionModel();

            connection.ConnectionId = 1;
            connectionRepository.AddConnection(connection);

            // act
            ConnectionModel retrievedConnection = connectionRepository.GetConnection(1);

            // assert
            Assert.IsTrue(retrievedConnection.ConnectionId == 1);
        }
        public void Should_Allow_Remoe()
        {
            // arrange
            IConnectionRepository connectionRepository = this.GetConnectionRepository();
            ConnectionModel       connection           = new ConnectionModel();

            connection.ConnectionId = 1;
            connectionRepository.AddConnection(connection);

            // act
            connectionRepository.RemoveConnection(connection);
            ConnectionModel retrievedConnection = connectionRepository.GetConnection(1);

            // assert
            Assert.IsNull(retrievedConnection);
        }
Exemple #6
0
        public Task <string> Connect(ConnectionData connection)
        {
            var connectionId = _connectionRepository.AddConnection(connection);

            return(Task.FromResult(connectionId));
        }
Exemple #7
0
        public async Task Authorize(InstanceAndAuthenticationCode instanceAndAuthenticationCode,
                                    CancellationToken cancellationToken)
        {
            var instance = new Instance(instanceAndAuthenticationCode.Instance);

            AccessInfo accessInfo;

            try
            {
                var client = await _mastodonClientRepository.FindMastodonClient(instance, cancellationToken);

                if (client is null)
                {
                    _showMastodonAuthenticationError.ShowMastodonAuthenticationError();
                    return;
                }

                var authorizationInfo = new AuthorizationInfo(instance.Value, client.ClientId.Value,
                                                              client.ClientSecret.Value, instanceAndAuthenticationCode.AuthenticationCode);
                accessInfo =
                    await _authorizeMastodonAccountWithCode.AuthorizeMastodonAccountWithCode(authorizationInfo,
                                                                                             cancellationToken);
            }
            catch
            {
                _showMastodonAuthenticationError.ShowMastodonAuthenticationError();
                return;
            }

            AccountInfo accountInfo;

            try
            {
                accountInfo = await _getAccountInfo.GetAccountInfo(accessInfo, cancellationToken);
            }
            catch
            {
                _showGetMastodonAccountInfoError.ShowGetMastodonAccountInfoError();
                return;
            }

            var username    = new Username(accountInfo.Username);
            var displayName = new DisplayName(accountInfo.DisplayName);
            var accessToken = new MastodonAccessToken(accessInfo.Token);
            var iconUrl     = new AccountIconUrl(accountInfo.IconUrl);

            var account =
                await _mastodonAccountRepository.FindMastodonAccount(new AccountIdentifier(username, instance),
                                                                     cancellationToken);

            if (account is null)
            {
                account = _mastodonAccountRepository.CreateMastodonAccount(username, instance, displayName, accessToken,
                                                                           iconUrl);
            }
            else
            {
                account = account with {
                    AccessToken = accessToken, IconUrl = iconUrl
                };
            }

            await _mastodonAccountRepository.SaveMastodonAccount(account, cancellationToken);

            var connection = _makeMastodonConnection.MakeConnection(account.Username.Value, account.Instance.Value,
                                                                    account.AccessToken.Token);

            _connectionRepository.AddConnection(new Connection(account.AccountIdentifier, connection));

            _finishAuthorizeMastodonAccount.FinishAuthorizeMastodonAccount();
        }
    }
        public async Task Login(string host, CancellationToken cancellationToken)
        {
            string secret;

            try
            {
                secret = await _registerClient.RegisterClient(host, cancellationToken);
            }
            catch
            {
                _showRegisterClientError.ShowRegisterClientError();
                throw;
            }

            var(sessionToken, authorizeUrl) =
                await _getAuthorizeUrl.GetAuthorizeUri(host, secret, cancellationToken);

            _showAuthUrl.ShowAuthUrl(authorizeUrl);

            while (true)
            {
                try
                {
                    await _waitAuthorize.WaitAuthorize(cancellationToken);

                    break;
                }
                catch
                {
                    _showAuthorizeError.ShowAuthorizeError();
                }
            }

            var(accessTokenData, user) =
                await _getAccessToken.GetAccessToken(host, secret, sessionToken, cancellationToken);

            var username    = new Username(user.Username);
            var instance    = new Instance(host);
            var displayName = new DisplayName(user.DisplayName);
            var identifier  = new AccountIdentifier(username, instance);
            var accessToken = new MisskeyAccessToken(accessTokenData);
            var iconUrl     = new AccountIconUrl(user.IconUrl);

            var account = await _accountRepository.FindMisskeyAccount(identifier, cancellationToken);

            if (account is not null)
            {
                account = account with {
                    AccessToken = accessToken, IconUrl = iconUrl
                };
            }
            else
            {
                account = new MisskeyAccount(username, instance, displayName, accessToken, iconUrl,
                                             new IsReadingPostsFromThisAccount(true));
            }

            await _accountRepository.SaveMisskeyAccount(account, cancellationToken);

            var connection = _makeMisskeyConnection.MakeConnection(account.Username.Value, account.Instance.Value,
                                                                   account.AccessToken.Token);

            _connectionRepository.AddConnection(new Connection(account.AccountIdentifier, connection));
        }