Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C# by 13470 ( 16 years ago )
using System;
using System.Net;
using System.Linq;
using System.Text;
using System.Windows;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Security.Cryptography;
using OAuthLibrary;


/**
using System.Collections.Generic;

using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
**/

namespace twi
{
    /// <summary>
    /// Логика взаимодействия для Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Auth();
        }

        private static void Auth()
        {
            var url = "http://twitter.com/oauth/request_token";

            var timestamp = OAuth.CreateTimestamp().ToString();
            var nonce = OAuth.CreateNonce().ToString();
            var oauthParameters = new NameValueCollection
            {
                {"oauth_timestamp", timestamp},
                {"oauth_nonce", nonce},
                {"oauth_version", "1.0"},
                {"oauth_signature_method", "HMAC-SHA1"},
                {"oauth_consumer_key", "tjbyyXz3M8w3s2HrlbwCDg"}
            };

            url = OAuth.NormalizeUrl(url);
            var parameters = OAuth.NormalizeRequestParameters(oauthParameters);
            var signatureBase = OAuth.ConcatenateRequestElements("GET", url, parameters);

            var signature = OAuth.CreateSignature(signatureBase, "atMbq2EyhSMg5BhGU1nUWi6gf172p4Bi04BcUue4c", null);
            oauthParameters.Add("oauth_signature", signature);

            var header = new StringBuilder();
            header.Append("OAuth realm="Twitter API" ");
            for (var i = 0; i < oauthParameters.Count; i++)
            {
                var key = oauthParameters.GetKey(i);
                var pair = key + "="" + oauthParameters[key] + """;

                header.Append(pair);
                if (i < oauthParameters.Count - 1)
                {
                    header.Append(",");
                }
            }
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Headers["Authorization"] = header.ToString();
        }
    }
}

namespace OAuthLibrary
{
    public static class OAuth
    {
        public static long CreateTimestamp() // Generating Timestamp
        {
            var now = DateTime.UtcNow;
            var then = new DateTime(1970, 1, 1);
            var timespan = (now - then);
            var timestamp = (long)timespan.TotalSeconds;

            return timestamp;
        }

        private const string ALPHANUMERIC =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        public static string CreateNonce() // Generating nonce
        {
            var sb = new StringBuilder();
            var random = new Random();

            for (var i = 0; i <= 12; i++)
            {
                var index = random.Next(ALPHANUMERIC.Length);
                sb.Append(ALPHANUMERIC[index]);
            }
            return sb.ToString();
        }

        public static string NormalizeUrl(string url)
        {
            Uri uri;

            if (Uri.TryCreate(url, UriKind.Absolute, out uri))
            {
                string port = "";
                if (uri.Scheme.Equals("http") && uri.Port != 80 ||
                    uri.Scheme.Equals("https") && uri.Port != 443 ||
                    uri.Scheme.Equals("ftp") && uri.Port != 20)
                {
                    port = ":" + uri.Port;
                }
                url = uri.Scheme + "://" + uri.Host + port + uri.AbsolutePath;
            }
            return url;
        }

        public static string NormalizeRequestParameters
            (NameValueCollection parameters)
        {
            var sb = new StringBuilder();

            var list = new List <NameValuePair>();

            foreach(var name in parameters.AllKeys)
            {
                var value = Uri.EscapeDataString(parameters[name]);
                var item = new NameValuePair { Name = name, Value = value };

                if (list.Contains(item))
                {
                    throw new ArgumentException(
                        "Cannot add duplicate parameters");
                }
                list.Add(item);
            }
            list.Sort((left, right) =>
                {
                    if (left.Name.Equals(right.Name))
                    {
                        return left.Value.CompareTo(right.Value);
                    }
                    return left.Name.CompareTo(right.Name);
                });
            foreach(var item in list)
            {
                sb.Append(item.Name + "=" + item.Value);
                if (list.IndexOf(item) < list.Count - 1)
                {
                    sb.Append("&");
                }
            }
            return sb.ToString();
        }

        public static string ConcatenateRequestElements
            (string method, string url, string parameters)
        {
            url = Uri.EscapeDataString(url);
            parameters = Uri.EscapeDataString(parameters);

            var sb = new StringBuilder();
            sb.Append(method.ToUpper()).Append("&");
            sb.Append(url).Append("&");
            sb.Append(parameters);

            return sb.ToString();
        }

        public static string CreateSignature
            (string signatureBase, string consumerSecret, string tokenSecret)
        {
            if (tokenSecret == null)
            {
                tokenSecret = string.Empty;
            }
            consumerSecret = Uri.EscapeDataString(consumerSecret);
            tokenSecret = Uri.EscapeDataString(tokenSecret);

            var key = String.Concat(consumerSecret, "&", tokenSecret);
            var keyBytes = Encoding.UTF8.GetBytes(key);
            var signatureMethod = new HMACSHA1(keyBytes);

            var data = Encoding.ASCII.GetBytes(signatureBase);
            var hash = signatureMethod.ComputeHash(data);
            var signature = Convert.ToBase64String(hash);

            signature = Uri.EscapeDataString(signature);
            return signature;
        }

        private class NameValuePair
        {
            public string Name { get; set; }
            public string Value { get; set; }
            public bool Equals(NameValuePair other)
            {
                return Equals(other.Name, Name) && Equals(other.Value, Value);
            }
            
            public override bool Equals(object obj)
            {
                return Equals((NameValuePair)obj);
            }

            public override int GetHashCode() 
            { 
                return 0;
            }
        }
    }
}

 

Revise this Paste

Your Name: Code Language: