Exemple #1
0
        public authPage()
        {
            InitializeComponent();

            session = OAuth.AuthorizeAsync(Key.consumerKey, Key.consumerSecret).Result;
            Device.OpenUri(new Uri(session.AuthorizeUri.AbsoluteUri));
        }
        public static async Task <OAuth.OAuthSession> CreateAuthenticationSessionAsync()
        {
            try
            {
                var session = await OAuth.AuthorizeAsync(SecretParameters.ConsumerKey, SecretParameters.ConsumerSecret);

                return(session);
            }
            catch (HttpRequestException e)
            {
                CommonMethods.Notify("ネットワークに正常に接続できませんでした", NotificationType.Error);
                DebugConsole.Write(e);
                return(null);
            }
            catch (WebException e)
            {
                CommonMethods.Notify("ネットワークに正常に接続できませんでした", NotificationType.Error);
                DebugConsole.Write(e);
                return(null);
            }
            catch (Exception e)
            {
                CommonMethods.Notify("エラー.", NotificationType.Error);
                DebugConsole.Write(e);
                return(null);
            }
        }
Exemple #3
0
        private async void initAuthrize()

        {
            try

            {
                var settings = ApplicationData.Current.RoamingSettings;

                session = await OAuth.AuthorizeAsync((string)settings.Values["ApiKey"]

                                                     , (string)settings.Values["ApiSecret"]);

                authWeb.Source = session.AuthorizeUri;
                session_url    = session.AuthorizeUri;
            }

            catch (Exception ex)

            {
                pinTextBox.Text = "sippsi";
                // in this example we assume the parent of the UserControl is a Popup
                Popup p = this.Parent as Popup;

                // close the Popup
                if (p != null)
                {
                    p.IsOpen = false;
                }

                //Close();
            }
        }
Exemple #4
0
        internal async void Initialize()
        {
            ShowingStatuses       = new Queue <Status>();
            Setting               = new Kbtter3Setting();
            StreamManager         = new List <IDisposable>();
            Plugins               = new List <Kbtter3PluginProvider>();
            PluginMonitoringToken = new object();
            Logs = new List <string>();

            if (!Directory.Exists(CacheFolderName))
            {
                Directory.CreateDirectory(CacheFolderName);
            }
            if (!Directory.Exists(PluginFolderName))
            {
                Directory.CreateDirectory(PluginFolderName);
            }

            Setting      = Kbtter3Extension.LoadJson <Kbtter3Setting>(App.ConfigurationFileName, Setting);
            OAuthSession = await OAuth.AuthorizeAsync(Setting.Consumer.Key, Setting.Consumer.Secret);

            OnStatus        += NotifyStatusUpdate;
            OnEvent         += NotifyEventUpdate;
            OnIdEvent       += NotifyIdEventUpdate;
            OnDirectMessage += NotifyDirectMessageUpdate;

            LogInformation("Model層初期化完了");
            SaveLog();

            RaisePropertyChanged("AccessTokenRequest");
        }
Exemple #5
0
        private async void token_session()
        {
            var settings = ApplicationData.Current.RoamingSettings;

            session = await OAuth.AuthorizeAsync((string)settings.Values["ApiKey"]

                                                 , (string)settings.Values["ApiSecret"]);
        }
        public async Task <IActionResult> Login()
        {
            string callbackUrl = $"{Request.Scheme}://{Request.Host}{Request.Path}".Replace("Login", "Callback");
            var    session     = await OAuth.AuthorizeAsync(Constant.ConsumerKey, Constant.ConsumerSecret, callbackUrl);

            TempData[requestToken]       = session.RequestToken;
            TempData[requestTokenSecret] = session.RequestTokenSecret;
            return(Redirect(session.AuthorizeUri.AbsoluteUri));
        }
        private async void InitAsync(object sender, RoutedEventArgs e)
        {
            session = await OAuth.AuthorizeAsync(
                __Private.ConsumerKey,
                __Private.ConsumerSecret
                );

            AuthorizeUrl.Text = session.AuthorizeUri.ToString();
        }
