private string GetResponseFromWebResponseWrapped(WebResponseWrapper responseWrapper)
        {
            string responseText;

            using (var tokenResponseWrapper = new StreamWrapper(responseWrapper.Get().GetResponseStream()))
            {
                InvokeLog("Token Response: " + tokenResponseWrapper.Get());
                if (tokenResponseWrapper.Get() == null)
                {
                    throw new AcsApiException(AcsApiError.CouldNotGetAccesstoken);
                }
                using (var reader = new StreamReader(tokenResponseWrapper.Get(), Encoding.ASCII))
                {
                    responseText = reader.ReadToEnd();
                    reader.Close();
                }
            }
            return(responseText);
        }
        private void LoadFssToken()
        {
            // Creating a new instance directly
            var client = new OAuthRequest
            {
                Method          = "GET",
                Type            = OAuthRequestType.RequestToken,
                SignatureMethod = OAuthSignatureMethod.HmacSha1,
                ConsumerKey     = serviceConfig.ConsumerKey,
                ConsumerSecret  = serviceConfig.ConsumerSecret,
                RequestUrl      = serviceConfig.ServerRoot + AcsApiClientConfig.RequestUrl,
                CallbackUrl     = serviceConfig.ServerRoot + "client"
            };


            //CookieCollection responseCookies = null;
            string setCookieHeader;
            var    fields = new Hashtable();

            using (var responseWrapper = new WebResponseWrapper(RequestToken(client)))
            {
                var responseText = GetResponseFromWebResponseWrapped(responseWrapper);

                for (var i = 0; i < responseText.Split('&').Length; i++)
                {
                    var fieldInfo = responseText.Split('&')[i].Split('=');
                    fields[fieldInfo[0]] = fieldInfo[1];
                }

                //responseCookies = responseWrapper.Get().Cookies;
                setCookieHeader = responseWrapper.Get().Headers["Set-Cookie"];
            }

            var myHttpWebRequest = Login(client, setCookieHeader, fields);

            string jsessionid;

            setCookieHeader = null;
            try
            {
                using (var responseWrapper = new WebResponseWrapper((HttpWebResponse)myHttpWebRequest.GetResponse()))
                {
                    setCookieHeader = responseWrapper.Get().Headers["Set-Cookie"];
                    var sessionCookie = responseWrapper.Get().Cookies[SessionIdKey];
                    if (sessionCookie != null)
                    {
                        jsessionid = sessionCookie.Value;

                        InvokeLog("Jsesssion found at " + jsessionid);
                        cookies.Add(sessionCookie);
                    }
                    else
                    {
                        throw new InvalidOperationException("JSession Id returned null!");
                    }
                }
            }
            catch (WebException wex)
            {
                throw new AcsApiException(AcsApiError.ServerError.ToString(), wex);
            }

            var target  = new Uri(serviceConfig.ServerRoot);
            var cdomain = target.Host;

            string[] locations;
            using (var responseWrapper = new WebResponseWrapper(ConsumerHandshake(client, jsessionid, setCookieHeader, cdomain)))
            {
                locations       = responseWrapper.Get().Headers.GetValues("location");
                setCookieHeader = responseWrapper.Get().Headers["Set-Cookie"];
            }

            if (locations == null)
            {
                throw new AcsApiException(AcsApiError.CouldNotLogin);
            }

            var myUri = new Uri(locations.FirstOrDefault() ?? string.Empty);

            InvokeLog("Request for uri" + myUri);
            if (string.IsNullOrEmpty(myUri.Query))
            {
                // No oauth_token or oauth_verifier in location header, so didn't authenticate.
                throw new AcsApiException(AcsApiError.CouldNotLogin);
            }

            var accessToken   = HttpUtility.ParseQueryString(myUri.Query).Get(OauthTokenKey);
            var oauthVerifier = HttpUtility.ParseQueryString(myUri.Query).Get(OauthVerifierKey);

            InvokeLog("Verifier response " + accessToken + " : " + oauthVerifier);

            if (string.IsNullOrEmpty(oauthVerifier))
            {
                throw new AcsApiException(AcsApiError.CouldNotFindVerifier);
            }

            using (var requestWrapper = new WebResponseWrapper(RequestFinal(client, accessToken, oauthVerifier, cdomain, setCookieHeader)))
            {
                using (var responseStream = new StreamWrapper(requestWrapper.Get().GetResponseStream()))
                {
                    if (responseStream.Get() == null)
                    {
                        throw new AcsApiException(AcsApiError.CouldNotGetAccesstoken);
                    }

                    string responseOutput;

                    // Pipes the stream to a higher level stream reader with the required encoding format.
                    using (var readStream = new StreamReader(responseStream.Get(), Encoding.UTF8))
                    {
                        responseOutput = readStream.ReadToEnd();
                    }

                    serviceConfig.AccessToken       = HttpUtility.ParseQueryString(responseOutput).Get(OauthTokenKey);
                    serviceConfig.AccessTokenSecret = HttpUtility.ParseQueryString(responseOutput).Get(OauthTokenSecretKey);

                    InvokeLog("Final Tokens: " + serviceConfig.AccessToken + " : " + serviceConfig.AccessTokenSecret);
                }
            }
        }
        private void LoadFssToken()
        {
            // Creating a new instance directly
            var client = new OAuthRequest
            {
                Method = "GET",
                Type = OAuthRequestType.RequestToken,
                SignatureMethod = OAuthSignatureMethod.HmacSha1,
                ConsumerKey = serviceConfig.ConsumerKey,
                ConsumerSecret = serviceConfig.ConsumerSecret,
                RequestUrl = serviceConfig.ServerRoot + AcsApiClientConfig.RequestUrl,
                CallbackUrl = serviceConfig.ServerRoot + "client"
            };


            //CookieCollection responseCookies = null;
            string setCookieHeader;
            var fields = new Hashtable();
            using (var responseWrapper = new WebResponseWrapper(RequestToken(client)))
            {
                var responseText = GetResponseFromWebResponseWrapped(responseWrapper);

                for (var i = 0; i < responseText.Split('&').Length; i++)
                {
                    var fieldInfo = responseText.Split('&')[i].Split('=');
                    fields[fieldInfo[0]] = fieldInfo[1];
                }

                //responseCookies = responseWrapper.Get().Cookies;
                setCookieHeader = responseWrapper.Get().Headers["Set-Cookie"];
            }

            var myHttpWebRequest = Login(client, setCookieHeader, fields);

            string jsessionid;
            setCookieHeader = null;
            try
            {
                using (var responseWrapper = new WebResponseWrapper((HttpWebResponse)myHttpWebRequest.GetResponse()))
                {
                    setCookieHeader = responseWrapper.Get().Headers["Set-Cookie"];
                    var sessionCookie = responseWrapper.Get().Cookies[SessionIdKey];
                    if (sessionCookie != null)
                    {
                        jsessionid = sessionCookie.Value;

                        InvokeLog("Jsesssion found at " + jsessionid);
                        cookies.Add(sessionCookie);
                    }
                    else
                    {
                        throw new InvalidOperationException("JSession Id returned null!");
                    }
                }
            }
            catch (WebException wex)
            {
                throw new AcsApiException(AcsApiError.ServerError.ToString(), wex);
            }

            var target = new Uri(serviceConfig.ServerRoot);
            var cdomain = target.Host;

            string[] locations;
            using (var responseWrapper = new WebResponseWrapper(ConsumerHandshake(client, jsessionid, setCookieHeader, cdomain)))
            {
                locations = responseWrapper.Get().Headers.GetValues("location");
                setCookieHeader = responseWrapper.Get().Headers["Set-Cookie"];
            }

            if (locations == null)
            {
                throw new AcsApiException(AcsApiError.CouldNotLogin);
            }

            var myUri = new Uri(locations.FirstOrDefault() ?? string.Empty);
            InvokeLog("Request for uri" + myUri);
            if (string.IsNullOrEmpty(myUri.Query))
            {
                // No oauth_token or oauth_verifier in location header, so didn't authenticate.
                throw new AcsApiException(AcsApiError.CouldNotLogin);
            }

            var accessToken = HttpUtility.ParseQueryString(myUri.Query).Get(OauthTokenKey);
            var oauthVerifier = HttpUtility.ParseQueryString(myUri.Query).Get(OauthVerifierKey);

            InvokeLog("Verifier response " + accessToken + " : " + oauthVerifier);

            if (string.IsNullOrEmpty(oauthVerifier))
            {
                throw new AcsApiException(AcsApiError.CouldNotFindVerifier);
            }

            using (var requestWrapper = new WebResponseWrapper(RequestFinal(client, accessToken, oauthVerifier, cdomain, setCookieHeader)))
            {
                using (var responseStream = new StreamWrapper(requestWrapper.Get().GetResponseStream()))
                {
                    if (responseStream.Get() == null)
                    {
                        throw new AcsApiException(AcsApiError.CouldNotGetAccesstoken);
                    }

                    string responseOutput;

                    // Pipes the stream to a higher level stream reader with the required encoding format. 
                    using (var readStream = new StreamReader(responseStream.Get(), Encoding.UTF8))
                    {
                        responseOutput = readStream.ReadToEnd();
                    }

                    serviceConfig.AccessToken = HttpUtility.ParseQueryString(responseOutput).Get(OauthTokenKey);
                    serviceConfig.AccessTokenSecret = HttpUtility.ParseQueryString(responseOutput).Get(OauthTokenSecretKey);

                    InvokeLog("Final Tokens: " + serviceConfig.AccessToken + " : " + serviceConfig.AccessTokenSecret);
                }
            }
        }
        public void TestInitialize()
        {
            Logger = MockRepository.GenerateMock<ILogger>();
            Client = MockRepository.GeneratePartialMock<SimpleHttpClient>("AnAPIKey", Logger);
            Request = MockRepository.GenerateMock<WebRequestWrapper>();
            Response = MockRepository.GenerateMock<WebResponseWrapper>();

            ReqStream = new MemoryStream();
            RespStream = new MemoryStream();
        }
 private string GetResponseFromWebResponseWrapped(WebResponseWrapper responseWrapper)
 {
     string responseText;
     using (var tokenResponseWrapper = new StreamWrapper(responseWrapper.Get().GetResponseStream()))
     {
         InvokeLog("Token Response: " + tokenResponseWrapper.Get());
         if (tokenResponseWrapper.Get() == null) { throw new AcsApiException(AcsApiError.CouldNotGetAccesstoken); }
         using (var reader = new StreamReader(tokenResponseWrapper.Get(), Encoding.ASCII))
         {
             responseText = reader.ReadToEnd();
             reader.Close();
         }
     }
     return responseText;
 }