public ActionResult Authenticate(AuthRequestType authType)
        {
            Guard.MakeSureAllInstancesIsNullNot(_mySettings);

            var redirectUrl = string.Empty;

            switch (authType)
            {
                case AuthRequestType.Facebook:
                    var facebookContext = new FacebookAuthRequestProcessingContext();
                    var facebookInputParam = new FacebookAuthRequestProcessingParameter
                                                 {
                                                     RequestUrl = HttpContext.Request.GetUrlBase(),
                                                     RedirectPath = Url.Action("FacebookCallbackAction")
                                                 };

                    facebookContext.Execute(() => facebookInputParam);

                    redirectUrl = facebookContext.ReturnResult;
                    break;

                case AuthRequestType.Twitter:

                    var twitterContext = new TwitterAuthRequestProcessingContext();

                    var twitterCallbackUrl = Request.Url.ToString().Replace("Authenticate", "TwitterCallbackAction");
                    var twitterCallback = new Uri(twitterCallbackUrl);

                    _consumerKey = _mySettings.TwitterConsumerKey;
                    _secretKey = _mySettings.TwitterConsumerSecret;

                    AssertForKeyAndSecretConsummer(_consumerKey, _secretKey);

                    _tokenManager = new InMemoryTokenManager(_consumerKey, _secretKey);

                    var twitterInputParam = new TwitterAuthRequestProcessingParameter
                                                {
                                                    CallBackLink = twitterCallback,
                                                    TokenManager = _tokenManager
                                                };

                    twitterContext.Execute(() => twitterInputParam);

                    HttpContext.Application["TwitterTokenManager"] = _tokenManager;

                    return twitterContext.ReturnResult;

                    break;

                case AuthRequestType.Google:
                    var googleContext = new GoogleAuthRequestProcessingContext();

                    var callbackUrl = Request.Url.ToString().Replace("Authenticate", "GoogleCallbackAction");
                    var callback = new Uri(callbackUrl);

                    _consumerKey = _mySettings.GoogleConsumerKey;
                    _secretKey = _mySettings.GoogleConsumerSecret;

                    AssertForKeyAndSecretConsummer(_consumerKey, _secretKey);

                    _tokenManager = new InMemoryTokenManager(_consumerKey, _secretKey);

                    var googleInputParam = new GoogleAuthRequestProcessingParameter
                                               {
                                                   CallBackLink = callback,
                                                   TokenManager = _tokenManager
                                               };

                    googleContext.Execute(() => googleInputParam);

                    HttpContext.Application["GoogleTokenManager"] = _tokenManager;

                    return googleContext.ReturnResult;

                    break;
            }

            return Redirect(redirectUrl);
        }
        public ActionResult Authenticate(AuthRequestType authType)
        {
            Guard.MakeSureAllInstancesIsNullNot(_mySettings);

            var redirectUrl = string.Empty;

            switch (authType)
            {
            case AuthRequestType.Facebook:
                var facebookContext    = new FacebookAuthRequestProcessingContext();
                var facebookInputParam = new FacebookAuthRequestProcessingParameter
                {
                    RequestUrl   = HttpContext.Request.GetUrlBase(),
                    RedirectPath = Url.Action("FacebookCallbackAction")
                };

                facebookContext.Execute(() => facebookInputParam);

                redirectUrl = facebookContext.ReturnResult;
                break;

            case AuthRequestType.Twitter:

                var twitterContext = new TwitterAuthRequestProcessingContext();

                var twitterCallbackUrl = Request.Url.ToString().Replace("Authenticate", "TwitterCallbackAction");
                var twitterCallback    = new Uri(twitterCallbackUrl);

                _consumerKey = _mySettings.TwitterConsumerKey;
                _secretKey   = _mySettings.TwitterConsumerSecret;

                AssertForKeyAndSecretConsummer(_consumerKey, _secretKey);

                _tokenManager = new InMemoryTokenManager(_consumerKey, _secretKey);

                var twitterInputParam = new TwitterAuthRequestProcessingParameter
                {
                    CallBackLink = twitterCallback,
                    TokenManager = _tokenManager
                };

                twitterContext.Execute(() => twitterInputParam);

                HttpContext.Application["TwitterTokenManager"] = _tokenManager;

                return(twitterContext.ReturnResult);

                break;

            case AuthRequestType.Google:
                var googleContext = new GoogleAuthRequestProcessingContext();

                var callbackUrl = Request.Url.ToString().Replace("Authenticate", "GoogleCallbackAction");
                var callback    = new Uri(callbackUrl);

                _consumerKey = _mySettings.GoogleConsumerKey;
                _secretKey   = _mySettings.GoogleConsumerSecret;

                AssertForKeyAndSecretConsummer(_consumerKey, _secretKey);

                _tokenManager = new InMemoryTokenManager(_consumerKey, _secretKey);

                var googleInputParam = new GoogleAuthRequestProcessingParameter
                {
                    CallBackLink = callback,
                    TokenManager = _tokenManager
                };

                googleContext.Execute(() => googleInputParam);

                HttpContext.Application["GoogleTokenManager"] = _tokenManager;

                return(googleContext.ReturnResult);

                break;
            }

            return(Redirect(redirectUrl));
        }