Exemple #8
0
        /// <summary>
        /// OAuth認証
        /// </summary>
        /// <returns>認証が成功して有効なトークンが取得できればtrue、そうでない場合はfalse</returns>
        private async Task <bool> OAuthAsync()
        {
            //コールバック用カスタムURLスキーマ
            string callback = CustomScheme + "://" + CustomSchemeHost;
            //認証
            var session = await OAuth.AuthorizeAsync(this.APIkey, this.APIsecret, callback);

            //ブラウザで認証ページを開いてコールバックでパラメータを取得
            var launchedUri = await DependencyService.Get <IAppHandler>().LaunchUri(session.AuthorizeUri.AbsoluteUri);

            if (string.IsNullOrEmpty(launchedUri) == true)
            {
                return(false);
            }

            //クエリパラメータ文字列を取得
            string query = new Uri(launchedUri).GetComponents(UriComponents.Query, UriFormat.UriEscaped);

            //クエリパラメータをパース
            var parameters = string.IsNullOrEmpty(query)
                                                           ? new Dictionary <string, string>()
                                                           : query.Split('&')
                             .Select(p => p.Split('='))
                             .ToDictionary(p => p[0], p => 1 < p.Length ? Uri.UnescapeDataString(p[1]) : null);

            //oauth_token と oauth_verifierを取得
            string oauth_token, oauth_verifier;
            var    o1 = parameters.TryGetValue("oauth_token", out oauth_token);
            var    o2 = parameters.TryGetValue("oauth_verifier", out oauth_verifier);

            //パラメータが存在しなければnullを返す
            if (o1 == false || o2 == false)
            {
                return(false);
            }

            Tokens t = null;

            try
            {
                //トークン取得
                t = await session.GetTokensAsync(oauth_verifier);

                // トークン有効性確認
                var res = await t.Account.VerifyCredentialsAsync();
            }
            catch (Exception ex)
            {
                //トークンが有効でないときはnullに
                t = null;
                this.LastErrMessage = ex.Message;
            }

            this.Token = t;
            return(t != null);
        }
Exemple #9
0
        /// <summary>
        /// 指定された ConsumerKey, ConsumerSecret から初回認証を行います。
        /// </summary>
        /// <param name="owner">PIN 入力ダイアログの親ウィンドウ</param>
        public async Task AuthorizeAsync(string consumerKey, string consumerSecret, IWin32Window owner = null)
        {
            if (string.IsNullOrEmpty(consumerKey) || string.IsNullOrEmpty(consumerSecret))
            {
                throw new ArgumentNullException();
            }
            else if (Tokens != null && User != null)
            {
                throw new InvalidOperationException("既に認証されています。");
            }
            else
            {
                OAuth.OAuthSession oAuthSession = await OAuth.AuthorizeAsync(consumerKey, consumerSecret);

                Process.Start(oAuthSession.AuthorizeUri.ToString());

                using (PinDialog dialog = new PinDialog())
                {
                    DialogResult result = dialog.ShowDialog(owner);

                    if (result == DialogResult.OK)
                    {
                        Tokens = await OAuth.GetTokensAsync(oAuthSession, dialog.Pin);

                        User = await Tokens.Account.VerifyCredentialsAsync();

                        if (User == null)
                        {
                            throw new AuthorizationFailedException("ユーザ認証処理で不明なエラーが発生しました。");
                        }
                        else
                        {
                            // 短縮URLの文字数確認用
                            Configurations config = await Tokens.Help.ConfigurationAsync();

                            AccountData = new TwitterAccountData()
                            {
                                ConsumerKey    = Tokens.ConsumerKey,
                                ConsumerSecret = Tokens.ConsumerSecret,
                                AccessToken    = Tokens.AccessToken,
                                AccessSecret   = Tokens.AccessTokenSecret,

                                MediaPossiblySensitive = false,
                                ShortUrlLength         = config.ShortUrlLength,
                                ShortUrlLengthHttps    = config.ShortUrlLengthHttps,
                                ConfigUpdatedAt        = DateTime.Now
                            };
                        }
                    }
                    else
                    {
                        throw new OperationCanceledException();
                    }
                }
            }
        }
        public async Task <IActionResult> Auth()
        {
            var session = await OAuth.AuthorizeAsync(twitterOptions.ClientId, twitterOptions.ClientSecret);

            return(Ok(new
            {
                session.AuthorizeUri,
                session.RequestToken,
                session.RequestTokenSecret
            }));
        }
        public async Task <OAuthSessionModel> AuthorizeAsync(string consumerKey, string consumerSecret)
        {
            session = await OAuth.AuthorizeAsync(consumerKey, consumerSecret);

            return(new OAuthSessionModel(session.AuthorizeUri)
            {
                ConsumerKey = session.ConsumerKey,
                ConsumerSecret = session.ConsumerSecret,
                RequestToken = session.RequestToken,
                RequestTokenSecret = session.RequestTokenSecret
            });
        }
