// ReSharper disable once InconsistentNaming
        //  Autofac requires variable names to match, not just the method signature :s
        public TwitterQueryRemoteAuth(string queryURL, HttpMethod httpMethod) : base(queryURL, httpMethod)
        {
            // Get the credentials to use to sign this request
            ITwitterCredentials twitterCredentials = TwitterCredentials;

            if (twitterCredentials == null)
            {
                ICredentialsAccessor credentialsAccessor = TweetinviContainer.Resolve <ICredentialsAccessor>();
                twitterCredentials = credentialsAccessor.CurrentThreadCredentials;
            }

            // Send a request to the TweetinviRequestSigner server to sign this request
            VmRequestToSign signReq = new VmRequestToSign()
            {
                Url          = queryURL,
                Method       = httpMethod,
                ConsumerKey  = twitterCredentials.ConsumerKey,
                ClientToken  = twitterCredentials.AccessToken,
                ClientSecret = twitterCredentials.AccessTokenSecret
            };

            // TODO: Handle Exceptions through Tweetinvi?
            VmAuthorizationHeader vmAuthHeader = Requester.MakePostJson <VmAuthorizationHeader>("Request/Sign", signReq);

            AuthorizationHeader = vmAuthHeader.AuthorizationHeader;
        }
        public VmAuthorizationHeader Sign([FromBody] VmRequestToSign req)
        {
            // Check that the Consumer Key in the request matches the one that we have
            if (req.ConsumerKey != CONSUMER_KEY)
            {
                throw new ArgumentException(
                          "Request must be for a Twitter Application that we have the credentials for", nameof(req));
            }

            Uri uri = new Uri(req.Url);
            TwitterCredentials twitterCredentials = new TwitterCredentials(req.ConsumerKey, CONSUMER_SECRET,
                                                                           req.ClientToken, req.ClientSecret);

            IOAuthWebRequestGenerator          oAuthWebReqGenerator = TweetinviContainer.Resolve <IOAuthWebRequestGenerator>();
            IEnumerable <IOAuthQueryParameter> credentialsParams    =
                oAuthWebReqGenerator.GenerateParameters(twitterCredentials);
            string authHeader = oAuthWebReqGenerator.GenerateAuthorizationHeader(uri, req.Method, credentialsParams);

            return(new VmAuthorizationHeader()
            {
                AuthorizationHeader = authHeader
            });
        }