예제 #1
0
        public TwitterIdentity RequestAccessToken(String authToken, String verifier, Dictionary <String, String> parameters)
        {
            UriBuilder newUri = new UriBuilder(AccessTokenUrl);

            newUri.Query = ((newUri.Query.Length > 0) ? "&" : "") + String.Join("&", parameters.Select(kv => String.Concat(Utility.UrlEncode(kv.Key), "=", Utility.UrlEncode(kv.Value))).ToArray());

            Verifier = verifier;
            String result = ReadResponse(RequestInternal(newUri.Uri, HttpMethod.POST, authToken, String.Empty));
            NameValueCollection returnValues = new NameValueCollection();

            foreach (var keyValue in result.Split(new[] { '&', ';' }, StringSplitOptions.RemoveEmptyEntries)
                     .Select(p => p.Split(new[] { '=' }, 2))
                     .Where(p => p.Length == 2))
            {
                returnValues[keyValue[0]] = keyValue[1];
            }

            TwitterIdentity identity = new TwitterIdentity()
            {
                Token       = returnValues["oauth_token"],
                TokenSecret = returnValues["oauth_token_secret"],
                ScreenName  = returnValues["screen_name"],
                UserId      = Int32.Parse(returnValues["user_id"])
            };

            return(identity);
        }
예제 #2
0
        /// <summary>
        /// TwitterService クラスのインスタンスをOAuthを利用する設定で初期化します。
        /// </summary>
        /// <param name="twitterIdentity"></param>
        public TwitterService(String clientKey, String secretKey, TwitterIdentity twitterIdentity)
        {
            OAuthClient = new TwitterOAuth(clientKey, secretKey)
            {
                Token       = twitterIdentity.Token,
                TokenSecret = twitterIdentity.TokenSecret
            };
            _userName = twitterIdentity.ScreenName;

            Initialize();
        }
예제 #3
0
        public TwitterIdentity RequestAccessToken(String authToken, String verifier)
        {
            Verifier = verifier;
            String result = ReadResponse(RequestInternal(AccessTokenUrl, HttpMethod.GET, authToken, String.Empty));
            NameValueCollection returnValues = new NameValueCollection();

            foreach (var keyValue in result.Split(new[] { '&', ';' }, StringSplitOptions.RemoveEmptyEntries)
                     .Select(p => p.Split(new[] { '=' }, 2))
                     .Where(p => p.Length == 2))
            {
                returnValues[keyValue[0]] = keyValue[1];
            }

            TwitterIdentity identity = new TwitterIdentity()
            {
                Token       = returnValues["oauth_token"],
                TokenSecret = returnValues["oauth_token_secret"],
                ScreenName  = returnValues["screen_name"],
                UserId      = Int32.Parse(returnValues["user_id"])
            };

            return(identity);
        }
 public TwitterAuthenticateResult(User user, TwitterIdentity identity)
     : base()
 {
     User = user;
     Identity = identity;
 }