Exemple #12
0
            public async Task Auth(AuthArguments arguments)
            {
                var session = await OAuth.AuthorizeAsync(arguments.ClientId, arguments.ClientSecret);

                File.WriteAllText(".twitterToken", session.RequestToken);
                File.WriteAllText(".twitterSecret", session.RequestTokenSecret);

                Console.WriteLine($"Request Token:  {session.RequestToken}");
                Console.WriteLine($"Request Secret: {session.RequestTokenSecret}");

                Console.WriteLine();
                Console.WriteLine($"Open the following url to get the pin: {session.AuthorizeUri}");
            }
        /// <summary>
        /// 認証用トークンを取得します
        /// </summary>
        private async void InitAuth()
        {
            var bindings = DataContext as db;

            session = await OAuth.AuthorizeAsync(Twitter.CK, Twitter.CS);

            bindings.AuthUrl         = session.AuthorizeUri;
            AuthLinkText.Text        = session.AuthorizeUri.ToString();
            AuthLinklink.NavigateUri = session.AuthorizeUri;
            Console.WriteLine(bindings.AuthUrl.ToString());

            pin.IsEnabled = true;
            //authButton.IsEnabled = true;
        }
Exemple #14
0
        private async void button_OAuth_Click(object sender, EventArgs e)
        {
            button_OAuth.Enabled = false;

            try
            {
                session = await OAuth.AuthorizeAsync(SecretResources.CK, SecretResources.CS);

                Process.Start(session.AuthorizeUri.ToString());
            }
            catch (Exception)
            {
                MessageBox.Show("Failed to authorize. \nPlease check your internet connection.",
                                "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            button_OAuth.Enabled = true;
        }
Exemple #15
0
        public OAuthWindow()
        {
            InitializeComponent();
            this.Loaded += async(a, e) =>
            {
                Session = await OAuth.AuthorizeAsync(AuthKeys.consumerKey, AuthKeys.consumerSecert);

                Process.Start(Session.AuthorizeUri.ToString());
            };

            Observable.FromEventPattern <RoutedEventArgs>(Auth, "Click")
            .Where(_ => CodeTextBox.Text.Length == 7)
            .Subscribe(async _ => await SetAuthAsync());

            Observable.FromEventPattern <KeyEventArgs>(CodeTextBox, "KeyDown")
            .Where(x => x.EventArgs.Key == Key.Enter && CodeTextBox.Text.Length == 7)
            .Subscribe(async _ => await SetAuthAsync());
        }
        public async Task AuthAsync(Func <Uri, Uri, Task <string> > getPin)
        {
            if (this.User.IsAuth)
            {
                return;
            }

            var session = await OAuth.AuthorizeAsync(Constants.ConsumerKey, Constants.ConsumerSecret, Constants.CallbackUrl);

            var pin = await getPin(session.AuthorizeUri, new Uri(Constants.CallbackUrl));

            if (string.IsNullOrWhiteSpace(pin))
            {
                return;
            }

            this.User.SaveToken(await session.GetTokensAsync(pin));
        }
Exemple #17
0
        public async Task <IActionResult> ShowAuthWindow()
        {
            OAuthSession session = await OAuth.AuthorizeAsync(ConsumerKey, ConsumerSecret);

            HttpContext.Session.SetObject("key", session);

            //dotnetCoreでは使えないらしい?
            //System.Diagnostics.Process.Start(session.AuthorizeUri.AbsoluteUri);
            var url = session.AuthorizeUri.AbsoluteUri;

            try
            {
                Process.Start(url);
            }
            catch
            {
                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    //Windowsのとき
                    url = url.Replace("&", "^&");
                    Process.Start(new ProcessStartInfo("cmd", $"/c start {url}")
                    {
                        CreateNoWindow = true
                    });
                }
                else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
                {
                    //Linuxのとき
                    Process.Start("xdg-open", url);
                }
                else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
                {
                    //Macのとき
                    Process.Start("open", url);
                }
                else
                {
                    throw;
                }
            }

            return(Ok());
        }
        public SettingsPageViewModel(INavigationService navigationService) : base(navigationService)
        {
            Title = "Settings";

            IsVisibleUserIcon = UserIcon.Select(x => x != null)
                                .ToReactiveProperty();

            StartingAuthCommand.Subscribe(async _ =>
            {
                TwitterUser.Session = await OAuth.AuthorizeAsync(TwitterUser.APIKey, TwitterUser.APISecret);
                Process.Start(TwitterUser.Session.AuthorizeUri.AbsoluteUri);
            });

            UserAuthCommand.Subscribe(async _ =>
            {
                try
                {
                    TwitterUser.Tokens = await TwitterUser.Session.GetTokensAsync(PinCode.Value);

                    if (TwitterUser.Tokens.Account.VerifyCredentialsAsync() != null)
                    {
                        var response = await TwitterUser.Tokens.Account.VerifyCredentialsAsync();

                        userIcon.Value          = ImageSource.FromUri(new Uri(response.ProfileImageUrl));
                        IsVisibleUserIcon.Value = true;

                        var builder = new StringBuilder();
                        builder.AppendLine($"UserName : { response.Name }");
                        builder.Append($"UserID : @{ response.ScreenName }");
                        userInfo.Value = builder.ToString();
                    }
                    else
                    {
                        App.Logger.Warn("ログイン認証失敗");
                    }
                }
                catch (Exception ex)
                {
                    App.Logger.Error(ex.Message + Environment.NewLine + ex.StackTrace);
                }
            });
        }
Exemple #19
0
        private static Tokens GetTwitterTokens()
        {
            Tokens token = null;

            try
            {
                var consumerKey       = Environment.GetEnvironmentVariable("twitterConsumerKey");
                var consumerSecret    = Environment.GetEnvironmentVariable("twitterConsumerSecret");
                var twitterAuthoriser = new TwitterAuthoriserConsole();

                var session = OAuth.AuthorizeAsync(consumerKey, consumerSecret).GetAwaiter().GetResult();
                var pincode = twitterAuthoriser.GetPinCode(session.AuthorizeUri);
                token = session.GetTokensAsync(pincode).GetAwaiter().GetResult();
            }
            catch (Exception e)
            {
                Logger.Error($"Something went wrong whilst connecting to Twitter.");
                Logger.Debug($"Message:\r\n{e.Message}\r\nStack trace:\r\n{e.StackTrace}");
            }
            return(token);
        }
Exemple #20
0
        /// <summary>
        /// 1st.Step OnAuthorize
        /// </summary>
        private async void OnAuthorize(object sender, Windows.UI.Xaml.RoutedEventArgs args)
        {
            Session = await OAuth.AuthorizeAsync(API_CONSUMER_TOKEN, API_CONSUMER_SECRET);

            string uriToLaunch = Session.AuthorizeUri.ToString();
            var    uri         = new Uri(uriToLaunch);
            var    success     = await Windows.System.Launcher.LaunchUriAsync(uri);

            if (success)
            {
                // URI launched
                _anyMessage.Text = actorLines[Const.ActorLinesMain["PINコードを入力するんだ。"]];
                return;
            }
            else
            {
                // URI launch failed
                MessageDialog md = new MessageDialog("Failed External Web Browser Open.");
                await md.ShowAsync();

                _anyMessage.Text = actorLines[Const.ActorLinesMain["ジオンの制空権内ということを自覚しろ!"]];
            }
        }
Exemple #21
0
        public async void SetupLogin()
        {
            session = await OAuth.AuthorizeAsync(API_KEY, API_SECRET);

            Device.OpenUri(new Uri(session.AuthorizeUri.AbsoluteUri));
        }
Exemple #22
0
        public DetailPageViewModel(INavigationService navigationService)
        {
            // TODO: ViewModelからじゃだめなんかな?いやわからんぞー
            //var button = FindByName<StackLayout>("button");


            //StackLayout im = (StackLayout) //button;

            //Debug.WriteLine("** 2: Text = " + Text);
            //Debug.WriteLine("** 2: Note = " + Note);
            //Debug.WriteLine("** 2: Title = " + Title);

            //MyCommand = new DelegateCommand(async () => await navigationService.NavigateAsync("MyMyPage"));

            // ------------------------
            //var auth = new OAuth2Authenticator(
            //  Constants.ClientId,
            //  Constants.ClientSecret,
            //  Constants.Scope,
            //  new Uri(Constants.AuthorizeUrl),
            //  new Uri(Constants.RedirectUrl),
            //  new Uri(Constants.AccessTokenUrl));

            //var auth = new OAuth2Authenticator(
            //CONSUMER_KEY,
            //	CONSUMER_SECRET,
            //	"",
            //	new Uri("https://api.twitter.com/oauth/authorize"),
            //	new Uri("https://twitter.com/"),
            //	new Uri("https://api.twitter.com/oauth/access_token")
            //);

            var auth = new OAuth1Authenticator(
                //Constants.TwitterConsumerKey,
                //Constants.TwitterConsumerSecret,
                CONSUMER_KEY,
                CONSUMER_SECRET,
                new Uri("https://api.twitter.com/oauth/request_token"),
                new Uri("https://api.twitter.com/oauth/authorize"),
                new Uri("https://api.twitter.com/oauth/access_token"),
                new Uri("http://twitter.com")
                );



            TwetterLoginCommand = new DelegateCommand(async() =>
            {
                //Debug.WriteLine("* DelegateCommand *");
                // TODO: これはユーザーごとにならない
                // OAuth2Token apponly = await OAuth2.GetTokenAsync(CONSUMER_KEY, CONSUMER_SECRET);
                //Debug.WriteLine("* apponly = " + apponly);

                // Twitter アプリ連携認証ページ Uri の取得
                session = await OAuth.AuthorizeAsync(CONSUMER_KEY, CONSUMER_SECRET);
                Debug.WriteLine("* session = " + session);
                // アプリ連携認証ページに遷移
                Device.OpenUri(new Uri(session.AuthorizeUri.AbsoluteUri));
                // TODO: Custom Url Scheme は使えませんかぁぁぁぁ 困るぅぅぅぅ



                // Token を作る。
                //Tokens.Create("consumerKey", "consumerSecret", "accessToken", "accessSecret");
            });


            TwetterTokenCommand = new DelegateCommand(async() =>
            {
                Debug.WriteLine("* TwetterTokenCommand");
                string pin = NewItemsText.Value;
                Debug.WriteLine("* pin = " + pin);
                if (!string.IsNullOrEmpty(pin) && pin.Length == 7)
                {
                    tokens = await CoreTweet.OAuth.GetTokensAsync(session, pin);
                    Debug.WriteLine("!!! tokens = " + tokens);
                }
            });

            // TODO: これって何をTweetするの?webのリンクとかあんの?
            // TODO: twitterアプリを呼び出したりできるのか?
            TweetCommand = new DelegateCommand(async() =>
            {
                Debug.WriteLine("* TweetCommand");
                string tweetText = TweetText.Value;
                Debug.WriteLine("* tweetText = " + tweetText);
                if (!string.IsNullOrEmpty(tweetText))
                {
                    await tokens.Statuses.UpdateAsync(status => tweetText);
                }
            });

            //this.AddNewItem = this.NewItemsText
            //	.Select(x => !string.IsNullOrWhiteSpace(x)) // NewItemsText の状況から bool に変換
            //	.ToReactiveCommand();



            TCommand = new DelegateCommand(() =>
            {
                var baseUrl = "http://twitter.com/share?text=";
                var param   = "My Favorite Item by MANT\\nContent Holder is カンガルーくん";
                Debug.WriteLine("* baseUrl = " + baseUrl);
                Debug.WriteLine("* param = " + param);

                //var uuu = new Uri(baseUrl + param);
                //Debug.WriteLine("* uuu = " + uuu);


                var encodeUrl = WebUtility.UrlEncode(param);
                Debug.WriteLine("* encodeUrl = " + encodeUrl);

                // uri 作成
                var uri = new Uri(baseUrl + encodeUrl);
                Debug.WriteLine("* uri = " + uri);

                // ブラウザで開く
                Device.OpenUri(uri);
            });


            XACommand = new DelegateCommand(async() => {
                await navigationService.NavigateAsync("LoginPage");
            });
        }
        public async Task InitializeAsync()
        {
            session = await OAuth.AuthorizeAsync(tokens.ConsumerKey, tokens.ConsumerSecret);

            AuthURI = session.AuthorizeUri.ToString();
        }
Exemple #24
0
        /// <summary>
        /// Get access to user's Twitter credentials via PIN-based authentication
        /// </summary>
        private async void GetTwitterAuth()
        {
            try
            {
                // Check if developer set up Twitter integration
                if (!string.IsNullOrEmpty(_botConfig.TwitterConsumerKey) && !string.IsNullOrEmpty(_botConfig.TwitterConsumerSecret))
                {
                    Tokens tokens = new Tokens();

                    // Check existing credentials
                    if (!string.IsNullOrEmpty(_botConfig.TwitterAccessToken) && !string.IsNullOrEmpty(_botConfig.TwitterAccessSecret))
                    {
                        tokens = Tokens.Create(
                            _botConfig.TwitterConsumerKey,
                            _botConfig.TwitterConsumerSecret,
                            _botConfig.TwitterAccessToken,
                            _botConfig.TwitterAccessSecret
                            );
                    }

                    // Get authentication to Twitter account
                    if (string.IsNullOrEmpty(_botConfig.TwitterAccessToken) || string.IsNullOrEmpty(_botConfig.TwitterAccessSecret))
                    {
                        // create session
                        OAuth.OAuthSession session = await OAuth.AuthorizeAsync(_botConfig.TwitterConsumerKey, _botConfig.TwitterConsumerSecret);

                        string url = session.AuthorizeUri.AbsoluteUri;

                        Process process = new Process();
                        process.StartUrlCrossPlatform(url);

                        // Ask the user to enter the pin code given by Twitter
                        Console.WriteLine("Please enter the PIN given by Twitter (or simply press ENTER to continue using this bot without Twitter):");
                        string pinCode = Console.ReadLine();

                        if (!string.IsNullOrWhiteSpace(pinCode))
                        {
                            // assign tokens
                            tokens = await OAuth.GetTokensAsync(session, pinCode);

                            pinCode = ""; // clear pin code

                            if (tokens != null)
                            {
                                SaveTwitterAccessInfo(tokens.AccessToken, tokens.AccessTokenSecret);

                                if (await VerifyTwitterCredentialsAsync(tokens))
                                {
                                    Console.WriteLine();
                                    Console.WriteLine("Twitter authentication granted for Twitter account (screen name): "
                                                      + $"{_twitterInstance.ScreenName}");
                                    Console.WriteLine();
                                }
                            }
                            else
                            {
                                Console.WriteLine();
                                Console.WriteLine("Warning: Couldn't find Twitter credentials.");
                                Console.WriteLine("Either the PIN code wasn't entered correctly or unknown authentication error occurred");
                                Console.WriteLine("Continuing without Twitter features...");
                                Console.WriteLine();
                            }
                        }
                        else
                        {
                            Console.WriteLine("Warning: PIN code was not provided. Continuing without Twitter features...");
                            Console.WriteLine();
                        }
                    }
                    else
                    {
                        if (await VerifyTwitterCredentialsAsync(tokens))
                        {
                            Console.WriteLine($"Current authenticated Twitter's screen name: {_twitterInstance.ScreenName}");
                            Console.WriteLine();
                        }
                    }
                }
                else
                {
                    Console.WriteLine("Warning: Twitter integration not set. Continuing without Twitter features...");
                    Console.WriteLine();
                }
            }
            catch (Exception ex)
            {
                await _errHndlrInstance.LogError(ex, "TwitchBotApplication", "GetTwitterAuth()", false);
            }
        }
Exemple #25
0
        /// <summary>
        /// 登録された情報でクライアントを作成して返します。エラー発生時は null を返します。
        /// </summary>
        /// <param name="showError">エラー発生時にメッセージボックスを出力するか。</param>
        /// <param name="control">プログレスバーの存在するコントロール。</param>
        /// <param name="progressBar">進捗状況を表示するプログレスバー。</param>
        /// <returns>作成したクライアント。エラー発生時は null を返します。</returns>
        public async Task <Tokens> CreateClient(bool showError, Control control = null, ProgressBar progressBar = null)
        {
            // トークンが保存されている場合はそれを使ってクライアント作成する
            if (Index >= 0)
            {
                client = Tokens.Create(SecretDefine.TwitterConsumerKey, SecretDefine.TwitterConsumerSecret,
                                       Settings.Default.TwitterAccessTokens[Index], Settings.Default.TwitterAccessTokenSecrets[Index]);
                var response = await client.Account.VerifyCredentialsAsync();

                client.UserId     = (long)response.Id;
                client.ScreenName = response.ScreenName;
            }
            else
            {
                // アプリケーションの登録
                OAuth.OAuthSession session;
                try
                {
                    session = await OAuth.AuthorizeAsync(SecretDefine.TwitterConsumerKey, SecretDefine.TwitterConsumerSecret);
                }
                catch (Exception e)
                {
                    logger.ErrorFormat($"Twitter: サーバ接続に失敗 - {e.Message}");
                    if (showError)
                    {
                        Utilities.ShowError($"Twitter に接続できません。");
                    }
                    return(null);
                }
                control?.Invoke((MethodInvoker)(() => progressBar.Value = 25));

                // アクセストークンを取得するために認証ページに裏側で遷移
                var webContext = new WebBrowser();
                try
                {
                    webContext.Navigate(session.AuthorizeUri);
                    while (webContext.ReadyState != WebBrowserReadyState.Complete)
                    {
                        Application.DoEvents();
                    }
                    var all = webContext.Document.All;
                    all.GetElementsByName("session[username_or_email]")[0].InnerText = screenNameOrEMail;
                    all.GetElementsByName("session[password]")[0].InnerText          = password;
                    webContext.DocumentCompleted += webBrowser_DocumentCompleted;
                    webContext.Document.GetElementById("allow").InvokeMember("click");
                    control?.Invoke((MethodInvoker)(() => progressBar.Value = 50));

                    // PIN コードの取得(実際の処理は webBrowser_DocumentCompleted で行われる)
                    pin = "";
                    DateTime start = DateTime.Now;
                    while (pin.Length == 0)
                    {
                        Application.DoEvents();
                        if ((DateTime.Now - start).TotalSeconds > 5)
                        {
                            // 5秒経っても接続できなければタイムアウト
                            throw new Exception("PIN コードの取得でタイムアウトしました。");
                        }
                    }
                    control?.Invoke((MethodInvoker)(() => progressBar.Value = 75));

                    // アクセストークンの取得
                    client = await session.GetTokensAsync(pin);
                }
                catch (Exception e)
                {
                    logger.ErrorFormat($"Twitter: アカウントへの接続に失敗 - {e.Message}");
                    if (showError)
                    {
                        Utilities.ShowError($"アカウントに接続できません。\nユーザ名(メールアドレス)・パスワードを確認してください。");
                    }
                    return(null);
                }
            }

            // 各種情報の取得
            try
            {
                var user = await client.Users.ShowAsync(client.UserId);

                AccountName = $"{user.ScreenName}@Twitter";
                Icon        = user.ProfileImageUrl;
                Streaming   = client.Streaming.UserAsObservable().Publish();
            }
            catch (Exception e)
            {
                logger.ErrorFormat($"Twitter: ユーザ情報の取得に失敗 - {e.Message}");
                if (showError)
                {
                    Utilities.ShowError($"ユーザ情報を取得できません。");
                }
                return(null);
            }
            control?.Invoke((MethodInvoker)(() => progressBar.Value = 100));

            return(client);
        }
        private async void BrowseAuthorizeView()
        {
            _session = await OAuth.AuthorizeAsync(Config.CONSUMER_KEY, Config.CONSUMER_SECRET, Config.CALLBACK);

            authWebView.MainFrameUrl = _session.AuthorizeUri.AbsoluteUri;
        }
        private async void AuthorizePopupConfigNextButton_Click(object sender, RoutedEventArgs e)
        {
            if (_authorizeStep == AuthorizeStep.TwitterConfig)
            {
                var editConsumerKey = AuthorizePopupTwitterEditConsumerKeyCheckBox.IsChecked;

                string consumerKey;
                string consumerSecret;
                string callbackUrl;
                if (editConsumerKey == true)
                {
                    consumerKey               = AuthorizePopupTwitterConsumerKeyTextBox.Text.Trim();
                    consumerSecret            = AuthorizePopupTwitterConsumerSecretTextBox.Text.Trim();
                    callbackUrl               = "oob";
                    _urlCallbackAuthorization = false;
                }
                else
                {
                    consumerKey               = TwitterConsumerKey;
                    consumerSecret            = TwitterConsumerSecret;
                    callbackUrl               = "http://cucmber.net/";
                    _urlCallbackAuthorization = true;
                }

                if (string.IsNullOrWhiteSpace(consumerKey) || string.IsNullOrWhiteSpace(consumerSecret))
                {
                    await new MessageDialog(_resourceLoader.GetString("AuthorizePopup_OAuthAuthorizeError"))
                    .ShowAsync();
                    return;
                }

                AuthorizePopupConfigNextButton.IsEnabled = false;

                try
                {
                    _twitterOAuthSettion = await OAuth.AuthorizeAsync(consumerKey, consumerSecret, callbackUrl);
                }
                catch
                {
                    await new MessageDialog(_resourceLoader.GetString("AuthorizePopup_OAuthAuthorizeError"))
                    .ShowAsync();
                    return;
                }
                finally
                {
                    AuthorizePopupConfigNextButton.IsEnabled = true;
                }
                AuthorizePopupAuthorizeWebView.Navigate(_twitterOAuthSettion.AuthorizeUri);
                VisualStateManager.GoToState(this, "Authorize", true);
                VisualStateManager.GoToState(this, "AuthorizeNormal", true);
                _authorizeStep = AuthorizeStep.TwitterAuthorize;
            }
            else if (_authorizeStep == AuthorizeStep.MastodonConfig)
            {
                var instance = AuthorizePopupMastodonInstanceTextBox.Text;
                var appName  = AuthorizePopupMastodonAppNameTextBox.Text;

                if (string.IsNullOrWhiteSpace(appName) || string.IsNullOrWhiteSpace(instance))
                {
                    await new MessageDialog(_resourceLoader.GetString("AuthorizePopup_OAuthAuthorizeError"))
                    .ShowAsync();
                    return;
                }

                var url = string.Empty;
                AuthorizePopupConfigNextButton.IsEnabled = false;
                try
                {
                    _mastodonOauthSettion    = new AuthenticationClient(instance);
                    _mastodonAppRegistration =
                        await _mastodonOauthSettion.CreateApp(appName, Scope.Read | Scope.Write | Scope.Follow);

                    url = _mastodonOauthSettion.OAuthUrl();
                }
                catch
                {
                    await new MessageDialog(_resourceLoader.GetString("AuthorizePopup_OAuthAuthorizeError"))
                    .ShowAsync();
                }
                finally
                {
                    AuthorizePopupConfigNextButton.IsEnabled = true;
                }

                AuthorizePopupAuthorizeWebView.Navigate(new Uri(url));
                VisualStateManager.GoToState(this, "Authorize", true);
                VisualStateManager.GoToState(this, "AuthorizeNormal", true);
                _authorizeStep = AuthorizeStep.MastodonAuthorize;
            }
        }
Exemple #28
0
        public TwitterClient()
        {
            User = new User();

            Session = OAuth.AuthorizeAsync(TwitterKeys.ConsumerKey, TwitterKeys.ConsumerSecret).Result;
        }
        private async void ConfigureAuth()
        {
            Session = await OAuth.AuthorizeAsync(consumerKey : TwitterApiKey.ConsumerKey, consumerSecret : TwitterApiKey.ConsumerSecret, oauthCallback : Callback);

            Source.Value = Session.AuthorizeUri;
        }