public async Task SaveMisskeyAccount(MisskeyAccount accountData, CancellationToken cancellationToken)
 {
     await _storage.SaveMisskeyAccountData(new MisskeyAccountData(accountData.Username.Value,
                                                                  accountData.Instance.Value, accountData.DisplayName.Value, accountData.AccessToken.Token,
                                                                  accountData.IconUrl.IconUrl, accountData.IsReadingPostsFromThisAccount.Value), cancellationToken);
 }
        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));
        }
Exemple #3
0
 public ApiManager(MisskeyAccount account = null)
 {
     this.Account = account;
 }
Exemple #4
0
        private async void button1_Click(object sender, EventArgs e)
        {
            this.button1.Enabled = false;

            if (string.IsNullOrEmpty(this.hostBox.Text))
            {
                this.button1.Enabled = true;
                MessageBox.Show("ホスト名が無効です。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            Uri uri;

            try
            {
                uri = new Uri($"https://{this.hostBox.Text}");
            }
            catch
            {
                this.button1.Enabled = true;
                MessageBox.Show("ホスト名が無効です。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            // 既に保存されているインスタンスを取得
            var instance = this.instances.FindByHost(uri.Host);

            var isNewInstance = (instance == null);

            // 新しいインスタンスだったとき
            if (isNewInstance)
            {
                Debug.WriteLine($"register app of new instance: {uri.Scheme}://{uri.Host}");

                try
                {
                    // 連携アプリを新規登録
                    instance = await MisskeyInstance.Register(uri.Host, "Misqru", "An desktop app to prepare user-followings", new[] { "following-write" });
                }
                catch
                {
                    this.button1.Enabled = true;
                    MessageBox.Show("連携アプリの登録に失敗しました。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                // Instancesに追加
                this.instances.Add(instance);
                await this.setting.SaveAsync();
            }

            this.label2.Visible = true;

            var account = await MisskeyAccount.Authorize(instance);

            this.label2.Visible = false;

            // 新しいインスタンスだったとき or Accountsに存在しなければ
            if (isNewInstance || this.accounts.FindIndex(i => i.Token == account.Token && i.Host == instance.Host) == -1)
            {
                // Accountsに追加
                this.accounts.Add(account);
                await this.setting.SaveAsync();

                this.Data = account;
            }

            this.DialogResult = DialogResult.OK;
            this.Close();
        }