public void ParseFragment_QueryStringWithFragmentTest()
 {
     var uri = new Uri("http://foo.com/bar?c=something#a=123&b=whatever");
     var parameters = uri.ParseFragment();
     Assert.AreEqual(2, parameters.Count);
     Assert.AreEqual("123", parameters["a"]);
     Assert.AreEqual("whatever", parameters["b"]);
 }
 public void ParseFragmentTest()
 {
     Uri uri = new Uri("http://foo.com/bar#a=123&b=whatever");
     Dictionary<string, string> parameters = uri.ParseFragment();
     Assert.AreEqual(2, parameters.Count);
     Assert.AreEqual("123", parameters["a"]);
     Assert.AreEqual("whatever", parameters["b"]);
 }
        public static MicrosoftAccessInfo Parse(Uri uri)
        {
            Dictionary<string, string> parameters = uri.ParseFragment();
            string accessToken, expiresIn;
            int expirationInSeconds;
            MicrosoftAccessInfo accessInfo = null;
            if (parameters.TryGetValue(AccessTokenParameter, out accessToken) &&
                parameters.TryGetValue(ExpiresInParameter, out expiresIn) &&
                Int32.TryParse(expiresIn, out expirationInSeconds))
            {
                string refreshToken;
                parameters.TryGetValue(RefreshTokenParameter, out refreshToken);
                accessInfo = new MicrosoftAccessInfo(accessToken, refreshToken, TimeSpan.FromSeconds(expirationInSeconds));
            }

            return accessInfo;
        }
 static string GetAccessTokenFromFragment(Uri uri)
 {
     HttpValueCollection httpValues = uri.ParseFragment();
     string[] accessTokens = httpValues.GetValues("access_token");
     return accessTokens.Length > 0 ? accessTokens[0] : null;
 }
        /// <summary>
        /// Extracts the access token from the specified <see cref="Uri"/>.
        /// </summary>
        /// <param name="redirectUri">The redirect <see cref="Uri"/> that contains an access token.</param>
        /// <returns>
        /// The <see cref="OAuthTokens"/> object which contains both the <see cref="OAuthTokens.AccessToken"/> and 
        /// <see cref="OAuthTokens.AccessTokenExpiresInSeconds"/> properties.
        /// </returns>
        public OAuthTokens ExtractAccessTokenFromUri(Uri redirectUri)
        {            
            var fragmentParts = redirectUri.ParseFragment();

            if (!fragmentParts.ContainsKey("access_token"))
            {
                throw new InvalidOperationException(ErrorMessages.UriDoesntContainAccessToken);
            }

            if (!fragmentParts.ContainsKey("expires_in"))
            {
                throw new InvalidOperationException(ErrorMessages.UriDoesntContainAccessToken);
            }

            return OAuthTokens = new OAuthTokens(fragmentParts["access_token"], int.Parse(fragmentParts["expires_in"]), null);            
        }
 public void ParseFragment_PlainFragmentTest()
 {
     var uri = new Uri("http://foo.com/bar#random");
     var parameters = uri.ParseFragment();
     Assert.AreEqual(0, parameters.Count);
 }