//
        // GET: /OAuth/
        public ActionResult Token()
        {
            try
            {
                var oauthRequest = new TokenRequest(new HttpRequestBaseRequest(Request), MvcApplication.ServiceLocator);

                var token = oauthRequest.Authorize();

                if (token.RedirectsUri.HasValue())
                {

                    var redirectUri = OAuthResponse
                        .TokenResponse(token.AccessToken, token.ExpiresIn, token.RefreshToken)
                        .SetLocation(token.RedirectsUri)
                        .BuildQueryMessage().LocationUri;

                    return Redirect(redirectUri);
                }

                var response = OAuthResponse
                            .TokenResponse(token.AccessToken, token.ExpiresIn, token.RefreshToken)
                            .BuildJsonMessage();

                return this.OAuth(response);
            }
            catch (OAuthException ex)
            {
                var response = new ErrorResponseBuilder(ex).BuildJsonMessage();
                return this.OAuth(response);
            }
        }
        public void WhenRequestIsValid_ThenAllRequiredPropertiesAreSet()
        {
            var mocker = new AutoMoqer();
            var properties = new Dictionary<string, string>
                                 {
                                     {OAuthTokens.ClientId, "clientid"},
                                     {OAuthTokens.ClientSecret, "clientsecret"},
                                     {OAuthTokens.Username, "username"},
                                     {OAuthTokens.Password, "password"},
                                     {OAuthTokens.GrantType, GrantType.Password},
                                 };
            mocker.GetMock<IRequest>().Setup(x => x.Properties).Returns(properties);
            mocker.GetMock<IRequest>().Setup(x => x.ContentType).Returns(ContentType.FormEncoded);
            mocker.GetMock<IRequest>().Setup(X => X.Headers).Returns(new Dictionary<string, string>());
            var request = new TokenRequest(mocker.GetMock<IRequest>().Object, mocker.GetMock<IOAuthServiceLocator>().Object);

            Assert.AreEqual("clientid", request.ClientId);
            Assert.AreEqual("clientsecret", request.ClientSecret);
            Assert.AreEqual("username", request.Username);
            Assert.AreEqual("password", request.Password);
            Assert.AreEqual(GrantType.Password, request.GrantType);
            Assert.AreEqual(ContentType.FormEncoded, request.ContentType);
        }