예제 #5
0
 public TwitterAuthenticateResult(User user, TwitterIdentity identity) : base()
 {
     User     = user;
     Identity = identity;
 }
        protected override void OnMessageReceivedFromClient(MessageReceivedEventArgs e)
        {
            if (_isFinished)
            {
                return;
            }

            PrivMsgMessage privMsg = e.Message as PrivMsgMessage;

            if (privMsg != null)
            {
                if (_identity == null)
                {
                    // step 1
                    try
                    {
                        _identity = _twitterOAuth.RequestAccessToken(authToken, privMsg.Content.Trim());
                    }
                    catch (WebException we)
                    {
                        SendMessage("アプリケーションのアクセスは許可されませんでした。再接続してやり直してください。");
                        return;
                    }
                    SendMessage(String.Format("ユーザー {0} (ID:{1})として認証されました。", _identity.ScreenName, _identity.UserId));
                    SendMessage("IRCクライアントに設定するためのパスワードを入力してください。");
                }
                else
                {
                    // step 2
                    String password = privMsg.Content.Trim();
                    try
                    {
#if HOSTING
                        var config = Config.LoadConfig(_identity.UserId.ToString());
#else
                        var config = Config.LoadConfig(_identity.ScreenName.ToString());
#endif
                        config.OAuthAccessToken      = _identity.Token;
                        config.OAuthTokenSecret      = _identity.TokenSecret;
                        config.OAuthUserPasswordHash = Utility.GetMesssageDigest(password);
#if HOSTING
                        Config.SaveConfig(_identity.UserId.ToString(), config);
                        SendMessage(
                            String.Format(
                                "OAuth用のパスワードを設定しました。IRCクライアントの接続設定のユーザID(ログイン名)に {0} を、パスワードに設定したパスワードを指定して再接続してください。",
                                _identity.UserId));
#else
                        Config.SaveConfig(_identity.ScreenName.ToString(), config);
                        SendMessage("OAuth用のパスワードを設定しました。IRCクライアントの接続設定のパスワードに設定したパスワードを指定して再接続してください。");
#endif
                    }
                    catch (IOException ie)
                    {
                        SendMessage("設定ファイルにアクセスする際にエラーが発生しました。(" + ie.Message + ")");
                        return;
                    }

                    Session session = _server.GetSession(_identity.UserId.ToString()) as Session;
                    if (session != null)
                    {
                        session.LoadConfig(); // すでにセッションがある場合には設定を再読込
                    }

                    _isFinished = true;
                }
            }
        }
예제 #7
0
        public TwitterIdentity RequestAccessToken(String authToken, String verifier, Dictionary<String, String> parameters)
        {
            UriBuilder newUri = new UriBuilder(AccessTokenUrl);
            newUri.Query = ((newUri.Query.Length > 0) ? "&" : "") + String.Join("&", parameters.Select(kv => String.Concat(Utility.UrlEncode(kv.Key), "=", Utility.UrlEncode(kv.Value))).ToArray());

            Verifier = verifier;
            String result = ReadResponse(RequestInternal(newUri.Uri, HttpMethod.POST, authToken, String.Empty));
            NameValueCollection returnValues = new NameValueCollection();
            foreach (var keyValue in result.Split(new[] { '&', ';' }, StringSplitOptions.RemoveEmptyEntries)
                                           .Select(p => p.Split(new[] { '=' }, 2))
                                           .Where(p => p.Length == 2))
            {
                returnValues[keyValue[0]] = keyValue[1];
            }

            TwitterIdentity identity = new TwitterIdentity()
            {
                Token = returnValues["oauth_token"],
                TokenSecret = returnValues["oauth_token_secret"],
                ScreenName = returnValues["screen_name"],
                UserId = Int32.Parse(returnValues["user_id"])
            };
            return identity;
        }
예제 #8
0
        public TwitterIdentity RequestAccessToken(String authToken, String verifier)
        {
            Verifier = verifier;
            String result = ReadResponse(RequestInternal(AccessTokenUrl, HttpMethod.GET, authToken, String.Empty));
            NameValueCollection returnValues = new NameValueCollection();
            foreach (var keyValue in result.Split(new[] { '&', ';' }, StringSplitOptions.RemoveEmptyEntries)
                                           .Select(p => p.Split(new[] { '=' }, 2))
                                           .Where(p => p.Length == 2))
            {
                returnValues[keyValue[0]] = keyValue[1];
            }

            TwitterIdentity identity = new TwitterIdentity()
                                           {
                                               Token = returnValues["oauth_token"],
                                               TokenSecret = returnValues["oauth_token_secret"],
                                               ScreenName = returnValues["screen_name"],
                                               UserId = Int32.Parse(returnValues["user_id"])
                                           };
            return identity;
        }
        /// <summary>
        /// TwitterService クラスのインスタンスをOAuthを利用する設定で初期化します。
        /// </summary>
        /// <param name="twitterIdentity"></param>
        public TwitterService(String clientKey, String secretKey, TwitterIdentity twitterIdentity)
        {
            OAuthClient = new TwitterOAuth(clientKey, secretKey)
                          {
                              Token = twitterIdentity.Token,
                              TokenSecret = twitterIdentity.TokenSecret
                          };
            _userName = twitterIdentity.ScreenName;

            Initialize();
        }